java性能:将hashMap值存储在变量冗余中吗?

时间:2014-11-17 05:07:13

标签: java performance hashmap

我的目标是减少内存使用量。 如果我需要多次使用该值,我应该将hashMap值存储在变量中吗?

public void upcCheck() {
          String prodUPC = pHashMap.get("productUpc");
          if(prodUpc == ''){
            //do stuff;
          }
          else if(prodUpc == '0123456'){
            //do other stuff;
          }
    }

或者我应该总是使用hashMap的get()方法来避免冗余和不必要的内存使用?

 public void upcCheck() {

              if(pHashMap.get("productUpc") == ''){
                //do stuff;
              }
              else if(pHashMap.get("productUpc") == '0123456'){
                //do other stuff;
              }
        }

hashMap包含很多值ae:产品类型,产品价格等......许多方法都设置为使用这些值。所以我想知道最好的方法。 谢谢!

4 个答案:

答案 0 :(得分:3)

这不是多余的,并且不会占用大量额外的内存。额外的变量不会占用太多内存;如this提到的那样,没有标准金额(取决于vm),但金额足够小,不用担心。

在这种情况下,如果您使用的是List,那么看看访问该列表的时间是多少也会很重要,具体取决于数组的大小。这种时间测量称为时间复杂度。虽然,因为你使用的是Map,所以不用担心。

我更喜欢使用额外的变量,因为它个人更容易阅读。最好选择可读性。删除变量不会导致任何明显的性能提升,看看它根本不需要多少内存,也不应该担心。

答案 1 :(得分:2)

简短的回答是,你不必担心使用变量占用额外的内存。

当您调用方法upcCheck时,将String prodUPC指定为pHashMap.get(“productUpc”)的值。 prodUPC将指向字符串对象。哈希映射还指向字符串对象。 您没有复制字符串对象。您正在创建对它的新引用。有一小部分用于存储对象的引用,但这非常小,只有4个字节。

答案 2 :(得分:0)

如果我需要多次使用该值,您应该将hashMap值存储在变量中。 create方法绑定变量是创建对HashMap值的引用,然后你使用引用de equeals,当你做方法结束时,JVM将回调这个方法使用的所有内存。

答案 3 :(得分:0)

第一个版本更快,更紧凑,只是因为您不会多次冗余访问HashMap

如果你真的被压在内存上,你可能会看到它的变形。 从您的代码段中可以看出它会有所帮助,但想法是如果您有大量无法修改或无法修改的对象,您可能会丢弃重复项。

在我被人们咆哮之前咆哮,这是多么不必要和一个坏主意,我正在考虑你的记忆约束问题。这不是任何人通常应该关心的事情。

可能有多个String对象包含值" 0123456"浮动你的程序,如果你用String.intern()

汇集它们
String productUPC=streamThing.readThing();
productUPC=productUPC.intern();

第二行的效果是用一个'规范'来替换读入的字符串。保存该值的字符串(来自内部池)。效果是减少(可能是大量)持有值#34; 0123456"的游戏中的String对象的数量。 如果您阅读2000产品,可能会有1000个字符串保持相同的值。 注意:根据经验,大多数数据不均匀,最常见的价值通常占人口的50%。 这样的效果可以释放999个String对象和(类似的东西)给你10K的内存。

我再说一遍,这不是你通常会做的事情,但它更有可能为你节省空间,而不是担心局部变量占用的奇怪空间。

这是关于实习字符串的帖子。阅读该文章并链接到该文章,看看这是否适合您。

Is it good practice to use java.lang.String.intern()?