JVM学习笔记(1)

来源:互联网 发布:路由器上mac是什么意思 编辑:程序博客网 时间:2024/06/04 19:29


1、JVM的生命周期

1)System.exit();

2)  程序执行完毕

3)异常终止

4)操作系统出错

2、类的加载,连接,初始化

1)加载:查找并加载类的二进制数据

将类的二进制数据读到内存中,并将其存在在运行时的方法区中,在堆内初始化java.lang.Class类 用来封装方法区中所有类的数据结构

加载方式:1)本地加载 2)网络加载 3)zip,jar 归档文件 4)数据库中动态生成的class 5)动态编译的class

2)连接

1)验证:确保类的正确加载

2)准备:将类中的静态变量分配到内存,初始化默认值

3)解析: 把类中的符号引用转为直接引用(符号引用为引用变量的引用,直接引用是直接变量的值 )

直接引用:直接使用指针地址

符号引用:有引用变量

3)初始化 : 为类的静态变量赋予正确的初始值(自上而下的给静态变量赋值)

3、jvm对类的使用有两个方式

1)主动使用

2)被动使用

4、JVM实现必须在每个类或接口被java程序“首次主动使用是”初始化他们

也就是说JVM首次主动使用 类和接口是,类和接口才被初始化

5、主动使用的6钟方式

1)实例化一个类

2)使用类的静态变量

3)使用类的静态方法

4)反射使用类

5)使用一个类的子类

6)JVM中表位启动类的 类,也就是main方法中包含的类

5、被动使用为非主动使用

6、类加载器(两种)

JVM自带的类加载器

1)根类加载器(Boottrap)  负责加载JVM的核心类库 java.lang.*

2)扩展加载器(Extension)【java类,ClassLoader的子类】 负责从 java.ext.dirs系统属性中指定的目录加载类库,或则是从jdk安装目录jre/lib/ext中加载类库

3)系统加载器(System)也是应用类加载器,默认父类为扩展类加载器 【java类,ClassLoader的子类】 负责从系统环境变量classpath或则是指定系统属性java.lang.classpath   (,; 表示当前环境路径)的目录加载类,它是用户自定义类加载器的默认父类

用户自定义的类加载器

父亲委托机制:类加载顺序一般是先由父类加载器开始如果没有在使用器子类加载器

1)继承ClassLoader的子类

2)如果某个类加载器能加载到一个类时则称为:定义类加载器

     定义类加载器及其所有子类加载器都是:初始类加载器

3)当生成定义类加载器实例时,没有指定父加载器,那么系统类加器会成为默认父加载器



0 0