当我将方法的结果保存在新变量中时更快?

时间:2016-03-02 08:08:20

标签: java performance memory-management

当我将方法的结果保存在新变量中以供进一步使用时,我想知道它是否对性能(可读性旁边)有帮助。我的想法是,这样的方法只需要处理一次,或者这是一种误解,只是浪费记忆?

这里我保存了一个方法的结果,因为我会多次使用它。

  byte[] headerAsArray = getHeaderByteArray(currentResponse.getHttpResponse(), currentResponse.getOriginalHost(), currentResponse.getOriginalURI());
        bb.writeInt(headerAsArray.length);
        bb.writeBytes(headerAsArray);

2 个答案:

答案 0 :(得分:4)

如果你的意思是你试图避免多次调用info.plist,那么是的,你做的是正确的。在几乎所有案例中,拥有一个额外局部变量的“成本”可以忽略不计。我会说它比以下的替代方案更具可读性:

getHeaderByteArray

太可怕了!它可能也是不正确的,如果由于某种原因bb.writeInt(getHeaderByteArray(currentResponse.getHttpResponse(), currentResponse.getOriginalHost(), currentResponse.getOriginalURI()).length); bb.writeBytes(getHeaderByteArray(currentResponse.getHttpResponse(), currentResponse.getOriginalHost(), currentResponse.getOriginalURI())); 可以为每个调用返回不同的结果。 (在这种情况下不太可能,但一般情况下可能。例如,两次调用getHeaderByteArray()并调用一次并使用结果两次之间存在很大差异。)

我可能会通过添加一个接受System.currentTimeMillis()类型的方法来进一步重构它。然后,您可以将代码更改为:

currentResponse

如果您发现自己编写的代码很多,那么想要编写一个接受字节数组并写入长度然后写入字节的方法。在那个点你可以写:

byte[] header = getHeaderBytes(currentResponse);
bb.writeInt(header.length);
bb.writeBytes(header);

答案 1 :(得分:0)

你是对的,通过在变量中保存方法的结果,你可以避免多次调用它,从而降低了复杂性。唯一浪费的空间是字节数组的大小但是,稍后你需要字节数组,所以我不会把它称为浪费。希望我理解你的问题。