java垃圾回收机制的工作特征解析

java垃圾回收机制的工作特征解析

ID:10025888

大小:26.50 KB

页数:6页

时间:2018-05-21

java垃圾回收机制的工作特征解析 _第1页
java垃圾回收机制的工作特征解析 _第2页
java垃圾回收机制的工作特征解析 _第3页
java垃圾回收机制的工作特征解析 _第4页
java垃圾回收机制的工作特征解析 _第5页
资源描述:

《java垃圾回收机制的工作特征解析 》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、java垃圾回收机制的工作特征解析java垃圾回收机制的工作特征解析java垃圾回收机制的工作特征解析java垃圾回收机制的工作特征解析  关键词:java虚拟机;垃圾收集;垃圾收集器  摘要:垃圾收集是java语言区别于其他程序设计语言的一大特色。但是目前多数的java书籍有关垃圾收集的内容几乎没有或只做了非常简单的介绍。本文从多个方面分析了java的垃圾回收机制,使学习者能够对该机制产生一个全面的认识。  java的堆是一个运行时数据区,类的实例从中分配空间,堆中存储着正在运行的应用程序建立的所有对象。垃圾回收是一种动态存储管理技术,它自动释放不再被程序引用的对象,按照特定的

2、垃圾收集算法来实现资源的自动回收。一般来说,堆的回收是由垃圾收集器负责的,尽管jvm规范并不要求特殊的垃圾回收技术,但是由于内存的有限性,jvm在实现的时候都有一个由垃圾回收所管理的堆。  一、垃圾回收及其意义  正在运行的程序中被引用的对象处于存活状态,不再被引用的对象就是通常所说的垃圾,查找并释放垃圾对象所占用内存空间的过程称为垃圾收集。  在java中,当没有对象引用指向分配给某个对象的内存时,该内存便成为垃圾。jvm的一个系统级线程会自动释放该内存。除了释放没有用的对象,垃圾收集也可以清除内存记录碎片。由于创建对象和释放对象所占的内存空间,内存会出现碎片。碎片整理将所占用

3、的堆内存移到堆的一端,将整理出的内存分配给新的对象。  垃圾收集机制有如下优点:首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的存储器问题,而使用java的垃圾收集机制可大大节省时间。其次,它能避免内存渗漏体的产生,保护程序的完整性,垃圾收集是java语言安全性策略的一个重要组成部分。  垃圾收集的一个潜在的缺点是它的开销影响程序性能。java虚拟机必须追踪运行程序中有用的对象,并且释放没用的对象。这一个过程需要花费处理器的时间。其次垃圾收集算法的不完备性,许多垃圾收集算法不能保证100%收集到所有的废弃内存。  二、垃圾的判断标准与回收方法 

4、 垃圾收集器判断一个对象的内存空间是否无用的标准是:如果该对象不能再被程序中任何一个“活动的部分”所引用,此时我们说,该对象的内存空间已经无用。所谓“活动的部分”,是指程序中某部分参与程序的调用,尚未执行完毕。  常见的一种情况是,当内存中的一个对象不再被任何变量引用的时候,这个对象就成为内存中的垃圾。java的垃圾收集机制可以发现这种没有任何引用的对象,并在适当时候回收该对象所使用的内存。例如:  integeri=newinteger(0);  ...  i=null;//此时,前面integer(0)所产生的对象就成为垃圾。  具体的说,一个变量或对象是否垃圾可遵循如下规则

5、进行判断:  变量出了作用域就成为垃圾。  变量名失去指向就会变成垃圾。  对象失去变量名的指向同样变成垃圾。  匿名对象本身就是垃圾。  垃圾收集在多数情况下是自动进行的,也可使用()方法提醒jvm检查有没有要回收的对象,它不明确的指定jvm去回收哪个对象。垃圾收集是jvm上优先级最低的线程,调用()在多数时候并不马上进行垃圾收集。  项目中最好能手动释放资源,jdk源码里流的部分的close()方法,其实底层都是手动释放:  if(inputstream!=null)  {  ();  inputstream=null;  }  在对性能要求比较高的项目中,如果一个对象用完后

6、要将其引用变量指向null。  三、java垃圾收集工作的的特点  经过前面的分析,可以发现java的垃圾回收有以下特点:  垃圾收集线程作为低优先级的线程运行,但在系统可用内存量过低的时候,可能会突发地执行来释放内存资源。垃圾收集器不可以被强制执行,但程序员可以通过调用()方法来建议执行垃圾收集器。  不能保证一个无用的对象一定会被垃圾收集器收集,也不能保证垃圾收集器在一段java代码中一定会执行,因此在程序执行过程中被分配出去的内存空间可能会一直保留到该程序执行完毕。由此可见,彻底地根绝内存渗漏体的产生也是不可能的。  可以通过将对象的引用变量置为null来通知垃圾收集器来收

7、集该对象。但如果该对象连接有事件监听器,那它还是不能被收集。所以在将引用变量置为null之前,应首先除去监听器。  每一个对象都有一个finalize()方法,这个方法是从object类继承的。finalize()方法用来回收内存以外的系统资源,书写程序时该方法的顺序和方法的实际调用顺序是不相干的,这是finalize()方法的特点。  java语言允许程序员为任何对象添加finalize()方法,该方法会在垃圾收集器回收对象之前被调用。但不要过分依赖该方法对系统资源的回收,因为

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。