JVM详解(三)-- 运行时数据区:概述和线程

垃圾回收95%在java堆中,5%在方法区中(方法区是java虚拟机中的一个概念,具体的实现是“永久代”、“元空间”,其中元空间是JDK 8以后的实现,使用的是本地内存)

一个 JVM 实例对应一个 Runtime对象

线程

Java线程与本地线程

  1. 线程是一个程序里的运行单元。JVM 允许一个应用有多个线程并行执行。
  2. 在 Hotspot JVM 中,每个线程都与操作系统的本地线程直接映射。当一个 Java 线程准备好执行之后,此时一个操作系统的本地线程也同时创建。Java线程执行终止之后,本地线程也会回收。
    • 什么叫“线程准备好执行”。线程在执行前需要创建好自己的程序计数器、栈结构等。
  3. 操作系统负责所有线程的安排调度到任何一个可用的CPU上。一旦本地线程初始化成功,它就会调用Java线程中的run()方法。

JVM 系统线程

Hotspot 虚拟机中主要的后台线程:

  1. 虚拟机线程。这种线程的操作是需要JVM达到安全点才会出现。这些操作必须在不同的线程中发生的原因是他们都需要JVM到达安全点,这样堆才不会变化。这种线程的执行类型包括“stop the world”的垃圾收集,线程栈收集、线程挂起以及偏向锁的撤销。
  2. 周期任务线程。用于周期操作的调度执行。
  3. GC 线程。这种现成对在JVM里不同种类的垃圾收集行为提供了支持。
  4. 编译线程。这种线程在运行时会将字节码编译成本地代码。
  5. 信号调度线程。这种线程接收信号并发送给JVM,在它内部通过调用适当的方法进行处理。
原文地址:https://www.cnblogs.com/cleverziv/p/13911133.html