2011-10-06 18 views
10

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

+1

¿qué idioma? – NPE

+2

¿Y para qué sirve esta memoria asignada? –

+0

Está claro por su comentario a continuación que es Java, así que he agregado una etiqueta Java. –

Respuesta

1

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.

+0

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

+0

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. –

+0

@ 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). –

2

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)

Cuestiones relacionadas