¿Cómo descargar una clase del cargador de clases, para que pueda usar la clase recientemente modificada sobre la marcha sin reiniciar mi aplicación (implementación activa)? ¿Es posible hacer eso?¿Cómo descargar una clase ya cargada en Java?
Respuesta
No puede descargar una clase que esté realmente en uso. Pero es posible que desee echarle un vistazo a plataformas como OSGi, si desea volver a cargar o volver a implementar su aplicación durante el tiempo de ejecución.
Java rebel reloads cambió las clases sobre la marcha. Ver the jrebel website for details. Sin embargo, no sé si lo recomendaría para un entorno de producción debido a problemas de rendimiento. JRebel ocasionalmente empantana las cosas momentáneamente cuando recompilaste para un servidor.
Usted no puede explícitamente descargar una clase.
En principio, puede expicitly recargar una clase a través de Classloader.loadClass(). A partir de ese momento, todas las instancias nuevas de esa clase usarán la nueva definición.
En cualquier caso, me gustaría proceder con extrema cautela ...
Usted tendría que crear una costumbre ClassLoader
: que devuelve todos los Object
s envueltos dentro de un proxy. El ClassLoader
debe tener una lista de todos los Proxies referenciados (mantenga esta lista WeakReference
d). Si decide "descargar" y, por lo tanto, "volver a cargar" cualquier clase, espere hasta que se cargue la clase, encuentre todos los Proxy en su lista y reemplace el objeto real.
Existen varios problemas: necesita Reflection, para obtener todas las variables privadas y restablecer el estado interno (consulte setAccesible
en Field
). También pueden aparecer problemas de subprocesamiento múltiple, por lo que el Proxy debe sincronizarse: lo que hace que tenga un rendimiento bajo.
Puede buscar mejor la solución de dependencia Guice de Google, que permite desenchufar y volver a cargar módulos en tiempo de ejecución. Esta podría ser una solución, pero demasiado hinchada para una aplicación pequeña. Aún así: no estoy seguro de si el GC también descarga las clases no utilizadas.
- 1. ¿Verifica si ya está cargada una biblioteca dll? (Java)
- 2. Biblioteca nativa sqljdbc_auth.dll ya cargada en otro cargador de clase
- 3. Descargar una DLL cargada con DllImport
- 4. Java: averiguar * por qué * una clase está cargada
- 5. ¿Cómo eliminar una clase cargada de classloader?
- 6. descargar una clase de rubí
- 7. ¿Cuándo entra en una clase descargar de la memoria heap
- 8. cómo descargar un archivo en java?
- 9. Cómo omitir archivos ya existentes al descargar con curl?
- 10. Medición Descargar Speed Java
- 11. ¿Por qué no se puede descargar una clase sin descargar el cargador de clases?
- 12. Cómo crear una clase dinámicamente en Java
- 13. ¿Dónde descargar java-ee.jar?
- 14. ¿descargar archivo zip usando java?
- 15. ¿Cómo abrir la vista con el teclado que aparece cuando la vista ya está cargada?
- 16. En Java, ¿es posible saber si una clase ya se ha cargado?
- 17. RegisterClass fallaron: clase ya sale
- 18. ¿Cómo verificar si una variable está cargada en JavaScript?
- 19. descargar archivos utilizando Java Mail
- 20. Mostrar imagen cargada en JSF
- 21. ¿Ya existe una clase contenedora para una interoperabilidad COM IStream?
- 22. Obtener configuración cargada en el controlador
- 23. Cómo descargar una página web en php
- 24. ¿Cómo puedo lanzar una clase de Java en Clojure?
- 25. Tenemos una clase de clase TimeSpan en Java
- 26. ¿Por qué maven 2 intenta descargar dependencias que ya tengo?
- 27. Reemplazar una DLL mientras AppDomain ya está cargado en ASP.NET
- 28. Java: ¿cómo "reiniciar" una clase estática?
- 29. Dirección ya en uso: JVM_Bind java
- 30. Importar una clase personalizada en Java
Véase también http://stackoverflow.com/questions/148681/unloading-classes-in-java – Vadzim