2010-01-13 74 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