为什么JDK8用Metaspace替代PermGen

简介: 为什么JDK8用Metaspace替代PermGen

1. 性能和内存管理优化

  • 字符串驻留:在JDK 8之前,字符串常量池位于永久代中,这可能导致永久代快速填满,尤其是大量使用字符串的应用。Metaspace的引入将字符串常量池移到了堆内存中,减轻了永久代的压力,提高了字符串操作的性能。
  • 类元数据大小不确定性:类和方法的元数据大小难以预估,因此在永久代中为它们分配合适的空间大小是一项挑战。Metaspace使用本地内存动态调整大小,解决了这个问题,减少了因元数据分配不当导致的内存溢出。

2. GC效率和复杂度降低

  • GC复杂度:永久代的垃圾回收与堆的垃圾回收是分开进行的,这增加了垃圾回收的复杂度。Metaspace的使用使得类元数据和其他堆内存统一管理,减少了GC的复杂性,提高了回收效率。
  • 类卸载和内存泄漏检测:在永久代中,类和类加载器的垃圾回收效率较低,可能导致内存泄漏问题难以发现和解决。Metaspace允许更灵活和高效的类卸载机制,有助于识别和处理类加载器引起的内存泄漏。

3. 与JRockit和IBM JVM的统一

  • 合并技术路线:Oracle计划将HotSpot JVM与JRockit JVM技术整合,后者已经采用了类似的非堆内存管理机制来存储类元数据。引入Metaspace是这一整合计划的一部分,旨在统一和优化JVM架构。

4. 参数简化与灵活性

  • 参数调整:永久代相关的参数(PermSize和MaxPermSize)在JDK 8中被废弃,取而代之的是Metaspace的相关参数,如MaxMetaspaceSize,这提供了更大的灵活性和更简单的内存管理方式。

5. 动态内存分配与限制

  • 动态调整:Metaspace的大小可以动态调整,根据应用需求自动扩展和收缩,直到达到MaxMetaspaceSize的限制,这比永久代的固定大小设定更加灵活和高效。

监控与管理

  • 监控工具:虽然JDK 8初期的监控工具(如jstat和JVisualVM)可能仍显示与PermGen相关的旧信息,但更新后的工具已经适应了Metaspace,允许用户更精确地监控和管理元数据空间的使用。


综上所述,Metaspace的引入是为了改进内存管理的效率、灵活性和性能,减少内存溢出的风险,并为未来的JVM发展铺平道路。

相关文章
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
1401 141
|
7月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
在整个安装过程中,你可能需要管理员权限,因此你可能要使用 `sudo` 来获取必要的权限。记得做完每一个步骤后,都要检查输出,以确保没有发生错误,并且每项操作都成功完成。如果在安装过程中遇到问题,查看 `/var/log/` 下的日志文件对于问题的解决可能是有帮助的。
480 21
|
7月前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
290 11
|
6月前
|
Ubuntu Java Android开发
在Ubuntu 18.04上安装与JDK 8兼容的Eclipse版本的步骤。
安装过程结束后,您就可以开始使用Eclipse来开发您的Java项目了,并且确保它与JDK 8兼容无误。这个过程涉及的是一个基本的安装流程,针对使用Java 8的用户,Eclipse的其他配置和插件安装根据个人开发环境和需求来定制。
439 0
|
9月前
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
467 41
|
10月前
|
Oracle Java 关系型数据库
Tomcat和JDK的详细安装、下载和环境配置指南
以上就是JDK和Tomcat的下载、安装和环境配置的详细步骤。希望这个指南能帮助你顺利完成设置。
670 32
|
9月前
|
开发框架 Java 关系型数据库
在Linux系统中安装JDK、Tomcat、MySQL以及部署J2EE后端接口
校验时,浏览器输入:http://[your_server_IP]:8080/myapp。如果你看到你的应用的欢迎页面,恭喜你,一切都已就绪。
594 17
|
9月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
537 11
|
11月前
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1665 21