2010-01-13 81 views
2

在Linux上,& Mac有没有一种预先缓存JVM的方法 - 无论是在RAM中,还是在它的一种状态,这样当我启动一个Java程序时,它的启动速度与C一样快/ C++程序?浪费内存加速jvm

我愿意为此而浪费记忆。

回答

3

这岂不JVM的二进制和 库加载到内存中,这样他们可以 共享?

是的,但只在同一个JVM实例中。所以你必须把你的应用程序加载到这个实例中,就像servlet容器一样。

JVM调用的整个bootleneck是类加载的,这就是Thorbjørn提到的Java Quickstart的原因。

所以你可以把类库放在更快的媒体(RAM磁盘)上,这可能会加快你的(第一次)启动。我曾经将Netbeans + JSDK安装在RAM磁盘上,启动速度非常快,但一旦启动,它的运行速度将比从磁盘加载的速度快。

4

不幸的是:(

关于第二个想法号,之所以Java程序在Windows启动速度更快,这些天,是因为有一个进程(Java的快速入门),它积极地保持运行时库文件的副本内存缓存,这显然帮助极大。我不知道这种方法已经被移植到Linux上。

+1

如何在启动时启动一个低内存/ CPU消耗Java程序,并保持它永远运行(while(true){sleep(10);}'行中的内容'是否会加载JVM二进制文件和libs进入内存,以便它们可以共享?它不会使它像原生二进制一样快,但可能会加速或不加速? – 2010-01-13 07:41:07

+0

如果它们运行的​​是单独的jvm,我不认为这会真的有很大的帮助。它可能会使运行时缓存变暖,我认为你不会看到速度的显着增加,并且后台程序会不必要地占用资源,即使它只是空闲。 – Chii 2010-01-13 09:06:10

+0

库只在Linux中加载一次,所以真正的内存消耗第二个JVM实际上很苗条, – Bombe 2010-01-13 10:25:47