“java -server”和“java -client”之间有什么实际的区别吗?

我在孙的网站上只能找到一个模糊的

-服务器启动较慢,但应该运行得更快。

真正的区别是什么?(目前使用JDK 1.6.0_07。)


当前回答

我没有注意到两者在启动时间上有任何不同,但使用“-server”(Solaris服务器,每个人都使用SunRays来运行应用程序)时,应用程序性能的提高非常小。低于1.5。

其他回答

Oracle的在线文档提供了Java SE 7的一些信息。

在Windows的java应用程序启动器页面上,在64位JDK中-client选项会被忽略:

选择“Java HotSpot Client”虚拟机。支持64位的jdk目前忽略了这个选项,而是使用Java HotSpot Server VM。

然而(为了让事情变得有趣),在-server下它声明:

选择Java热点服务器虚拟机。在支持64位的jdk上,只支持Java HotSpot Server VM,因此-server选项是隐式的。这可能会在未来的版本中更改。

服务器类机器检测页面提供了根据操作系统和体系结构选择虚拟机的信息。

我不知道这其中有多少适用于JDK 6。

IIRC,它涉及到垃圾收集策略。其理论是客户机和服务器在短寿命对象方面是不同的,这对现代GC算法很重要。

下面是服务器模式的链接。唉,他们没有提到客户端模式。

这里有一个关于GC的非常全面的链接;这是一篇比较基础的文章。不确定地址-服务器和-客户端,但这是相关的材料。

在No Fluff Just Stuff, Ken Sipe和Glenn Vandenburg都在这方面做了很棒的演讲。

IIRC服务器虚拟机在启动时做了更多的热点优化,所以它运行得更快,但启动时间稍长,占用更多内存。客户端VM推迟了大部分优化,以允许更快的启动。

编辑补充:这里有一些来自Sun的信息,不是很具体,但会给你一些想法。

我刚刚注意到的一个不同之处在于,在“客户端”模式下,JVM似乎会将一些未使用的内存归还给操作系统,而在“服务器”模式下,一旦JVM获取了内存,它就不会将其归还。这就是它在Solaris和Java6上的显示方式(使用prstat -Z查看分配给进程的内存数量)。

我没有注意到两者在启动时间上有任何不同,但使用“-server”(Solaris服务器,每个人都使用SunRays来运行应用程序)时,应用程序性能的提高非常小。低于1.5。