一、如何判定垃圾对象有两种方式:
第一种:引用计数器法
概念:就是通过判断一个对象被引用的数量来判断这个对象是否可以被回收。给对象添加一个引用计数器,被引用一次就加1,被取消一次就减1,无论任何时候,只要这个对象的引用数量是0就会被判定为垃圾对象。
优点:算法简单
缺点:额外的引入计数器,浪费资源
第二种:可达性分析法
概念:就是从GCRoot对象开始寻找引用,经过两次标记还没有可达,就会被标记为垃圾对象。
GCRoot对象有哪些?
①java栈中的引用对象
②Native方法区中的引用对象
③方法区的普通的引用常量
④方法区的静态的引用常量
四种引用?
①强应用:new User()就是强引用
②软引用:new SoftReference(new User()) 就是软引用 一旦发生OOM会被回收
③弱引用:new WeakReference(new User())就是弱引用 一旦发生GC会被回收
④虚引用:new Phanton(new User())就是虚引用
二、如何回收垃圾