java性能:将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:产品类型,产品价格等……许多方法都设置为使用这些值。 所以我想知道最好的方法。 谢谢!

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

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

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

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

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

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

第一个版本更快更紧凑,只是因为你没有多次冗余访问HashMap

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

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

可能有多个String对象包含浮动在程序周围的值“0123456”,如果使用String.intern()它们汇集在一起

 String productUPC=streamThing.readThing(); productUPC=productUPC.intern(); 

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

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

这是一篇关于实习字符串的post。 阅读该文章和链接的文章,看看这是否适合你。

使用java.lang.String.intern()是一种好习惯吗?