首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JVM内存分哪几个区,每个区的作用是什么?

JVM内存分哪几个区,每个区的作用是什么?

提问于 2021-10-01 01:43:00
回答 1关注 0查看 280

回答 1

Lansonli

提问者

修改于 2021-10-08 02:00:06

1) 方法区

a. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载

b. 方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据。

c. 该区域是被线程共享的。

d. 方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说 常量并不一定是编译时确定,运行时生成的常量也会存在这个常量池中。

2) 虚拟机栈:

a. 虚拟机栈也就是我们平常所称的栈内存,它为java方法服务,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。

b. 虚拟机栈是线程私有的,它的生命周期与线程相同。

c. 局部变量表里存储的是基本数据类型、returnAddress类型(指向一条字节码指令的地址)和对象引用,这个对象引用有可能是指向对象起始地址的一个指针,也有可能是代表对象的句柄或者与对象相关联的位置。局部变量所需的内存空间在编译器间确定

d. 操作数栈的作用主要用来存储运算结果以及运算的操作数,它不同于局部变量表通过索引来访问,而是压栈和出栈的方式

e. 每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的

动态连接.动态链接就是将常量池中的符号引用在运行期转化为直接引用。

3) 本地方法栈

本地方法栈和虚拟机栈类似,只不过本地方法栈为Native方法服务。

4)

java堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作。

5) 程序计数器:

内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数器完成。该内存区域是唯一一个java虚拟机规范没有规定任何OOM情况的区域。

和开发者交流更多问题细节吧,去 写回答
相关文章
JVM内存模型之方法区
概念 方法区是什么? 是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 什么是类信息:版本号、方法、接口 为何使用方法区? 内存中存放类信息、静态变量等数据、属于线程共享的一块区域 Hotspot虚拟机使用永久代来实现方法区 特点 并非数据进入了方法区就和永久代的名字一样“永久”存在了。这区域的内存回收目标主要是针对常量池的回收和对类型的卸载 方法区也会抛出OutofMemoryError,当它无法满足内存分配需求时
高大北
2022/06/14
1910
JVM内存模型之方法区
内容 主要用来存放已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。JDK8之前又被称为永久带 (Permanent Generation),JDK8永久带已被元空间 (MetaSpace)替代,虽然JDK1.7仍然保留永久带,但存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。
shengjk1
2018/10/24
4560
JVM内存模型——运行时数据区的特点和作用
java之所以发展到如今这个规模与生态呢很大程度上源于它的虚拟机,而内存管理又是虚拟机中的一个重要命题。可以说当JVM接手了内存管理的事宜之后呢,相对于C++手动控制管理内存,Java降低了开发者的门槛,也提高了程序的可维护性。那么JVM究竟是如何对内存进行管理的?
向着百万年薪努力的小赵
2022/12/02
6790
JVM内存模型——运行时数据区的特点和作用
内存四区之代码区,全局区,栈区和堆区
C++ 在程序执行时,将内存大致分为代码区,全局区,栈区和堆区四个区域。不同的区域存储不同的数据,赋予不同的生命周期,能够更灵活地进行编程。
呆呆
2021/07/05
2.3K0
堆、栈、方法区—JVM 内存模型分析
不论是正经或者不正经的程序猿要想变强不能光光变秃,你还必须掌握JVM相关的底层知识。
用户4464623
2020/09/10
5340
堆、栈、方法区—JVM 内存模型分析
Java中的内存映射缓存区是什么?
Java 中的内存映射缓存区(Memory-mapped buffer)是一种将文件或文件的一部分直接映射到程序内存中的技术。简单来说,内存映射缓存区允许 Java 程序在处理文件时像处理一个非常大的字节数组一样进行操作,而不用担心过多的 I/O 负担或频繁的磁盘访问。为了更好地理解内存映射缓存区,我将从底层实现和使用场景两个方面进行说明。
用户1289394
2023/08/22
4010
Java中的内存映射缓存区是什么?
JVM--堆区
Java堆是虚拟机所管理的内存中最大的一块,此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这块区域是“线程共享”的。
SuperHeroes
2019/03/12
5730
JVM元数据区
元数据区的概念出现在Java8以后,在Java8以前成为方法区,元数据区也是一块线程共享的内存区域,主要用来保存被虚拟机加载的类信息、常量、静态变量以及即时编译器编译后的代码等数据。
shysh95
2020/07/21
1.5K0
JVM元数据区
JVM-方法区
方法区概述 《Java虚拟机规范》中明确说明:"尽管所有额方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会去进行垃圾收集或者进行压缩",但是对于HotspotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆区分开,所以,方法区看做是一个独立于Java堆的内存空间
是小张啊喂
2023/02/21
3490
JVM运行时数据区-方法区
JVM运行时数据区-方法区 方法区和Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、域信息、方法信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做Non-Heap(非堆),目的应该是与Java堆区分开来。很多人都更愿意把方法区称为“永久代”(Permanent Generation)。从jdk1.7已经开始准备“去永久代”的规划,jdk1.7的HotSpot中,已经把原本放在方法区中的静态变量、字符串
晓果冻
2022/09/08
3710
JVM运行时数据区-方法区
JVM性能调优-Java内存区域⽅法区
简介:JVM内存模型之⽅法区 1.是什么? 是各个线程共享的内存区域,它⽤于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 什么是类信息:类版本号、⽅法、接⼝ 2.为什么? 内存中存放类信息、静态变量等数据,属于线程共享的⼀块区域 Hotspot使⽤永久代来实现⽅法区 JRockit、IBM J9VM Java堆⼀样管理这部分内存 3.特点 并⾮数据进⼊了⽅法区就如永久代的名字⼀样“永久”存在了。这区域的内存回收⽬标主要是针对常量池的回收和对类型的卸载 ⽅法区也会抛出OutofMe
cwl_java
2019/12/20
3670
JVM解读-方法区
方法区,Method Area, 对于习惯在HotSpot虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区称为“永久代”(Permanent Generation),本质上两者并不等价,仅仅是因为HotSpot虚拟机的设计团队选择把GC分代收集扩展至方法区,或者说使用永久代来实现方法区而已。对于其他虚拟机(如BEA JRockit、IBM J9等)来说是不存在永久代的概念的。
高广超
2018/12/12
9090
JVM-方法区
ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及独立会话管理
utopia
2023/03/21
3220
JVM-方法区
jvm之方法区演变及方法区的GC解读
首先明确:只有Hotspot才有永久代。BEA JRockit、IBMJ9等来说,是不存在永久代的概念的。原则上如何实现方法区属于虚拟机实现细节,不受《Java虚拟机规范》管束,并不要求统一
一个风轻云淡
2023/10/15
2360
jvm之方法区演变及方法区的GC解读
JVM 架构 : 运行时数据区 & 内存结构
Class loader is a subsystem in JVM, which is primarily responasible for loading the java classes, there are 3 different class loaders :
一个会写诗的程序员
2021/12/16
3740
JVM 架构 : 运行时数据区 & 内存结构
JVM内存—堆(heap)栈(stack)方法区(method) (转)
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
翎野君
2023/05/12
4720
JVM内存—堆(heap)栈(stack)方法区(method)  (转)
JVM 的运行数据区
 栈空间里存放的是局部变量表,动态链接,操作数栈,以及是方法的出口;每个栈帧都会随着方法的开始和结束相应的出栈和入 栈;
矿泉水
2018/05/11
6771
JVM 的运行数据区
JVM运行时数据区和各个区域的作用
JVM在执行JAVA程序时会把它管理的内存区域划分为若干个不同的数据区域,统称为运行时数据区,由图可见JVM程序所占的内可划分成5个部分:程序计数器、虚拟机栈(线程栈)、本地方法栈、堆(heap)和方法区(内含常量池),其中方法区和堆被所有线程共享。下面分别介绍各部分的功能:
allsmallpig
2021/02/25
1.3K0
jvm回收方法区
很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低
earthchen
2020/09/24
6160
jvm之方法区解读
官方文档:Chapter 2. The Structure of the Java Virtual Machine
一个风轻云淡
2023/10/15
2480
jvm之方法区解读

相似问题

相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
到家集团 | 技术VP擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档