JVM类加载之深入探究
本博客参考自http://1509221674.iteye.com/blog/2158485。
我们平时在Eclipse或者IDEA写一个java程序的时候,都是编辑器帮助我们自动完成编译,我们点击绿色按钮运行程序,整个过程遂心应手,但是你可曾想过你写的代码如何被编译?编译后的字节码又如何在运行的时候被加载到JVM(JAVA Virtual Machine)?
我们写的java代码要被JVM执行首先要被编译成.class的文件,这个文件是可以被JVM执行的字节码,也就是相当于1000111这种被JVM所识别的”机器语言“。那么我们的被编译好的class文件在运行的时候又是怎么被加载到JVM中呢?下面就结合一个例子进行说明。
首先看第一个例子:
class Shape { private int ShapeCommonValue = init("the ShapeCommonValue is inited"); private static int ShapeStaticValue = init("the ShapeStaticValue is inited"); static { init("the static block is executed"); } public Shape() { init("the construction of Shape is executed"); } public static int init(String out) { System.out.println(out + " the staticValue is " + ShapeStaticValue); ShapeStaticValue++; return ShapeStaticValue; } } public class Circle extends Shape { private static int CircleStaticValue = init("the CircleStaticValue is inited"); private int CircleCommonValue = init("the CircleCommonValue is inited"); public Circle() { init("the construction of Circle is executed"); } public static void main(String[] args) { Circle circle = new Circle(); } }
这个例子说明了子类和父类的初始化的过程,
首先JVM对Circle类进行加载时,发现有父类Shape
则JVM首先加载父类Shape 的.class文件
然后 对父类中静态资源进行初始化:先加载静态变量,后执行静态块
对子类的静态资源初始化
对父类Shap普通属性初始化
对父类构造方法的初始化
对子类成员属性的初始化
对子类构造方法的初始化
则运行程序后将验证以上过程:
相关推荐
JVM实战-JVM类加载机制案例分析
JVM类加载过程
讲解JVM的ClassLoader子系统原理.
深入Java虚拟机JVM类加载学习笔记:jvm java classloader 垃圾回收 gc
JVM类加载跟踪器,用于排查jar包冲突、类冲突、类版本冲突、NoClassDefFoundError、ClassNotFoundException 等等类加载相关问题的辅助工具
jvm 类加载机制 双亲委派模型 文档 jvm 类加载机制 双亲委派模型 文档
深入Java虚拟机_002_深入详解JVM之类加载器深度剖析、根、扩展及系统类加载器
JVM类加载器 test
由Java虚拟机自带的默认加载器(根加载器、扩展加载器、系统加载器)所加载的类在JVM生命周期中始终不被卸载。所以这些类的Class对象(我称其为实例的模板对象)始终能被触及!而由用户自定义的类加载器所加载的类会...
锁以及jvm类加载机制
Java虚拟机JVM类加载学习笔记
从JDK源码级别剖析JVM类加载机制
介绍Java类的加载机制,对于深入理解Java的深层原理很有帮助
JVM核心机制_深入类加载器_层次结构(三种类加载器)_代理加载模式_双亲委派机制
性能调优专题-jvm类加载机制-performance-jvmclassloader
深入解析jvm深入解析jvm深入解析jvm深入解析jvm深入解析jvm深入解析jvm
jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载
JVM 完整深入解析.pdf
坚持写博客第一周--java基础知识回顾--jvm类加载1(csdn)————程序
每个java开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是java技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是...