我知道他们已经用Java8中的PermGen取代了MetaSpace。
-XX:+CMSClassUnloadingEnabled这样的args来收集GC的,那么是什么使MetaSpace比PermGen更好呢?OutOfMemoryException。发布于 2014-06-06 06:12:27
默认情况下是否收集MetaSpace?
是的,GC将在metaspace上运行,当它满员时,它还会动态地增加(如果允许)为元数据分配的内存。
即使是PermGen也是通过添加-XX:+CMSClassUnloadingEnabled这样的args来收集GC的,那么是什么使MetaSpace比PermGen更好呢?
改进是随着元空间的动态扩展而进行的,这是permgen无法做到的。
MetaSpace是基于本机内存的,所以它将java对象保存在磁盘上而不是VM上?
基于对metaspace的描述,它只使用本机内存(不分页)。
基于(链接在这里)的研究,很明显,引入metaspace并不一定能解决OOM问题,它最多只能解决这个问题,它试图动态地调整元内存的大小,以容纳越来越多的类,这些类被加载到无法控制的增长中可能产生的副作用(只要本机内存允许)。
我们可以通过将MaxMetaspaceSize参数设置为JVM并运行所提供的示例程序来实现著名的OOM错误。
非常感谢皮埃尔-胡格·夏博诺。
发布于 2014-06-06 05:05:51
答复:
发布于 2014-06-06 05:31:54
一旦类元数据使用达到“MaxMetaspaceSize”(默认为"unlimited" ),就会触发死类和类加载器的垃圾收集,因此需要适当的监视来限制此类GC的延迟或频率。
其主要目标是删除permgen,这样用户就不必考虑对其进行正确的调整。
磁盘不是本机内存,而是存储设备。本机内存(在此上下文中是区域)是Java堆遗留的进程的内存
是的,它受到机器内存的限制。
https://stackoverflow.com/questions/24074164
复制相似问题