【jvm】HotSpot中方法区的演进

目录

          • [1. 说明](#1. 说明)
          • [2. JDK1.6及以前](#2. JDK1.6及以前)
          • [3. JDK1.7](#3. JDK1.7)
          • [4. JDK1.8及以后](#4. JDK1.8及以后)
1. 说明
  • 1.在HotSpot虚拟机中,方法区(Method Area)的演进是一个重要的内存管理优化过程。
  • 2.从JDK1.6到JDK1.8,HotSpot虚拟机中的方法区经历了从永久代到元空间的重大变化。
  • 3.这一变化反映了虚拟机内存管理的优化和适应性改进。
  • 4.通过移除永久代并引入元空间,虚拟机提高了内存使用的灵活性和效率,同时降低了内存管理的复杂性。
  • 5.开发者仍然需要注意元空间的使用情况,以避免因元空间不足而导致的系统内存问题。
  • 6.jdk6/7中:XX:PermSize=10m -XX:MaxPermSize=10m
  • 7.jdk8中:-XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m
2. JDK1.6及以前
  • 1.实现:在JDK1.6及之前的版本中,方法区通常被称为永久代(permanent generation)。
  • 2.存储内容:永久代用于存储静态变量、类型信息、运行时常量池、JIT(即时编译器)代码缓存等。
  • 3.内存管理:永久代的内存管理类似于Java堆,但回收效率较低,通常只在Full GC时触发。
3. JDK1.7
  • 1.去永久代:JDK1.7开始逐步"去永久代"的过程。
  • 2.变化:字符串常量池和静态变量被从永久代中移除,转而存储在Java堆中。这一变化提高了字符串的回收效率,因为Java堆的内存管理更加灵活和高效。
  • 3.遗留问题:尽管进行了这些更改,但永久代仍然存在于JDK1.7中,只是其内容和作用有所减少。
4. JDK1.8及以后
  • 1.完全移除永久代:在JDK1.8中,永久代被完全移除,取而代之的是元空间(Metaspace)。
  • 2.元空间:元空间是一个与堆不相连的本地内存区域,用于存储类的元数据信息(如类型信息、字段、方法等)。由于元空间使用本地内存,其最大可分配空间受限于系统可用内存。
  • 3.优势:元空间的引入解决了永久代内存管理困难的问题,提高了内存使用的灵活性和效率。同时,由于元空间不在虚拟机内存中,因此不会受到虚拟机内存大小的限制。
  • 4.内存管理:元空间的内存管理相对简单,当元空间不足时,可以通过增加本地内存或优化类的加载和卸载来解决问题。然而,如果元空间使用过多,仍然可能导致系统内存不足的问题,此时虚拟机将抛出OutOfMemoryError异常。
相关推荐
学到头秃的suhian13 小时前
JVM-类加载机制
java·jvm
NEFU AB-IN19 小时前
Prompt Gen Desktop 管理和迭代你的 Prompt!
java·jvm·prompt
唐古乌梁海1 天前
【Java】JVM 内存区域划分
java·开发语言·jvm
众俗1 天前
JVM整理
jvm
echoyu.1 天前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
代码栈上的思考2 天前
JVM中内存管理的策略
java·jvm
thginWalker2 天前
深入浅出 Java 虚拟机之进阶部分
jvm
沐浴露z2 天前
【JVM】详解 线程与协程
java·jvm
thginWalker2 天前
深入浅出 Java 虚拟机之实战部分
jvm
程序员卷卷狗3 天前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm