第二部分-JVM-002内存模型

本文详细介绍了JVM的内存模型,包括程序计数器、本地方法栈、方法区、栈和堆等组成部分。其中,本地方法栈用于登记native方法,程序计数器记录指令地址。方法区存储final、static和Class信息,而栈是线程运行时的内存空间,堆则是存储new出的对象并进行垃圾回收的地方。堆内存溢出问题需要关注,可以通过缩小堆大小来辅助排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、内存模型
在这里插入图片描述
2、本地方法栈(了解)

public class Student {
    public native void start();		//注意这是一个普通类
}

本地方法栈只是登记了native修饰的方法,执行引擎执行时,本质是调用JNI,加载本地方法库中的方法
在这里插入图片描述
3、程序计数器
.java-----编译------>.class(字节码)-----解释器---->机器码------>CPU
(1)字节码文件是多个指令的集合,每个指令都有个地址。

         0: aload_0
         1: aload_1
         2: putfield      #12                 // Field loc:Ljava/lang/String;
         5: return

(2)PC:
记住下一条指令的地址
线程私有
不会存在内存溢出
4、方法区
存放final、static、Class、运行时常量池
5、栈
(1)线程运行时的内存空间
(2)多个栈帧组成;栈帧:每个方法运行时需要的内存
(3)线程结束,栈内存释放;不存在垃圾回收
(4)存放局部变量、实例方法(非static)---------实际在栈帧中
(5)StackOverflowError:栈帧太多导致栈溢出
6、堆
(1)new出的对象,都在heap里
(2)线程共享,需要考虑线程安全
(3)垃圾回收
注意:堆溢出不明显,排查堆内存溢出,将堆内存设置小点
总结:
线程私有:PC、栈
栈溢出:栈
线程共享:堆
垃圾回收:堆
内存溢出:堆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值