2013-12-20 2 views
2

jconsole을 사용하여 javaDB (derby)를 모니터링했지만 Java 버전은 1.6.0_27입니다. 나는이 artical에서 읽으면서-XX : + UseCodeCacheFlushing을 사용하지 않으면 JVM의 CodeCache가 플러시됩니까?

: CodeCache is full. Compiler has been disabled, 는 내가 CodeCache가 -XX없이 플러시되지 않습니다 생각 : + UseCodeCacheFlushing-XX : + UseCodeCacheFlushing 자동으로 1.7.0_4 때까지 켜져 있지 않습니다. 나를 놀라게

하지만 jconsole을가 CodeCache 사용이 아래로 떨어지면 보여줍니다 :

CodeCache Usage Falls Down

은 여기에 대한 설명이 있습니까?
게다가 JIT 컴파일 방법 외에 CodeCache에는 무엇이 있습니까?

미리 감사드립니다.

+0

일부 메소드가 컴파일되지 않아서 일 수 있습니다. – assylias

+0

감사의 말 assylias, 일부 방법은 '최적화 된 것'때문에 무언가를 버릴 필요가 있다는 것을 의미합니까? JVM 기사에서 JVM은 거의 통계 정보를 기반으로 최적화 된 방법을 사용하여 드물게 발생하는 논리적 분기를 제거 할 수 있다고 읽었습니다. – abuuu

+1

다형성 (polymorphism)의 경우 디 컴파일해야하는 메소드가 있습니다 (예 : http://mechanical-sympathy.blogspot.co.uk/2012/04/invoke-interface-optimisations.html). 이것이 내가 당신이 관찰하는 것에 대한 이유인지는 모르겠습니다. 단지 추측 일뿐입니다. – assylias

답변

1

이유는 아마도 UseCodeCacheFlushing = true 옵션 일 수 있습니다. 아래 3 버전 JDK의 만들면 기본적의 설정 :

$ java -XX:+PrintFlagsFinal -version | grep CodeCacheFlush 
bool UseCodeCacheFlushing      = true        {product} 

자바 버전 "1.8.0_25" 자바 (TM) SE 런타임 환경 자바 핫스팟 (TM) 64 비트 서버 (1.8.0_25-B18를 구축) VM

$ ./java -XX:+PrintFlagsFinal -version | grep CodeCacheFlush 
uintx CodeCacheFlushingMinimumFreeSpace   = 1536000   {product} 
intx MinCodeCacheFlushingInterval    = 30    {product} 
bool UseCodeCacheFlushing      = true   {product} 

자바 버전 "1.7.0_79" 자바 (TM) SE 런타임 환경 자바 핫스팟 (TM) 64 비트 서버 (1.7.0_79-B15를 구축) (25.25-B02, 혼합 모드를 구축) VM (빌드 24.79-b02, 혼합 모드)

$ java -XX:+PrintFlagsFinal -version | grep CodeCacheFlush 
uintx CodeCacheFlushingMinimumFreeSpace   = 1536000   {product}   
intx MinCodeCacheFlushingInterval    = 30    {product}   
bool UseCodeCacheFlushing      = true   {product}   

자바 버전 "1.7.0_51" 자바 (TM) SE 런타임 환경 (빌드 1.7.0_51-B13) 자바 핫스팟 (TM) 64 비트 서버 VM (혼합 모드를 24.51-B03를 구축)