jvm方法区的基本理解

概述

  • 方法区在逻辑上是堆的一部分,但因为一些简单的实现不会选择去进行垃圾收集或者压缩,所以可以把方法区看做是一块独立于java堆的内存空间
  • 方法区跟堆一样,是各个线程共享的区域
  • 方法区在启动的时候就创建了,实际内存可以是不连续的
  • 方法区的大小是可以扩展的或配置固定大小,大小决定了系统可以保存多少个类,如果加载的类过多则会报oom异常,如加载了大量的第三方jar包,tomcat部署的工程很多,有大量动态生成的反射类。
  • 关闭jvm就会释放方法区的内存

方法区的演进

jdk7之前是永久代,jdk8开始就使用元空间。
在虚拟机规范中,方法区和永久代不等价,仅仅是hotspot来说是。规范中对方法区得实现没有要求,BEA JRockit和IBM J9就没有永久代
在这里插入图片描述

在jdk中因为收购了JRockit,统一了方法区的实现,成为元空间,与永久代的最大区别在于,不在虚拟机设置的内存中,而是使用本机内存(会更大)。

猜你喜欢

转载自blog.csdn.net/lyd135364/article/details/121112053
今日推荐