首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尽管(最大)MetaspaceSize,Java8为Metaspace保留了至少1G

尽管(最大)MetaspaceSize,Java8为Metaspace保留了至少1G
EN

Stack Overflow用户
提问于 2015-06-26 22:27:49
回答 2查看 30.7K关注 0票数 31

Java 8在启动后为Metaspace预留了1G。这意味着最小元空间大小为1G。但我将MetaspaceSize设置为300m,将MaxMetaspaceSize设置为400m。为什么Java预留的资源比我允许的还要多?

Java版本

代码语言:javascript
复制
$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

VM标志

代码语言:javascript
复制
$ jcmd 21689 VM.flags
21689:
-XX:CICompilerCount=3 -XX:ConcGCThreads=1 -XX:G1HeapRegionSize=1048576 -XX:InitialHeapSize=62914560 -XX:+ManagementServer -XX:MarkStackSize=4194304 -XX:MaxHeapSize=1006632960 -XX:MaxMetaspaceSize=399998976 -XX:MaxNewSize=603979776 -XX:MetaspaceSize=299999232 -XX:MinHeapDeltaBytes=1048576 -XX:NativeMemoryTracking=summary -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:+UseG1GC 

NMT

代码语言:javascript
复制
[jetty9-proxy@bm01 bin]$ jcmd 21689 VM.native_memory
21689:

Native Memory Tracking:

Total: reserved=2769543KB, committed=1311159KB

-                     Class (reserved=1221904KB, committed=197904KB)
                            (classes #36543)
                            (malloc=3344KB #44041) 
                            (mmap: reserved=1218560KB, committed=194560KB) 

就在开机后

代码语言:javascript
复制
Total: reserved=2402748KB, committed=150796KB     

-                     Class (reserved=1056956KB, committed=7868KB)
                            (classes #1300)
                            (malloc=188KB #564) 
                            (mmap: reserved=1056768KB, committed=7680KB) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-29 04:21:33

Java为类保留1G的原因隐藏在它管理压缩类指针的方式中。

阅读此文档的详细答案:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/considerations.html

简短回答:在'CompressedClassSpaceSize‘属性-XX:CompressedClassSpaceSize=300m中设置正确的大小

票数 32
EN

Stack Overflow用户

发布于 2015-06-26 23:01:58

类(reserved=1221904KB

这不是正在使用的内存,而是虚拟地址空间

committed=197904KB

那是197MB,不是1 1GB

因此,您并没有看到java实际上为类数据消耗了1 1GB的内存,而只是保留了1 1GB的地址空间。

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

https://stackoverflow.com/questions/31075761

复制
相关文章

相似问题

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