您的位置:首页 > 编程语言 > Java开发

Java虚拟机系列(二):垃圾收集器与内存分配策略

2016-08-27 21:05 246 查看

垃圾收集器与内存分配策略

哪些内存需要回收?

什么时候回收?

如何回收?

对象已死吗

引用计数算法(不使用)

给对象添加引用计数器,每当有一个地方引用它时,计数器加1,引用失效时就减1,计数为0的是不再引用的。缺点是解决不了对象循环引用的问题

可达性分析算法

基本思路:通过一系列的“GC Roots”对象作为起始点,从节点向下搜索,搜索走过的路径称为引用链。当对象到Gc root没有任何引用链相连时,则证明该对象不可用

java中,需要作为GC Root的对象包括:

- 虚拟机栈(栈帧中的本地变量表)中引用的对象

- 方法区中类静态属性引用的属性

- 方法区中常量引用的对象

- 本地方法栈中jni引用的对象

再谈引用

如果reference类型的数据存储的数值代表另一个内存的起始地址,则称代表一个引用。



引用分为强引用,软引用,弱引用,虚引用。引用强度以此减弱

强引用:永远不会回收

软引用:快内存溢出时,列入回收范围

弱引用:非必需对象,在下一次垃圾收集发生时,无论内存是否足够,都会回收掉。

虚引用:对生存时间无影响。只是在销毁时收到一个通知

生存还是死亡

没有引用的对象也有一次机会拯救自己。在finalize(),只要重新与引用链上的任何一个对象建立关联即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息