java内存分区 jdk1.7之前

1、堆

基本所有对象都在堆上被创建,而对象的声明在栈中,它存着堆上的引用。例如 Object object = new Object();

object为对象的声明,存在虚拟机栈里面,新建的object对象存在于堆上面,包括类的成员变量。


2、虚拟机栈

虚拟机栈是线程私有的,不会出现线程安全问题,在sun公司提供的hotspot中和本地方法栈为一个栈,每次调用方法需要执行一个Frame(帧栈)的入栈到出栈的过程,每一个栈帧都有自己的局部变量表、操作数栈、返回地址和指向运行时常量池的引用。


3、本地方法栈

和虚拟机栈是一样的,只是里面执行的是jvm本地方法,申明为native的方法。


4、程序计数器

记录了每一个线程当前执行的代码行,线程私有的。


5、方法区(非堆)

jdk7版本:存的是类型信息,包括class被加载后的类名,属性,方法,静态变量等

jdk8版本:移除永久代,相当于把方法区变成了放在元空间中进行类的加载,静态成员变量和常量池移动至java堆中。



6、常量池(方法区里面)

存的是final的值,常量,就是在编译的时候就已经确定的值。


7、关于线程安全问题


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值