微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

寻找JVM堆的分配

如何解决寻找JVM堆的分配

我已经运行了 straced JVM (OpendJDK 11):

strace -e trace=mmap java -xms8192m Main

输出为:

mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x7effda5fa000
mmap(NULL,2158880,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_DENYWRITE,3,0) = 0x7effda1c3000
mmap(0x7effda3d1000,MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE,0xe000) = 0x7effda3d1000
mmap(NULL,246024,PROT_READ,MAP_PRIVATE,0) = 0x7effda5bd000
mmap(NULL,4131552,0) = 0x7effd9dd2000
mmap(0x7effda1b9000,24576,0x1e7000) = 0x7effda1b9000
mmap(0x7effda1bf000,15072,MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,0) = 0x7effda1bf000
mmap(NULL,2212016,0) = 0x7effd9bb5000
mmap(0x7effd9dd0000,0x1b000) = 0x7effd9dd0000
mmap(NULL,2109712,0) = 0x7effd99b1000
mmap(0x7effd9bb3000,0x2000) = 0x7effd9bb3000
mmap(NULL,2221184,0) = 0x7effd9792000
mmap(0x7effd99ab000,0x19000) = 0x7effd99ab000
mmap(0x7effd99ad000,13440,0) = 0x7effd99ad000
mmap(NULL,0) = 0x7effda5bb000
mmap(NULL,21206808,0) = 0x7effd8358000
mmap(0x7effd963f000,1032192,0x10e7000) = 0x7effd963f000
mmap(0x7effd973b000,354072,0) = 0x7effd973b000
mmap(NULL,3702848,0) = 0x7effd7fcf000
mmap(0x7effd8348000,49152,0x179000) = 0x7effd8348000
mmap(0x7effd8354000,12352,0) = 0x7effd8354000
mmap(NULL,3789144,0) = 0x7effd7c31000
mmap(0x7effd7fcd000,0x19c000) = 0x7effd7fcd000
mmap(NULL,2192432,0) = 0x7effd7a19000
mmap(0x7effd7c2f000,0x16000) = 0x7effd7c2f000
mmap(NULL,1052672,MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK,0) = 0x7effda4ba000
+++ exited with 0 +++

我将堆的初始大小设置为 8192M,并尝试在 strace 的输出中找到堆的分配。我找不到。为什么?

解决方法

添加 -f 选项(跟踪子进程)。

在原始线程中运行 Java 代码曾导致许多问题,请参阅 JDK-6316197 了解详情。

java 启动器在新线程中创建一个 JVM。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。