我们是否应该在finally块中将本地对象引用分配为null?

维奈·普拉贾帕蒂

当对象处于方法的局部范围内时,是否应该在finally块中将对象引用为null?这样做可以解决哪些性能问题?

代码

Map<String, Map<String, String>> getData(Map<String, String> params) {
    StringBuilder query = new StringBuilder(); // Construct query using it
    ResultSet rs = null;
    try {
        rs = DataUtil.getData(query);
        while(rs.next) {
            // store data in return Map
        }
    } catch(ConnectionException ce){
        ce.printStackTrace();
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        rs = null;
        query = null;
    }
}

在这里,释放rsquery似乎没有实现目的,他们是方法执行后垃圾回收自动有效。任何帮助都会做得很好。

马克·托波尼克(Marko Topolnik)

在某些极端情况下,这可能非常重要:它可以使正在运行的程序与OutOfMemoryException有所不同。考虑以下代码:

long[] hugeAry = new long[Integer.MAX_VALUE]; // barely fits on the heap
... work on hugeAry;
hugeAry = null;
int[] intHugeAry = new int[Integer.MAX_VALUE];
... work on this one

注释掉hugeAry = null很容易导致OOME。这些案例可能比这更奇怪。请查看SO上的相关主题

但是,请不要误会我的意思:在99.9%的情况下,使本地人finally无效(不管是本地还是本地)都没有关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们何时应该在React类中将函数定义为箭头函数?

我们是否应该在 t.references 字段上提及为 nullable: false

我们是否应该在Java中为Mongodb使用OGM / ORM之类的休眠模式?

在finally块中将对象引用设置为null

我们应该在哪里为cfwheels中的表单编写验证代码?

为什么我们应该在Django中为MongoDB创建Model字段?

我们应该在Java中断言每个对象创建吗?

我们应该在PHP中使用“ --->”之类的对象范围吗?

我们是否应该在 kubernetes 容器中设置 -Xmx(最大 Java 堆大小)

我们是否应该在CKDatabase和CKRecordZone中分别缓存CKServerChangeToken?

我们是否应该在Swift的闭包内部始终使用[unown self]

我们是否应该在调用异步回调的库中使用ConfigureAwait(false)?

突破是否应该在有条件的范围之内,在我们的外部?

我们是否应该在微服务之间使用api网关(例如zuul)?

我是否应该在graphql模式文件中将每个对象两次写为'input'和'type'

当参数在 Rust 中作为引用提供时,我们应该在函数体内使用参数引用吗?

Objective-C:我们应该在块内使用弱自我还是在使用强自我之前将弱自我分配给强自我?

我们应该在 SpringBoot 中将 @Scheduled 与控制器方法(如 @PostMaping)一起使用吗?

我们应该在Vue 3中将mixins转换为基于类的组件定义语法吗?

我们应该在Spring Boot中为存储层编写单元测试和集成测试吗?

我们应该在 firebase 中为 ios 和 Android 使用相同的 google-services.json 吗?

我们应该在另一个类中传递注入的对象吗

我们是否应该在类上使用 @Component 注释来记录/指示它是一个 Bean?

Arquillian Suite扩展-我们是否应该在Suite中添加所有测试类

在Darknet中实施yolo时,我们是否应该在图像网络数据集上进行训练?

我们是否应该在 KElbowVisualizer 方法之前进行缩放以在 python 中进行聚类

匿名类对象是否应该在 onDestroy 上设置为 null?

我们是否投射对象或引用?

我们是否应该通过Android平台中的对象引用对象