Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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 这种做法有多好?_Java_Garbage Collection - Fatal编程技术网

Java 这种做法有多好?

Java 这种做法有多好?,java,garbage-collection,Java,Garbage Collection,假设我有一个Java应用程序,它可以处理成千上万的用户。因此,对于每个用户操作,都会重复执行特定的代码块,我正在创建数百万个临时对象。我这样写我的方法 public void myMethod(ClassB a, ClassA b) { ClassC c = null; ClassD d = null; try { c = new ClassC(); d = new ClassD(); // Some code whic

假设我有一个Java应用程序,它可以处理成千上万的用户。因此,对于每个用户操作,都会重复执行特定的代码块,我正在创建数百万个临时对象。我这样写我的方法

public void myMethod(ClassB a, ClassA b) {
    ClassC c = null;
    ClassD d = null;

    try {
        c = new ClassC();
        d = new ClassD();

        // Some code which uses a, b, c, d.
    } catch (Exception e) {
    } finally {
        a = null;
        b = null;
        if (c != null) {
            c = null;
        }
        if (d != null) {
            d = null;
        }
    }
}
类可以是任何类型。(基本体、列表或地图) 如果可用,我将使用
clear()
reset()
函数

这对GC真的有帮助吗?还是我应该让Java自己处理这个问题?

你绝对应该让Java自己处理这个问题。您所做的只是使代码更难阅读和维护。不管怎样,您要清空的所有变量在方法结束时都超出了范围——GC知道这一点


哦,一般来说,你不应该捕捉异常。。。捕捉特定的异常(如果你真的能处理它们的话)。

@;这些是局部变量和参数。@Jon-同意他们在这里讨论静态变量和局部变量,但将引用分配给
null
的基本前提是相同的,答案也是一样的,即,不,这是不需要的,让Java来帮你处理。@Ɍ。Ɉ:第一个提到局部变量的答案是非常低的,没有投票权,而且这个问题根本不涉及局部变量。我认为这是一个完全不同的问题,值得继续讨论。@Ɍ。Ɉ感谢链接。被接受的答案有点矛盾,这让我回到了同一点。@JonSkeet同样,如果我们处理类级变量,答案会有什么变化?假设我使用的是映射或其他复杂类型。你是说我只是
clear()?还是让Java完全处理所有事情?@GauravBhor:不,甚至不要清除它-让GC注意到,没有任何东西再引用这些条目了。我可以数一数我在手指上明确地“帮助”GC的次数……我想OP只是没有意识到他可以在没有捕获的情况下最终尝试
try
@MarkoTopolnik:可能……除了Jon Skeet的答案之外,在很多情况下,没有必要为每次调用创建新对象。大多数情况下,您可以使用缓存、飞行权重和各种其他模式和机制。在使用实例分解虚拟机之前,探索这些路径对您来说是件好事。请记住,创建实例也需要时间。