1 / 16
文档名称:

JAVA垃圾回收学习.doc

格式:doc   大小:31KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

JAVA垃圾回收学习.doc

上传人:1660287**** 2021/10/11 文件大小:31 KB

下载得到文件列表

JAVA垃圾回收学习.doc

相关文档

文档介绍

文档介绍:java垃圾回收学****br/> java 垃圾回收学****经过一个晚上的努力终于完成了一个文件替换指定字符串的程序, 但是由于我要替换的全站程序 html 文件太多, 所以 eclipse 下边老是在一个目录结束后报出 : Java heap spa 的异常,然后就崩溃了。
我一想肯定是频繁操作造成来不及回收, 于是在每个循环之后加上一个 (1000), 发现还是到那个目录下就死掉,于是把 1000 改成 5000,还是到那里死掉, 我想可能不是来不及回收这么简单,或许 sun 的 JVM 里边刚好对于这种情况不释放也有可能。
接着我又把启动的参数添上一个 -Xmx256M,这回就可以了。
想一想,还是对于垃圾回收的原理不太了解,就在网上查了一下,发现了几篇不错的文章。
./art/3539/xx0 / .pconline../p du/empolder/gj/java/0509/ 还有:Java 堆的管理—垃圾回收提到一下几点,很不错,或许可以作为写程序时候的准那么:
(1)不要试图去假定垃圾收集发生的时间,这一切都是的。
比方,方法中的一个临时对象在方法调用完毕后就变成了无用对象,这个时候它的内存就可以被释放。
(2)Java 中提供了一些和垃圾收集打交道的类, 而且提供了一种强行执行垃圾收集的方法--调用 System. (), 但这同样是个不确定的方法。Java 中并不保证每次调用该方法就一定能够启动垃圾收集, 它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个数。
(3)挑选适合自己的垃圾收集器。一般来说,如果系统没有特殊和苛刻的性能要求, 可以采用 JVM 的缺省选项。否那么可以考虑使用有针对性的垃圾收集器, 比方增量收集器就比拟适合实时性要求较高的系统之中。
系统具有较高的配置,有比拟多的闲置资源,可以考虑使用并行标记/去除收集器。
(4)关键的也是难把握的问题是内存泄漏。
良好的编程****惯和严谨的编程态度永远是最重要的,不要让自己的一个小错误导致内存出现大漏洞。
(5)尽早释放无用对象的引用。
大多数程序员在使用临时变量的时候, 都是让引用变量在退出活动域(scope)后,自动设置为 null, 暗示垃圾收集器来收集该对象,还必须注意该引用的对象是否被监听,如果有,那么要去掉***,然后再赋空值。
就是说,对于频繁申请内存和释放内存的操作,还是自己控制一下比拟好, 但是 System. ()的方法不一定适用,最好使用 finallize 强制执行或者写自己的 finallize 方法。

Java 垃圾回收机制详解和调优 已看 即垃圾收集机制是指 jvm 用于释放那些不再使用的对象所占用的内存。java语言并不要求 jvm 有 ,也没有规定 如何工作。不过常用的 jvm 都有 ,而且大多数 都使用类似的算法管理内存和执行收集操作。
在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比方,实时应用程序主要是为了防止垃圾收集中断,而大多数 OLTP 应用程序那么注重整体效率。理解了应用程序的工作负荷和 jvm 支持的垃圾收集算法,便可以进行优化配置垃圾收集器。
垃圾收集的目的在于去除不再使用的对象。 通过确定对象是否被活动对象引用来确定是否收集该对象。 首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。
引用计数存储对特定对象的所有引用数,也就是说,当应用程序创立引用以及引用超出范围时,jvm 必须适当增减引用数。当某对象的引用数为 0 时,便可以进行垃圾收集。
早期的 jvm 使用引用计数,现在大多数 jvm 采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,那么将它作为垃圾收集。在对象遍历阶段, 必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记( rking)对象。
下一步, 要删除不可到达的对象。删除时,有些 只是简单的扫描堆栈,删除未标记的未标记的对象,并释放它们的内存以生成新的对象,这叫做去除(sweepin