java虚拟机类加载
2014-04-28 16:51
232 查看
类加载就是java虚拟机将类的数据从class字节码文件中加载到内存,并对数据进行校验、转换解析和初始化,最终形成java虚拟机可以直接使用的java类型,与那些在编译时候需要进行链接工作的语言不同,java语言中,类的加载和链接都是在程序运行过程中进行的。虽然增加了额外的开销,但是却增加了java程序的灵活性。
有且只有四种情况会会触发类加载:
(1)遇到new getstatic putstatic invokestatic 这四条字节码指令如果类没有加载需要将其加载
(2)使用Java.long.reflect包的方法对类进行反射调用的时候,如果类没有进行初始化需要将其加载
(3)当调用一个类的时候,如果其父类没有初始化,需要触发父类的加载
(4)当虚拟机启动的时候,需要用户指定一个要执行的主类(包含Main方法的那个),虚拟机会首先加载这个类
除此之外所有引用类的方式都不会被初始化,称为被动引用
以下三种情况不会触发类的加载:
(1)通过子类引用父类的静态字段不会触发子类的加载
(2)通过数组定义引用类,不会触发此类的初始化
(3)常量(例如:static final .........)在编译阶段会存入调用类的常量池中,本质上没有直接引用定义常量的类,因此不会触发该类的加载
有且只有四种情况会会触发类加载:
(1)遇到new getstatic putstatic invokestatic 这四条字节码指令如果类没有加载需要将其加载
(2)使用Java.long.reflect包的方法对类进行反射调用的时候,如果类没有进行初始化需要将其加载
(3)当调用一个类的时候,如果其父类没有初始化,需要触发父类的加载
(4)当虚拟机启动的时候,需要用户指定一个要执行的主类(包含Main方法的那个),虚拟机会首先加载这个类
除此之外所有引用类的方式都不会被初始化,称为被动引用
以下三种情况不会触发类的加载:
(1)通过子类引用父类的静态字段不会触发子类的加载
(2)通过数组定义引用类,不会触发此类的初始化
(3)常量(例如:static final .........)在编译阶段会存入调用类的常量池中,本质上没有直接引用定义常量的类,因此不会触发该类的加载
相关文章推荐
- java虚拟机类加载机制
- Java虚拟机类加载
- Java虚拟机如何加载Class文件
- java虚拟机加载机制(笔记)
- JAVA虚拟机类加载过程
- Java虚拟机学习(10):类加载器(ClassLoader)
- java虚拟机类加载机制
- 当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构
- Java虚拟机学习 - 类加载机制
- Java虚拟机(五):虚拟机类加载机制
- Java虚拟机学习(10):类加载器(ClassLoader)
- Java虚拟机9:Java类加载机制
- Java虚拟机类加载机制个人总结
- Java虚拟机学习 - 类加载器(ClassLoader)
- Java虚拟机类加载机制
- Java虚拟机:类加载机制详解
- Java虚拟机学习(3): 类加载机制
- Java虚拟机类加载器之------类与类加载器
- Java虚拟机 类加载机制2
- Java虚拟机类加载机制——案例分析