2009-08-19 19 views

Respuesta

27

Los métodos se almacenan en otro lugar de la memoria. Tenga en cuenta que los métodos son por clase, no por instancia. Por lo general, la cantidad de métodos no cambia durante el tiempo de ejecución de un programa (hay excepciones). En los modelos tradicionales, el lugar donde viven los métodos se llama el "segmento de código". En .net, es más difícil: los métodos originalmente viven en el ensamblado y se asignan a la memoria de proceso. Allí, el compilador just-in-time crea una segunda copia de algunos métodos en código nativo; esta copia se ejecuta. El código JIT puede crearse y eliminarse varias veces durante el tiempo de ejecución, por lo que es práctico verlo también como vivo "en Heap".

+0

+1 Me encantó la explicación ... –

+0

No dije "pre-clase", sino "** por ** - clase". Los métodos son por clase: esto significa que todos los métodos existen solo una vez para la clase. Las diferentes instancias tienen los mismos métodos. Los atributos/propiedades son por instancia: existe un atributo para cada instancia, es decir, distintas instancias tienen valores diferentes para un atributo. –

+0

@Martin: tengo una preocupación con respecto a esto. No entiendo por qué el código JIT creó una copia cada vez que se ejecutaba ese método. ya dijiste que los métodos son por clase y estoy 100% de acuerdo con eso, pero también creo que cuando se llama un método, se refiere al mismo método real sin copiar, porque si hay algún tipo de cosa de copia (eso dijiste) entonces, ¿cómo puede el método ser por clase? – Singleton

2

Los métodos de clase se almacenan junto con todos los códigos en un segmento dedicado de la memoria del programa destinado específicamente para almacenar el código. El código de cada método se almacena una vez.

Cuestiones relacionadas