`
FariyTale
  • 浏览: 195191 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于system.gc()与finalize()方法

阅读更多

      最近补一下java基础知识,以下是我自己的一些理解,如果哪里有错误请务必指出,以免误引子弟,那兄弟我的罪过就大了 ╲( ^ o ^ )╱

java的内存回收机制是由jvm自动完成的,当jvm对内存进行回收时将调用finalize()函数。因此我们可以在其中增加一些方法来完成一些我们期待在内存回收时完成的任务。最常见的任务就是标记日志和复活对象:通过在finalize()中添加Log函数,我们可以跟踪jvm的内存回收;而在finalize()中将要回收的对象赋值给一个新的对象则实现了对象的复活。而在android中,finalize()函数又有一个重要的功能:当在android程序中通过ndk调用了native方法而在native方法又分配了内存时jvm是不会对这部分内存进行回收的,因此在这种情况时就要在finalize()函数中调用native方法free()来释放这部分内存。还有就是在调用system.gc()以后jvm并不一定立刻执行存储回收,它个意思只是向jvm说明现在希望现在进行一次内存回收,至于什么时候执行还要看jvm的回收策略

分享到:
评论
1 楼 colder_coder 2012-06-29  
问一下,java规范中说一个对象的finalize方法只被调用一次,那么如果对象在finalize中复活,以后又会如何被回收呢?

相关推荐

    Java中finalize方法使用.doc

    finalize 方法是 Java 编程语言中一个非常重要的方法,它与 Java 编程中的垃圾回收器有着紧密的关系。当一个对象变成一个垃圾对象的时候,如果此对象的内存被回收,那么就可以调用系统中定义的 finalize 方法来完成...

    Java中finalize()的用法

    所有对象被 Garbage Collection 时自动调用,例如运行 System.gc() 时;2. 程序退出时为每个对象调用一次 finalize 方法;3. 显式的调用 finalize 方法。 需要注意的是,finalize() 方法的调用是不确定的,JVM 不...

    JAVA中销毁一个对象的方法.doc

    ### JAVA中销毁一个对象的方法详解 ...对于一些特殊需求,还可以通过`finalize()`方法和`System.gc()`来辅助管理对象的生命周期。然而,在实际应用中,应当尽量避免依赖这些辅助手段,以减少潜在的问题和性能开销。

    Java垃圾回收机制的finalize方法实例分析

    System.out.println("测试资源清理的finalize方法"); } public static void main(String[] args) throws Exception { // 创建FinalizeTest对象立即进入可恢复状态 new FinalizeTest(); // 通知系统进行资源...

    Android中高级面试必知必会.pdf

    垃圾回收算法(JVM)..........63 7、垃圾回收机制和调用 System.gc()的区别? .64 8. 类加载过程90 9. 反射..........101 10. 多线程和线程池........112 11.HTTP、HTTPS、TCP/IP、Socket 通信、三次握手四次挥手...

    垃圾回收相关概念.pdf

    1. **System.gc()**:这是一个经常引起误解的方法。调用`System.gc()`会建议JVM执行全局的垃圾回收,包括新生代和老年代。然而,这并不意味着垃圾回收一定会立即进行,因为JVM可能有自己的垃圾回收策略。频繁使用`...

    Java入门及faq__1(3)

    综上所述,Java中的日期格式化、静态与非静态内部类的区别、字符和数字的判断方法以及`finalize()`与`System.gc()`的区别都是Java编程中非常重要的知识点。掌握这些内容对于编写高效、可靠的Java应用程序至关重要。

    简单理解Java的垃圾回收机制与finalize方法的作用

    Java中的`finalize()`方法是对象生命周期的一部分,它与C++中的析构函数类似,但在功能和调用时机上有所不同。`finalize()`方法是在对象被GC标记为可回收并准备释放之前调用的,提供了在对象被彻底删除前执行某些...

    Java9垃圾回收方法finalize() 原理解析

    Java9垃圾回收方法中的finalize()方法是一个特殊的方法,它是Object类中的方法,用于在类被GC回收时做一些处理操作。finalize()方法的主要作用是释放对象占用的资源,例如关闭文件、释放Socket等。但是,finalize()...

    浅析JAVA之垃圾回收机制.doc

    【垃圾回收机制简介】 在Java编程中,与C++或C等语言相比,开发者无需...开发者应该避免过度依赖`finalize()`和`System.gc()`,而是充分利用Java的内存管理机制,同时关注JVM参数的优化,以提升应用程序的整体性能。

    Java对象的清除与垃圾回收.pdf

    执行垃圾回收可以使用System.gc()方法,但注意,这个方法只是建议系统执行垃圾回收,不能强制系统立刻执行垃圾回收。 2. 在虚拟机可用内存耗尽的时候。在虚拟机堆内存耗尽的时候,系统会自动进行垃圾回收,通过消除...

    Java面试笔试题集

    GC是垃圾收集的缩写,用于释放无用的对象空间,JVM提供了自动回收和手工调用的System.gc()方法两种方式来进行垃圾回收。 十、sleep()和wait()的区别 sleep()是Thread类中的方法,表示线程的休眠,会自动唤醒;wait...

    JAVA程序员面试题(含有答案)经典版

    实际上调用 System.gc() 就相当于调用 Runtime.getRuntime().gc() 方法。 3. Error 和 Exception 的区别: Error 是表示由 JVM 进行处理,是 JVM 出错。Exception 是可以由程序进行处理的,使用 try..catch 进行...

    JAVA垃圾回收机制与内存泄露问题实用.pdf

    `System.gc()`仅是请求垃圾回收,不一定会触发`finalize()`,且频繁调用可能导致性能下降。 理解并优化Java的垃圾回收机制对于开发高性能、稳定的应用至关重要。开发者应当避免不必要的内存消耗,合理控制对象生命...

    C#多线程开发多个实例

    //为false时肯定是GC调用了对象的Finalize方法,所以没有必要再告诉GC你不要调用我的Finalize方法啦 if (disposing) { GC.SuppressFinalize(this); } } } static void Main(string[] args) { //tmpObj1...

    java初级-中级问题解答2.doc

    调用System.gc()或Runtime.getRuntime().gc()可以请求垃圾收集,但不保证立即执行。 9. **String对象创建**:`String s = new String("xyz");`创建了两个对象,一个字符串常量"xyz",一个指向它的String对象s。 10...

    C#第八章(对象的生命周期)

    本章还介绍了C#的垃圾回收器相关的高级操作,如使用System.GC类通过编程控制垃圾回收器的行为,以及如何通过System.Object.Finalize()虚方法和IDisposable接口来释放对象内部的非托管资源,确保非托管资源的及时释放...

    Java System类详解_动力节点Java学院整理

    Java的System类是Java开发工具集(JDK)提供的重要工具类,主要用于处理与系统相关的操作。由于它被声明为final,所以无法被其他类继承。System类的主要功能包括: 1. **标准输入输出**: - `System.in`:表示标准...

    优秀Java程序员必须了解的GC工作原理

    4. 考虑使用`System.gc()`谨慎地触发垃圾回收,但这应被视为最后手段,因为过度使用可能导致性能下降。 5. 了解并使用JVM提供的各种垃圾收集器,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和 Garbage-First ...

Global site tag (gtag.js) - Google Analytics