2009-07-19 70 views
5

是否可以在Java中实现多线程类加载器?在一个元驱动框架中,我需要提前加载几百个类,即不像系统类加载器那样延迟。为了加速这一点,我想更好地利用当前的多核CPU。在我深入研究之前,如果有人在这个问题上已经有一些经验,或者如果可能完全清楚,或许defineClass()是这种情况下的瓶颈,我会感兴趣。多线程类加载可能吗?

感谢 安德烈

回答

6

我相信目前你会打一个独家锁。在JDK7中,类加载器将能够将自己标记为可并行。

和往常一样,我建议可能要做一些后端计算,然后吸引它。

0

有没有错具有一个或多个线程在需要你需要预加载的所有类的后台加载的类。用Executor和Callables做一个原型,这样你就可以用jvisualvm获得一些分析信息。

+1

从技术上讲,应该可以有多个线程加载类,这很清楚。 defineClass()方法不同步,这是一个先决条件。但是我想知道JVM代码中是否有一个更深的同步点,可以防止真正的MT类加载,而不会显而易见? – 2009-07-19 17:38:50

+1

defineClass不同步,因为类加载被JVM定义为单线程。 (至少在Java 5和Java 6中)几百个类不需要那么长时间就可以加载需要加载的时间段? – 2009-07-19 19:03:38