【发布时间】:2019-03-29 13:20:16
【问题描述】:
代码如下:
System.out.println("Runtime max: " + mb(Runtime.getRuntime().maxMemory()));
MemoryMXBean m = ManagementFactory.getMemoryMXBean();
System.out.println("Non-heap: " + mb(m.getNonHeapMemoryUsage().getMax()));
System.out.println("Heap: " + mb(m.getHeapMemoryUsage().getMax()));
for (MemoryPoolMXBean mp : ManagementFactory.getMemoryPoolMXBeans()) {
System.out.println("Pool: " + mp.getName() +
" (type " + mp.getType() + ")" +
" = " + mb(mp.getUsage().getMax()));
}
在JDK8上运行的代码是:
[root@docker-runner-2486794196-0fzm0 docker-runner]# java -version java版本“1.8.0_181” Java(TM) SE 运行时环境 (build 1.8.0_181-b13) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.181-b13,混合模式) [root@docker-runner-2486794196-0fzm0 docker-runner]# java -jar -Xmx1024M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap test.jar 最大运行时间:954728448 (910.50 M) 非堆:-1 (-0.00 M) 堆:954728448 (910.50 M) 池:代码缓存(类型非堆内存)= 251658240 (240.00 M) 池:元空间(类型非堆内存)= -1 (-0.00 M) 池:压缩类空间(类型非堆内存)= 1073741824 (1024.00 M) 池:PS Eden Space(堆内存类型)= 355467264 (339.00 M) 池:PS Survivor Space(堆内存类型)= 1048576 (1.00 M) 池:PS Old Gen(堆内存类型)= 716177408 (683.00 M)*运行时间最大值:954728448 (910.50 M) *
Runtime.maxMemory 是 910.50M,我想知道这是怎么回事
On JDK7, "Runtime.getRuntime().maxMemory()" = "-Xmx" - "Survivor" ,但是在JDK8上不行。
【问题讨论】:
-
不确定这是否相关,但似乎您是在 docker 容器中运行它,并且您同时使用
-XX:+UseCGroupMemoryLimitForHeap和-Xms,如图所示 here 将覆盖另一个 -
感谢您的回复!此代码未在 docker 上运行,将具有相同的结果 #java -jar -Xmx1024M test.jar Runtime max: 954728448 (910.50 M) ... Pool: PS Old Gen (type Heap memory) = 716177408 (683.00 M) )
-
对不起,我已经更新了我的问题
标签: java-8 jvm jvm-hotspot