java垃圾回收
来源:互联网 发布:淘宝店铺企业认证 编辑:程序博客网 时间:2024/05/18 03:25
垃圾回收
概念
创建对象占据内存,如果程序执行流程已经无法再使用某个对象,该对象就只是徒耗内存的垃圾。
对于不再有用的对象,JVM有垃圾收集机制(Garbage Collection, GC),收集到的垃圾对象所占据的内存空间,会被垃圾收集器释放。也就是说执行流程中,无法通过变量参考的对象,就会被GC认定的垃圾对象回收。
举例:
假设一个类:
public class Some {Some next;}
若是从程序进入点开始,有段程序代码如下撰写:
Some some1 = new Some();Some some2 = new Some();Some some1 = some2;
执行到第二行时,主线程可以通过参考名称所参考到对象。
执行到第三行时,将some2参考的对象给some1如下图:
原先some1参考的对象不再被任何名称参考,这个对象就是内存中的垃圾了,GC会自动找出这些垃圾并予以回收。
变化
Some some = new Some();some.next = new Some();some = null;
在执行第二行时候如下:
由于开始通过some可以参考至中间的对象,而some.next可以参考至最右边的对象,目前没有必要回收任何对象。执行完第三行后。如下图:
由于从主流程开始,无法通过some 参考至中间对象,也就无法再通过中间对象的next
参考至右边对象,所以两个对象都是垃圾。同样的道理,如下两个举例。
Some[] somes = {new Some(), new Some(), new Some};somes = null;
Some some = new Some();some.next = new Some();some.next.next = new Some();some.next.next.next = some;some = null;
参考–《javaJDK7学习笔记》 6.2.6
GC 在进行回收对象前,会调用对象的finalize()方法,这是Object 上就定义的方法。
如果在对象被回收前,有些事情想做,可以重新定义finalize()方法,不过要注意的是,
何时启动GC,要视所采用的GC 算法而定,也就是finalize()被调用的时机是无法确定
的。在Effective Java 书中也建议,避免使用finalize()方法。
finalize()方法待更新
阅读全文
0 0
- Java垃圾回收
- java垃圾回收算法
- JAVA垃圾回收问题
- Java 垃圾回收
- JAVA垃圾回收
- Java中的垃圾回收
- Java垃圾回收器
- java垃圾回收机制
- java垃圾回收
- java 垃圾回收 算法
- java垃圾回收
- Java垃圾回收机制
- Java垃圾回收简介
- IBM Java垃圾回收
- java垃圾回收
- java垃圾回收机制
- java 垃圾回收
- 【java】垃圾回收机制
- vmware安装centos7 输入ifconfig出现ens33,没有eth0
- kotlin的三目运算
- jQuery学习之二---jq核心
- ubuntu16.04安装python的sklearn模块
- 入职三个月后的一点感想
- java垃圾回收
- mysql5.7导出数据提示--secure-file-priv选项问题的解决方法
- 实验测试1《C++ Primer》第五版——第十一章 关联容器
- SQL注入详细过程
- PythonStock(15):使用bokeh 展示股票报表数据
- [6]_编译内核错误提示1:Unable to find the ncurses libraries or the 和 E: Unable to locate package ncurse
- 读书笔记《C++ Primer》第五版——第十二章 动态内存
- 实用idea代码编辑快捷键
- Spring boot下 拦截器中的Service空指针异常解决方法