2013-03-15 80 views

回答

4

Java String常量的实习池是Java编译器已知的,因此您无法亲自模拟确切的行为。

然而,池本身不过是一个哈希映射。如果你的对象有一个合适的标识符,你当然可以为你自己的对象滚动一个池:简单地创建一个静态方法,该方法需要一个键,在静态哈希映射中查找它,并且只有在没有合并时才构建一个新对象然而。但是,请注意,在这个简单的方案工作,你的对象是不可改变的。

+0

所以基本上保持一个静态哈希映射将复制池。对? ,这意味着池式字段的数量更少,缓存会更有效/更高效? – Ankit 2013-03-15 10:28:22

+1

@ ay89通常,只有当您创建的对象之间存在大量重复时,池才会有效。您可以拥有一个包含代表客户的30个字段的对象,以及他的地址,电话号码等。如果您只有100个客户,那么即使拥有大量字段的班级,您的集合也将非常有效。另一方面,如果您尝试使用代表2D坐标(整数对)的类来合并类,并将其用于一组10,000个随机生成的坐标,则缓存将不会有效,即使只有两个领域。 – dasblinkenlight 2013-03-15 10:35:10

+0

好的,但是如果有更多的字段数量较多的重复对象,那么就内存而言,池化将是有效的。但同时,我认为,它会消耗更多的时间,比较大量的字段来决定对象是否重复。对? – Ankit 2013-03-15 10:46:11

3

字符串池是不是在Java中,整数和其他包装类的唯一池/缓存使用缓存,你可以去看看整数源代码为例

public static Integer valueOf(int i) { 
    assert IntegerCache.high >= 127; 
    if (i >= IntegerCache.low && i <= IntegerCache.high) 
     return IntegerCache.cache[i + (-IntegerCache.low)]; 
    return new Integer(i); 
} 

你也可以看看在http://commons.apache.org/proper/commons-pool//

相关问题