码迷,mamicode.com
首页 > 编程语言 > 详细

Java对象创建的过程及对象的内存布局与访问定位

时间:2017-07-10 13:27:26      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:compact   垃圾收集器   常量池   java   加载完成   对象   过程   并发控制   操作   

这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等。

1、对象创建的过程

  1. 类加载、解析、初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符号引用,并检查符号引用代表的类是否被加载、解析、初始化,若没有则先进行类加载。
  2. 对象内存分配:类加载检查通过后,虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后便可完全确定。分配内存的任务等同于从堆中分出一块确定大小的内存。
    1. 根据内存是否规整(即用的放一边,空闲的放另一边,是否如此与所使用的垃圾收集器是否带有压缩整理Compact功能有关),分配方式分为指针碰撞(Serial、ParNe等收集器)和空闲列表(CMS收集器等)两种

    2. 并发控制:可能多个对象同时在从堆中分配内存因此需要同步,两种解决方案:虚拟机用CAS配上失败重试保证原子操作;把内存分配动作按线程划分在不同空间中进行即每个线程预先分配一块线程本地缓冲区TLAB,各线程在各自TLAB分配为各自对象分配内存。

  3. 对象的初始化:对象头和对象实例数据的初始化

对象的内存布局

对象的访问定位

Java对象创建的过程及对象的内存布局与访问定位

标签:compact   垃圾收集器   常量池   java   加载完成   对象   过程   并发控制   操作   

原文地址:http://www.cnblogs.com/z-sm/p/7145180.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!