2.4 KiB
2.4 KiB
JVM 运行机制
- Java 源文件被编译器编译为字节码文件
- JVM 将字节码文件编译为相应操作系统的机器码
- 机器码调用相应操作系统的本地方法库执行相应方法
JVM 后台运行线程
- 虚拟机线程:虚拟机线程在 JVM 达到安全点时出现
- 周期性任务线程:通过定时器调度线程来实现周期性操作的执行
- GC 线程:GC 线程支持 JVM 中不同的垃圾回收活动
- 编译器线程:运行时将字节码动态编译成本地平台机器码,是 JVM 跨平台的具体体现
- 信号分发线程:接收发送到 JVM 的信号并调用 JVM 方法
JVM 内存区域
线程私有
用于存储当前运行线程所执行的字节码行号指示器,执行 Native 方法则为空(Undefined),唯一无内存溢出问题区域
存储局部变量表,操作数栈,动态连接,方法出口等,描述Java方法的执行过程
为Native方法服务
线程共享
-
存储常量,静态变量,类信息,即时编译器编译后的机器码,运行时常量池
也叫对外内存, 不是 JVM 运行时数据区的一部分,NIO 模块提供对应的操作,可通过堆外内存避免 Java 堆与 Native 堆来回复制数据的性能和资源消耗,高并发场景下广泛使用
4 种引用类型
把一个对象赋值给一个引用变量,强引用对象一定为可达性状态,不会被垃圾回收
只有在系统内存不足时会被回收
只要垃圾回收就一定会被回收
和应用队列联合使用,主要用于跟踪对象的垃圾回收状态,仅仅是为了被回收时获得一个通知
新生代
- Serial收集器,单线程复制算法
- ParNew,多线程复制算法
- Parallel Scavenge,多线程复制算法
老年代
- CMS,多线程标记清除算法
- Serial Old, 单线程标记整理算法
- Parallel Old,多线程标记整理算法
Garbage First,多线程标记整理算法
网络编程模型
阻塞 I/O
非阻塞 I/O
多路复用 I/O
信号驱动 I/O
异步 I/O