【JVM】3、运行时数据区概述及线程

1 运行时数据区内部结构

本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段

在这里插入图片描述

当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们的运行时数据区

在这里插入图片描述

运行时数据区与内存

  1. 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。

  2. 不同的JVM对于内存的划分方式和管理机制存在着部分差异。

  3. 我们通过磁盘或者网络IO得到的数据,都需要先加载到内存中,然后CPU从内存中获取数据进行读取,也就是说内存充当了CPU和磁盘之间的桥梁

2 JVM中的线程说明

  1. 线程是一个程序里的运行单元。JVM允许一个应用有多个线程并发地执行

  2. 在Hotspot JVM中,每个线程都与操作系统的本地线程直接映射
    当一个java线程准备好执行以后(准备线程独占的程序计数器,栈结构,缓存分配,本地存储等工作),此时一个操作系统的本地线程也同时创建。java线程执行终止后,本地线程也会回收,释放相应的资源。

  3. 操作系统负责安排所有线程到任意一个可用的CPU上。一旦本地线程初始化成功,它就会调用java线程中的run()方法

  4. 如果在执行线程的run()方法当中,出现了未捕获的异常导致java线程终止,而本地线程此时还没有终止,本地线程还需要再做一件事:决定JVM是否需要终止。这取决于当前线程是否是最后一个非守护线程。如果当前程序中只剩下守护线程,那么JVM就可以终止了

垃圾回收线程就是守护线程

JVM系统线程

后台会有很多正在运行的线程,不包括调用public static void main(String[] args)的main线程以及所有main线程自己创建的线程

这些主要的后台系统线程在Hotspot JVM中主要是以下几个:

  1. 虚拟机线程:这种线程的操作是需要JVM达到安全点才会出现。这些操作必须在不同的线程中发生的原因是他们都需要JVM达到安全点,这样堆才不会变化。这种线程的执行类型括"stop-the-world"的垃圾收集,线程栈收集,线程挂起以及偏向锁撤销

  2. 周期任务线程:这种线程是时间周期事件的体现(比如中断),他们一般用于周期性操作的调度执行

  3. GC线程:这种线程对在JVM里不同种类的垃圾收集行为提供了支持(重点)

  4. 编译线程:这种线程在运行时会将字节码编译成本地机器指令

  5. 信号调度线程:这种线程接收信号并发送给JVM,在它内部通过调用适当的方法进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值