2012-03-08 18 views
10

Estoy aprendiendo ClassLoader en Java, entonces quiero saber por qué JVM tiene muchos cargadores de clases, ¿por qué no solo uno? El primero carga <Java_Runtime_Home>/lib, luego carga <Java_Runtime_Home>/lib/ext, y carga por última vez classpath.¿por qué jvm tiene muchos clasloaders? ¿por qué no uno?

Si tiene un cargador de clases personalizado, el sistema es el primero.

Alguien me puede decir por qué JVM tiene muchos cargadores de clases?

Respuesta

17

Una aplicación muy útil es la de poder implementar varias aplicaciones web en un solo servidor Java EE.

Cada aplicación puede usar versiones diferentes de las mismas bibliotecas, y debe tener un cargador de clases diferente de los demás para poder tener diferentes versiones de las mismas clases en una sola JVM.

+0

pero el servidor web tiene su propio cargador. Puede tener varios cargadores de clases. – liuxiaori

+0

¡quizás yo konw! ¡Gracias! – liuxiaori

+0

Entonces, en una nota no relacionada, ¿solo JVM puede tener varias instancias de Singleton? Uno por cargador de clase? – user1071840

4

Le permite ejecutar varias aplicaciones en la misma JVM.

También le permite descargar porciones de código y actualizarlas en un sistema en ejecución. (Incluso si sólo tiene una aplicación)

Usted puede encontrar esta información sobre OSGi útiles http://www.javaworld.com/javaworld/jw-03-2008/jw-03-osgi1.html

6

Hay varias razones para apoyar más de un cargador de clases.

Primero: separación de clases. Imagine un servidor de aplicaciones. Múltiples proyectos independientes pueden incluir las mismas bibliotecas. Si cada aplicación tiene su propio cargador de clases, pueden cargar diferentes versiones sin colisión y los campos estáticos de AFAIK son instanciados por cargador de clases.

En segundo lugar: classloaders se pueden sobrescribir para cambiar las clases. Un cargador de clases puede mejorar las clases durante el tiempo de carga. Útil para la programación orientada a aspectos (AspectJ) o para agregar código de depuración o de creación de perfiles. Una manera fácil de modificar solo una biblioteca pero no la otra es cargarla a través de diferentes clasificadores.

5

enter image description here Los cargadores de clases son jerárquicos y utilizan un modelo de delegación al cargar una clase. Los cargadores de clases solicitan que su padre cargue la clase primero antes de intentar cargarlo ellos mismos. Cuando un cargador de clases carga una clase, los cargadores de clases secundarios en la jerarquía nunca volverán a cargar la clase. Por lo tanto, se mantiene la singularidad. Las clases cargadas por un cargador de clases hijo tienen visibilidad en las clases cargadas por sus padres en la jerarquía, pero la inversa no es verdadera como se explica en el diagrama anterior.

Cuestiones relacionadas