GC

2018-07-19  本文已影响0人  那有一只羊

Java对象的内存布局

Mark Word, Class Pointer, Instance data(如果是数组则为 Array Length和array data), Padding(用于对齐,使其为8的倍数)

java通过引用来访问对象,那怎么来确定哪些对象可以被回收呢

如何判断内存可以回收?

  1. 引用计数

  2. 可达性分析

标记一系列对象为GC Roots进行可达性分析,对应离散数学的图搜索

可以作为根节点的对象有虚拟机栈中引用的对象,方法区中静态属性引用的变量,方法区中常量引用的对象,本地方法栈中JNI引用的对象

什么时候进行回收?

怎么进行垃圾回收?

  1. 复制算法

新生代对象很大比例将直接被回收。

image
  1. 标记-清除算法

先标记,再清除

  1. 标记-整理算法

标记了将存活的对象进行移动,放到一堆

  1. 分代收集算法

对象分配和垃圾回收

上一篇 下一篇

猜你喜欢

热点阅读