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

本文详细探讨了Java虚拟机(JVM)的优点与缺点,包括其在简化编程、内存管理、类库丰富等方面的优势,以及在配置依赖、代码性能优化等方面的局限性。通过对比JRuby和Ruby的实现,展示了JVM在不同场景下的性能表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h1 {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; mso-outline-level:1; font-size:24.0pt; font-family:宋体; mso-bidi-font-family:宋体; font-weight:bold;} p {mso-margin-top-alt:auto; margin-right:0cm; mso-margin-bottom-alt:auto; margin-left:0cm; mso-pagination:widow-orphan; font-size:12.0pt; font-family:宋体; mso-bidi-font-family:宋体;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:15.6pt;} div.Section1 {page:Section1;} -->

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

        Java 最初诞生的时候,它可以说是其他语言的进化版。不仅因为Java 很简单,而且这一进化的语言还是一个可以运行第三方硬件字节码的虚拟机。它还是垃圾收集站,从而令存储管理和内核转储(core dump )不再是麻烦。当然还有它相当全面的类库。虽然它没有什么惊世的新性能,但它把许多语言的优点基于一身。

        本来Java 是一个简单独一的语言,但是Sun 在长期运营Java 的过程中出现了很多错误,比如将语言与runtime 合用一个名字,从而使得用户在识别JVM 语言项目如JythonJRuby 时难以从思想上隔离Java 。最主要的是这样对runtime 很不公,因为Java Virtual Machine (JVM) 有很多自己的独特之处。

        缺点

        没有一种技术是完美的,JVM 也不例外。如果你工作在一个没有Java 语言配置的设备上,JVM 便无用武之地。JVM 为其他语言提供了基础,但JVM 最初不是为这个理念设计的。比如我们作为分配对象来维护我们的堆栈时,通常我们会直接操作实时堆栈并添加我们维护所需的其他字段,除此之外再没有控制堆栈的更好的方法。

        还有,当我们创建一个Ruby Fixnum 时也很麻烦,我们把这些值用一个Java 对象包装。RubyC implementation 不过只是传递tagged ints ,因为没有包装他们就不会符合各种列表,所以Java 基元(Java primitives )也不会切割它。

        顺便说一下:JVM 的启动时间也挺长。

        那些为JVM 编写高性能代码的开发者会觉得经常被JVMblack 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 运行后时间曲线迅速下降。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值