您的位置:首页 > 编程语言 > Java开发

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 .........)在编译阶段会存入调用类的常量池中,本质上没有直接引用定义常量的类,因此不会触发该类的加载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: