首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么MetaSpace大小是用过的MetaSpace的两倍?

为什么MetaSpace大小是用过的MetaSpace的两倍?
EN

Stack Overflow用户
提问于 2016-08-22 16:19:49
回答 2查看 2K关注 0票数 3

我编写了一个模拟MetaSpace OOM的程序。但是我发现MetaSpace Size几乎总是比Used MetaSpace大两倍。为什么?

我使用标志-XX:MaxMetaspaceSize=50m运行我的程序,当Used MetaSpace达到25M而不是50M时,程序会抛出OOM,为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-23 09:10:52

我认为以下两个实验将解释MetaSpace大小与使用MetaSpace之间的差距意味着什么:

EXP-1:每个ClassLoader加载一个类,我得到以下内容:

EXP-2:每个ClassLoader加载5个类,我得到了以下内容:

正如Java 8文档所说:

从操作系统中请求空间,然后将其划分为块。类加载器从其块中为元数据分配空间(块绑定到特定的类加载器)。

我认为这意味着块通常包含多个类,因此MetaSpace大小的利用率随着每个ClassLoader加载更多类而增加。

可以通过使用命令运行代码在这里来重新显示结果:

代码语言:javascript
运行
复制
java -XX:MaxMetaspaceSize=50m MetadataOOMSimulator 100000000

关注点:确保所有类都不会出现在CLASSPATH中(通常包括当前目录),否则这些类将由APPClassLoader加载,而不是自定义的ClassLoader。

票数 1
EN

Stack Overflow用户

发布于 2016-08-23 03:30:14

好问题;-)

看看这篇很好的文章。

PermGenSpace对MetaSpace

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

https://stackoverflow.com/questions/39084331

复制
相关文章

相似问题

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