python类加载机制_java之JVM各类机制整理
python转java代码在我们讨论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各类机制整理,前两种机制有点类似⽗类和⼦类,当类加载机制⽆法处理时,就会交给双亲委派机制。⼤家看完本篇后,要加强内容⽅⾯的理解。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论