首先感谢马士兵老师的讲解以及狂神的讲解让我受益匪浅
了解JVM
1. Java是怎么从编译到执行
ClassLoader 可以通过解释器也可能通过即时编译器JIT JIT(Just In Time)(执行次数较多的) JIT就是类似c语言中的exe,直接执行不需要解释(效率会高很多)
2. 什么是JVM
是Java Virtual Machine(是一种规范) JDK 包括 JRE 包括 JVM
3. 常见的JVM实现
Hotspot、Jrockit、J9、Microsoft VM、TaobaoVM、LiquidVM、azul zing…
好用的IDEA插件,看class文件
- BinEd观察ByteCode
- JClassLib
Class文件是如何加载的?
loading: 把字节加载到内存中
verification: 看是否符合JVM标准 preparation: 把静态变量赋默认值(例如int为0,引用为null) resolution: 常量池中的符号引用转换为内存地址
initializing: 静态变量赋初始值(就是该赋什么值赋什么值)
类加载器ClassLoader(双亲委派机制)
当类被加载到内存中时(二进制文件load到内存中) 同时产生一个该class的对象,这个对象指向load到内存中的class文件。以后访问class文件就通过这个对象来找
Bootstrap(根加载器): 加载lib/rt.jar等核心类 Extension(扩展加载器): jre/lib/ext/*.jar下的类 App(自己的类的加载器): 自己写的类classpath中的类 Custom ClassLoader(自定义加载器)
父加载器 不是 类加载器 的加载器(实际上是子加载器中有个成员是父加载器)
为什么类加载器用双亲委派? 原因: 主要是为了安全, 次要是为了防止资源浪费
|