[英]jvm - About code cache area
下面是一些关于 JVM 中缓存区的问题:(对于热点 Java8 )
请注意,对此的答案可能因实现而异:
jvm可以运行的所有机器码都存储在这个区域,还是只有一些热代码存储在这里?
代码缓存几乎总是用于缓存热方法(或曾经被 C1 + C2(分层编译)认为是热的方法)
在某本书中,它说客户端编译器(C1)更有可能在缓存区耗尽内存,而服务器编译器(C2)则不会。 我对此有点困惑。 那是不是因为服务器编译器只编译热点部分,而中断其他部分? 在那种情况下,服务器编译器不应该很慢吗?
C1 编译器编译一切。 C2 等待直到找到一些可以应用的优化,然后应用这些优化并编译方法(并非总是如此,但大多数情况下)。
请注意,C1 可以多次编译相同的方法。
在 C1 和 C2 分别编译它们之前,代码运行了多少次?
如果 C1 / C2 发现它需要很长时间才能运行,即使只调用一次方法也可以编译。
您可以使用 JITWatch 来查看 C1 和 C2 的运行情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.