首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
说说你了解的JVM内存模型
[问答题]
说说你了解的JVM内存模型
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(316)
分享
纠错
91个回答
添加回答
44
十七_
类加载子系统:根据全限定名来载入类; 执行引擎:执行那些被载入类的方法的指令; 运行时数据区:在程序运行时,存储程序的内容,例如:字节码、对象、参数、返回值等。运行时数据区又分为方法区、堆、栈、程序计数器
发表于 2022-04-26 15:19:41
回复(0)
23
糊涂的布莱克顶呱呱
这说的不是内存结构吗?内存模型不应该是多线程相关的吗,像工作内存、主内存
编辑于 2022-09-20 23:43:30
回复(0)
20
牛客461097395号
JVM由三部分组成:类加载子系统、执行引擎、运行时数据区 1、类加载子系统:可以根据指定的全限定名来载入类或接口。 2、执行引擎:负责执行那些包含在被载入类的方法中的指令。 3、运行时数据区:分为方法区、堆、虚拟机栈、本地方法栈、程序计数器。当程序运行时,JVM需要内存来存储许多内容,例如:字节码、对象、参数、返回值、局部变量、运算的中间结果等,把这些东西都存储到运行时数据区中,以便于管理。
发表于 2022-05-01 17:15:50
回复(0)
16
沉默之Sword
别误导人行吗,问的是内存模型,不是JVM结构;我来: 线程私有区 - 程序计数器:保存程序执行的行号,占用小 - 本地方法栈:保存线程本地的native方法信息 - JVM栈: - 局部变量表:保存实例方法的this对象,方法参数,方法中的局部变量 - 操作数栈:临时保存变量 - 栈帧: - 动态链接:字节码中符号引用的编号到内存地址的映射关系 - 方法出口:该方法执行结束后要跳转到的下一条指令的地址 - 异常表:异常捕获的生效范围和发生异常后程序要跳转的指令的位置 共享内存区 - 堆区:字符串常量池(管理字符串),共享变量(全局变量) - 方法区:运行时常量池(管理基本数据类型),类的元信息(.class文件信息)
发表于 2024-05-21 11:19:37
回复(2)
7
Chaos1874
1:类装载子系统:主要通过类的全限定名来加载类 2:字节码执行引擎:是用于执行被载入类的方法的指令。 3:运行时数据区:主要包括虚拟机栈(又叫线程栈,每有一个线程就会创建一个线程栈,主要存储用于线程操作的数据,分为局部变量表,操作数栈,动态链接和方法出口),本地方法栈(和虚拟机栈类似,它主要用于存储本地方法中的一些相关数据),程序计数器(用于记录正在执行的虚拟机字节码指令的位置或地址),堆(主要用于存储创建出来的对象,是垃圾回收的主要区域)和方法区(存储已经被加载的类信息,常量,静态变量等,也是垃圾回收的主要区域);
发表于 2022-05-12 10:43:18
回复(0)
3
岑溪123
JVM内存模型包括:程序计数器、本地方法栈、虚拟机栈(栈区)、方法区(元空间)和堆(注:都存放在运行时数据区中)。程序计数器、虚拟机栈、本地方法栈是每个线程所独有的。程序计数器存放的是下一条要执行的指令的地址 。本地方法栈存放的是native方法。虚拟机栈中每调用一个方***创建一个栈帧,存放的是局部变量、方法等。堆存放的是对象和数组。方法区存放的是静态变量、常量、常量池等。
编辑于 2023-05-16 14:03:11
回复(0)
3
牛客732147750号
内存模型由类加载子系统,运行时数据区,执行引擎,本地库接口组成,运行时数据区又分为 方法区,堆, 虚拟机栈,本地方法栈,程序计数器。 其中栈,程序计数器是单线程独享的内存,随线程创建和销毁而存在,销毁。执行引擎执行那些被载入类的方法的指令;方法区和堆是线程之间共享的内存区域,
发表于 2022-06-06 16:36:49
回复(0)
3
阐禅
JVM由三部分组成:类加载子系统,执行引擎,运行时数据区。 类加载子系统可以根据限定名来加载类或者接口。包括加载(选择类加载器),链接(准备,验证,解析),初始化 执行引擎负责执行哪些包含在被载入类的方法中的指令,主要充当高级语言和机器语言的翻译,主要包括编译器和解释器。 运行时数据区用来存储程序运行时用到的许多内容,字节码,对象,参数,返回值,局部变量,运算的中间结果等等。运行时数据区主要包括五个部分:堆,方法区,程序计数器,本地方法栈,虚拟机栈。
发表于 2022-05-07 15:00:09
回复(0)
2
YYDiS-YL
类加载子系统:根据全限定名来载入类; 执行引擎:执行那些被载入类的方法的指令; 运行时数据区:在程序运行时,存储程序的内容包括字节码,返回值,对象等,它又被分为堆,栈,方法区,本地方法栈和pc,只有堆和方法区是线程共享的内存区域,其他都是线程私有的区域;在jvm内存调优时,只有在堆区域中调优。堆存放new的对象和数组,栈存放对象的引用和基本的数据类型,方法区存放是常量,类模板class和静态变量。本地方法栈是调用本地接口JNI,pc是就是一个指针,指向方法区中的方法字节码。
发表于 2023-02-28 15:38:26
回复(0)
1
程序员小假
程序计数器
:一块较小的内存空间,字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,
在多线程环境下,当一个线程的时间片用完,CPU 会切换到另一个线程。为了之后能切回来并正确恢复到上次执行的位置,每个线程都需要一个独立的程序计数器。
Java 虚拟机栈:
描述的是 Java 方法执行的内存模型。每个方法在执行的同时都会创建一个栈帧
,
用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
本地方法栈:
它与 Java 虚拟机栈的作用非常相似。区别在于:Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。
Java 堆:
这是 JVM 所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例
。
几乎所有的对象实例以及数组都在这里分配内存。线程共享,因此是垃圾收集器管理的主要区域。Java 堆中经常被细分为:新生代,新创建的对象首先在这里分配。它又分为:Eden 区,Survivor 0 区,Survivor 1 区;老年代:在新生代中经历多次垃圾回收后仍然存活的对象,会被移动到老年代;永久代 / 元空间:这是方法区的实现,逻辑上属于堆的一部分,但物理上可以不连续。
方法区:
用
于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
运行时常量池:
它是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。
发表于 2025-11-18 15:42:56
回复(1)
1
道一且三
JVM内存 模型大体分为 线程独立内存 和 共享内存 两部分, 线程独有的 内存区域又分为 程序计数器、java虚拟机栈,本地方法栈。共享内存又分为 java 堆、 方法区、直接内存。 1,程序计数器:可以理解为字节码指令的行号指示器,通过拨动程序计数器来执行下一行指令,也是唯一一个不会报 内存溢出的错误的区域。 2,虚拟机栈:虚拟机栈的创建栈帧、入栈到出栈的过程,就是方法调用到结束的过程。其内部包含 局部变量表、操作数栈、动态链接、方法返回地址。 3,本地方法栈:类同于虚拟机栈,只是对应的是 native方法。而非java 方法。 4,java 堆: 存放java 对象的内存区域,不同的gc收集器,用自己的方式对 堆区进行划分然后采用自己的收集方法回收废弃对象。 5,方法区:jdk7是用永久代实现的方法区,对应存储堆区的对象的类型数据信息,常量池、静态变量等元数据信息,后来jdk8以后是用元空间代替了永久代的实现,并且把除类型数据信息以外的数据放到了堆区存储。 6,直接内存区域:可以理解为操作系统和java 虚拟机之间架设的一个区域,比如 NIO,AIO 就会用到这部分区域做读取文件时的缓冲区。这部分区域也是会 内存溢出的,不过不占用虚拟机本身内存。
发表于 2025-08-16 09:59:46
回复(1)
1
犹豫的她在拧螺丝
jvm由三部分组成:类加载子系统,运行引擎,运行时数据区 类加载子系统:根据全限定名载入类或接口 运行引擎:执行被载入类的方法中的指令 运行时数据区:jvm在运行时需要内存来存放数据,如字节码,对象,参数,返回值,局部变量,运行的中间结果等,jvm讲这些数据存储在运行时数据区,以便于管理,运行时数据区又可以分为堆,方法区,虚拟机栈,本地方法区栈,程序计数器 虚拟机栈,本地方法区栈,程序计数器是线程私有的。 程序计数器的作用: 1字节码解释器通过改变程序计数器来依次执行指令,实现代码的业务控制,如顺序执行,循环,选择,抛出异常等 2字节码解释器能够记录线程运行的位置,当线程切换回来时线程能够知道运行到哪了 虚拟机栈:为java方法服务,每一个java方法执行都会创建一个栈帧用来存储局部变量表,操作数表和常量池引用,方法从执行到结束就是栈帧入栈和出栈的过程,可能会出现StackOverFlowError和OutOfMemoryError StackOverFlowError:虚拟机栈内存大小不允许动态扩容时,当请求请求栈的深度大于栈内存的最大深度时,抛出StackOverFlowError OutOfMemoryError:虚拟机栈的大小允许动态扩容,当虚拟机请求栈时内存用完了,栈无法动态扩容了,抛出OutOfMemoryError异常 本地方法区栈:与虚拟机栈不同,虚拟机栈为java方法服务,本地方法区栈为虚拟机的native方法服务,也会抛出StackOverFlowError和OutOfMemoryError 堆,方法区,运行时常量池为多个线程所共享。 堆:堆是java程序管理内存最大的一块。堆用来存放新创建的对象实例,几乎所有对象和数组都在这里分配内存。由于jvm垃圾收集器的分代收集机制,堆可以分为新生代和老年代,用来提高垃圾收集速度。 方法区:用来存放已被虚拟机加载的类,常量,静态变量,编译器即时编译后的代码等,在jdk1.8时被去除用元空间替代,元空间使用的是直接内存 运行时常量池:运行时常量池是方法区的一部分,用来存放编译时产生的字面量和符号引用。字面量:文本字符串,被final修饰的常量的值,基本数据类型的值。符号引用:类和结构的完全限定名,字段的名称和描述符,方法的字段和描述符
发表于 2024-05-19 18:58:22
回复(0)
1
走吗
jvm分为类加载子系统,根据全限定名加载类。执行引擎,执行那些被包含在载入类的方法中的指令。运行时数据区:分为方法区,堆,虚拟机栈,本地方法栈。方法区主要包含一些基本信息,类的信息,字段信息,方法信息,静态量,常量,即时编译后优化的代码缓存。jdk1.7之前,字符串常量池和运行时常量池在方法区,jdk7时字符串常量池被移到了堆中。虚拟机栈:包含局部变量表,动态链接,操作数栈,返回地址。堆:主要包含对象的实例化,字符串常量池(jdk1.7及以后) 本地方法栈:跟虚拟机栈相比,这里执行的是本地方法。程序计数器:记录下一条指令的地址,多线程环境下用于记录当前线程执行的位置。
编辑于 2024-04-12 00:26:44
回复(0)
1
时笙月
JVM由三部分组成:类加载子系统、执行引擎、运行时数据区
发表于 2023-08-01 14:13:01
回复(0)
1
刘六六想涨工资
jvm主要有三个组件。类加载系统,运行时数据区,执行引擎。类加载系统主要负责加载类或者接口,执行引擎负责执行被载入类方法中的指令。运行时数据区:主要存放程序运行过程中的一些变量,方法,运算结果,对象等等 以便于JVM对其进行管理。运行时数据区又可以分为,方法区,队,虚拟机栈,本地方法栈,pc。其中堆和方法区是线程之间共享的。其他的是县城之间私有的。
发表于 2023-02-02 09:27:50
回复(0)
1
自信的大白菜
JVM内存模型主要由三部分组成:类加载子系统、执行引擎、运行时数据区。
1.类加载子系统:根据全限定名称来载入类或接口。
2.执行引擎:负责执行那些被包含在被载入类的方法中的指令。
3.运行时数据区,用来存储字节码,对象,参数,返回值,局部变量及运行结果等。
运行时数据区包括:方法区,堆,虚拟机栈,本地方法栈,程序技计数器。
方法区和堆被所有线程所共享,存在线程安全问题。
虚拟机栈,本地方法栈和程序计数器线程私有,不存在线程安全问题。
编辑于 2023-02-01 16:34:54
回复(0)
1
slothhhh
JVM内存模型包括三个部分,1、类加载子系统:可以根据全限定名来载入类和接口;2、执行引擎:执行那些包含在被加载类的方法中的指令;3、运行时数据区:程序运行时,JVM将字节码、对象、参数、返回值、局部变量和运算中间值等存储在运行数据区内,其中包括方法区、堆、本地方法栈、程序计数器。
发表于 2022-08-13 14:50:04
回复(0)
1
清州化雨
类加载子系统:加载类,执行引擎:执行类中的方法,运行时数据区 jvm的内存主要分为线程私有和公公内存,线程私有的为:虚拟机栈,程序计数器,本地方法栈,共有的为,堆,直接内存,方法区
发表于 2022-08-01 12:39:45
回复(0)
1
牛客793464225号
JVM内存模型主要由三部分组成:类加载子系统、执行引擎、运行时数据区。1.类加载子系统:根据全限定名称来载入类或接口。2.执行引擎:负责执行那些被包含在被载入类的方法中的指令。3.运行时数据区,用来存储字节码,对象,参数,返回值,局部变量及运行结果等。运行时数据区包括:方法区,堆,虚拟机栈,本地方法栈,程序技计数器。方法去和堆被所有线程所共享,存在线程安全问题。虚拟机栈,本地方法栈和程序计数器线程私有,不存在线程安全问题。
发表于 2022-05-27 17:03:12
回复(0)
0
在炒股的啤酒肚很爱吃香菜
线程共享的是 方法区,堆;线程私有的是 程序计数器,虚拟机栈,本地方法栈
发表于 2025-12-18 15:16:47
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
来自:
2025年-华为-通用...
上传者:
real1993
难度:
91条回答
316收藏
3001浏览
热门推荐
相关试题
ThreadLocal 的用法和实...
Java
评论
(77)
来自
2025年-华为-通用软...
什么是主从同步?MySQL 如何实现?
评论
(2)
来自
2025年-华为-通用软...
说说你对AOP的理解。
Spring
评论
(168)
来自
2025年-华为-通用软...
请你说说==与equals()的区别
Java
评论
(246)
来自
2025年-华为-通用软...
如何评估 / 判断索引是否生效?常...
评论
(9)
来自
2025年-华为-通用软...
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题