Java中的本地变量的死存储

时间:2016-02-17 13:16:55

标签: java garbage-collection

bug-dead store背后的机制究竟是什么呢?

有人说,当你为变量赋值但在该代码块/函数中不再使用该变量时,会发生死存储到变量错误(我正面临同类错误)。

void foo(){
String str = someObj.getString();
//some code but str is never used after assignment...
}

但是也有一种情况是你倾向于用一个值初始化一个变量,但是在后面的指令中,你将该变量的值替换为其他值。

List<String> list = new ArrayList<>();
list = someobj.getList();

在这种情况下,永远不会使用由新ArrayList&lt;&gt;()创建的对象,它也被定义为死存储。

我们在java中有一个垃圾收集机制,它负责处理这些孤立对象并负责优化内存。 因此,如果垃圾收集处理内存泄漏,那么为什么我们将这个死存储的bug存在于局部变量?

垃圾收集器可以在这个bug中扮演什么角色吗?

很明显,GC无法识别出这样的死店!但是,为什么GC无法识别?

注意:我认为,开发人员应该避免分配从未使用过的值的错误。但这仍然是我脑海中的一个疑问,现在我想要一个结构良好且技术性的答案..;)

1 个答案:

答案 0 :(得分:2)

GC完全没问题。这不是一个真正的错误。简单来说效率低下:你正在消耗CPU时间和内存。

它也可能是一个错误的指示:如果您(或您之前的同事)添加了此指令,但您之后不使用该变量,则可能意味着您忘记了算法中的某些内容。