Java平台无关性对虚拟机的依赖
2013-04-17 11:23
295 查看
转自《深入Java虚拟机》
在编写平台独立的Java程序时,还必须遵从两条原则,这两条原则和Java虚拟机中的某些部分有关,Java虚拟机中的某些部分可以由不同的开发商用不同的方法实现。这两条
原则是:
1)不要依赖及时终结(finalization)来达到程序的正确性;
2)不要依赖线程的优先级(thread prioritization)来达到程序的正确性。
这两条原则可以防止Java虚拟机规范中运行的垃圾收集和线程在不同的实现中的变化带来的不利影响。
所有的Java虚拟机都必须有垃圾收集堆,但是不同的实现可能使用不同的垃圾收集技术。在Java虚拟机规范中的这个灵活性意味着,在不同的虚拟机中,一个特定的Java程序
中的对象可能在不同的时间被垃圾收集。这也意味着那些在对象被释放前由垃圾收集器运行的终结方法(finalizer),在不同的虚拟机这可能是不同的时间运行的。如果使用了
一个终结方法来释放有限的内存资源,例如文件句柄,程序就可能可以在一些虚拟机的实现上运行,而在其它实现上却不能。在一些实现上,程序可能在垃圾收集器得到机会调
用释放资源的终结方法之前,就已经将有限的资源耗尽了。
在不同的Java虚拟机的实现中,另一个变化和线程的优先级有关。Java虚拟机规范只保证了,程序中所有拥有最高优先级的可运行线程将会得到一些CPU时间。这个规范也保
证了在较高优先级的线程被阻塞时,较低优先级的线程将会运行。但是,在较高优先级的线程没有被阻塞的情况下,并没有禁止较低优先级的线程的运行。在某些虚拟机的实现
中,即使较高优先级的线程并未被阻塞,那些较低优先级的线程也可能先得到CPU时间。如果你的程序依赖于这个行为的正确性,它将在某些虚拟机的实现上可以正常运行,
而在某些实现上却不能。为了保证多线程Java程序的平台独立,必须依赖同步(sychronization)而不是优先级来在线程之间协调相互间的动作。
在编写平台独立的Java程序时,还必须遵从两条原则,这两条原则和Java虚拟机中的某些部分有关,Java虚拟机中的某些部分可以由不同的开发商用不同的方法实现。这两条
原则是:
1)不要依赖及时终结(finalization)来达到程序的正确性;
2)不要依赖线程的优先级(thread prioritization)来达到程序的正确性。
这两条原则可以防止Java虚拟机规范中运行的垃圾收集和线程在不同的实现中的变化带来的不利影响。
所有的Java虚拟机都必须有垃圾收集堆,但是不同的实现可能使用不同的垃圾收集技术。在Java虚拟机规范中的这个灵活性意味着,在不同的虚拟机中,一个特定的Java程序
中的对象可能在不同的时间被垃圾收集。这也意味着那些在对象被释放前由垃圾收集器运行的终结方法(finalizer),在不同的虚拟机这可能是不同的时间运行的。如果使用了
一个终结方法来释放有限的内存资源,例如文件句柄,程序就可能可以在一些虚拟机的实现上运行,而在其它实现上却不能。在一些实现上,程序可能在垃圾收集器得到机会调
用释放资源的终结方法之前,就已经将有限的资源耗尽了。
在不同的Java虚拟机的实现中,另一个变化和线程的优先级有关。Java虚拟机规范只保证了,程序中所有拥有最高优先级的可运行线程将会得到一些CPU时间。这个规范也保
证了在较高优先级的线程被阻塞时,较低优先级的线程将会运行。但是,在较高优先级的线程没有被阻塞的情况下,并没有禁止较低优先级的线程的运行。在某些虚拟机的实现
中,即使较高优先级的线程并未被阻塞,那些较低优先级的线程也可能先得到CPU时间。如果你的程序依赖于这个行为的正确性,它将在某些虚拟机的实现上可以正常运行,
而在某些实现上却不能。为了保证多线程Java程序的平台独立,必须依赖同步(sychronization)而不是优先级来在线程之间协调相互间的动作。
相关文章推荐
- [笔记] 深入java虚拟机 - 平台无关
- 什么是JVM?java被称作是平台无关的编程语言?
- [每日一问]---什么是Java虚拟机?为什么Java是“与平台无关的编程语言”?
- Java 平台无关性的问题
- java对平台无关性的支持
- 面试题【什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?】
- Java虚拟机,以及Java是平台无关的编程语言。
- java虚拟机:java的平台无关性,安全性和网络移动性
- java 初识 java平台无关性
- 浅谈Java平台无关性
- Java特点-平台无关性*
- 有关Java虚拟机与Java被称为‘平台无关的编程语言’的简单特点
- 第一章 JAVA入门(javad的平台无关性)
- 深入Java虚拟机(2)——Java的平台无关性
- Java的平台无关性
- 深入Java虚拟机(2)——Java的平台无关性
- 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
- 再看Java平台无关性
- java对平台无关性的支持
- Android平台体系结构中的虚拟机Dalvik与JAVA中的虚拟机有什么不同