zoukankan      html  css  js  c++  java
  • 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进行加载。

  • 相关阅读:
    自学Java0711
    自学Java0710
    自学Java0709
    自学Java0708
    Leetcode刷题集
    网站收集
    674. 最长连续递增序列『简单』
    680. 验证回文字符串 Ⅱ『简单』
    686. 重复叠加字符串匹配『简单』
    693. 交替位二进制数『简单』
  • 原文地址:https://www.cnblogs.com/windghost/p/13301084.html
Copyright © 2011-2022 走看看