Tenemos dos clasificaciones montón y pila. Cuando se crea un objeto, la memoria para el objeto se almacena en el montón. ¿Qué pasa si la clase tiene métodos estáticos, que se pueden llamar utilizando el nombre de la clase. Si el objeto no se crea, ¿cómo asignará la memoria y, en caso afirmativo, dónde asignará la memoria?Asignación de memoria de método estático
Respuesta
Los métodos (es decir, el código) no se almacenan en un objeto; todos los objetos de una clase compartirán el código de un método. Independientemente del idioma (Java, C++ o prácticamente cualquier otra cosa), solo habrá una copia del código para cualquier método, estático o no. En general, hay un área específica de memoria, es decir, un segmento CODE en un idioma nativo como C++, o un área de montón especial en Java, donde se carga el código.
Se crea la memoria OK para objetos junto con la clase. es decir, solo se crea la memoria para la clase en el montón (java). Solo cuando utilizamos un nuevo operador podemos crear memoria. Pero para clases como Math no podemos crear instancias ... en ese caso, ¿dónde se creó la memoria? – Harini
Como dije (pero no estoy seguro de haber entendido), el código no se almacena en los objetos, por lo que no es un problema en absoluto. No está almacenado en ningún lugar donde puedas llegar a él, de hecho. Se almacena en otro lugar en una parte especial del montón. La JVM carga el bytecode de un archivo de clase, lo transforma de alguna manera dependiente de la implementación y pone los métodos a disposición de su programa. –
@ user980918 java.lang.Math no necesita mucha memoria en tiempo de ejecución; la única pieza en la que puedo pensar es en la variable estática que contiene un objeto 'Random'. Las variables estáticas para una clase se almacenan en el montón, junto con el objeto 'Clase'. (Las variables locales en los métodos están en la pila, independientemente de la estática del método). –
Depende de la JVM, pero los campos estáticos generalmente se almacenan en un objeto especial en el montón. (Puede verlo en un volcado del montón) Cuando el cargador de clases está descargado, sus clases y sus "objetos"/campos estáticos también se limpian.
Lo único diferente sobre el "objeto" estático es que no puede obtener una referencia. (Pero puede usar la reflexión para acceder a los campos)
- 1. Asignación de memoria dinámica
- 2. 64bit Asignación de memoria
- 3. Java Memoria Asignación Fugas
- 4. Asignación de memoria de Android
- 5. Sugerencia de asignación de memoria
- 6. de asignación de memoria Problema
- 7. asignación dinámica de la memoria
- 8. Asignación de memoria en C++
- 9. asignación de memoria en C++
- 10. Asignación dinámica de memoria pregunta
- 11. Asignación de memoria en C
- 12. Intercambio de variables dentro del método estático
- 13. Usando método estático vs. método de objeto
- 14. Asignación dinámica de método/Método como variable
- 15. Declaración de método "estático" inusual
- 16. método de fábrica estático público
- 17. Asignación de memoria dinámica basada en disco
- 18. Diferencia de nivel bajo: clase no estática con método estático vs. clase estática con método estático
- 19. Extraño comportamiento de asignación de memoria iOS
- 20. Asignación de memoria de objeto Delphi
- 21. Perfilado de asignación de memoria en C++
- 22. Asignación de memoria sin bloqueo de Java
- 23. C++ problema de asignación de memoria
- 24. Alineación de asignación de memoria Java
- 25. git-clone error de asignación de memoria
- 26. Método "Resumen estático": ¿cómo?
- 27. Anular un método estático
- 28. GetType método estático en
- 29. Bloque estático vs método estático - inicialización de campos estáticos
- 30. Método estático de una clase estática frente a un método estático de una clase no estática (C#)
¿qué idioma? – NPE
¿Y para qué sirve esta memoria asignada? –
Está claro por su comentario a continuación que es Java, así que he agregado una etiqueta Java. –