虚拟机结构-运行时数据区

作者:神秘网友 发布时间:2020-09-27 07:57:33

虚拟机结构-运行时数据区

虚拟机结构-运行时数据区

程序计数器(Program Counter Register

程序计数器是一个记录着当前线程所执行的字节码的行号指示器。这个内存区域有以下特点:

1. 线程隔离性,每个线程工作时都有属于自己的独立计数器; 2. 执行 java 方法时,程序计数器是有值的,且记录的是正在执行的字节码指令的地址; 3. 执行 native 本地方法时,程序计数器的值为空( Undefined )。因为 native 方法是 java 通过 JNI 直接调用本地 C/C++ 库,可以近似的认为 native 方法相当于 C/C++ 暴露给 java 的一个接口, java 通过调用这个接口从而调用到 C/C++ 方法。由于该方法是通过 C/C++ 而不是 java 进行实现。那么自然无法产生相应的字节码,并且 C/C++ 执行时的内存分配是由自己语言决定的,而不是由 JVM 决定的; 4. 程序计数器占用内存很小,在进行 JVM 内存计算时,可以忽略不计; 5. 程序计数器,是唯一一个在 java 虚拟机规范中没有规定任何 OutOfMemoryError 的区域;  

Java虚拟机栈Program Counter Register)和本地方法栈

虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时会创建一个栈帧用于存储局部变量、操作数栈、动态连接、方法出口等信息。本地方法栈和虚拟机栈比较相似,区别是虚拟机栈执行Java方法,本地方法栈为虚拟机使用到的Native方法服务。这个内存区域有以下特点:

线程隔离性;
这个区域会出现两种异常情况:
StackOverflowError:如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError;
如果虚拟机栈可以动态扩展,扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常;
 

方法区(Method Area

方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区也叫Non-Heap(非堆),在HotSpot虚拟机上,很多人也将方法区成为“永久代(Permanent Generation)”,原因是这个区域大部分情况下不会进行GC,即使对这个区域做了GC,回收的空间也很少。方法区中还有一个运行时常量池,用于存放编译期生成的各种字面量和符号引用。方法区域的特点如下:

1. 线程共享; 2. 当方法区无法满足内存分配需求时,将抛出 OutOfMemoryError 异常,比如 PermGen space Metaspace  

Java堆内存(Java Heap

Java堆是虚拟机中最大的一块内存,虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例。堆内存区域可以是固定大小的(通过-Xmx-Xms指定),也可以是动态扩展的。堆内存的特点有:

1. 线程共享; 2. 垃圾收集的主要区域,所以 Java 堆也成称为“ GC 堆” ; 3. 如果堆中没有内存分配给实例,并且也无法扩展时,会抛出 OutOfMemoryError 异常: Java heap space

 

直接内存

直接内存不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是会被频繁使用。NIONew input/output)是JDK1.4中新加入的类,引入了一种基于通道(channel)和缓冲区(buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过堆上的DirectByteBuffer对象对这块内存进行引用和操作。一般不会设置直接内存的大小,当各个区域内存总和大于物理内存时会出现OutOfMemoryError异常

         

虚拟机结构-运行时数据区相关教程

  1. 【亡羊补牢】挑战数据结构与算法 第34期 LeetCode 17. 电话号码

    【亡羊补牢】挑战数据结构与算法 第34期 LeetCode 17. 电话号码的字母组合(递归与回溯) 仰望星空的人,不应该被嘲笑 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

  2. 详细的图片安装教程——virtualbox安装Centos7 宿主机与虚拟机互

    详细的图片安装教程——virtualbox安装Centos7 宿主机与虚拟机互通 本文使用centos7来作为开发使用的linux,下面是截止本日期最新的centos7下载地址 http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso virtualbox的下载地址

  3. 【亡羊补牢】挑战数据结构与算法 第35期 LeetCode 22. 括号生成

    【亡羊补牢】挑战数据结构与算法 第35期 LeetCode 22. 括号生成(递归与回溯) 仰望星空的人,不应该被嘲笑 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例: 输入:n = 3输出:[ ((())), (()()), (())(),

  4. 数据结构与算法——二叉树、堆、优先队列

    数据结构与算法——二叉树、堆、优先队列 七、树 7.1.1 树的定义 树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如族谱、单位的组织架构、等等。 树是由n(n=1)个有限结点组成一个具有层次关系的集合。

  5. java 登录注册

    java 登录注册 存储结构还没弄好 package Main;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.

  6. 【亡羊补牢】挑战数据结构与算法 第36期 LeetCode 236. 二叉树的

    【亡羊补牢】挑战数据结构与算法 第36期 LeetCode 236. 二叉树的最近公共祖先(二叉树) 仰望星空的人,不应该被嘲笑 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖

  7. 调节阀的结构原理你知道多少呢

    调节阀的结构原理你知道多少呢 嗨,工控小管家来啦,今天不说废话直接上知识点!调节阀的结构原理你知道多少呢? 调节阀通常由电动执行机构或气动执行机构与阀体两部分共同组成。直行程主要有直通单座式和直通双座式两种,后者具有流通能力大、不平衡力小和操

  8. 访问VirtualBox Ubuntu 11.04虚拟机中的共享文件夹

    访问VirtualBox Ubuntu 11.04虚拟机中的共享文件夹 Have you installed Ubuntu 11.04 as a virtual machine in VirtualBox but have had problems getting the Shared Folders feature to work? We were able to add a shared folder, but were unable to ac