初探jvm虚拟机之内存管理(二)

上篇介绍了关于jvm内存区域的概念性的内容

http://blog.csdn.net/fzj258554288/article/details/51397010

,本篇介绍对象访问在内存中的体现,及各内存模块常见异常

Object obj = new Object();
Object obj 这段申明语法体现在虚拟机栈中的局部变量表中,已reference存在。
new Object() 在堆中生成一块用于存储Object类型的内存块
不同虚拟机有不同的对象访问方式
1.句柄访问
这里写图片描述
jvm会在对中创建一个专门用于存放对象句柄的句柄池,栈中reference引用指向句柄池中句柄的对象,句柄对象保存真正的对象实例地址。
2.直接访问
这里写图片描述
直接访问是指栈中引用直接指向实例的地址。

句柄访问优点在于稳定,对象移动是只需修改句柄中的指针地址即可,无需修改栈中reference引用的地址
直接访问有点在于速度快,少了依次指针的定位,积少成多,效果还是很可观的。

常见异常
堆溢出:对象实例所需空间超过了堆得最大内存限制
java.lang.outOfMemoryError java heap space

栈异常:
1.strackOverFlowError
线程请求的栈深度大于虚拟机允许的栈的最大深度
2.outOfMemoryError
虚拟机在扩展栈时没有申请到足够的空间

方法区溢出:方法区用于存放类的相关信息,常量池,静态变量,访问修饰符,字段描述,方法描述等。
outOfMemoryError permGen space
出错场景:类越多,就需要越大的方法区存储对象类型数据(对象类型,父类,实现接口,方法等)

jvm内存配置相关参数
-Xms: 堆内存最小值
-Xmx: 堆内存最大值,当xms与xmx一致时表示堆不可扩展
-Xss: 栈的内存大小
-xx:permSize 方法区内存最小值
-xx:MaxPermsize 方法区内存最大值
-xx:MaxDirectMemorySize 直接内存 (不指定与Xmx一致)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值