java - 挂线程 java.lang.ClassLoader.findBootstrapClass

标签 java multithreading performance jakarta-ee classloader

我的 J2EE 应用程序执行缓慢。我们在那种情况下进行了 Thead 转储,发现以下线程在多个转储中是 Runnable 并且已经锁定了一些监视器,这导致其他线程(直接或间接)等待锁定。

at java.lang.ClassLoader.findBootstrapClass(Native Method)
at java.lang.ClassLoader.findBootstrapClass0(ClassLoader.java:891) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:301) 
    - locked [0x9747c360] (a sun.misc.Launcher$ExtClassLoader) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:299) 
    - locked [0x9747c318] (a sun.misc.Launcher$AppClassLoader) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) 
    - locked [0x9747c318] (a sun.misc.Launcher$AppClassLoader) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
.....

您能否建议该线程不移动并让其他线程工作?

最佳答案

为什么您的应用程序要加载这么多类(锁在 loadClass 中)?预计您的应用仅在初始化和预热期间加载已卸载的类。

因此,我怀疑正在发生以下情况之一:

  • 您正在创建许多不同的动态代理类,而不是尝试重用它们。
  • 您不必要地创建了很多类加载器,或者至少滥用了它们。
  • 您正在启动和终止多个并行 JVM。

不用说,这些东西都是非常昂贵的,应该尽可能避免。

关于java - 挂线程 java.lang.ClassLoader.findBootstrapClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4734158/

相关文章:

java - Spring Session Data Redis - 从 Redis Store 获取有效 session 、当前用户

java - Java 中 Atomic set() 和 getAndSet() 方法的区别

c# - .NET C# 线程异常处理

performance - 加速结构化 NumPy 数组

java - 循环两次但在 JAVA 中花费相同的时间

java - 需要有关计算 Java 方法性能的帮助

java - 授权不起作用(Spring Security)

java - android中类似于iOS的VOIP推送和调用套件的调用

multithreading - C++ fork/std::thread 和 boost::timed_join

c++ - 编译并运行程序