JVM类加载机制
2016-07-12 10:15
190 查看
问题
1、为什么要有类加载机制(类加载机制的意义是什么)2、类加载机制的过程,这些步骤可以颠倒顺序么?,每个步骤的作用是什么?
3、什么情况下必须对类进行初始化
类加载的过程
加载——验证——准备——解析——初始化——使用——卸载准备
虚拟机在准备阶段为类变量(static修饰)分配内存,并设置类变量的初始值。这些内存是在哪里分配的?堆里?答案是方法区。而实例变量则是在初始化阶段随对象一起分配在堆内存。而且这里要注意private static int a = 1;在准备阶段,a为0而不为1,在初始化阶段,a才被赋为1
解析
解析阶段是将 常量池中的符号引用替换为直接引用初始化
遇到下列4种情况,必须对类进行初始化(1)有new、getstatic、putstatic、invokestatic
(2)反射调用时,如果类没有初始化,就必须首先对类初始化
(3)初始化一个类时,如果父类没有被初始化,就首先对父类进行初始化。
(4)虚拟机启动时需要指定一个主类(main方法所在的类),虚拟机必须首先对其初始化
类加载器
启动类加载器(Bootstrap CLassLoader)
无法被Java程序直接引用。它属于JVM内部使用的类加载器,既没有上级类加载器,也没有下级类加载器,因此不遵守ClassLoader的上级委托机制,只能算是JVM的一个类加载工具。扩展类加载器(Extension CLassLoader)
应用程序类加载器(Application CLassLoader)
相关文章推荐
- vfork和fork区别
- Source Insight基本使用和快捷键
- vs2013 监视变量显示未定义标识符的问题
- 你还在用开源控件的下拉刷新吗?你out了,试一试官方的下拉刷新SwipeRefreshLayout
- sklearn源码解析:ensemble模型 零碎记录;如何看sklearn代码,以tree的feature_importance为例
- libiconv.dylib not found in Xcode7 GM
- JS和JSP的区别
- git基本命令
- Vue.js学习
- 详解SPI中的极性CPOL和相位CPHA
- Java Split以竖线作为分隔符
- server 2008下面80端口被pid为4的进程占用
- 项目之——利用json实现序列化与反序列化
- 【HDU】5491 The Next(2015 ACM/ICPC Asia Regional Hefei Online)
- 修改android 睡眠的时间的两种方法
- Python学习笔记:Python函数
- openoffice windows服务安装
- hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释
- runtime的那点事儿(二)消息机制
- 指针与变量