guoln 发表于 2012-1-6 10:51:15

深入分析:JVM的优点与缺点


当Java最初诞生的时候,它可以说是其他言语的退化版。不仅由于Java很简单,而且这一退化的言语还是一个可以运转第三方硬件字节码的虚拟机。它还是不良搜集站,从而令存储管理和内核转储(core dump)不再是费事。当然还有它相当片面的类库。虽然它没有什么惊世的新功能,但它把许多言语的优点基于一身。 本来Java是一个简单独一的言语,但是Sun在长期运营Java的进程中出现了很多错误,比如将言语与runtime合用一个名字,从而使得用户在识别JVM言语项目如Jython、JRuby时难以从思想上隔离Java。最主要的是这样对runtime很不公,由于Java Virtual Machine (JVM)有很多本人的独特之处。 缺点 没有一种技术是完美的,JVM也不例外。假如你工作在一个没有Java言语配置的设备上,JVM便无用武之地。JVM为其他言语提供了基础,但JVM最初不是为这个理念设计的。比如我们作为分配对象来维护我们的堆栈时,通常我们会直接操作实时堆栈并添加我们维护所需的其他字段,除此之外再没有控制堆栈的更好的方法。 还有,当我们创建一个Ruby Fixnum时也很费事,我们把这些值用一个Java对象包装。记忆枕Ruby的C implementation不过只是传递tagged ints,由于没有包装他们就不会符合各种列表,所以Java 基元(Java primitives)也不会切割它。 顺便说一下:JVM的启动时间也挺长。 那些为JVM编写高功能代码的开发者会觉得经常被JVM的black box特性所折磨,一旦你加载你的字节码,你就觉得像是摇动禁用词语的游戏手柄一样忐忑,不知道结果如何,black box就是意味着不可知。 优点: Hotspot 对于初学者来说,虽然Hotspot有些奥秘,但是功能方面它确实很棒,由于动态建模(dynamic profiling)是优秀功能的捷径。HotSpot从运转使用中采样数据,从而可以优化代码,进而得到良好功能。它相当于以模仿人工的方法停止优化。在程序运转的末尾,Java代码仍然解释执行,但HotSpot引擎末尾停止采样(Profiling)。HotSpot引擎可以集中精神来对HotSpot代码停止深度优化,从而使这部分代码的执行愈加迅捷。因而当Hotspot优化时,它为优化设立了一层保护来确保优化的根本原理无效;但当这层保护失效时,优化就会很慢。 这里是Hotspot在使用中的一个演示: 在图表中我们运转了一个Mandelbrot Generator很多次,然后测绘它每次生成的时间。你会看到JRuby 1.4.0清楚比Ruby 1.8.7以及1.9.2preview2表现更好。假如只看JRuby的终点,会发现比1.8.7慢,但当Hotspot运转后时间曲线迅速下降。



页: [1]
查看完整版本: 深入分析:JVM的优点与缺点