2009-07-24 8 views

Respuesta

6

JVM solo carga las clases requeridas desde el Jar cuando se invoca. Si la aplicación necesita una clase, entonces la clase y todas las otras clases dependientes se cargarán. No estoy seguro, pero supongo que es responsabilidad del cargador de clases ubicar la clase desde el classpath y cargar.

0

El cargador de clases predeterminado solo carga lo que necesita, cuando lo necesita. Si tiene un JAR de 10 MB en su CLASSPATH, y solo se necesita un archivo .class, la JVM solo cargará esa clase la primera vez que el código intente acceder a ella. El bytecode .class entra en el espacio permanente.

Es "controlable" en el sentido de que puede escribir su propio cargador de clases, pero requiere cierta experiencia para hacerlo.

1

Todo depende de JVM y del cargador de clases. La especificación JVM especifica que la clase debe aparecer para ser cargada en su primer uso activo. Los cargadores de clases pueden cargar algunas de las clases antes de lo requerido en anticipación. En realidad, la mayoría de los cargadores de clase demoran la carga el mayor tiempo posible.

2

Los archivos jar son una forma de archivos comprimidos.

La forma en que se manejan depende en gran medida de JRE.

Las versiones anteriores de Sun JRE utilizadas para la memoria mapean todo el archivo. Esto asignará la memoria lógica, pero no necesariamente causará que se carguen los datos del disco. (Windows de 32 bits generalmente no es capaz de asignar 3 GB de memoria contigua, aunque puede hacerlo en otros sistemas operativos).

Creo que el comportamiento actual es la asignación de memoria al directorio central en la parte posterior del archivo en Windows. En otros sistemas operativos, solo se lee. Esto está controlado por #define s en la fuente.

Es probable que JDK7 haga algo más.

Las clases se cargan generalmente perezosamente. Los recursos se vuelven a leer cada vez. java.util.ResourceBundle cachés.

Cuestiones relacionadas