欢迎来到天天文库
浏览记录
ID:41736558
大小:86.72 KB
页数:5页
时间:2019-08-31
《深入分析:JVM的优点与缺点》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、深入分析:JVM的优点与缺点阅读次数:645次发布时间:2009-12-2410:20:32发布人:佚名来源:Csdn当Java最初诞生的时候,它可以说是其他语言的进化版。不仅因为Java很简单,而且这一进化的语言还是一个可以运行第三方硕件字节码的虚拟机。它还是垃圾收集站,从而令存储管理和内核转储(coredump)不再是麻烦。当然还有它相当全面的类库。虽然它没有什么惊世的新性能,但它把许多语言的优点基于一身。本来Java是一个简单独一的语言,但是Sun在长期运营Java的过程中出现了很多错误,比如将语言与runtime合用一个名字,从而使得用户在
2、识別JVM语言项目如Jython.JRuby时难以从思想上隔离Java。最主要的是这样对runtime很不公,因为JavaVirtualMachine(JVM)有很多自己的独特之处。缺点没有--种技术是完美的,JW也不例外。如果你工作在一个没有Java语言配置的设备上,JVM便无用武Z地。JVM为英他语言捉供了基础,但JVM最初不是为这个理念设计的。比如我们作为分配对象來维护我们的堆栈时,通常我们会直接操作实时堆栈并添加我们维护所需的其他字段,除此之外再没冇控制堆栈的更好的方法。还有,当我们创建一个RubyFixnum时也很麻烦,我们把这些值用一个
3、Java对象包装。Ruby的Cimplementation不过只是传递taggedinis,因为没有包装他们就不会符合各种列表,所以Java基元(Javaprimitives)也不会切割它。顺便说一下:JVM的启动时间也挺长。那些为JVM编写高性能代码的开发者会觉得经常被JVM的blackbox特性所折磨,一旦你加载你的字节码,你就觉得像是摇动老虎机的游戏手柄一样忐忑,不知道结果如何,blackbox就是意味着不可知。Hotspot对于初学者来说,尽管Hotspot有些神秘,但是性能方面它确实很棒,因为动态建模(dynamicprofiling)是
4、优良性能的捷径。HotSpot从运行应用中采样数据,从而可以优化代码,进而得到良好性能。它相当于以模仿人工的方法进行优化。在程序运行的开始,Java代码仍然解释执行,但HotSpot引擎开始进行采样(Profiling),HotSpot引禁可以集中精力來对HotSpot代码进行深度优化,从而使这部分代码的执行更加迅捷。因此当Hotspot优化时,它为优化设立了一层保护來确保优化的基木原理冇效;但当这层保护失效时,优化就会很慢。这里是Hotspot在使用中的一个演示:Fractal■JRuby1.4.0■JRuby1.4.0interpreted■M
5、RI1.8.7YRI192previewl在图表屮我们运行了一个MandelbrotGenerator很多次,然后测绘它每次生成的时间。你会看到JRuby1.4.0明显比Ruby1.8.7以及1.9.2preview2表现更好。如果只看JRuby的起点,会发现比1.8.7慢,但当Hotspot运行后时间曲线迅速下降。这里有个有趣的始建波动发生在循环6那里:实际上那是因为Hotspot的动态反优化启动。然后时间波动回到原來状态,优化结束。Hotspot已经被全世界的开发者和拥鬼支持了近十年,Java4,5,6之间的提升让人印象深刻。每一次它的升级,性
6、能都会冇很多提升,它真是的是JVM的一大利器。垃圾回收GarbageCollection(GC)Java开发者花费大量时间来调试、测试、提高他们的VM,单是GarbageCollection的开发和维护就持续了15个年头,由此可见它的性能!而且JVM发布了多个垃圾冋收器,所以这样一來即使加载的负荷超过了JVM屮一个GiarbagcCollection,JVM也还可以允许你使用其他的GarbageCollection。因此,你可以自己调整任何你所使用的GarbageCollection,使之符合你的应用。各种各样的回收站发挥着不同的作用。它们全部是压
7、缩过的,所以不必担心存储的问题。它们都是增量型的(incremental)以缩短GC停滞的时间;它们还是分代的(generational),所以短时对象(short-livedobject)回收得更快。有些是并行的,从而回收工作可以在多个核上分开运行;甚至还有同时发生的GarbageCollection,这样就没有了停滞^寸间。JRuby可以免费得到这些,现在的Java7以及Java6的ul2,甚至还有一个新的G1回收站。关于GC和JVM还冇两个很巧妙的地方,从中可以获悉GC运行虚拟化和信息的惜况。第一个是-J-verbose:gcflag,从中可
8、以得到回收事件发生的时间、数量以及花费的时间,这可以让我们获悉垃圾回收器处理工作负载的好坏状况:[GC16000K->37
此文档下载收益归作者所有