Java虚拟机-对象的创建,对象头
2016-01-14 19:44
246 查看
创建
new检查new指令的参数,是否能在常量池中定位到一个类的引用符号
检查该类是否被加载、解析和初始化。 没有则执行相应的过程
分配内存 存在2中情况。取决于java内存堆是否规则
a。指针碰撞 连续的只要移动指针即可 Serial、ParNew Compact等带有压缩整理的 使用此方法
b。空闲列表 ; CMS 基于Mark-Sweep算法的 收集器的时候。
考虑是否线程安全
a: 同步,保证原子性
b:本地线程分配缓冲 TLAB Thread Local Alloction Buffer 只有TLAB用完 才同步
内存空间初始化为零值
对象头 (hash码 是否有偏向锁, GC分代信息 元数据等
对象头
a: 哈希码,分代年龄b:锁,偏向锁,偏向ID
对象的访问定位
句柄java栈本地变量表中 reference指向句柄,句柄指向实例数据和类型数据
reference存放的是稳定的句柄地址
对象移动只会改变句柄中的实例数据指针,不改变reference
直接指针访问
速度快
节省开销
相关文章推荐
- Java学习篇之---基本数据类型
- Spring 核心 Ioc(DI)
- JAVA泛型详解
- JAVA线程基础
- Java虚拟机-内存区域,堆,栈
- JAVA获得任务栏高度
- JAVA中的多线程
- javabean 简介
- Struts2 <s:token/>标签 防止表单多次提交
- struts2 中, iterator 标签 取不到action中变量的值
- Java单例模式以及线程安全性的保证
- spring mvc中,如何在 Java 代码里,获取 国际化 内容
- struts2 下载文件
- struts2 跳转至404 页面的解决方案
- Springmvc的框架流程
- struts2 通过下拉框来手动切换国际化
- struts2 拦截器Interceptor中取得request、response
- eclipse 使用adb命令
- Eclipse的 debug 介绍与技巧
- Java Swing