一:jvm 虚拟机类加载机制
来源:互联网 发布:淘宝刷流量软件排名 编辑:程序博客网 时间:2024/06/06 02:08
一:类的生命周期
加载-->(验证 -->准备 -->解析)
连接(以上统称为连接) -->初始化-->使用-->卸载
(1)加载,验证,准备,初始化和卸载这个五个阶段顺序是确定的。但也不是完全依次进行,应该说是互相交叉混合进行。解析阶段则不一定。
(2)类的初始化触发条件:
首次主动使用的情形:
- 创建某个类的新实例时--new、反射、克隆或反序列化;
- 调用某个类的静态方法时;
- 使用某个类或接口的静态字段或对该字段赋值时(final字段除外)
- 调用Java的某些反射方法时
- 初始化某个类的子类时
- 在虚拟机启动时某个含有main()方法的那个启动类。
除了以上几种情形以外,所有其它使用JAVA类型的方式都是被动使用的,他们不会导致类的初始化。
二:类加载器
Java虚拟机中类加载器:
Java虚拟机中可以安装多个类加载器,系统默认三个主要的类加载器,每个类负责加载特定位置的类:
BootStrap(启动类加载器),ExtClassLoader(扩展类加载器),AppClassLoader(应用程序类加载器)
类加载器也是Java类,因为Java类的类加载器本身也是要被类加载器加载的,显然必须有第一个类加载器不是Java类,这个正是BootStrap,使用C/C++代码写的,已经封装到JVM内核中了,而ExtClassLoader和AppClassLoader是Java类。
应用程序都是三个类加载器相互配合加载的,也可以加入自己定义的类加载器。
loadClass方法的源代码:
再来看一下loadClass(name,false)方法的源代码:在loadClass代码中也可以看到类加载机制的原理,这里还有这个方法findBootstrapClassOrNull,看一下源代码:就是检查一下name是否是否正确,然后调用findBootstrapClass方法,但是findBootstrapClass方法是个native本地方法,看不到源代码了,但是可以猜测是用Bootstrap类加载器进行加载类的,这个方法我们也不能重写,因为如果重写了这个方法的话,就会破坏这种委托机制。
参考书:深入理解jvm虚拟机
- JVM虚拟机类加载机制(一)
- 一:jvm 虚拟机类加载机制
- jvm虚拟机类加载机制
- JVM虚拟机类加载机制
- JVM虚拟机类加载机制
- JVM虚拟机加载类原理机制
- JVM之虚拟机类加载机制
- JVM虚拟机和类加载机制
- JVM虚拟机类加载机制(二)
- JVM的虚拟机类加载机制
- jvm(7)-虚拟机类加载机制
- JVM系列3:虚拟机类加载机制
- 细说JVM系列:虚拟机类加载机制
- jvm笔记5--虚拟机类加载机制
- JVM虚拟机类加载机制-过程
- jvm笔记05:虚拟机类加载机制
- JVM初窥: 虚拟机类加载机制
- JVM读书笔记之类虚拟机类加载机制
- USB总线专题(一)——基础知识
- 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误
- java 后台项目 上传文件放置路径
- Java:Hessian框架使用
- 创建守护进程
- 一:jvm 虚拟机类加载机制
- 自己写Linux Usb鼠标驱动程序
- Android中利用HttpURLConnection完成Get和Post请求
- pycharm快捷键及一些常用设置
- 从B 树、B+ 树、B* 树谈到R 树
- ORA-00119: invalid specification for system parameter LOCAL_LISTENER ORA-00132: syntax error or unre
- HTML基础学习-13- 颜色值属性定义
- |BZOJ 1651|差分序列|[Usaco2006 Feb]Stall Reservations 专用牛棚
- Appium 微信 webview 的自动化技术(转载)