认识JAVA运行时的数据分区 方法区

什么是方法区?

在Java的虚拟机中,方法区是可以提供各种线程共享的运行时内存区域。

在不同的JDK版本中,方法区的存储的数据是不一样的。

在JDK1.6之前,运行时常量池是方法区的一部分,同时方法区里面存储了类的元数据信息、静态变量、即时编译器编译后的代码(比如spring使用IOC或者AOP创建bean时,或者使用cgkig,反射的形式动态生成class信息等等之类的...)。

在JDK1.7之后,JVM已经将运行时常量池从方法区中移出来,在JVM堆开辟了一块区域存放常量池。

方法区是线程共享的,当有多个线程都用到一个类的时候,而这个类还未被加载,则应该只有一个线程去加载 类,让其他线程等待。

方法区的大小不一定是固定的,JVM可以根据应用的需要动态调整。JVM也可以允许用户和程序指定方法区的初始大小,最小和最大限制。

方法区同样存在垃圾收集,因为通过用户定义的类加载器可以动态扩展Java程序,这样可能会导致一些类,不能在被使用,变为垃圾。这是就要有垃圾收集来清理。

方法区关键信息介绍:

类信息:修饰符(public)

是类还是接口(class,interface)

类的全限定名(Test/CkassStruct.class)

直接父类的全限定名 (java/lang/Objcect.class)

直接父接口的全限定名数组(java/io/Serializable)

也就是public final class ClassStruct extends Object implements Serializable这段信息的提取

经验分享 程序员 微信小程序 职场和发展