JVM学习笔记二:运行时数据区概述及JVM线程

目录

概述

JVM各区域划分

JVM线程

线程的内存空间

JVM系统线程


概述

运行时数据区是JVM非常重要的组成部分,这一篇主要介绍运行时数据区各个区域的划分,以及JVM中的线程。

JVM各区域划分

学习JVM,必须牢记下图各个区域的分类,这很重要。

注意,上图的元数据区在JDK8以前常被称作“永久代”,本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分代收集至方法区,或者说用永久代来实现方法区而已。这样HotSpot的垃圾收集器可以像管理Java堆一样管理这部分内存,能省去专门为方法区编写内存管理代码的工作。但是这种设计方式以现在的眼光来看并不明智,所以在JDK8中移除了永久代,使用本地内存来实现这一区域,称作元空间。(出自《深入理解Java虚拟机》)

JVM线程

  • 线程是一个程序里的运行单元。JVM允许一个应用有多个线程并行的执行
  • 在Hotspot JVM里,每个线程都与操作系统的本地线程直接映射,当一个Java线程准备好执行以后,此时一个操作系统的本地线程也同时创建。Java线程执行终止后,本地线程也会回收。
  • 操作系统负责将线程安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run( )方法。
  • 如果一个线程抛异常,并且该线程是进程中最后一个守护线程,那么进程将停止。

线程的内存空间

其中的方法区和堆是所有线程共享的区域,而虚拟机栈、本地方法栈、程序计数器则是每个线程都具有的,线程私有的部分。其关系可用如下所示的图来表示:

JVM系统线程

  • 虚拟机线程:这种线程的操作是需要JVM达到安全点才会出现(这里所说的安全点要到后面的垃圾回收才会提及)。这些操作必须在不同的线程中发生的原因是他们都需要JVM达到安全点,这样堆才不会变化。这种线程的执行类型括"stop-the-world"的垃圾收集,线程栈收集,线程挂起以及偏向锁撤销。
  • 周期任务线程:这种线程是时间周期事件的体现(比如中断),他们一般用于周期性操作的调度执行。
  • GC线程:这种线程对在JVM里不同种类的垃圾收集行为提供了支持(重点,同样也是垃圾收集章节的内容)。
  • 编译线程:这种线程在运行时会将字节码编译成本地代码。
  • 信号调度线程:这种线程接收信号并发送给JVM,在它内部通过调用适当的方法进行处理。
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算不出来没办法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值