2011-04-17 6 views
6

Duplicar posible:
Java Instantiation.¿Cómo crea Java un objeto en la JVM? ¿Qué sucede en la pila y en el montón cuando llamo a un constructor?

Supongamos que tenemos una prueba de clase Java, esta clase tiene dos campos de datos A y B, y tiene un método foo(). Cuando ejecutamos "Test t = new Test()", quiero saber las siguientes cosas.

  1. ¿Qué pasó en la pila?
  2. ¿Qué pasó en el montón?
  3. Tenemos una copia de clase y muchas instancias (objetos) en tiempo de ejecución, ¿verdad? Entonces, ¿dónde se almacena el contenido de la clase? El contenido de la clase es estático.
  4. En el montón, creo que los campos de datos a y b deben almacenarse ya que son dinámicos (específicos para un determinado objeto). ¿Qué pasa con el método foo()? ¿Tenemos que almacenar el contenido de foo() junto con a y b en el montón?

Básicamente, quiero saber la magia de la nueva palabra clave?

+0

Aquí se responde a esta pregunta http://stackoverflow.com/questions/220133/java-instantiation – aviad

+0

Después de leer las respuestas, todavía estoy confundido. Gracias de todos modos. – andrew

+0

@andrew, ¿puedes ser más específico? Trataré de aclarar las cosas. – aviad

Respuesta

0

Básicamente:

  • Cualquier código compartido de clase (tanto de instancia y estáticas métodos, variables estáticas, etc.) se encuentran en lo que podríamos llamar el área "código de programa", que no es ni el montón, ni la pila.
  • El objeto en sí se construirá en el montón, y comprenderá los campos de instancia más una tabla de punteros a los métodos de instancia adecuados (el llamado vtable) de acuerdo con la herencia. Tenga en cuenta que este objeto incluirá a todos los miembros de cada clase en la cadena de herencia, incluso si la forma en que lo está tratando no revela a ciertos miembros. (Por ejemplo, C extiende B extiende A, y B tiene un campo privado, un objeto C todavía contendrá el campo B, incluso si es invisible).
  • Los campos y las variables contendrán referencias a objetos (básicamente punteros transparentes) o un tipo nativo, como int, double o boolean (los que comienzan en minúsculas).
  • Las variables locales y los parámetros del método se almacenarán en la pila.
Cuestiones relacionadas