1

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

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

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

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

我指的是带有 jdk 1.6 的 sun(服务器)vm

4

2 回答 2

0

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

-XX:+PrintCompilation

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

-verbose:class

也是。这将显示所有类加载事件。

于 2010-09-24T17:07:42.160 回答
0

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

于 2010-09-25T02:25:01.597 回答