深入分析:JVM的优点与缺点_第1页
深入分析:JVM的优点与缺点_第2页
深入分析:JVM的优点与缺点_第3页
深入分析:JVM的优点与缺点_第4页
深入分析:JVM的优点与缺点_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、深入分析:jvm的优点与缺点阅读次数:645次 发布时间:2009-12-24 10:20:32发布人:佚名来源:csdn当java最初诞生的时候,它可以说是其他语言的进化版。不仅因为java很简单,而且这 一进化的语言还是一个可以运行第三方硕件字节码的虚拟机。它还是垃圾收集站,从而令存储管理和内核 转储(core dump)不再是麻烦。当然还有它相当全面的类库。虽然它没有什么惊世的新性能,但它把许多 语言的优点基于一身。本来java是一个简单独一的语言,但是sun在长期运营java的过程中出现了很多错误, 比如将语言与runtime合用一个名字,从而使得用户在识別jvm语言项目如jython

2、. jruby时难以从思想 上隔离java。最主要的是这样对runtime很不公,因为java virtual machine (jvm)有很多自己的独特之 处。缺点没有-种技术是完美的,jw也不例外。如果你工作在一个没有java语言配置的设备上, jvm便无用武z地。jvm为英他语言捉供了基础,但jvm最初不是为这个理念设计的。比如我们作为分配对 象來维护我们的堆栈时,通常我们会直接操作实时堆栈并添加我们维护所需的其他字段,除此之外再没冇 控制堆栈的更好的方法。还有,当我们创建一个ruby fixnum时也很麻烦,我们把这些值用一个java对象包装。 ruby的c implementatio

3、n不过只是传递tagged inis,因为没有包装他们就不会符合各种列表,所以java 基元(java primitives)也不会切割它。顺便说一下:jvm的启动时间也挺长。那些为jvm编写高性能代码的开发者会觉得经常被jvm的black box特性所折磨,一旦你 加载你的字节码,你就觉得像是摇动老虎机的游戏手柄一样忐忑,不知道结果如何,black box就是意味 着不可知。hotspot对于初学者来说,尽管hotspot有些神秘,但是性能方面它确实很棒,因为动态建模(dynamic profiling)是优良性能的捷径。hotspot从运行应用中采样数据,从而可以优化代码,进而得 到良好性

4、能。它相当于以模仿人工的方法进行优化。在程序运行的开始,java代码仍然解释执行,但hotspot 引擎开始进行采样(profiling), hotspot引禁可以集中精力來对hotspot代码进行深度优化,从而使这部分代码的执行更加迅捷。因此当hotspot优化时,它为优化设立了一层保护來确保优化的基木原理冇效; 但当这层保护失效时,优化就会很慢。这里是hotspot在使用中的一个演示:fractal jruby 1.4.0 jruby 1.4.0 interpreted mri 1.8.7yri 192 previewl在图表屮我们运行了一个mandelbrot generator很多次,

5、然后测绘它每次生成的时间。 你会看到jruby 1. 4. 0明显比ruby 1. 8. 7以及1. 9. 2preview2表现更好。如果只看jruby的起点,会发现 比1. 8. 7慢,但当hotspot运行后时间曲线迅速下降。这里有个有趣的始建波动发生在循环6那里:实际上那是因为hotspot的动态反优化启动。然后时间波动 回到原來状态,优化结束。hotspot已经被全世界的开发者和拥鬼支持了近十年,java 4, 5, 6之间的提升让人印象 深刻。每一次它的升级,性能都会冇很多提升,它真是的是jvm的一大利器。垃圾回收 garbage collection (gc)java开发者花费大

6、量时间来调试、测试、提高他们的vm,单是garbage collection的开 发和维护就持续了 15个年头,由此可见它的性能!而且jvm发布了多个垃圾冋收器,所以这样一來即使加 载的负荷超过了 jvm屮一个giarbagc collection, jvm也还可以允许你使用其他的garbage collection。 因此,你可以自己调整任何你所使用的garbage collection,使之符合你的应用。各种各样的回收站发挥着不同的作用。它们全部是压缩过的,所以不必担心存储的问题。 它们都是增量型的(incremental)以缩短gc停滞的时间;它们还是分代的(generational),

7、所以短时 对象(short-lived object)回收得更快。有些是并行的,从而回收工作可以在多个核上分开运行;甚至 还有同时发生的garbage col lectio n,这样就没有了停滞寸间。jruby可以免费得到这些,现在的java 7 以及java 6的ul2,甚至还有一个新的g1回收站。关于gc和jvm还冇两个很巧妙的地方,从中可以获悉gc运行虚拟化和信息的惜况。第一 个是-j-verbose:gc flag,从中可以得到回收事件发生的时间、数量以及花费的时间,这可以让我们获悉 垃圾回收器处理工作负载的好坏状况:gc 16000k->3727k(82496k), 0. 03

8、96636 secsfull gc 13021k->5802k(82496k), 0. 1468975 secsgc gc gc gc gc gc gc21802k->9769k(82496k),0. 0292348 secs25769k->12535k(82496k),28535k->13136k(82496k),29136k->15498k(82496k),31498k->16911k(82496k),32911k->19413k(82496k),35413k->20207k(82496k),0.0243674 secs0.0169928 s

9、ecs0.0213308 secs0.0213301 secs0.0186457 secs0.0146396 secs你可以记录这些事件并且计算出清理垃圾所需的总时间,还可以计算出你加载的工作负荷 是否超过了回收器的能力,这可以帮助改变你的设计并通过调节堆栈大小来适配回收器。第二个是通过jconsolc查询jvm状况。jconsole可以从许多角度查看系统,而且有一个 很棒的memory tab来展示gc的运行状况,如下:used< 33.247.176heapnon-heap在右下角你可以看到绿色的框格,从中可以看到不同的生成占存储的多少。比如说你看到 一个近乎满的survivor生成

10、,那意味着慢的满gc收集时刻,那么意思就是说这个应用可能不是很健全。移植性无论是gc还是hotspot都可以用在任何java可用的地方。比方说,jruby可以运行在共 他平台上,rails应用就可以运行在ibm主机上的jruby上,而且这台ibm主机运行的是cp/cms。实际上,由于java和0pcnjdk项目的开源,我们正在看到越来越多的平台的衍生,因此 jvm的移植性也将越來越棒。成熟jvm q冇超过15年的历史,在过去的这些年里,许多开发者为它做出了许多贡献,使得 它的性能一次又一次地捉升,让jvm变得更加稳定、快速和广泛。覆盖面jruby和jvm上的其他语言项目已经被开发者所承认,一个典型的例子是invokedynamic specification (aka jsr292) jsr越来越配合新的语言,jvm已不再是java 个人定制规则。jvm正在 构建成为类如jruby等项目的优良平台。还冇一个mlv'm (multiple language vm)项目,好比是新特性的清算机构,是一个许多 企业应用的开发者试图添加应用的地方,而这些应用正是他们想在jvm中看到的。而且jwi开发者互柑协 作、彼此影响,无疑这有利于jvm新特性的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论