想象一个(容器 - )应用程序正在创建多个类加载器来托管其他几个/子应用程序。
容器应用程序有一个-say- root类加载器。每次加载子应用程序时,容器都会为此应用程序创建一个新的类加载器。
一些子应用程序使用相同的类,但它们没有被容器的类加载器加载,因此每个子应用程序(更好:它的类加载器)加载代码,例如:因此,permspace将被填充两次:一次用于子应用程序#1,一次用于子应用程序#2。
这对太阳的热点优化意味着什么?
对于A类,相同的优化会发生两次,每个类加载器一次吗?
或者,是否有一些内置的“魔法”可以避免这种情况? (优化一次)
有人知道一个链接,这是解释?
我指的是装有jdk 1.6的sun(服务器)vm
答案 0 :(得分:0)
我没有任何文献可以指出你为了证明这一点,但我可以从经验告诉你,如果你的类被重新加载,你的方法将被重新编译和重新优化。您可以通过添加以下内容来观察:
-XX:+PrintCompilation
到Java命令行并执行你的应用程序。这将告诉您具体编译的方法。如果您看到相同的方法输出两次,您就知道它正在重新编译。如果您不确定是否正在重新加载类,请添加:
-verbose:class
也是。这将显示所有类加载事件。
答案 1 :(得分:0)
必须。无法保证第二个类加载器加载与第一个类加载器相同的字节码。