Java虚拟机JVM
1、Java代码执行机制
1)编译
.java → 分析和输入到符号集 Parse and Enter → 注解处理 Annotation Procession → 语义分析和生成class文件Analyse and Generate → .class
Parse :词法分析、语法分析
Annotation Procession:处理自定义annotation
2)装载class
ClassLoader:Booksrap Class Loader、Extension Class Loader、System Class Loader、User-Defined Class Loader
类的加载、初始化、实例化过程
3)执行class
① 字节码解释执行(效率较低):1.指令解释执行 2.栈顶缓存 3.部分栈帧共享
② 编译执行:两种模式(client compiler、server compiler)
client compiler:C1,轻量级,少量性能开销,占用内存较少,适合桌面交互式应用
server compiler:C2,重量级,大量优化,占用内存较高,适合服务器端应用
③ 反射执行
2、JVM内存管理
1)JVM内存空间
方法区:存放加载的类信息、类中静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息
堆区:存储对象实例及数组值。堆是所有线程共享的,因此分配内存需要加锁,所以创建对象开销大
本地方法栈:用于支持native方法的执行
PC寄存器、JVM方法栈:每个线程均会创建
2)内存分配
堆上分配、TLAB分配、栈上分配
3)内存回收GC
① 收集器:引用计数器、跟踪计数器
引用计数器:对对象引用计数,但不适合关系复杂的语言(如Java),JDK也未采用这种方法
跟踪计数器:三种实现算法:复制Copying、标记-清除Mark-Sweep、标记-压缩Mark-Compact,JDK都采用此方式
② JDK中可用的GC
新生代可用GC(针对对象存活时间较短,大部分):1.串行Copying 2.并行回收Copying 3.并行Copying Minor GC触发机制及日志格式
旧生代可用GC(针对对象存活时间较长,小部分)::1.串行Mark-Sweep-Compact 2.并行Compaction 3.并发Mark-Sweep Full GC触发机制及日志格式
③ 内存状况分析
jconsole(JDK5自带)、JVisualVM(JDK6后)、JStat(JDK自带)、JMap(JDK自带)、JHat(JDK6自带)
3、线程资源同步和交互机制
1)线程资源同步
2)线程交互机制
3)线程状态及分析方法