运行时数据区及线程概述
JVM在运行时,在内存中开辟的存放数据的空间称为运行时数据区
运行时数据库可以分为两类
一类为线程私有,包括独立的程序计数器,虚拟机栈,本地方法栈
一类为线程共用,包括堆,堆外内存(永久代或元空间、代码缓存)(永久代与元空间可以认为是方法区落地的实现)
Runtime,一个JVM实例对应一个Runtime实例
线程:
线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行执行
在Hotspot中,JVM里, 每个线程都与操作系统的本地线程直接映射
Java中的线程调度由操作系统来负责,本地线程初始化成功后,它就会调用Java线程中的run方法
JVM系统线程:
除了main方法的线程以及main方法中创建的线程外,JVM系统也存在多个线程执行不同的任务
虚拟机线程:JVM达到安全点才会出现(保证堆不会变化),执行类型包括“stop-the-world”的垃圾收集,线程栈收集,线程挂起以及偏向锁撤销。
周期任务线程:该线程是周期时间的体现(如中断),他们一般用于周期性操作的调度执行。
GC线栈:为不同种类的垃圾收集行为提供了支持
编译线栈:在运行时将字节码编译成本地代码
信号调度线程:这种线程接受信号并发送给JVM,在它的内部通过调度适当的方法进行处理
JVM系列知识(持续更新)