Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java finalize方法的使用_Java_Garbage Collection - Fatal编程技术网

java finalize方法的使用

java finalize方法的使用,java,garbage-collection,Java,Garbage Collection,我的系统内存泄漏,我试图通过尽快释放内存来优化它 这是finalize方法的一个好用法吗 我在哪里捕捉“可丢弃”的物体 } Finalize不是为内存泄漏之类的问题进行代码优化的地方 事实上,经验法则是“永远不要对程序逻辑/成功依赖的任何事情使用finalize”。finalize不是为内存泄漏等进行代码优化的地方 事实上,经验法则是“永远不要对程序逻辑/成功依赖的任何东西使用finalize”。这是finalize方法的一个好用法吗? 否。因为您正在使对象符合finalize()中的垃圾收集条

我的系统内存泄漏,我试图通过尽快释放内存来优化它

  • 这是finalize方法的一个好用法吗
  • 我在哪里捕捉“可丢弃”的物体

    }


  • Finalize不是为内存泄漏之类的问题进行代码优化的地方


    事实上,经验法则是“永远不要对程序逻辑/成功依赖的任何事情使用finalize”。

    finalize不是为内存泄漏等进行代码优化的地方


    事实上,经验法则是“永远不要对程序逻辑/成功依赖的任何东西使用finalize”。

    这是finalize方法的一个好用法吗?

    否。因为您正在使对象符合finalize()中的垃圾收集条件。
    但是根据

    当垃圾回收确定不再有对对象的引用时,垃圾回收器对该对象调用finalize()方法

    因此,您可以使用
    finally
    块来使对象符合垃圾收集的条件。
    这些都是值得一读的问题
    1.

    2.

    这是finalize方法的一个很好的用法吗?

    否。因为您正在使对象符合finalize()中的垃圾收集条件。
    但是根据

    当垃圾回收确定不再有对对象的引用时,垃圾回收器对该对象调用finalize()方法

    因此,您可以使用
    finally
    块来使对象符合垃圾收集的条件。
    这些都是值得一读的问题
    1.
    2.

    否。finalize()方法不执行默认情况下不会发生的任何相关操作。

    否。finalize()方法不执行默认情况下不会发生的任何相关操作。

    使用finalize()方法实际上会减慢内存的释放。当您使用finalize时,必须将对象添加到队列中,因此在另一个线程中调用该对象之前不会清理该对象,这意味着将其实际清理延迟至少一个GC周期

    如果不使用finalize(),它可以在一个周期内清除,这包括对象引用的任何内容

    减少内存消耗的最佳方法是使用内存分析器。我将通过创建更少的垃圾来减少GC上的负载,并通过查看堆的分解(特别是对象的分配位置)来减少保留的内存量

    如果您没有商用探查器,我建议您在Java 7 update 40中获得Java任务控制的支持。

    使用finalize()方法实际上会减慢内存的释放。当您使用finalize时,必须将对象添加到队列中,因此在另一个线程中调用该对象之前不会清理该对象,这意味着将其实际清理延迟至少一个GC周期

    如果不使用finalize(),它可以在一个周期内清除,这包括对象引用的任何内容

    减少内存消耗的最佳方法是使用内存分析器。我将通过创建更少的垃圾来减少GC上的负载,并通过查看堆的分解(特别是对象的分配位置)来减少保留的内存量

    如果您没有商业分析器,我建议您在Java7Update40中支持Java任务控制

  • 不,它不是,JVM擅长遍历对象图和删除未使用的对象。实现自己的finalize方法只会降低性能
  • 你不必这么做
  • 您应该使用以下策略来跟踪内存泄漏:

  • 将以下属性添加到应用程序-XX:+HeapDumpOnOutOfMemoryError(假设您使用的是HotSpot JVM)
  • 用某种类型的测试加载应用程序,这样您最终会得到OutOfMemoryError,然后您可以在应用程序目录中找到一个.hprof文件
  • 下载
  • 在MAT工具中打开.hprof文件,打开支配者树并尝试查找问题的根本原因
  • 不,它不是,JVM擅长遍历对象图和删除未使用的对象。实现自己的finalize方法只会降低性能
  • 你不必这么做
  • 您应该使用以下策略来跟踪内存泄漏:

  • 将以下属性添加到应用程序-XX:+HeapDumpOnOutOfMemoryError(假设您使用的是HotSpot JVM)
  • 用某种类型的测试加载应用程序,这样您最终会得到OutOfMemoryError,然后您可以在应用程序目录中找到一个.hprof文件
  • 下载
  • 在MAT工具中打开.hprof文件,打开支配者树并尝试查找问题的根本原因

  • 可能重复No,像这样编写
    finalize()
    方法不是一个好主意。与其这样做,不如使用探查器找出导致内存泄漏的原因,并修复问题。与其尝试优化,不如修复内存泄漏!可能重复No,像这样编写
    finalize()
    方法不是一个好主意。与其这样做,不如使用探查器找出导致内存泄漏的原因,并修复问题。与其尝试优化,不如修复内存泄漏!但它会使清理对象的速度变得更差。但它会使清理对象的速度变得更差。
    finalize()
    的精确描述!!精确描述
    finalize()
    !!
    public class OrderSendBulkHandler extends PandaSoapHandler {
    
    // <login,Data>
    private HashMap<String,OrderSendBulkData> followersData = new HashMap<String,OrderSendBulkData>();
    
    // <login,error_code> 
    private HashMap<String,BulkDataResponse> positionResponses = new HashMap<String,BulkDataResponse>();
    
    private Position position;
    
    private Float guruBalance;
    
    private float partialRatio = -1;
    
    private boolean ignorePosition = false;
    
    @Override
    protected void finalize() throws Throwable {
    try {
        followersData.clear();
        followersData = null;
        positionResponses.clear();
        positionResponses = null;
        position = null;
        guruBalance = null;
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    
    super.finalize();
    
    // more code of the class here ...
    // .....