如果一个类由不同的类加载器加载,(sun-jvm) 热点优化是否会发生多次?

发布于 2024-09-24 11:56:29 字数 369 浏览 6 评论 0原文

想象一个(容器)应用程序正在创建多个类加载器来托管几个其他/子应用程序。

容器应用程序有一个根类加载器。每次加载子应用程序时,容器都会为此应用程序创建一个新的类加载器。

一些子应用程序使用相同的类,但它们不是由容器的类加载器加载的,因此每个子应用程序(更好:其类加载器)加载例如类 A 的代码。因此 permspace 将被填充两次:一次用于子应用程序#1 和子应用程序 #2 一次。

这对于 sun 的热点优化意味着什么?
相同的优化是否会在 A 类上发生两次,每个类加载器一次?
或者,是否有一些内置的“魔法”可以避免这种情况? (优化完成一次)
有人知道链接吗,有解释吗?

我指的是带有 jdk 1.6 的 sun(服务器)虚拟机

imagine a (container-) application is creating multiple classloaders to host a couple of other/sub- applications.

There is a -say- root classloader for the container app. Each time a sub-application is loaded, the container creates a new classloader for this application.

Some sub-applications use the same classes, but they were not loaded by the container's classloader, so each sub-application (better: its classloader) loads the code for e.g. class A. Therefore permspace will be filled twice: once for sub-application #1 and once for sub-app #2.

What does this mean for sun's hot-spot optimization?
Will the same optimizations occur twice on class A, once for each class-loader?
Or, is there some "magic" built-in which avoids this? (Optimizations done once)
Somebody knows a link, were this is explained?

I am referring to a sun (server) vm shipping with jdk 1.6

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

池木 2024-10-01 11:56:29

我没有任何文献可以向您指出来证明这一点,但我可以根据经验告诉您,如果您的类被重新加载,您的方法将被重新编译和重新优化。您可以通过添加:

-XX:+PrintCompilation

到 Java 命令行并执行您的应用程序来观察这一点。这将准确地告诉您正在编译哪些方法。如果您看到相同的方法输出两次,您就知道它正在被重新编译。如果您不确定您的类是否正在重新加载,请

-verbose:class

同时添加:。这将向您显示所有类加载事件。

I don't have any literature that I can point you to in order to prove this, but I can tell you from experience that if your classes are being re-loaded, your methods will be re-compiled and re-optimized. You can observe this by adding:

-XX:+PrintCompilation

to the Java command line and execute your app. This will tell you exactly what methods are being compiled. If you see the same method output twice, you know it's being re-compiled. If you aren't sure that your classes are being re-loaded, add:

-verbose:class

as well. This will show you all class load events.

人间不值得 2024-10-01 11:56:29

必须的。无法保证第二个类加载器加载与第一个类加载器相同的字节码。

It must. There is no guarantee that the 2nd classloader loaded the same bytecode as the 1st classloader.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文