旧版Java中最明显的直接差异是分配给 -client 而不是 -server 应用程序的内存 . 例如,在我的Linux系统上,我得到:
$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight = 20 {product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx InitialHeapSize := 66328448 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1063256064 {product}
uintx MaxPermSize = 67108864 {pd product}
uintx PermSize = 16777216 {pd product}
java version "1.6.0_24"
因为它默认为 -server ,但是使用 -client 选项我得到:
$ java -client -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight = 20 {product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx InitialHeapSize := 16777216 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 268435456 {product}
uintx MaxPermSize = 67108864 {pd product}
uintx PermSize = 12582912 {pd product}
java version "1.6.0_24"
所以 -server 对于这个 java 版本,大多数内存限制和初始分配要高得多 .
但是,这些值可以针对体系结构,操作系统和jvm版本的不同组合进行更改 . jvm的最新版本删除了标志并重新移动了服务器和客户端之间的许多区别 .
还要记住,您可以使用 jvisualvm 查看正在运行 jvm 的所有详细信息 . 如果您有用户或模块设置 JAVA_OPTS 或使用更改命令行选项的脚本,这将非常有用 . 这还可以让您实时监控堆和permgen空间使用情况以及许多其他统计信息 .