Java内存分配

一、内存分配的区域

Java虚拟机在运行时的数据区域包括:

Method Area(方法区)

VM stack(虚拟机栈)

Native Method Stack(本地方法栈)

Heap(堆)

Program Counter Register (程序计数器)


二、常用区域的理解
1、方法区

方法区是线程的共享区域,用于存储已经被虚拟机加载的类信息,常量(常量池 )和静态变量(静态域)即编译器编译后的代码数据。

2、虚拟机栈

虚拟机栈描述的是方法执行的内存模型。通常所说的虚拟机运行时分为堆和栈中的“栈”就是虚拟机栈,或者说是虚拟机栈中的局部变量表部分,线程私有,生命周期与线程相同。

存放变异期可知的基本数据类型(int short long double float char byte boolean )的数据(如 int a = 9;a,9 都在栈中)、

存放对象的引用(如 ClassA  a = new ClassA(); a存在栈中)和类型、

方法中的局部变量等;

栈中的内容在退出该生效的作用域后,该内存空间可以被做他用。

优点:栈中数据的存取速度快

3、堆

堆是Java虚拟机所管理的内存中的最大一块,是运行时动态分配的内存,存放new出来的对象实例

是垃圾回收的主要区域。由所有线程共享的区域。

4、程序计数器

Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,为了线程切换后能恢复到正常的执行位置,每条线程都需要有一个独立的计数器,各条线程之间的计数器互不影响,独立存储。

(疑问:线程结束之后,程序计数器的内存会不会回收?)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值