ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JVM运行时数据区

2022-06-19 00:00:16  阅读:135  来源: 互联网

标签:Java 方法 虚拟机 线程 内存 JVM 数据 运行


 

 

 

程序计数器(线程私有),是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。

它的核心作用就是:用于存储下一条所要执行的 JVM 指令的内存地址。

每一条二进制字节码(JVM指令) 通过 解释器 转换成 机器码 然后 就可以被 CPU 执行了!
当 解释器 将一条jvm 指令转换成 机器码后 其会 向程序计数器 递交 下一条 jvm 指令的执行地址!
程序计数器在硬件层面 其实是通过 寄存器 实现的!
所以程序计数器的作用就是:用于保存JVM中下一条所要执行的指令的地址!
虚拟机栈

与程序计数器一样,虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是J ava 方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame),栈帧包含如下几个组成部分:

局部变量表:存放基本数据类型(boolean、byte、char、short、int、 float、long、double)、对象引用(reference)等。这些数据类型在局部变量表中的存储空间以局部变量槽(Slot)来表示,其中64位长度的 long 和 double 类型的数据会占用两个变量槽,其余的数据类型只占用一个。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小(这里说的“大小”是指变量槽的数量)。

操作数栈:也可以称之为表达式栈(Expression Stack),在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)和 出栈(pop)。某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈,使用它们后再把结果压入栈,比如:执行复制、交换、求和等操作。操作数栈,主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。操作数栈,主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。

本地方法栈

一些带有native 关键字的方法就是需要JAVA去调用本地的C或者C++方法,因为JAVA有时候没法直接和操作系统底层交互,所以需要用到本地方法!

堆是Java内存区域中一块用来存放对象实例的区域【几乎所有的对象实例都在这里分配内存】,

Java 堆(Java Heap)是 Java 虚拟机所管理的内存中最大的一块 Java 堆是被所有线程共享的一块内存区域。

Java堆既可以被实现成固定大小的,也可以是可扩展的,不过当前主流的Java虚拟机都是按照可扩展来实现的(通过参数-Xmx-Xms设定)。

如果在Java堆中没有内存完成实例分配,并且堆也无法再扩展时,Java虚拟机将会抛出OutOfMemoryError异常。

Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC 堆”(Garbage)。

-Xmx -Xms:JVM初始分配的堆内存由-Xms指定,64位的操作系统上,堆大小默认是物理内存的1/64

方法区

方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,

它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

1.6版本方法区是由PermGen永久代实现(使用堆内存的一部分作为方法区),

且由JVM 管理,由Class ClassLoader 常量池(包括StringTable) 组成。

1.8 版本后,方法区交给本地内存管理,而脱离了JVM,由元空间实现(元空间不再使用堆的内存,而是使用本地内存,即操作系统的内存),

由Class ClassLoader 常量池(StringTable 被移到了Heap 堆中管理) 组成。

 

标签:Java,方法,虚拟机,线程,内存,JVM,数据,运行
来源: https://www.cnblogs.com/2246781190zyc/p/16389673.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有