`
不平凡的人
  • 浏览: 33079 次
  • 性别: Icon_minigender_1
  • 来自: 嘉峪关
社区版块
存档分类
最新评论

运行时数据区域

阅读更多

本文介绍内容如下:

一、运行时数据区域

二、各运行时数据区域特点

 

一、运行时数据区域

(1)线程共享:堆、方法区

(2)线程隔离:程序计数器、虚拟机栈、本地方法栈

 

二、各运行时数据区域特点

1、程序计数器

 (1)特点:

1⃣️程序计数器是一块较小的内存,可当作线程执行字节码的行号指示器;

2⃣️虚拟机概念模型,字节码解释器的工作通过改变计数器的值来选取下一条需要执行的字节码指令,分之、循环、跳转、异常处理、线程恢复等基础功能;

3⃣️线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程间计数器互不影响,独立存储

4⃣️此区域是唯一一个在Java虚拟机规范中没有规定任何OOM的区域

 

2、虚拟机栈

(1)特点

1⃣️虚拟机栈线程私有,它的生命周期与线程相同

2⃣️描述方法的执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口信息。方法执行完成,对应一个栈帧在虚拟机中入栈到出栈过程

3⃣️StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度抛出该异常

     OOM:如果虚拟机可以动态扩展,扩展时无法申请到足够的内存

 

3、虚拟机栈

与本地方法栈作用类似,虚拟机栈为虚拟机执行Java方法,本地方法栈则为虚拟机执行native方法服务。

 

4、堆

(1)特点:
1⃣️堆为线程共享的内存区域,虚拟机启动时创建;

2⃣️堆区域的唯一目的是为了存放对象的实例

3⃣️堆是垃圾收集器管理的主要区域,也被称为GC堆

4⃣️堆可细分为:新生代,老年代,再细致一点为eden,From Survivor,To Survivor.

5⃣️Java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可

6⃣️如果堆中没有内存完成实例分配,并且也无法再扩展时,会抛出OOM

 

5、方法区

(1)特点:

1⃣️线程共享,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据,别名“非堆”

 

(2)运行时常量池

1⃣️方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息时常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容在类加载后进入方法区运行时常量池;

2⃣️运行常量池具备动态性,并非预置入class文件中常量池的内容才能进入运行时常量池,利用String intern()方法运行期间可将新常量放入

3⃣️常量池无法再申请到内存时,会抛出OOM

 

(3)直接内存

1⃣️不是虚拟机运行时数据区域的一部分,也不是Java虚拟机规范中定义的内存区域,但是频繁被使用,也有可能导致OOM

 

分享到:
评论

相关推荐

    JVM 运行时数据区域,垃圾回收机制,类加载机制三大功能详解.docx

    运行时数据区域: 在运行时数据区里存储类Class文件元数据(方法区),对象和数组(堆),方法参数局部变量(栈)等。 垃圾回收机制: java 语言的优势之一就是它的自动内存管理,主要回收运行时数据区域的堆内存里的数据 ...

    Java虚拟机运行时数据区域汇总

    主要给大家介绍了关于Java虚拟机运行时数据区域的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    详解Java虚拟机管理的内存运行时数据区域

    主要介绍了详解Java虚拟机管理的内存运行时数据区域的相关资料,需要的朋友可以参考下

    03 运行时数据区概述及线程.pptx

    03 JVM 运行时数据区概述及线程的 PPT 重绘。讲述 Java 虚拟机 运行时数据区所处位置,结构划分,以及各个区域与线程的关系。

    jvm调优实战经验

    小池塘A(堆内存):JVM运行时数据区域,它为类实例和数组分配的内存。堆可以是固定大小的也可以是可变大小的。其中 Heap = {Old + NEW = { Eden , from, to } }。 小池塘B(非堆内存):包括所有线程之间共享的一个...

    eclipse.ini

    按照官方的说法:java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。 可以看出JVM主要管理...

    Java常见面试问题整理.docx

    运行时数据区域 线程私有: 1.程序计数器:它是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,唯一一个无OOM的区域。 2.Java虚拟机栈:描述...

    Java虚拟机

    2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java虚拟机栈 2.2.3 本地方法栈 2.2.4 Java堆 2.2.5 方法区 2.2.6 运行时常量池 2.2.7 直接内存 2.3 HotSpot虚拟机对象探秘 2.3.1 对象的创建 2.3.2 对象的...

    【精品】拉萨市——以数据驱动为核心的区域医疗数据中台54页.docx

    挖掘居民医疗服务需求、医疗健康产业运行和临床疾病诊疗等各个领域的潜在规律和态势,推进面向大卫生大健康的创新医疗服务体系不断完善。项目致力于数据的高效集成、深度融合,大力推进各类医疗健康服务行为数据化和...

    python通过高德多边形区域搜索获取区域内poi数据核心代码

    #encoding = utf-8 #本程序精致禁止用于商业活动仅供技术交流 #程序中**----**中的内容需要替换为自己...#程序可以获得信息,指定区域内,指定经营类型,终端门店信息 #程序可以循环运行,需要提供准确的对角经纬度坐标

    Java内存管理原理及内存区域详解

    Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如下图所示:  下面每一个区域进行阐述。  二、运行时数据区域  程序计数器  程序计数器,可以看做是当前线程所执行的字节码的行号指示器。在...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...

    JVM运行时数据区

    JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。其他的数据依赖于每一个线程,在线程创建的时候创建,在线程退出的时候销毁。

    与我一起学 JVM:Java 虚拟机内存组成概况

    与我一起学 JVM:Java 虚拟机内存组成概念前言Java 虚拟机内存划分运行时数据区域程序计数器Java 虚拟机栈局部变量表本地方法栈Java 堆方法区运行时常量池直接内存 前言 刚开始看《深入理解Java虚拟机》,文章主要就...

    基于数据挖掘的钢球磨煤机运行特性建模和优化

    利用火力电厂数据仓库中的128065条历史记录,对一台双进双出球磨机的煤粉磨制过程进行...给出的煤粉粉碎过程神经网络模型,不仅被大量实际运行数据所验证,而且模型推断与现有研究结论相符,是一个有良好概括性的健壮模型。

    中国城市地名及区域划分数据集.zip

    中国城市地名及区域划分数据集.zip中国城市地名及区域划分数据集.zip中国城市地名及区域划分数据集.zip中国城市地名及区域划分数据集.zip中国城市地名及区域划分数据集.zip中国城市地名及区域划分数据集.zip中国城市...

    认识JVM虚拟机

    JVM是什么 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的...程序执行期间使用各种运行时数据区域。其中一些数据区域是在Java虚拟机启动时

Global site tag (gtag.js) - Google Analytics