为什么 JVM 启动缓慢?

2022-08-31 15:13:28

究竟是什么让JVM(特别是Sun的实现)与CPython等其他运行时相比运行缓慢?我的印象是,这主要与大量库加载有关,无论它们是否需要,但这似乎不应该花费10年的时间来解决。

想想看,JVM的开始时间与Windows上的CLR相比如何?Mono的CLR怎么样?

更新:我特别关注在Unix中常见的小型实用程序链接在一起的用例。Java现在适合这种风格吗?无论Java产生的启动开销是多少,它是否为每个Java进程加起来,或者开销是否只真正体现在第一个进程中?


答案 1

以下是维基百科对这个问题的看法(有一些参考资料)。

似乎大部分时间只是从磁盘加载数据(类)(即启动时间是I / O绑定的)。


答案 2

请注意一些解决方案:

有两种机制允许更快地启动JVM。第一个是类数据共享机制,自Java 6 Update 21以来一直受支持(仅与HotSpot客户端VM,并且据我所知,仅使用串行垃圾回收器)

要激活它,您需要设置-Xshare(在某些实现上:-Xshareclasses)JVM选项。

要了解有关您可以访问的功能的更多信息:课程数据共享

第二种机制是Java快速入门。它允许在操作系统启动期间预加载类,请参阅:Java Quick Starter 以获取更多详细信息。


推荐