JVM3:JVM运行时数据区概览

一、运行时数据区

1、运行时数据区主要时存放再内存中的

  • 内要是否非常重要的资源,是硬盘和cpu的中间仓库和桥梁,承载着操作系统和应用程序的实时运行。
  • JVM内存布局规定了Java再运行坑所称内要深刻、分配、管理的策略,保证了JVM的高效稳定运行。
  • 不同的JVM对内存的划分方式和管理机制存在部分差异,结合JVM虚拟机规范,来探讨经典JVM的内存布局。

2、运行时数据区的布局图

在这里插入图片描述

二、运行时数据的分类

1、线程相关的

1. 与线程对应的数据区随着线程的开始和结束而创建和销毁
2. 每个线程包含的: 包含程序计数器、栈、本地栈
3. 线程时一个程序的运行单位,JVM允许一个应用又多个线程并行执行的。
(1)PC计数器(Program Counter Register)

PC计数器(Program Counter Register): 一块很小的内存空间,存储了下一条需要执行的(JVM汇编)字节码指令的地址。

JVM多线程时通过线程轮询并分配执行时间的方式来实现的,在任何一个确定的时间片,JVM只会执行其中一条指令,每个线程的PC记录当前线程要执行的指令。

所以每个线程都会有自己PC计数器,线程之间不会互相影响,如果当前线程执行的时Java方法,PC计数器记录的正在执行的虚拟机字节码指令的地址,如果执行的Native Method,则PC为空。

(2)虚拟机栈(VM Stack)

虚拟机栈(VM Stack):线程调用Java方法的时候,会为每一个方法创建一个栈帧,来存储局部变量表、操作栈、动态链接、方法返回地址等信息。

所以虚拟机栈中存放的元素是栈帧(stack frame),虚拟机栈归线程私有的,生命周期和线程的生命周期相同。

每个方法的调用和完成,都对应者一个栈帧从虚拟机栈中入栈和出栈的过程。

(3) 本地方法栈(Native Method Stack)

本地方法栈(Native Method Stack): 为线程私有,功能的方法都和虚拟机栈相似,主要是用来储存调用本地方法时,本地方法的局部变量表、操作数栈等信息。

2、进程相关的(所有线程共享的数据区)

-  Java虚拟机定义了若干种 程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁
-  堆、堆外内存(永久代、或元空间、代码缓存)(线程共享的)
(1)堆(Heap)

堆(Heap): Java Heap区被所有线程共享,在虚拟机启动的时候创建,功能就是存放对象,几乎所有的对象实例都时在堆空间分配内容的,是垃圾回收器管理的主要区域

(2)元空间(Metaspace)

元空间(Metaspace):元空间是Java 8开始后的名称,Java 7之前称为方法区(Method Area),是所有线程共享的,用于存储被虚拟机创建的类信息、常量、静态变量、即时编译器编译出来的代码等数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值