문제

나는 최근 JRE 6에서 이용할 수있는 모든 JVM 주장에 대해 읽고 있었다.Java VM 옵션] 그리고 이것을 보았습니다 :

-XX :+StringCache : 일반적으로 할당 된 문자열의 캐싱을 활성화합니다.

이제 나는 항상 Java가 인턴 (올바른 단어) 줄을 보관했다는 인상을 받았으며 문자 그럴과 문자열 연결과 같은 것을 할 때 새 개체를 만들지 않고이 수영장에서 당기는 것이 었습니다. 이 주장을 사용한 사람이 있거나 왜 필요한지 설명 할 수 있습니까?

편집하다: 나는이 주장이 어떤 영향을 미쳤는지 확인하기 위해 벤치 마크를 실행하려고 시도했다. 이것은 다음과 같습니다.

java version "1.6.0_11"  
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode,
sharing)

그래서이 주장이 전혀 작동하는지 확실하지 않습니다.

도움이 되었습니까?

해결책 6

나는이 주장을 받아들이는 단일 JVM을 찾을 수 없었습니다. 그래서 나는 할 말이 많지 않다고 생각합니다.

다른 팁

나는 함께 사용했을 때 믿습니다 -XX:+AggressiveOpts 동일하게 가능합니다 String 만들 때 반환 할 객체 String 같은 텍스트로 (이를 통해서는 아니지만 new String, 물론이야). 캐시가 쌓이는 프로파일 단계가 있으며, 한 지점 후 캐시는 읽기 전용으로 전환됩니다. 특정 벤치 마크에서 더 높은 점수를 얻습니다.

-xx :-usestringcache가 이상하게 작동합니다.

내 JDK 버전은 1.6.0_22 여야합니다

나도 위의 일을 할 수 없었지만 최신 JBB @ Spec.org는 다음을 보여줍니다 : -xx : -usestringcache. 벤치 마크를 다시 실행하여 차이가 있는지 확인해야합니다 (XML 헤비 앱).

또한이 설정을 존중하는 JVM을 찾을 수 없었습니다. JVM 매개 변수에 대한 문서의 품질과 유용성에 대해 언급 한 바와 같이, JVM 매개 변수에 대한 유용성은 끔찍하지만, 어떤 이유로 든 JVM 공급 업체는 경쟁 차별화를위한 공간을 보는 영역 인 것 같습니다.

어쨌든 특정 영역의 앱이 적은 수의 문자열 값을 반복적으로 사용한다는 것을 알게되면 String.intern () 메소드를 사용하여 Interning을 사용하는 것이 확실히 합리적입니다. 리턴 값을 사용해야합니다. 원래 값의 부작용이 아닙니다.

모든 프로파일 링/성능 조정과 마찬가지로 메트릭과 테스트를 통해 신중하게 수행해야합니다. 그것은 중요 할 수 있지만 (나에게있어) 값 풀이 작지 않으면 성능이 저하되어 문자열 값의 풀이 파마에서 유지되므로 메모리 사용에 영향을 미칩니다. GC 등.

JDK 8.0 기준 으로이 옵션이 제거되었습니다. 교체품으로 무엇을 사용할 수 있는지는 확실하지 않습니다.

http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

 -XX:+UseStringCache

    Enables caching of commonly allocated strings. This option was removed from JDK 8 
    with no replacement.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top