繁体   English   中英

jvm - 关于代码缓存区

[英]jvm - About code cache area

下面是一些关于 JVM 中缓存区的问题:(对于热点 Java8

  • jvm可以运行的所有机器码都存储在这个区域,还是只有一些热代码存储在这里?
  • 在某本书中,它说客户端编译器(C1)更有可能在缓存区耗尽内存,而服务器编译器(C2)则不会。 我对此有点困惑。 那是不是因为服务器编译器只编译热点部分,而中断其他部分? 在那种情况下,服务器编译器不应该很慢吗?
  • 在 C1 和 C2 分别编译和缓存它们之前,代码运行了多少次?

请注意,对此的答案可能因实现而异:

jvm可以运行的所有机器码都存储在这个区域,还是只有一些热代码存储在这里?

代码缓存几乎总是用于缓存热方法(或曾经被 C1 + C2(分层编译)认为是的方法)

在某本书中,它说客户端编译器(C1)更有可能在缓存区耗尽内存,而服务器编译器(C2)则不会。 我对此有点困惑。 那是不是因为服务器编译器只编译热点部分,而中断其他部分? 在那种情况下,服务器编译器不应该很慢吗?

C1 编译器编译一切。 C2 等待直到找到一些可以应用的优化,然后应用这些优化并编译方法(并非总是如此,但大多数情况下)。

请注意,C1 可以多次编译相同的方法。

在 C1 和 C2 分别编译它们之前,代码运行了多少次?

如果 C1 / C2 发现它需要很长时间才能运行,即使只调用一次方法也可以编译。

您可以使用 JITWatch 来查看 C1 和 C2 的运行情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM