精华内容
下载资源
问答
  • Java 销毁对象

    千次阅读 2015-05-16 06:44:49
     在Java中完成这样的工作主要是依靠try-finally机制来协助完成的,然而Java中还提供了另外一种被称为finalizer的机制,使用者仅仅需要重载Object对象提供的finalize方法,这样当JVM的在进行垃圾回收...

          终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的。使用终结方法会导致行为不稳定、降低性能,以及可移植性问题。


          在Java中完成这样的工作主要是依靠try-finally机制来协助完成的,然而Java中还提供了另外一种被称为finalizer的机制,使用者仅仅需要重载Object对象提供的finalize方法,这样当JVM的在进行垃圾回收时,就可以自动调用该方法。但是由于对象何时被垃圾收集的不确定性,以及finalizer给GC带来的性能上的影响,因此并不推荐使用者依靠该方法来达到关键资源释放的目的。比如,有数千个图形句柄都在等待被终结和回收,可惜的是执行终结方法的线程优先级要低于普通的工作者线程,这样就会有大量的图形句柄资源停留在finalizer的队列中而不能被及时的释放,最终导致了系统运行效率的下降,甚至还会引发JVM报出OutOfMemoryError的错误。

     

          Java的语言规范中并没有保证该方法会被及时的执行,甚至都没有保证一定会被执行。即便开发者在code中手工调用了 System.gc System.runFinalization 这两个方法,这仅仅是提高了finalizer被执行的几率而已。还有一点需要注意的是,被重载的finalize()方法中如果抛出异常,其栈帧轨迹是不会被打印出来的。在Java中被推荐的资源释放方法为,提供显式的具有良好命名的接口方法,如 FileInputStream.close() 和 Graphic2D.dispose() 等。然后使用者在finally区块中调用该方法,见如下代码:

    public void test() {
        FileInputStream fin = null;
        try {
            fin = new FileInputStream(filename);
            //do something.
        } finally {
            fin.close();
        }
    }

         

    在实际的开发中,利用finalizer又能给我们带来什么样的帮助呢?见下例:

    public class FinalizeTest {
        //@Override
        protected void finalize() throws Throwable {
            try {
                //在调试过程中通过该方法,打印对象在被收集前的各种状态,
                //如判断是否仍有资源未被释放,或者是否有状态不一致的现象存在。
                //推荐将该finalize方法设计成仅在debug状态下可用,而在release
                //下该方法并不存在,以避免其对运行时效率的影响。
                System.out.println("The current status: " + _myStatus);
            } finally {
                //在finally中对超类finalize方法的调用是必须的,这样可以保证整个class继承
                //体系中的finalize链都被执行。
                super.finalize(); 
            }
        }
    }

     

     

     

    展开全文
  • Java什么不需要销毁对象 对象的引用在作用域终点就会消失,但是对象依然存在于内存中,对象会由Java独有的垃圾回收器处理,用来解决内存占满的问题

    Java为什么不需要销毁对象

    对象的引用在作用域终点就会消失,但是对象依然存在于内存中,对象会由Java独有的垃圾回收器处理,用来解决内存占满的问题

    展开全文
  • 本篇文章主要介绍了JAVA创建和销毁对象的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • I encountered this question in an interview with following options:How to destroy an object in java?a. System.gc();b. Runtime.getRuntime.gc();c. object.delete();d. object.finalize();e. Java performs g...

    I encountered this question in an interview with following options:

    How to destroy an object in java?

    a. System.gc();

    b. Runtime.getRuntime.gc();

    c. object.delete();

    d. object.finalize();

    e. Java performs gc by itself, no need to do it manually.

    The answer should be e?

    what if e was not there? then ?

    clearly c is not the answer. a and b will do gc for the whole application(question requires for one object).

    I think it is d because finalize() is called just prior to gc(but is it necessary that after finalize gc is invoked ?) or I am wrong ? e must be there to answer this question ?

    解决方案

    Answer E is correct answer. If E is not there, you will soon run out of memory (or) No correct answer.

    Object should be unreachable to be eligible for GC. JVM will do multiple scans and moving objects from one generation to another generation to determine the eligibility of GC and frees the memory when the objects are not reachable.

    展开全文
  • 主要介绍了Java中对象的销毁方法,较为详细的分析了对象的功能、用法及销毁对象对于程序运行的益处,需要的朋友可以参考下
  • Java 对象销毁

    2020-06-23 14:34:34
    Java 自带垃圾回收机制,会自动识别内存中不再会被使用对象并将其销毁,释放内存。 一般情况下,我们可以不考虑对象销毁问题,因为 java 自带垃圾回收机制。 如果需要销毁指定对象,请看: java基础:对象的...

    Java 语言的内存自动回收称为垃圾回收(Garbage Collection)机制,简称 GC。垃圾回收机制是指 JVM 用于释放那些不再使用的对象所占用的内存

    Java 自带垃圾回收机制,会自动识别内存中不再会被使用的对象并将其销毁,释放内存。

    一般情况下,我们可以不考虑对象的销毁问题,因为 java 自带垃圾回收机制。

    如果需要销毁指定对象,请看:

    java基础:对象的销毁

    展开全文
  • java对象初始化与对象销毁的顺序的相反的。
  • Java对象销毁

    2020-12-22 22:39:14
     Java对象销毁  Java中垃圾收集器自动地定期扫描Java对象的动态内存,并将所有的引用对象加上标记,在对象运行结束后(无引用变量对该对象进行关联),清除其标记,并将所有无标记的对象
  • 今天学习对象销毁,,对象销毁有两种方式。 创建的对象超出范围 ...此时,需要先将对象的变量赋值为空,再使用System.gc()方法强制启动垃圾回收机制,将对象销毁 如有错误敬请指正。邮箱.xiang2
  • Java对象销毁

    千次阅读 2019-05-10 20:05:32
    对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,不需要用户额外处理。这也是 Java 语言...
  • 在读effective java的过程中,让我了解到即使是最常见的创建和销毁对象,也是有讲究,有操作的。故对此做一个小结,将作者想告诉我们的主要思想记录一下。 第一章,创建和销毁对象总结 1、以静态工厂方法替代构造器 ...
  • 创建和销毁对象(第2章) 这是Joshua Blochs的《 有效的Java》第2章的简短摘要。我仅包括与自己相关的项目。 静态工厂(项目1) 静态工厂与构造函数的一些优点: 工厂方法的名称为构造函数添加了描述 他们...
  • JAVA创建和销毁对象

    千次阅读 2018-08-10 17:03:51
    虽然工作了两年仍然是个彩笔,就从effective java这本书开始学吧! 静态工厂方法 优点:有名称,不必每次调用创建新对象,可返回原返回类型的任何子类型对象,参数实例化更简洁。 缺点:如果不含共有的或受保护的...
  • Java进阶 创建和销毁对象
  • 创建和销毁对象 静态工厂方法创建对象 创建对象实例 与构造器对比 静态方法局限性 多个参数考虑使用build构建器 静态工厂与构造方法局限性 优点 缺点 场景 私有构造器或者枚举类型确保singleton 懒汉式 饿汉式 ...
  • 关于Java对象销毁方法分析 本文较为详细的分析了Java对象销毁方法分享给大家供大家参考具体分析如下 Java中的基本数据类型变量和对象的名称引用变量如定义在方法中都为局部变量但对象本身不一定是局部生命...
  • java语言对象销毁

    2019-03-03 15:15:08
    当一个对象使用完成之后,必须的要销毁,否则,会占用系统覅人资源,java里面由一太完整的垃圾回收机制 用来实现对对象销毁,这就是我们的java垃圾回收机制。不必程序员手动清除垃圾。垃圾回收机制只是使用 ...
  • Java_17 对象销毁

    2020-04-23 09:39:40
    Java_17 对象销毁 怎么感觉又是一篇水文章,这个大家知道...//在java语言里,程序员只管创建对象,不管销毁对象。对象的销毁由系统自动完成。GC(垃圾回收机制) package my; public class _31对象的销毁 { } ...
  • Effective Java:创建和销毁对象

    千次阅读 2015-06-25 00:35:11
    读这本书第1条规则的时候就感觉到这是一本很好的书,可以把我们的Java功底提升一个档次,我还是比较推荐的。本博客是针对《Effective Java》这本书第2章所写的一篇读书笔记。博客中也有会一些个人对某个模块的理解和...
  • Java对象的自定义销毁

    2020-08-03 13:27:54
    Java对象销毁一般不需要手动执行,而是交给垃圾回收器处理。        如果需要手动处理,则需要自定义销毁方法。        如果带有继承关系...
  • Effective Java 创建和销毁对象 3.私用构造器或者枚举类型强化Singleton属性
  • 如何正确的创建和销毁Java对象

    万次阅读 2017-06-15 18:24:16
    Java是一门强大的高级语言。在学习了其基础知识后,我们仍需要理解其深刻的内涵。接下来,我们会以《Effective Java》一书做为Java进阶学习的载体,对Java进行一个系统的、全新的认识。...第一章:创建和销毁对象
  • 《Effective Java》—— 创建与销毁对象 本篇主要总结的是《Effecticve Java》中关于创建和销毁对象的内容。 比如: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保及时销毁 如何...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,773
精华内容 83,909
关键字:

java销毁对象用什么

java 订阅