2011-06-29 21 views
6

Mi pregunta es, ¿cuándo carga JVM todas las clases en el proyecto? Además, ¿por qué necesitamos la noción de un cargador de clases?¿Cuál es el propósito del cargador de la clase Java?

Estaría contento si pudiera darme un ejemplo de una situación en la que utiliza el cargador de clases y por qué utiliza el cargador de clases en esa situación.

+4

estudiar Tal vez los cargadores de clases en general y hacer preguntas específicas. Preguntar "Por favor, explique todo lo que sabe acerca de los cargadores de clase" es en mi humilde opinión un poco demasiado pedir. – Arne

+0

+1 Arne. ClassLoaders/class-loading es un gran tema. ClassLoader es en sí mismo una clase, y ClassLoaders se puede organizar jerárquicamente con diferentes políticas; self-first, parent-first y Thread Context ClassLoaders: un tema desconcertantemente grande pero afortunadamente bien documentado por numerosas fuentes, consigue Google y prepárate para leer mucho. – earcam

Respuesta

13

cuando se hace la carga JVM todas las clases en el proyecto.

La JVM carga las clases más o menos "a la carta". Es decir. todas las clases en el tiempo de ejecución normalmente no se cargarán al iniciarse.

se refieren a estas direcciones URL para obtener más información sobre este tema:

¿Por qué necesitamos la noción de un cargador de clases

Los cargadores de clase nos permiten cargar clases de varias fuentes.

  • un archivo jar en el disco
  • un tiempo de ejecución generados de matriz de bytes
  • de Internet (que es un caso de uso típico para los applets)

Esto hace que el lanzamiento de una aplicación más flexible y modular.

Dame un ejemplo de situación en la que se utiliza el cargador de clases y por qué se utiliza el cargador de clases allí.

Sin una clase-loader que no va a llegar muy lejos, así que voy a interpretar su pregunta como "¿cuándo se necesita una costumbre cargador de clases ".

Personalmente, realicé algunos experimentos utilizando una biblioteca de manipulación de código de bytes (ASM) donde reemplacé los accesos de campo con las llamadas get y set-method. Usé un cargador de clases personalizado para reescribir las clases a medida que se cargaban. No sé si es un caso de uso típico, pero el punto es que no podría haber hecho esto sin uno.

También podría imaginarse un sistema de complemento que carga clases de periféricos desde algún directorio de complementos.

+0

'Dynamic class loading' puede ser un buen ejemplo en el que usamos el método Class.forName (String clazz) para cargar dinámicamente la clase en el contenedor ... – Rupesh

1

Clases de carga JVM bajo demanda. Cuando necesite que la clase se cargue explícitamente, debe hacer referencia a esa clase desde la clase principal, por ejemplo

 
static { 
    MyClass.class.getName(); 
} 

Custom classloader is rarely needed, most commons cases are: AOP (for example runtime on-load instrumentation of classes with Javassist), remote class loading (loading a class from remote location), encrypted class loading (deciphering class code and loading).

1

You use class Loader for loading classes if you are developing application which can support plugins. Sample: You have application for video player and each codec is plugin in your application. you have folder ./codecs and there you put your plugin codecs. You search the folder for jar files and load all jar files with Class loader.

2

A class is loaded whenever it is executed directly orif it is referenced in another class which is to be executed... for example

class A 
{} 
class B extends A 
{ 
    public static void main(String arr[]) 
    {} 
} 

here whenever u get execute class B,the class A is loaded automatically

now consider this

class A 
{} 

class B 
{ 
    public static void main(String arr[]) 
    { 
    A ob=new A();//here class A is need to be loaded by JRE 
    } 
} 
1

JVM loads a Class the first time it is referenced. For in depth analysis of Class Loaders look here

0

Class loader is used in many cases. Few examples are:

  1. Class.forName to get Java classes at runtime
  2. Reflection API
  3. Eclipse debugger

There are lot of other examples as well.

0

Default Class Loader will load .class file only once, even though you are using that multiple times in your program. After loading.class file, if it is modified outside then default class loader wont load updated version of class file(.class file is already available in method area). You can resolve this problem, by defining your own customized Class Loader.

Main advantage of customized class loader is you can control, class loading mechanism based on your requirement.

java.lang.ClassLoader para definir un cargador de clases personalizado. Cada cargador de clases en JAVA debe ser una clase hija de la clase java.lang.ClassLoader, ya sea directamente o indirectamente. Por lo tanto, esta clase actúa como clase base para todos los cargadores de clase personalizados.

Nota: Al diseñar/desarrollar servidores web y servidores de aplicaciones, generalmente los cargadores de clases personalizados se utilizan para personalizar el mecanismo de carga de clases.

Por ejemplo:

public class CustClassLoader extends ClassLoader{ 
    public Class loadClass(String cname) throws ClassNotFoundException{ 
    //check for updates and laod updated .class 
    //file and returns corresponding Class 
    } 
} 

class Client{ 
    public static void main(String [] args){ 
     Dog d1 = new Dog(); 
     CustClassLoader c1 = new CustClassLoader(); 
     c1.loadClass("Dog"); 
     // 
     // 
     // 
     c1.loadClass("Dog"); 
     // 
    // 
    } 
} 
Cuestiones relacionadas