当前位置: 首页 > 知识库问答 >
问题:

JDK8中PermGen的消除

拓拔意
2023-03-14

我已经安装了JDK8,并尝试运行Eclipse。我收到以下警告消息:

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0 

忽略这个VM选项的原因是什么?

共有1个答案

闻人梓
2023-03-14

忽略这些参数的原因是在HotSpot for JDK8中删除了永久生成,因为存在以下缺陷

  • 启动时的固定大小-难以优化。
  • 内部热点类型是Java对象:可以使用完整的GC移动,不透明,不强类型且难以调试,需要元元数据。
  • 简化完整集合:每个收集器的元数据专用迭代器
  • 希望同时释放类数据,而不是在GC暂停期间释放类数据
  • 启用Permgen限制的未来改进。

永久生成(PermGen)空间已经完全被移除,取而代之的是一个叫做元空间的新空间。移除PermGen的后果是,PermSize和MaxPermSize JVM参数明显被忽略,您将永远不会得到java.lang.OutOfMemoryError:PermGen错误。

  • 利用Java语言规范属性:类和关联的元数据生存期匹配类加载器的
  • 每个加载程序存储区域-元空间
  • 仅线性分配
  • 没有单独回收(重定义类和类加载失败除外)
  • 无GC扫描或压缩
  • 元空间对象不重定位

元空间调优

可以使用-xx:maxMetaspaceSize标志设置最大元空间大小,默认为无限,这意味着只有您的系统内存才是限制。-xx:metaspaceSize调优标志定义元空间的初始大小。如果不指定该标志,则元空间将根据运行时的应用程序需求动态调整大小。

    null
 类似资料:
  • 问题内容: 我已经安装了JDK 8,并尝试运行Eclipse。我收到以下警告消息: 忽略此VM选项的原因是什么? 问题答案: 忽略这些论点的原因是永久生成已在HotSpot for JDK8中删除,因为存在以下缺点 启动时固定大小-难以调整。 内部热点类型是Java对象:可以与完整的GC,不透明的,类型不强且难以调试的元数据一起移动。 简化完整集合:每个集合器的元数据特殊迭代器 想要同时取消分配类

  • 作为一名前C/C++普通程序员,我刚刚开始与Java混在一起。我对JDK8中声明数组的方式很感兴趣。我按照一本书的要求,将数组声明为一个对象,如下所示。 我完全同意使用数组作为对象。但是在我的IDE(Netbeans 8)上,我得到一个通知,说“字段示例数组可以是最终的”。当我删除部分时,我得到了正常的编译,没有任何通知。这是否意味着JDK中的数组是动态分配的?我还没有尝试迭代数组。 根据我在Go

  • 我试图在NetBeans 12.2上安装JDK8作为一个平台,但我一直收到以下错误消息: “不行 有办法解决这个问题吗?还是有一个版本的JDK8不会产生这个错误消息? 进一步:我应该提到我在MACOS大苏尔。 以下是我在Terminal中使用java-version得到的结果: java版本“15.0.2”2021-01-19 java(TM)SE运行时环境(构建15.0.2 7-27)java热

  • 问题内容: 我正在使用tomcat 6.0,并且在建立索引(而不是在我启动tomcat时)时,出现了permgen空间错误。 我如何增加空间? 问题答案: 你可以使用 : 增加空间。但这通常只会推迟不可避免的事情。 你还可以启用PermGen进行垃圾收集 通常在进行大量重新部署时会发生这种情况。我很惊讶你使用诸如索引之类的东西。使用virtualvm或jconsole监视Perm gen空间,并在

  • 问题内容: 我已经在运行的Java应用程序上运行了命令,这是我得到的: C:\ Program Files \ Java \ jdk1.7.0_05 \ bin> jmap -heap 2384附加到进程ID 2384,请等待…调试器已成功附加。检测到服务器编译器。 JVM版本为23.1-b03 ,在新一代中使用并行线程。 使用线程局部对象分配。 并发标记扫描GC 堆配置: MinHeapFree

  • 问题内容: 当我说时,这是否包括permgen即从这些1024m中提取的还是单独的? 看着这个, 我认为它需要1024m,但是直到现在我仍然认为它们是分开的。 问题答案: 不,permGen空间是主堆之外的空间(后者通过Sun VM上的-Xmx限制)