2013-01-23 25 views
4

我在一台Linux机器上并使用openjdk7。在使用-server选项时,发现我的代码执行速度提高了两倍,我深入研究了虚拟机内部发生的事情,发现服务器虚拟机像疯了一样嵌入我的代码,而客户机虚拟机根本不内联。客户端VM未内联?

这是正常的行为吗?

+1

Server VM期望程序运行时间很长,因此可以执行更复杂的优化。通常使用服务器虚拟机很有用,但内联可能会导致更多的内存消耗。 – MrSmith42

+0

如果您正在寻找改变JVM运行模式的方法,您还需要确保您了解在多线程应用程序中对可见性的潜在影响,因为由于策略差异导致交换机可能产生意想不到的后果模式之间的操作。 – codeghost

+0

为了更深入地理解差异,你可以看看http://stackoverflow.com/questions/198577/real-differences-between-java-server-and-java-client – Taky

回答

3

这是正常行为。

服务器JVM更加严格地优化代码。这在启动时使用更多CPU,运行时使用更多内存。

客户端VM被设计为快速启动例如小程序。这是Windows 32位JVM上的默认值。

+1

所以客户端虚拟机根本不内联?如果-server是默认的,为什么我会看到差异? (我没有指定我想要的客户端虚拟机) – kutschkem

+0

好吧我想通了,我的Java虚拟机默认为-client出于某种原因。 – kutschkem

+1

这可能有所帮助http://www.kynosarges.org/JavaClientVm.html –