OK - I know that I can start my Java process as follows:
java -XX:+PrintCompilation <FooProgram>
and I see the output, for example:
c:\>java -XX:+PrintCompilation -jar c:\FooProgram.jar 1 java.lang.String::charAt (33 bytes) 2 java.lang.Math::max (11 bytes) 1% java.util.jar.JarFile::hasClassPathAttribute @ 78 (197 bytes) 3 java.lang.String::hashCode (60 bytes) 4 java.lang.String::indexOf (151 bytes) 5 java.util.Properties$LineReader::readLine (452 bytes) 6 java.lang.Object::<init> (1 bytes) 7 java.lang.String::indexOf (166 bytes) 8 java.lang.String::equals (88 bytes)
to give me an idea of which methods are compiled, not compiled, tagged as zombies, etc. Is it even necessary to track the use of the code cache into which these methods are collected? I see a message when the compiler’s cache code is full, saying something like: "I'm full, there are no more compilations for you ...", but it would seem that something like this is an indicator of the lag that we have. I know how to print the maximum size of the code cache, what I'm looking for is really a way to see how it populates over time.
source share