【笔记】Android内存的分配

本文深入解析Java内存模型,包括堆内存、栈内存、程序计数器、虚拟机栈、栈帧、本地方法栈、Java堆及方法区。阐述了各部分的作用、特性及线程私有共享区别。

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

Java内存分为:堆内存(heap)和 栈内存(stack)

HelloWorld.java  编译->HelloWorld.class

通过classloader 加载到JVM虚拟机中

 

1.程序计数器(Program Counter Register)

是虚拟机中较小的一块内存空间

记录某一线程被CPU挂起时,记录代码执行到的位置,方便CPU重新执行线程,从哪行指令开始执行

程序计数器没有OOM

是线程私有的,每个线程都有独立的程序计数器

生命周期是随着线程创建而创建,随着线程的结束而死亡

执行java方法时,是记录正在执行的虚拟机字节码指令地址

native方法,计数器值为空(Undefined)

 

2.虚拟机栈

虚拟机栈是线程私有的,与线程生命周期同步

StackOverFlowError  栈溢出

OutOfMemoryError 内存溢出

JVM 基于栈的解释器执行的

DVM 是居于寄存器解释器执行的

 

3.栈帧(Stack Frame)

每一个线程在执行某个方法时,都会为这个方法创建一个栈帧

局部变量表

操作数栈

动态链接

返回地址 (帮助当前方法恢复它的上层方法执行状态)

1.正常退出 return

2.异常退出 

 

4.本地方法栈

 

5.Java堆(Heap)

新生代 (1.Eden  2.Survivor)  

老年代

JVM管理内存最大的一块,存放对象实例

GC管理的主要区域

所有线程共享的区域

 

6.方法区

主要存储:已被JVM加载的类信息(版本、字段、方法、接口)、常量、静态变量、即时编译后的代码、数据

该区域是被各个线程共享的内存区域

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值