java之JVM各类机制整理

在我们讨论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载入。

原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容