以下为书摘。
1
2
3
4
5
6
|
public
static
void
main(String[] args){
{
byte
[] placeholder =
new
byte
[
64
*
1024
*
1024
];
}
system.gc();
}
|
以上代码调用后,垃圾回收并没有回收多少。
1
2
3
4
5
6
7
|
public
static
void
main(String[] args){
{
byte
[] placeholder =
new
byte
[
64
*
1024
*
1024
];
}
int
a =
0
;
system.gc();
}
|
以上代码调用后,回收了64M内存。
第1种,局部变量表的slot还保留着关于placeholder的数组对象引用,gc没办法回收。
第2种,重新分配一个int a类型,由于局部变量表slot的复用特性,Placeholder的slot引用被打断,内存成功释放。
很多代码都会手动将一个对象赋值为null,就是这个道理了