内存划分

指针碰撞

场景:内存规整
原理:在用过与没使用过的内存分界线,有一个分界指针,需要内存时向没用过的方向移动大小
GC:Serial、ParNew

空闲列表

场景:内存不规整
原理:虚拟机维护一个列表,记录哪些内存块可以使用,分配后更新列表
GC:CMS

内存分配并发问题

两种方式

  1. CAS失败重试
  2. TLAB本地线程缓存,每个线程在堆中有一块独立的内存,尝试在TLAB分配,用完再使用CAS

    分配流程

    如图
    image.png
    注:如果对象不会逃逸出方法,则会有现在栈上分配

初始化(零值化)

类似于类加载的准备阶段

设置对象头

  • 类信息
  • 元数据信息
  • GC分代年龄
  • 偏向锁
  • 等等

执行init方法

即调用构造函数