首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java保留内存高于G1 GC /GC驻留内存

Java保留内存高于G1 GC /GC驻留内存
EN

Stack Overflow用户
提问于 2020-04-13 09:07:14
回答 1查看 262关注 0票数 2

java进程使用G1GC使用的驻留内存比XMX和NMT报告的内存要高得多。

代码语言:javascript
复制
java -version
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.6+10-LTS, mixed mode, sharing)
代码语言:javascript
复制
top output
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    787 root      20   0   99.9g  85.4g  22120 S  1053 66.8  11904:11 java
代码语言:javascript
复制
JVM Arguments
/usr/bin/java -Xms75g -Xmx75g -XX:NativeMemoryTracking=summary -XX:MaxGCPauseMillis=50 
-XX:G1RSetSparseRegionEntries=4096 -XX:G1HeapRegionSize=32M 
-Xlog:gc*=info,gc+phases=debug:file=/var/log/gc.log:time,uptimemillis,level,tags:filecount=5,filesize=50M  -XX:+UseG1GC
代码语言:javascript
复制
Native Memory Tracking:

Total: reserved=81376MB, committed=80879MB
-                 Java Heap (reserved=76800MB, committed=76800MB)
                            (mmap: reserved=76800MB, committed=76800MB)

-                     Class (reserved=65MB, committed=65MB)
                            (classes #9993)
                            (  instance classes #9216, array classes #777)
                            (malloc=1MB #29050)
                            (mmap: reserved=64MB, committed=63MB)
                            (  Metadata:   )
                            (    reserved=64MB, committed=63MB)
                            (    used=62MB)
                            (    free=1MB)
                            (    waste=0MB =0.00%)

-                    Thread (reserved=348MB, committed=35MB)
                            (thread #345)
                            (stack: reserved=346MB, committed=33MB)
                            (malloc=1MB #2072)
                            (arena=1MB #688)

-                      Code (reserved=244MB, committed=62MB)
                            (malloc=2MB #6831)
                            (mmap: reserved=242MB, committed=59MB)

-                        GC (reserved=3239MB, committed=3239MB)
                            (malloc=356MB #58172)
                            (mmap: reserved=2883MB, committed=2883MB)

-                  Compiler (reserved=2MB, committed=2MB)
                            (malloc=3MB #2963)

-                  Internal (reserved=16MB, committed=16MB)
                            (malloc=16MB #8415)

-                     Other (reserved=643MB, committed=643MB)
                            (malloc=643MB #296)

-                    Symbol (reserved=12MB, committed=12MB)
                            (malloc=10MB #122802)
                            (arena=3MB #1)

-    Native Memory Tracking (reserved=4MB, committed=4MB)
                            (tracking overhead=4MB)

NMT报告了大约80 is的内存使用情况,但是java进程的驻留内存超过85 is。随着时间的推移,两者之间的差距不断扩大。对于运行相同应用程序的另一个VM,驻留内存超过95 VM,而NMT内存再次只有82 VM。由于这种不断增长的内存消耗,这个应用程序最终被操作系统杀手杀死了。

是什么导致了两者之间的差异?如何减少这个应用程序的内存足迹呢?

EN

回答 1

Stack Overflow用户

发布于 2022-03-30 21:16:14

“本发行版中的NMT不跟踪第三方本机代码内存分配和JDK类库。”https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html

基本上,您可以通过JNI访问第三方本机代码,以及在JVM之外显式分配存储的ByteBuffers之类的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61184601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档