Java新解:HotSpot JVM的惊人分配速度超越C++ malloc

需积分: 0 0 下载量 128 浏览量 更新于2024-09-04 收藏 47KB DOC 举报
在"Java理论与实践:再谈Urban性能传言"这篇文章中,作者Brian Goetz针对Java语言的性能问题提出了一个重要的观点,即现代JVM(HotSpot 1.4.2及以后版本)在对象分配方面的效率远超人们通常的认知。他指出,new Object()这样的Java代码路径在虚拟机中仅需10条左右的机器指令,相比之下,C语言中最高效的malloc实现平均每个调用需要60到100条指令。这意味着在实际性能对比中,JVM在分配性能上甚至超过了某些精心优化的C/C++实现。 分配性能对于整体程序性能的影响不容忽视,尤其是在C和C++程序中,malloc和free操作占用了相当大的比例,可能达到整体执行时间的20%到30%,而在健康的Java应用中,这一比例远低于这个水平。垃圾收集尽管在某些情况下不如直接内存管理(如malloc/free)直接高效,但其采用的大批量处理方式实际上提供了更多的优化机会,尽管可能会牺牲一些即时性。 作者强调,关于Java性能低下的观点往往是基于过时的信息或者对垃圾收集机制的误解。通过使用像Boehm-Demers-Weiser(BDW)这样的保守垃圾收集器进行实验,Zorn的研究表明,在某些C++程序中,采用垃圾收集可以带来显著的速度提升,尽管这可能限制了对内存分配和回收的优化空间。 这篇文章揭示了Java虚拟机在现代环境下已经实现了显著的性能改进,尤其是在内存分配方面,让开发者无需过多担心性能问题,而是可以把精力集中在代码逻辑上。同时,它也提醒我们,理解并利用好JVM的内存管理策略,是提高Java应用程序性能的关键。