jvm笔记

本文详细探讨了JVM的类加载机制,包括类加载器、类加载的生命周期以及双亲委派模型,阐述了双亲委派模型在防止安全问题和重复加载方面的优势。此外,介绍了JVM的内存分区模型,如堆区、方法区、虚拟机栈、本地方法栈和程序计数器等,并分析了各种垃圾收集算法如标记-清除、复制、标记-整理和分代收集。接着详细讲解了多种垃圾收集器的工作原理,包括Serial、ParNew、Parallel Scavenge、Serial Old和Parallel Old,以及CMS和G1收集器的特点和应用场景。G1收集器的亮点在于可预测的停顿时间和空间整合,同时讲解了G1的垃圾回收过程,包括新生代、老年代的并发标记以及混合回收。
摘要由CSDN通过智能技术生成
类加载类加载机制
类加载器
  1. BootStrapClassLoader(启动类加载器) : 负责加载java 的核心类库: lib\rt.jar等
  2. ExtensionClassLoader(扩展类加载器) : 加载扩展类库 : JAVA_HOME\lib\ext等
  3. ApplicationCalssLoader(应用程序加载器) : 加载用户路径下ClassPath下的类包
  4. 用户自定义加载器: 加载用户自定义的包下的类(例如: Tomcat)
类加载的生命周期

类加载的生命周期

加载: 通过io读入字节码文件(.class)

“加载”过程主要是靠类加载器实现的,包括用户自 定义类加载器。类加载过程的一个阶段,ClassLoader通过一个类的完全限定名查找此类字节码文件,并利用字节码文件创建一个Class对象(这也是类加载的终极目的)。

连接(可分为三个步骤):

  • 验证: 目的在于确保class文件的字节流中包含信息符合当前虚拟机要求,不会危害虚拟机自身的安全,主要包括四种验证:文件格式的验证元数据的验证字节码验证符号引用验证。
  • 准备:为static成员分配内存 1.7之前在方法区中,1.7之后在堆中,并且初始化 0 值
  • 解析:把常量池中的符号引用 --> 直接引用.

初始化:这是类加载的最后阶段: 调用类初始化方法的过程,完成对 static 修饰的类变量的手动赋值还有主动调用静态代码块。如果该类具有父类就进行对父类进行初始化,执行其静态初始化器(静态代码块)和静态初始化成员变量。(前面已经对static 初始化了默认值,这里我们对它进行赋值,成员变量也将被初始化)

然后就是: 使用卸载


双亲委派机制
源码
public Class<?> loadClass(String name) throws ClassNotFoundException {
   
        return loadClass(name, false);
    }
    //              -----??-----
    protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
   
            // 首先,检查是否已经被类加载器加载过
            Class<?> c = findLoadedClass(name);
            if (c == null) {
   
                try {
   
                    // 存在父加载器,递归的交由父加载器
                    if (parent != null) {
   
                        c = parent.loadClass(name, false);
                    } else {
   
                        // 直到最上面的Bootstrap类加载器
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
   
                    // ClassNotFoundException thrown if class not found
                    // from the non-null parent class loader
                }
 
                if (c == null) {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值