GC

判断一个对象是否为垃圾:

  该对象没有被其他对象所引用.

判定对象是否被引用的算法:

  引用计数法,可达性分析算法.

可以作为GC Root的对象:

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

  2 方法区中常量引用对象

  3 方法区中类静态引用的对象

  4 本地方法栈JNI(Native方法)中引用的对象

  5 活跃线程的引用对象

Object的 finalize方法和C++的析构函数的作用是否相同:

  与析构函数不同,析构函数调用确定,而他是不确定性的

  未被引用的对象放置于F-Queue队列

  方法执行可能随时被终止

  给予对象最后一次重生的机会

java中的强引用,软引用,弱引用,虚引用有什么用:

  强引用:最普遍的引用,即使抛出内存溢出异常也不会回收强引用的对象,通过将对象设置未null来弱化引用,使其被回收

  软引用:标识对象处在有用但非必须的状态,当内存空间不足时会回收该对象,可以用来实现内存敏感的高速缓存

  弱引用:非必须对象,比软引用更弱一些,GC时会被回收,被回收的概率不大,主要是应为垃圾回收线程的优先级较低,适用于偶尔被使用但又不影响垃圾收集的对象

  虚引用:不会决定对象的生命周期,任何时候都可能被垃圾收集器回收.主要用来被垃圾回收期回收的活动,起哨兵的作用,必须和引用队列联合使用

  四种引用级别的由高到底依次为:强-软-弱-虚

  引用队列:无实际存储结构,存储逻辑依赖于内部节点之间的关系来表达.存储关联的且被GC的软弱虚引用

原文地址:https://www.cnblogs.com/niuyg928/p/15208321.html