`
renrenqian123
  • 浏览: 10403 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java的清理工作

阅读更多
一直都认为java的垃圾清理器可以把这个工作给完完整整的给解决,没想到还是有一定的问题的。



java的垃圾回收器虽然负责回收无用对象占用的内存资源,但也有特殊情况:当你的对象并非是用new获得内存区域,垃圾回收器将不知道该如何释放该对象的这块“特殊的内存区域”。为了解决这个情况,java允许在类中定义一个名为finalize()方法,并且在下一次垃圾回收动作发生的时候,才会真正回收对象占用的内存。



finalize()不应该被用作通用的清理方法,之所以要有finalize(),是由于在分配内存时可能采用了类似C语言中的做法,而非java中的通常做法。(这种情况主要发生在使用“本地方法”的情况下)对于“本地方法”自己也不是太明白,好像意思就是java可以调用其他语言写的代码,在非java代码中,可能会调用类似于C中malloc()这样的函数,这些函数除非使用free()函数(这个是C和C++中的),否则不会得到释放。所以要使用finalize()用本地方法调用free()函数,这样当垃圾回收器的回收动作发生时,才会通过finalize()释放这些内存资源。



最后只得一提的是,无论是“垃圾回收”还是“终结”,都不保证一定会发生。如果java虚拟机(JVM)并未面临内存耗尽的情况,它是不会浪费时间去执行垃圾回收以恢复内存的。

分享到:
评论
9 楼 whywen_MoJian 2010-04-06  
beneo 写道
如果可以,永远不要用finalize,既然不能保证什么时候finalize,你还显示的往里面塞代码做甚

如果可以,永远不要用System.gc(),你有3种XXReference可以使用,目的就是保证GC的

如果可以,对于你自己的应用你应该选择相应的GC方法,无论是throughout还是pause time,现在有大几十种GC参数可以选择。

如果可以,请优化你的代码,不要让我看到你的while循环里面没有Thread.sleep,或者没有局部变量=null



可以说详细点吗?
8 楼 renrenqian123 2010-04-06  
说真的,自己也不是很了解,学习中。
7 楼 shuiguozheng 2010-04-06  
对gc 不了解, 来学习的
6 楼 zzj_2046 2010-04-06  
一般不显示的调用gc~
5 楼 robyjeffding 2010-04-06  
在程序中为什么要显式地调用finalize()方法了?
难道只是因为不能确保对象每次都会回收吗?
C++中是需要显式地调用回收方法的,而java中在这一点进行了改进,垃圾回收的事不需要由程序员去处理了。
4 楼 meiowei 2010-04-06  
坚决不使用finalize()和.gc(). JNI让该考虑的人考虑去
3 楼 beneo 2010-04-06  
如果可以,永远不要用finalize,既然不能保证什么时候finalize,你还显示的往里面塞代码做甚

如果可以,永远不要用System.gc(),你有3种XXReference可以使用,目的就是保证GC的

如果可以,对于你自己的应用你应该选择相应的GC方法,无论是throughout还是pause time,现在有大几十种GC参数可以选择。

如果可以,请优化你的代码,不要让我看到你的while循环里面没有Thread.sleep,或者没有局部变量=null

2 楼 pujia12345 2010-04-06  
配置好自己的JVM吧,JNI那边让C程序员写好点
1 楼 JE帐号 2010-04-06  
1.gc只负责jvm内部分配的资源,所以如果通过jni获取了系统资源,肯定无法自动回收.
2.finalize()方法相当难用,因为这涉及到了object在jvm中的生存期细节问题,除非做基础架构的,否则还是自己去显式的管理费jvm资源.

相关推荐

    JAVA注册表垃圾清理

    标题"JAVA注册表垃圾清理"表明这是一个使用Java编程语言开发的软件,其主要功能是清理计算机的注册表中的无用或废弃的条目,以提高系统性能和稳定性。注册表是Windows操作系统的核心组成部分,存储着系统和应用程序...

    纯java 清理系统 垃圾文件

    标题中的“纯java 清理系统 垃圾文件”指的是一个使用Java编程语言开发的系统垃圾文件清理工具。这个工具的主要功能是检测并删除计算机系统中无用的垃圾文件,以释放磁盘空间,提高系统性能。它可能是通过扫描特定...

    (java)注册表清理

    在IT领域,尤其是在系统维护和优化的过程中,"(java)注册表清理"是一个常见的任务,主要是为了提升系统性能和稳定性。注册表是Windows操作系统的核心组件,存储着系统和应用程序的各种配置信息。随着时间的推移,...

    清理缓存(含JAVA).

    清理缓存

    java编程思想-初始化与清理

    java编程思想-初始化与清理了解this之后,你就能更全面地理解“静态(static)方法”的含义。静态方法就是没有this的方法。在“静态方法”的内部不能调用“非静态方法”,反过来倒是可以的。而且你可以在没有创建...

    Java定时清理过期文件的实例代码

    "Java定时清理过期文件的实例代码" 本文主要介绍了Java语言中实现定时清理过期文件的实例代码,通过使用Java的定时任务和递归删除文件的方法来实现文件的清理。下面将详细介绍这两个部分的知识点。 知识点1:Java...

    java清理文件的小程序

    这是一个简单的清理文件的小程序文件的小程序文件的小程序文件的小程序

    详解Java的初始化与清理

    在Java中,程序员无需显式地释放内存,而是依赖于垃圾回收器来完成这一工作,这降低了程序员的工作负担,同时也减少了因手动内存管理导致的错误。 总结起来,Java的初始化与清理机制是其安全性、可靠性和易用性的...

    Java OCR 识别组件(基于Tesseract OCR 引擎)-能自动完成图片清理、识别 CAPTCHA 验证码图片内容的一体化工作.zip

    Java OCR 识别组件(基于Tesseract OCR 引擎)-能自动完成图片清理、识别 CAPTCHA 验证码图片内容的一体化工作.zip Java OCR 识别组件(基于Tesseract OCR 引擎)-能自动完成图片清理、识别 CAPTCHA 验证码图片内容...

    java做的清除SVN的小程序

    可能的功能包括删除不再使用的版本库、清理工作副本、移除未版本化的文件或解决SVN冲突后的残留文件。这样的工具对于保持项目整洁和优化硬盘空间特别有用。 【标签】:“java swing svn awt j2se” - `java`:这...

    java初始化和清理

    Java初始化和清理是Java语言中非常重要的两个过程,它们确保了Java程序的正确运行和资源的有效管理。Java的初始化包括类的加载、连接和初始化三个过程,而清理则主要指垃圾回收机制。 首先,Java初始化的主要特性...

    如何清除注册表中的Java安装信息

    在日常的计算机维护工作中,我们经常会遇到软件安装失败的情况,尤其是在尝试重新安装相同版本的Java时。当Windows系统检测到注册表中有Java的相关记录时,即使该Java安装已被删除或者损坏,也会阻止新版本的安装,...

    JAVA编写的svn文件夹清理工具

    JAVA编写的svn文件夹清理工具。对于不熟悉命令行的很有用。

    windows 系统清理

    使用前建议备份重要数据,并了解工具的工作原理,以免误删重要文件。同时,定期更新工具和操作系统,以获取最新的安全防护和性能优化。 "Windows 系统清理 说明.txt"文件很可能是该工具的使用指南,包含了操作步骤...

    s40 手机清理内存工具 java版

    清理手机运行内存的java小程序,一些低端手机运行较大程序时会提示内存不足,这个小程序就可以解决这些问题

    自动化数据清理:Java技术实现与应用策略

    本文将详细介绍如何在Java中实现自动化数据清理,包括数据清理的基本概念、常用的数据清理技术、实现步骤和代码示例。 自动化数据清理是确保数据质量和准确性的重要步骤。通过在Java中实现自动化数据清理,可以显著...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    - 使用弱引用、软引用等机制来帮助垃圾回收器更高效地工作。 3. **监控与诊断**: - 使用JVM工具如VisualVM、JConsole等监控应用程序的内存使用情况。 - 分析堆转储文件(heap dump),找出占用内存较大的对象集合...

    清除java项目中的注释

    以下将详细介绍如何在Java项目中进行注释清理,以及涉及的相关工具和技术。 1. 使用MyEclipse清除Java代码注释 MyEclipse是一款功能丰富的Java集成开发环境(IDE),它提供了许多便捷的代码编辑和管理功能。在...

    java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码

    "java管理windows系统内存_java释放内存缓存_java获得CPU使用率_系统内存_硬盘_进程源代码" 在Windows操作系统中,内存管理是一个非常重要的方面。Windows实现按需调页的虚拟内存机制,使得应用程序可以使用超过...

    Kettle的使用公式清理数据、Kettle的使用用户自定义Java表达式清理数据【ktr源文件】

    Kettle的使用公式清理数据、Kettle的使用用户自定义Java表达式清理数据【ktr源文件】 实验内容如下: 掌握基于Kettle的使用公式清理数据 掌握基于Kettle的使用用户自定义Java表达式清理数据

Global site tag (gtag.js) - Google Analytics