JVM学习笔记
2018-04-03 10:40
211 查看
Java虚拟机与程序的生命周期
结束生命周期:
A) 执行System.exit()方法
B) 程序正常执行结束
C) 程序在执行过程中遇到异常或错误而异常终止
D) 由于操作系统出现错误而导致java虚拟机进程终止
加载:查找并加载类的二进制数据
连接:
验证:确保被加载的类的正确性
准备:为类的静态变量分配内存,并将期初始化为默认值
解析:把类中的符号引用转换为直接引用
初始化:为类的静态变量赋予正确的初始化
Java程序对类的主动使用
1. 创建类的实例
2. 访问某个类或者接口的静态变量,或者对该静态变量赋值
3. 调用类的静态方法
4. 反射(Class.forname)
5. 初始化一个类的子类
6. Java虚拟机启动时被标明为启动类的类
类的初始化
静态变量的声明语句,以及静态代码块都被看作类的初始化语句,java虚拟机会安装初始化语句在类文件中的先后顺序来一次执行
1. 假如这个类还没有被加载和连接,那就先进行加载和连接
2. 假如类存在直接的父类,并且这个父类还没有被初始化,那就先初始化直接的父类
3. 假如类中存在初始化语句,那就一次执行这些初始化语句
Final的静态变量还是常量,影响静态代码块是否执行
class FinalTest {
//public static final int x = 随机数;
publicstatic final int x = 6 / 3;
static{
sout.(“zz”);
}
}
main {
//打印zz
sout(FinalTest.x);// 不打印zz
}
类的初始化时机
当java虚拟机初始化一个类时,要求它所有的父类都已经被初始化,但是这条规则并不适用于接口。
1. 在初始化一个类时,并不会先初始化他所实现的接口
2. 在初始化一个接口是,并不会想初始化它的父接口
一个父接口并不会因为它的子接口或者实现类的初始化而初始化。只有当程序首次用特定的接口静态变量是,才会导致接口的初始化。
只有当程序访问的静态变量或者静态方法确实在当前类或者当前接口中定义是,才可以认为是对类或接口的主动使用
调用ClassLoader类的loadClass方法加载一个类,并不是对类的主动使用,不会导致类的初始化
结束生命周期:
A) 执行System.exit()方法
B) 程序正常执行结束
C) 程序在执行过程中遇到异常或错误而异常终止
D) 由于操作系统出现错误而导致java虚拟机进程终止
加载:查找并加载类的二进制数据
连接:
验证:确保被加载的类的正确性
准备:为类的静态变量分配内存,并将期初始化为默认值
解析:把类中的符号引用转换为直接引用
初始化:为类的静态变量赋予正确的初始化
Java程序对类的主动使用
1. 创建类的实例
2. 访问某个类或者接口的静态变量,或者对该静态变量赋值
3. 调用类的静态方法
4. 反射(Class.forname)
5. 初始化一个类的子类
6. Java虚拟机启动时被标明为启动类的类
类的初始化
静态变量的声明语句,以及静态代码块都被看作类的初始化语句,java虚拟机会安装初始化语句在类文件中的先后顺序来一次执行
1. 假如这个类还没有被加载和连接,那就先进行加载和连接
2. 假如类存在直接的父类,并且这个父类还没有被初始化,那就先初始化直接的父类
3. 假如类中存在初始化语句,那就一次执行这些初始化语句
Final的静态变量还是常量,影响静态代码块是否执行
class FinalTest {
//public static final int x = 随机数;
publicstatic final int x = 6 / 3;
static{
sout.(“zz”);
}
}
main {
//打印zz
sout(FinalTest.x);// 不打印zz
}
类的初始化时机
当java虚拟机初始化一个类时,要求它所有的父类都已经被初始化,但是这条规则并不适用于接口。
1. 在初始化一个类时,并不会先初始化他所实现的接口
2. 在初始化一个接口是,并不会想初始化它的父接口
一个父接口并不会因为它的子接口或者实现类的初始化而初始化。只有当程序首次用特定的接口静态变量是,才会导致接口的初始化。
只有当程序访问的静态变量或者静态方法确实在当前类或者当前接口中定义是,才可以认为是对类或接口的主动使用
调用ClassLoader类的loadClass方法加载一个类,并不是对类的主动使用,不会导致类的初始化
相关文章推荐
- JVM学习笔记(三)------内存管理和垃圾回收
- 【深入理解JVM】学习笔记——-1、JVM基本结构
- java之jvm学习笔记三(Class文件检验器)
- JVM学习笔记(八):类加载器以及双亲委派模型介绍
- java学习笔记___JDK___JRE___JVM区别___配置环境变量
- JVM学习笔记2 垃圾收集器与内存分配策略
- jvm学习笔记三--内存管理和垃圾回收
- JVM学习笔记之运行时数据区
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- JVM学习笔记
- JVM学习笔记二:JVM参数
- 【Java】深入理解JVM学习笔记(三) —— GC收集器和内存分配
- java学习笔记-java jvm内存结构分析
- JVM学习笔记:虚拟机的类加载机制
- 一份关于jvm内存调优及原理的学习笔记
- JVM学习笔记之二 -- 垃圾回收器
- JVM学习笔记(四)------内存调优
- java之jvm学习笔记五(实践写自己的类装载器)
- Java学习笔记—JVM内存
- 【JVM学习笔记一】JVM内存分布