垃圾收集器与内存分配策略
来源:互联网 发布:排八字软件 编辑:程序博客网 时间:2024/04/30 09:17
垃圾收集器与内存分配策略
对象已死吗?
- 引用计数算法(大部分Java虚拟机没有采用此法)
- 引用一次加一,引用失效减一
- 可达性分析算法
如下图object5,6,7虽然互相联系,但GC Roots是不可达的,所以被判断为可回收对象
GC Roots
Object1
Object2
Object3
Object4
Object5
Object6
Object7
在Java语言中可作为GC Roots的对象包括下面几种
虚拟机栈(帧栈中的本地变量表)中引用的对象
方法区中静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNI(即是Native方法)引用的对象
再谈引用
- JDK1.2对引用的概念进行了扩充
- 强引用(Strong Reference)
- 软引用(Soft Reference)
- 弱引用(Weak Reference)
- 虚引用(Phantom Reference)
- 强引用
- 普遍存在如Object obj=new Object()
- 只要强引用还在,垃圾搜集器永远不会回收被引用的对象
- 软引用
- 有用但是非必须
- 系统将要发送内存溢出异常之前,把这些对象列进回收范围之中进行二次回收.这次回收还没足够的内存,才会抛异常
- JDK1.2之后提供SoftReference类实现类引用
- 弱引用
- 也是描述非必须对象,但是强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集发送之前
- 垃圾回收器工作时无论内存是否充足,都会回收掉弱引用的对象
- JDK1.2之后提供了WeakReference
- 虚引用(幽灵引用或者幻影引用)
- 是否有虚引用的存在,完成不会对其生存时间构成影响,也无法通过虚引用来取得一个实例
- 目的只是为了在这个对象被收集器收集时提供收到一个系统通知
- JDK1.2之后通过PhantomReference类实现虚引用
生存还是死亡
- Java中的finalize()没大多实际作用,当初诞生的目的是为了让C/C++程序员更好接受,可以忘记它的存在
回收方法区
- 方法区主要是废弃常量和无用的类的回收
0 0
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- 垃圾收集器与内存分配策略
- MySQL学习
- Android6.0 权限申请封装
- Linux:内核模块实现替换系统调用的简单例子
- C# 调用TTS 并输出WAV
- cookie案例-显示用户上次访问网站的时间
- 垃圾收集器与内存分配策略
- 滴滴打车2015-2016
- Android 5.x(一) 新控件之RecyclerView,CardView,Palette的使用
- malloc realloc失败原因解析
- C++实验六—矩阵求和
- java基础 -- 多线程总结(一)--基本概念
- CentOS 7之Systemd详解之服务单元设置system.service
- XCode基本操作
- SQL SERVER 动态查询