我安装了自定义ClassLoader
以在运行时跟踪加载的类,以捕捉一些糟糕的响应时刻,并且我看到每次创建 JFrame/JDialog 时都会加载一些 GUI 类:
loading: com.sun.java.swing.plaf.windows.WindowsPopupMenuSeparatorUI
loading: com.sun.java.swing.plaf.windows.WindowsTextFieldUI
loading: com.sun.java.swing.plaf.windows.WindowsTextAreaUI
loading: com.sun.java.swing.plaf.windows.WindowsComboBoxUI
loading: com.sun.java.swing.plaf.windows.WindowsPasswordFieldUI
为什么 ClassLoader 会在每个对话框实例化时都加载类,而不仅仅是一次?
另一个例子:
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl
我的简单 ClassLoader
:
public class MyClassLoader extends ClassLoader {
public MyClassLoader ( ClassLoader parent ) {
super( parent );
}
@Override
public Class<?> loadClass( String name ) throws ClassNotFoundException {
System.out.println( "loading: " + name );
return super.loadClass( name );
}
}
JVM参数:-Djava.system.class.loader=mupackage.MyClassLoader