JVM精进之路

JVM相关问题一网打尽
帅旋
关注
充电
IT宅站长,技术博主,架构师,全网id:arthinking。

JVM为什么不使用永久带了?

发布于 2024-08-29 | 更新于 2024-08-29

JVM(Java虚拟机)在早期版本中使用了所谓的"永久代"(PermGen),这是一个专门用于存放Java类元数据的区域,包括类定义、静态变量、常量等信息。然而,随着JVM的发展,永久代已经被废弃,取而代之的是一个新的内存区域——元空间(Metaspace)。

JVM废弃永久代并引入元空间是为了提高内存管理的效率,减少内存泄漏的问题,以及实现JVM与JRockit的统一

永久代之所以被废弃,主要有以下几个原因:

  1. 内存管理问题:永久代的大小往往难以确定,如果设置得过小,可能会导致频繁的垃圾回收(GC);如果设置得过大,则可能导致内存资源的浪费。此外,永久代的垃圾回收效率相对较低,因为它需要判断哪些类和方法是可以回收的,这个过程比较复杂且耗时。

  2. 内存泄漏问题:由于永久代容易出现内存泄漏,这会导致Java应用在运行过程中出现OutOfMemoryError: PermGen错误,这对于大型应用尤其常见,例如加载大量第三方库的应用。

  3. JVM与JRockit的合并:JVM在发展过程中进行了与JRockit虚拟机的合并,而JRockit并没有永久代的设计,因此为了统一两者的设计,JVM也废弃了永久代。

元空间作为永久代的替代品,其主要特点是直接使用本地内存,而不是虚拟机内存。这意味着元空间的大小理论上取决于系统的内存容量,而非虚拟机内存的大小。元空间的出现,使得JVM能够更有效地管理和利用内存,减少了内存泄漏的可能性,并提高了垃圾回收的效率。

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/faqs/jvm/memory-management/why-not-use-permanent-generation.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。

请帅旋喝一杯咖啡

咖啡=电量,给帅旋充杯咖啡,他会满电写代码!

IT宅

关注公众号及时获取网站内容更新。