java.lang.ClassLoader#loadClass() API 由第三方库、JDBC 驱动程序、框架和应用程序服务器使用,将 java 类加载到内存中。应用程序开发人员不经常使用此 API。但是,当他们使用诸如“”或“”之类的API时,他们会在内部调用此“”API。java.lang.Class.forName()org.springframework.util.ClassUtils.forName()java.lang.ClassLoader#loadClass()
在运行时,在不同线程之间频繁使用此 API 可能会降低应用程序性能。有时它甚至会使整个应用程序无响应。在这篇文章中,让我们进一步了解这个API及其性能影响。
'classloader.loadclass()' API 的用途是什么?
通常,如果我们想实例化一个新对象,我们会像这样编写代码:
new io.ycrash.DummyObject();
但是,您可以使用 ClassLoader.loadClass() API 并实例化对象。以下是代码的外观:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); brClass<?> myClass = classLoader.loadClass("io.ycrash.DummyObject"); brmyClass.newInstance();
您可以注意到在第 2 行中调用了 “”。此行将 '' 类加载到内存中。在第 3 行中,“”类使用“”API 实例化。classLoader.loadClass()io.ycrash.DummyObjectio.ycrash.DummyObjectnewInstance()
这种实例化对象的方式就像用手触摸鼻子,通过你的脖子后面。您可能想知道为什么有人会这样做。只有在编写代码时知道类的名称时,才能使用“new”实例化对象。在某些情况下,您可能只在运行时知道类的名称。例如,如果您正在编写框架(如Spring框架,XML解析器等),您将知道仅在运行时要实例化的类名。在编写代码时,您将不知道将实例化哪些类。在这种情况下,您最终将不得不使用“”API。ClassLoader.loadClass()
哪里使用'classloader.loadclass()'?
''用于几个流行的第三方库,JDBC驱动程序,框架和应用程序服务器。本节重点介绍一些使用“”API的流行框架。ClassLoader.loadClass()ClassLoader.loadClass()
Apache Xalan
当您使用Apache Xalan框架序列化和反序列化XML时,将使用“”API。下面是使用 Apache Xalan 框架中的 '' API 的线程的堆栈跟踪。ClassLoader.loadClass()ClassLoader.loadClass()
at java.lang.ClassLoader.loadClass(ClassLoader.java:404) br- locked <0x6d497769> (a com.wm.app.b2b.server.ServerClassLoader) brat com.wm.app.b2b.server.ServerClassLoader.loadClass(ServerClassLoader.java:1175) brat com.wm.app.b2b.server.ServerClassLoader.loadClass(ServerClassLoader.java:1108) brat org.apache.xml.serializer.ObjectFactory.findProviderClass(ObjectFactory.java:503) brat org.apache.xml.serializer.SerializerFactory.getSerializer(SerializerFactory.java:129) brat org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.jbrava:260) brat org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:330) brat org.springframework.ws.client.core.WebServiceTemplate$4.extractData(WebServiceTemplate.java:441) br:br:
谷歌 GUICE 框架
当您使用Google GUICE框架时,将使用“”API。下面是使用Google GUICE框架中的“”API的线程的堆栈跟踪。ClassLoad