• 技术文章 >java >java基础

    java之JVM各类机制整理

    小妮浅浅小妮浅浅2021-01-26 17:41:31转载3657

    在我们讨论java的基础部分时,大家都有用过jdk这个工具包,同时还会讲到另一个重要概念jvm。从名称上我们翻译一下,就是虚拟的计算机。对于jvm模块的内容比较难懂,所以我们可以先从它的一些机制入手:类加载双亲委派全盘负责委托机制。下面就这些机制分别带来讲解。

    1.类加载机制

    分为加载、验证 、准备 、解析 、初始化、 使用 、卸载。

    1)加载

    在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象 等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口 。

    2)验证

    校验字节码文件的正确性

    3)准备

    给类的静态变量分配内存,并赋予默认值

    4)解析

    将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()方法)替换为指向数据 所存内存的指针或句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程 序运行期间完成的将符号引用替换为直接引用,下节课会讲到动态链接 。

    5)初始化

    2.双亲委派机制

    对类的静态变量初始化为指定的值,执行静态代码块。

    应用程序类加载器AppClassLoader加载类的双亲委派机制源码,AppClassLoader的loadClass方法最终会调用其父类ClassLoader的loadClass方法,该方法的大体逻辑如下:

    首先,检查一下指定名称的类是否已经加载过,如果加载过了,就不需要再加载,直接返回。

    如果此类没有加载过,那么,再判断一下是否有父加载器;如果有父加载器,则由父加载器加载(即调用parent.loadClass(name, false);)。或者是调用bootstrap类加载器来加载。

    如果父加载器及bootstrap类加载器都没有找到指定的类,那么调用当前类加载器的findClass方法来完成类加载。

    3.全盘负责委托机制

    “全盘负责”是指当一个ClassLoder装载一个类时,除非显示的使用另外一个ClassLoder,该类所依赖及引用的类也由这个ClassLoder载入。

    以上就是java之JVM各类机制整理,前两种机制有点类似父类和子类,当类加载机制无法处理时,就会交给双亲委派机制。大家看完本篇后,要加强内容方面的理解。

    专题推荐:java jvm机制
    上一篇:java orm的原理分析 下一篇:java反射方式创建实例

    相关文章推荐

    • java基础中JRE、JDK、JVM是什么?• java中jdk的安装• java之jdk环境的设置方法• java的jdk是什么• java迭代器的基本概念• java迭代器iterator是什么意思• java迭代器原理分析

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网