`
小峰子
  • 浏览: 105770 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

读书笔记——深入Java虚拟机第二版(第二章)

    博客分类:
  • JVM
阅读更多

第二章 平台无关

1.为什么要平台无关

用Java创建的可执行二进制程序,能不加改变地运行于多个平台.新兴的网络化嵌入式设备则展示了Java又一擅长的领域,因为它的平台无关性在这种环境下非常有用.这给于了网络一个同构的运行环境.

2.Java的体系结构对平台无关的支持

2.1 Java平台

Java平台扮演一个运行时Java程序与其下的硬件和操作系统这间的缓冲角色.

2.2 Java语言

它的基本数据类型的值域和行为都是由语言自己定义的.

通过确保基本数据类型在所有平台上的一致性,Java语言本身为Java程序的平台无关性提供了强有力的支持.

2.3 Java class文件

2.4 可伸缩性

三个基础API集合,表现Java平台不同的伸缩性:

企业版(J2EE)

标准版(J2SE)

微型版(J2ME)

3.影响平台无关性的因素

3.1 Java平台的部署

3.2 Java平台的版本

标准API:Java平台中保证可用的基本库集合

标准扩展API:Sun定义了一些标准运行时库,它把这些库作为标准版的可选项

3.3 本地方法

编写平台独立的Java程序时,原则:不要直接或间接调用不属于Java API的本地方法

本地方法的适用情况:

(1)为了使用底层的主机平台的某个特性,而这个特性不能通过Java API访问

(2)为了访问一个老的系统或者使用一个已有的库,而这个系统或库不是用Java编写的

(3)为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现

3.4 非标准运行时库

如果开发者侧重于平台无关性,那么就必须清楚地知道所使用的那些非标准运行库是否调用了本地方法.

3.5对虚拟机的依赖

编写平台独立的Java程序必须遵从的两条原则:

(1)不要依赖及时终结(finalization)来达到程序的正确性

那些在对象被释放以前由垃圾收集器运行的终结方法(finalizer),在不同的虚报机中可能是在不同的时间运行的.

(2)不要依赖线程的优先级(thread prioritization)来达到程序的正确性

为了保证多线程Java程序的平台独立,必须依赖同步(sychronization)而不是优先级来在线程之间协调相互间的动作.

这两条原则可以防止Java虚报机规范中允许的垃圾收集和线程在不同实现中的变化所带来的不得影响

3.6 对用户界面的依赖

3.7 Java平台实现中的bug

3.8 测试

4.平台无关的七个步骤

5.平台无关性的策略

所有Java平台的开发商必须签署许可证,要求保证在Java虚报机和JavaAPI层的相容性,但是允许在性能和扩展等领域存在差异.

作为一个开发人员,当思考怎样编写某个特定的Java程序时,软件工业和策略和宣传不一定是主要的考虑因素.对于写的有些程序,可能适合平台无关性;而对于其他的一些,则平台相关的程序可能会有意义一些.在每种情况下,都需要做出决定,这个决定要基于用户的需要什么,以及要把自己放在市场的什么位置.

6.平台无关性和网络移动对象

 

———————————————————————思考的分割线————————————————————————

作为一个J2EE开发人员,平常都是在windows操作系统上Jboss的J2EE实现下进行代码的编写与测试.最后再把class文件放到linux操作系统上Jboss服务器上.开发和运行代码的JVM都是sun的JDK.

可平常看到的一些招聘要求上有的是在UNIX或LINUX环境中的开发经验,那像我这样算是windows还是linux呢?????

对于像我这样不关心操作系统和JVM实现变化的开发者来说,真的不知道这是什么操作系统下的开发,除非我写到了windows或linux的嵌入,才会把操作系统环境分得这么仔细吧.又或者我用到不同的JVM实现,如果现在linux上用的是IBM的JVM或BEA的JRockit,不知现在写的这些代码还能不能在上面跑??????? 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics