我可以看到JVM在不同的类别中使用了多少内存。
我在jdk 1.8.0_45上的应用程序显示:
本机内存跟踪:
总计:保留= 4023326KB,承诺= 2762382KB
- Java堆(保留= 1331200KB,承诺= 1331200KB)
(mmap:reserved = 1331200KB,承诺= 1331200KB)
- 类(保留= 1108143KB,承诺= 64559KB)
(课#8621)
(malloc = 6319KB#17371)
(mmap:reserved = 1101824KB,承诺= 58240KB)
- 线程(保留= 1190668KB,承诺= 1190668KB)
(线程#1154)
(stack:reserved = 1185284KB,承诺= 1185284KB)
(malloc = 3809KB#5771)
(竞技场= 1575KB#2306)
- 代码(保留= 255744KB,承诺= 38384KB)
(malloc = 6144KB#8858)
(mmap:reserved = 249600KB,承诺= 32240KB)
- GC(保留= 54995KB,承诺= 54995KB)
(malloc = 5775KB#217)
(mmap:reserved = 49220KB,承诺= 49220KB)
- 编译器(保留= 267KB,承诺= 267KB)
(malloc = 137KB#333)
(舞台= 131KB#3)
- 内部(保留= 65106KB,承诺= 65106KB)
(malloc = 65074KB#29652)
(mmap:保留= 32KB,提交= 32KB)
- 符号(保留= 13622KB,承诺= 13622KB)
(malloc = 12016KB#128199)
(竞技场= 1606KB#1)
- 本机内存跟踪(保留= 3361KB,承诺= 3361KB)
(malloc = 287KB#3994)
(跟踪开销= 3075KB)
- Arena Chunk(保留= 220KB,承诺= 220KB)
(malloc的= 220KB)
运行ps ax -o pid,rss | grep <mypid>
或top
仅显示1.6GB的RES/rss
常驻内存。检查交换表示没有使用:
免费-m
缓存总共使用的空闲共享缓冲区
Mem:129180 99348 29831 0 2689 73024
- / + buffers / cache:23633 105546
交换:15624 0 15624
为什么JVM表示只有1.6GB驻留时提交2.7GB内存?
发布于 2018-03-15 21:00:54
你注意下这些概念的细节就行:
使用堆:根据最后一个GC,活动对象占用的内存量
已提交:已使用PROT_NONE以外的地址映射的地址范围。由于懒惰的分配和分页,它们可能会或可能不会被物理或交换支持。
保留:通过mmap
特定内存池预先映射的总地址范围。
该预留-致力于差由PROT_NONE
映射,这是保证不被物理存储器被备份
居民:目前在物理内存中的页面。这意味着代码,堆栈,已提交内存池的一部分,也包含最近被访问的部分mmaped文件以及JVM控制之外的分配。
虚拟:所有虚拟地址映射的总和。涵盖承诺,保留内存池,但也映射文件或共享内存。这个数字很少提供信息,因为JVM可以预先保留非常大的地址范围或mmap大文件。
https://stackoverflow.com/questions/-100007634
复制相似问题