以下是关于JVM中缓存区的一些问题:( for hotspot Java8 )
答案 0 :(得分:2)
请注意,答案可能因实施而异:
jvm可以运行的所有机器代码都存储在此区域中,还是仅存储 一些热门代码存储在这里?
代码缓存几乎总是用于缓存热方法(或曾被C1 + C2认为 hot 的方法(分层编译 )
从一些书中,它说客户编译器(C1)更有可能耗尽 缓存区域中的内存,而服务器编译器(C2)则没有。我是一个 对此很困惑。那是因为服务器编译器而已 编译热部分,并中断其他部分?在这种情况下, 服务器编译器不应该慢吗?
C1编译器编译所有内容。 C2等待直到找到可以应用的一些优化,然后应用这些优化并编译方法(并非总是如此,但主要是)。
请注意,C1可以多次编译相同的方法。
在C1&之前运行代码的次数C2会编译它们 分别?
如果C1 / C2发现它需要很长时间才能运行,即使只调用一次,也可以编译一个方法。
您可以使用JITWatch查看C1和C2的运行情况。