java堆:运行时数据区,用于存储所有运行期的对象数据,使用了动态存储管理技术
GC算法:
引用计数法:计算对象被引用调用的算法,当一个对象没有被任何一个引用指向它时候,这个对象就会被放入可以回收的列表;
即这个对象被应用抛弃,这只代表对象是具有回收的资格,并不马上回收;同时GC会实时检测堆,查找出计数为0的对象
其他算法:因为jvm回收内存是有较大的系统开销,如果每个被抛弃的对象都回收会导致系统的效率低下,所以对于我们来说,需要
其他的算法来实现空间和时间的平衡,达到最优的处理方案
所以GC回收需要对象可以回收和系统需要回收
干预回收:
system,gc() 这个方法只是给其他计算系统是否需要回收的算法进行加权,并不能马上对对象回收
只是加权使系统回收时间提前;垃圾回收为应用服务,并不能被某个进程进行调用,他是一个共有的的处理方法。
finalize()方法:
作用:用于对象回收的善后处理,比如将对象打开的文件进行关闭以保证其他的对象可以对这个文件进行调用;因为
如果对象打开是私有打开则其他对象不能用,如果是共享打开则不能读取到这个对象对这个文件的修改;
finalize()类似于c+的析构方法,但析构方法是可以具有固定的调用的,当对象离开作用域时候,就会对其调用
但finalize()并没有,这个是对应的是在对象销毁后调用的,所以其调用的时间是通过GC算法控制,没有固定的
调用
注:jvm在对象回收调用finalize时候会忽略其中抛出的异常,在其他情况调用时候更普通方法的异常一样
GC只是一个低优先级的后台线程,而且跟踪可达和不可达的对象
且finalize覆盖时候默认调用了父类方法