java - String intern问题
PHP中文网
PHP中文网 2017-04-17 16:14:23
0
1
644

美团团队技术博客深入解析String#intern提到 intern 正确使用例子的代码如下

static final int MAX = 1000 * 10000; static final String[] arr = new String[MAX]; public static void main(String[] args) throws Exception { Integer[] DB_DATA = new Integer[10]; Random random = new Random(10 * 10000); for (int i = 0; i < DB_DATA.length; i++) { DB_DATA[i] = random.nextInt(); } long t = System.currentTimeMillis(); for (int i = 0; i < MAX; i++) { //arr[i] = new String(String.valueOf(DB_DATA[i % DB_DATA.length])); arr[i] = new String(String.valueOf(DB_DATA[i % DB_DATA.length])).intern(); } System.out.println((System.currentTimeMillis() - t) + "ms"); System.gc(); }

很好奇为什么要

arr[i] = new String(String.valueOf(DB_DATA[i % DB_DATA.length])).intern();

而不是直接

arr[i] = String.valueOf(DB_DATA[i % DB_DATA.length]);

而且String.intern() is meant to decrease memory use.,这样子new String后再intern完全不能提升性能吧?

PHP中文网
PHP中文网

认证高级PHP讲师

모든 응답 (1)
黄舟

new String().intern()的目的是可以节约内存空间,intern之后,如果字符串的字面值相同,那么就不需要再浪费空间重新new一个String对象出来了,直接使用常量池里的对象引用就可以啦。

当然new String()这一步是不可避免的(String.valueOf内部最终也是new String),不过new String之后没有变量引用这个实例(arr[i]引用的intern()返回值,也就是常量池里的对象),很快就会被GC回收掉的。

    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!