Java不同类型的最佳 /缓存



我知道字符串/文字是优化的 - 它们存储在noheap permanenteneration-实习字符串中,因此,如果您创建两个相同的文字,它们会在内存中指出相同的地址。blockquote>

实习字符串(字符串表) Java语言规范要求包含相同序列Unicode代码点的相同的字符串文字必须参考字符串的相同实例。另外,如果在字符串的实例上调用string.intern(),则必须返回引用,如果字符串是文字的,则必须与参考返回相同。因此,以下是正确的: (" j" " v" " m")。intern()==" jvm"

其他类型呢 - 它们是否存储在某些JVM区域?我听说整数被以某种方式缓存 - 但是以JVM或整数课内的静态方式进行了缓存吗?所有整数都已缓存 - 从integer.min_value到max_value吗?诸如INT之类的简单类型也被缓存吗?诸如BigDecimal,Long,Char等的其他类型呢?

大型类型是否像长,整数一样在与长和int的位置相同的位置?JVM或哪里?

字符串是特殊的 - 它们是唯一具有语法级支持文字支持的非重要类型。正如您的话说, String的文字(和不是 String实例构建的任何其他方式)始终在JVM上重复使用。所有其他类,包括LongInteger,仅缓存他们设计用于缓存的内容。

查看Integer.valueOf(int)的文档:

通过缓存经常请求的值,该方法可能会比new Integer()产生明显更好的空间和时间性能[CC_6]。此方法将始终在-128至127的范围内缓存值(包含),并且可以在此范围之外缓存其他值。

您可以看到Integer支持缓存,但仅在某些情况下。如果您调用new Integer(),即使存在另一个等效对象,也会始终始终获取新实例。String也是如此 - 如果您调用new String(),则确保结果是另一个对象。换句话说:

"foo" == new String("foo")

无论Java的String字面缓存行为如何。

最新更新