目录
一、内容导图
二、运行时数据区概述
2.1 在 JVM 中的位置
- 运行时数据区主要描述 JVM 内存申请、分配、管理等策略。
2.2 经典布局图
- 各种 JVM 的运行时数据区存在差异,最大的区别就是方法区。
2.3 阿里运行时数据结构图
- JDK 1.8 开始, 方法区更名为元空间(或元数据区)。
- 各种版本中,对代码缓存也不一样,有些建议将它与元数据区放在一起。
2.4 数据区域与线程
- 线程私有(灰色)
与线程一一对应,随线程开始创建,线程结束时销毁。 - 进程共用(红色)
同一 JVM 实例中线程共享,随虚拟机启动而创建,随虚拟机退出而销毁。
2.5 Runtime 类
Class Runtime:
- 每个 JVM 实例对应一个 Runtime 类的实例,及运行时环境,相当于内存结构中的运行时环境。
- Runtime 实例可以通过 Runtime.getRuntime() 方法获取。它是单例的。
- 一些使用示例
Runtime runtime = Runtime.getRuntime();
System.out.println("total memory : " + runtime.totalMemory()/(1024*1024) + "M");
System.out.println("max memory : " + runtime.maxMemory() /(1024*1024) + "M");
System.out.println("free memory : " + runtime.freeMemory() /(1024*1024) + "M");
System.out.println("Main Done //~~");
total memory : 230M
max memory : 3403M
free memory : 226M
Main Done//~~
runtime.gc();
// 启动一个记事本, 5秒后关闭.
Process process = runtime.exec("notepad");
Thread.sleep(1000*5);
process.destroy();
三、线程简介
3.1 简介
- 线程是一个程序运行单元,JVM 允许一个应用有多个线程并行的执行
- 在 HotSpot JVM 里,每个线程都与操作系统本地线程直接映射。
- 当一个 Java 线程准备好执行以后,此时一个操作系统的本地线程也同 时创建。
- Java 线程执行终止后,本地线程也会回收
- 操作系统负责所有线程的安排调度到可用CPU上, 一旦本地线程初始化成功,它就会调用 Java 线程中的 run()方法
3.2 HotSpot 中主要的后台系统线程:
- 虚拟机线程:这种线程的操作是需要 JVM 达到安全点才会出现,这些操作必须在不同线程中发生的原因是他们都需要 JVM 达到安全点。这样堆才不会变化。这种线程的执行类型包括“stop-the-world”的垃圾回收线程、线程栈收集、线程挂起以及偏向锁撤销
- 周期任务线程:这种线程是周期事件的体系(比如中断),他们一般用于周期性操作的调度执行
- GC 线程:对在 JVM 里不同种类的垃圾收集行为提供支持
- 编译线程:在运行时将字节码编译成本地代码
- 信号调度线程:接收信号并发送给 JVM,在它内部调用适当方法进行处理
系列学习
画图学JVM (一)相关资料和学习计划 《硅谷2020最新版宋红康JVM》
画图学JVM (二)章节目录
画图学JVM (三)01 JVM 与 Java 体系结构
画图学JVM (四)02 类加载子系统
画图学JVM(五) 03 运行时数据区概述和线程
画图学JVM(六) 04 程序计数器
附件
《尚硅谷2020最新版宋红康JVM》01 JVM 与 Java 体系结构 学习记录 PPT
《尚硅谷2020最新版宋红康JVM》02 类加载子系统 学习记录 PPT
《尚硅谷2020最新版宋红康JVM》03 运行时数据区概述和线程 PPT
《尚硅谷2020最新版宋红康JVM》04 程序计数器 PPT
《尚硅谷2020最新版宋红康JVM》推荐的资料和工具集.