[JVM笔记].方法区是否可回收?

75 阅读1分钟

当然可以,方法区主要回收的内容为废弃的常量和不再使用的类型。

例如当一个字符串常量"java"曾经进入过常量池中,但是当前又没有任何一个字符串常量是"java",或者引用他,且虚拟机中也没有其他地方引用他。那么,如果此时发生垃圾回收,而且垃圾收集器判断有必要的话,这个常量会被清理出常量池。

判断一个对象是否废弃

  1. 该类所有的实例都已经被回收
  2. 该类的类加载器已经被回收
  1. 该类对应的java.lan.class没有在任何地方被引用

forName("java.lang.class")和loadClass("java.lang.class")的区别

  1. forName会导致类的主动加载,根据类的全限定名返回一个对象
  2. ClassLoader.loadClass()是一个实例方法,该方法将类加载到内存中,并不会执行类的初始化,直到第一次使用时,这个类才会被初始化。