311 jvm类加载以及对象回收相关

 class加载相关

       类生命周期:加载(读取二进制)、验证(class格式规范,语义分析,引用验证、字节码验证)、准备(分配内存)、解析(类,接口,字段,方法等解析)、初始化(静态变量赋值,执行静态代码块)、使用(实例化)、卸载(从jvm中卸载)

  

      类加载器(至少3个):

          bootstraploader-核心类库加载器:c实现。

        extendionclassloader--扩展类库加载器:jdk扩展包,ext目录包,用户配置的路径

      applicationclassloader---应用程序类加载器:class.path路径

jps,jcmd可以看到当前运行的java进程

jcmd pid 可以查看相关的进程配置

类卸载满足的条件: 1、class的所有实例都被gc 2、加载该类的classloader实例被gc

java启动参数 verbose:class 可以观察类的加载和卸载

注意:被加载的类中的静态代码,在第一次使用后才会被加载,loadclass并不会处理

双亲委派模型:下到上委托,上到下查找。

每一级的加载器都优先委托给父加载器进行类的加载,如果父加载器反馈加载不到,加载器才会尝试自行加载。

单纯的classloader不会重复加载同一个class。所以,很多热加载功能的实现思路是,如果检测到类的变化,重新创建一个classloader进行加载。

原文地址:https://www.cnblogs.com/windghost/p/13301084.html