根据GC人体工程学,默认的最大堆大小应为"物理内存的1/4或1GB".
阅读我希望在96GB ram的服务器级机器上使用jvm,默认最大堆大小1GB(96GB/4 = 24GB或1GB).
但是,当我编译并运行以下代码时,它会写出来21463(即约21GB).
public class Main{
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().maxMemory() / 1024 / 1024);
}
}
Run Code Online (Sandbox Code Playgroud)
如果重要:java -version生产
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
Run Code Online (Sandbox Code Playgroud)
总而言之,如果我正确阅读文档,默认的最大堆大小应该不大于1GB,但实际上它大约是服务器内存的1/4.怎么会?
答案仅在第一行本身的问题中 -
默认的最大堆大小应该是物理内存的"1/4".在你的情况下,1/4的主内存是24GB,但堆大小是21GB,这是令你满意的第一行语句.
为了更清楚地运行下面的代码来获得实际的主内存大小
public class SizeOfMainMemory {
public static void main(String[] args) {
com.sun.management.OperatingSystemMXBean mxbean = (com.sun.management.OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
System.out.println(mxbean.getTotalPhysicalMemorySize()/1024/1024);
}
}
Run Code Online (Sandbox Code Playgroud)
你会发现你的HEAP SIZE是主内存的1/4或者可能少一点.
| 归档时间: |
|
| 查看次数: |
7769 次 |
| 最近记录: |