Long 最被我们关注的就是 Long 的缓存问题,Long 自己实现了一种缓存机制,缓存了从 -128 到 127 内的所有 Long 值,如果是这个范围内的 Long 值,就不会初始化,而是从缓存中拿,缓存 初始化源码如下:
private static class LongCache {
private LongCache(){}
// 缓存,范围从-128到127,+1是因为有个0
static final Long cache[] = new Long[-(-128) + 127 + 1];
//容器初始化时,进行加载
static {
// 缓存Long 值,注意这里是i - 128 ,所以再拿的时候就需要+ 128
for(int i = 0; i < cache.length; i++)
cache[i] = new Long(i - 128);
}
}
//备注:这里不止是 Long,Short、Integer 也是有缓存的。
为什么使用 Long 时,大家推荐多使用 valueOf 方法,少使用 parseLong 方法
答:因为 Long 本身有缓存机制,缓存了 -128 到 127 范围内的 Long,valueOf 方法会从缓存中去 拿值,如果命中缓存,会减少资源的开销,parseLong 方法就没有这个机制。

本文详细介绍了Java中Long类的缓存机制,它为-128到127之间的Long值提供缓存,以减少资源消耗。valueOf方法会利用这一特性,而parseLong方法不具备此功能。因此,为了优化性能,推荐在处理可能命中缓存的Long值时使用valueOf方法。
797

被折叠的 条评论
为什么被折叠?



