JVM(Java虚拟机)笔记
来源:互联网 发布:雷霆战机网络连接超时 编辑:程序博客网 时间:2024/04/29 05:36
JVM(Java虚拟机)笔记
ClassLoader(类加载器)
JVM关闭:System.exit()、正常结束、异常、系统底层错误,虚拟机进程中止
类加载顺序:
加载:二进制文件à内存的过程,方法区(封装类的数据结构)/堆区(Class对象,提供访问方法区数据结构的接口)
连接
(
验证:合并到虚拟机的运行环境,结构检查(.class文件的固定格式);语义(语法规定);字节码(安全检查);二进制兼容(相互引用之间协调一致,NoSuchMethodError)
准备:静态变量赋值类型初始值
解析:符号引用(引用其他类的方法)转变为直接引用(指针)
)
初始化(首次主动使用):赋自定的初始值;未加载和连接à加载连接;未初始化直接父类à初始化直接父类;存在初始化语句à依次执行初始化语句
(特殊情况:如果访问的是静态常量,此常量是编译常量,类不会初始化)
(特殊情况:虚拟机初始化一个类时,要求所有父类都初始化,初始化一个类时,不会初始化它所实现的接口,初始化一个接口,不会先初始化父接口)
(特殊情况:对于接口,首次使用特定接口的静态变量,才会初始化此接口)
(特殊情况:对父类主动使用,不会导致子类被初始化,eg,Object类)
(特殊情况:变量定义在父类,对子类主动使用,不初始化子类)
(特殊情况:loadClass方法加载一个类,不是主动使用,不会初始化)
主动使用(6种):创建实例、访问静态变量,调用静态方法,反射,初始化子类,设置启动类
JVM自带类加载器:
Bootstrap:c++实现,getClassLoader方法返回null
Extension:扩展类加载器
System(Application):系统类加载器
自定义
ClassLoader的子类
父亲委托机制
父子加载器的关系不是继承关系,是组合关系
定义类加载器:成功加载某类;初始类加载器:能返回Class引用的所有加载器
命名空间:由加载器和所有父加载器加载的类组成
运行时包:包名相同;定义类加载器一致的(eg,为了安全,防止java.lang.Liucheng和java.lang.*的情况发生)
类的卸载
类的Class实例和类加载器对象是双向关联。
Class实例和类加载器互不指向,类会被卸载。
- JVM(Java虚拟机)笔记
- Java虚拟机JVM学习笔记
- java的JVM(java虚拟机)学习笔记
- Java学习笔记 --- JVM(Java虚拟机)
- jvm开发笔记3---java虚拟机雏形
- JVM 学习笔记---Java虚拟机栈
- JVM学习笔记---Java虚拟机栈
- JVM相关笔记(深入理解Java虚拟机)
- JVM学习笔记之初识java虚拟机
- JVM虚拟机阅读笔记
- JVM(JAVA虚拟机介绍)
- JVM(JAVA虚拟机介绍)
- JVM(JAVA虚拟机介绍)
- JVM(JAVA虚拟机介绍)
- JVM(JAVA虚拟机介绍)
- JVM(JAVA虚拟机)
- Java虚拟机(JVM)
- JVM(JAVA虚拟机介绍)
- (4)
- trigger和triggerHander的区别
- UDP套接字编程
- 关于AndroidSDK配置时的tools目录下找不到adb.exe的错误
- UVA 11243 Texas Trip <三分 + 最大中求最小>
- JVM(Java虚拟机)笔记
- Codeforces 691E Xor-sequences【矩阵快速幂,好题】
- 最常用的10个Matlab快捷键,助你编程更高效
- 【arcgis】使用ArcGIS完成空间插值——趋势面分析法
- laravel中数据库迁移
- UVA-465 Overflow
- 小米手机edittext背景框显示为黑色是什么原因?
- 安卓学习笔记 本地相册或拍照获取图片
- Android ListView的局部刷新