判断一个对象是否为垃圾:
该对象没有被其他对象所引用.
判定对象是否被引用的算法:
引用计数法,可达性分析算法.
可以作为GC Root的对象:
1 虚拟机栈中引用的对象(栈帧中的本地变量表)
2 方法区中常量引用对象
3 方法区中类静态引用的对象
4 本地方法栈JNI(Native方法)中引用的对象
5 活跃线程的引用对象
Object的 finalize方法和C++的析构函数的作用是否相同:
与析构函数不同,析构函数调用确定,而他是不确定性的
未被引用的对象放置于F-Queue队列
方法执行可能随时被终止
给予对象最后一次重生的机会
java中的强引用,软引用,弱引用,虚引用有什么用:
强引用:最普遍的引用,即使抛出内存溢出异常也不会回收强引用的对象,通过将对象设置未null来弱化引用,使其被回收
软引用:标识对象处在有用但非必须的状态,当内存空间不足时会回收该对象,可以用来实现内存敏感的高速缓存
弱引用:非必须对象,比软引用更弱一些,GC时会被回收,被回收的概率不大,主要是应为垃圾回收线程的优先级较低,适用于偶尔被使用但又不影响垃圾收集的对象
虚引用:不会决定对象的生命周期,任何时候都可能被垃圾收集器回收.主要用来被垃圾回收期回收的活动,起哨兵的作用,必须和引用队列联合使用
四种引用级别的由高到底依次为:强-软-弱-虚
引用队列:无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达.存储关联的且被GC的软弱虚引用