Me enteré de que los campos de clase están almacenados en el montón, pero ¿dónde están almacenados los métodos? En el montón o en otro lugar? ¿Están en línea?¿Dónde se almacenan los métodos en la memoria?
Respuesta
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".
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.
- 1. ¿Dónde se almacenan los objetos temporales?
- 2. ¿Dónde se almacenan los metadatos del puntero?
- 3. ¿Dónde se almacenan los ivars sintetizados?
- 4. ¿Dónde se almacenan los "Certificados" en Firefox?
- 5. ¿Dónde se almacenan los archivos evtx archivados?
- 6. ¿Dónde se almacenan los módulos de python?
- 7. ¿Dónde se almacenan los mensajes flash?
- 8. ¿Dónde se almacenan las macros?
- 9. iPhone: ¿Dónde se almacenan NSUserDefaults?
- 10. ¿Dónde se almacenan los volcados centrales en Mac?
- 11. Cómo | ¿Dónde se almacenan las variables cerradas?
- 12. ¿Dónde se almacenan los bloques CMS estáticos de Magento?
- 13. ¿Dónde se almacenan los paquetes del sistema Java?
- 14. ¿Dónde se almacenan los atributos de Java HttpSession?
- 15. ¿Dónde se almacenan las imágenes dentro de los programas?
- 16. ¿dónde se almacenan los marcadores de sincronización de Google Chrome?
- 17. ¿Dónde se almacenan las propiedades. Configuración predeterminada?
- 18. ¿Dónde se almacenan los valores de DataValueField para CheckBoxList?
- 19. ¿Cómo cambiar dónde se almacenan los repositorios de Subversion?
- 20. ¿Dónde se almacenan los datos enviados por UDP?
- 21. ¿Dónde se almacenan los archivos de logcat de Android?
- 22. ¿Dónde se almacenan las variables constantes en C?
- 23. ¿Dónde almacenan las cookies los navegadores?
- 24. ¿Cómo se almacenan las variables de bytes en la memoria?
- 25. ¿Dónde se almacenan las compras de InAPP?
- 26. ¿Dónde se almacenan las preferencias compartidas?
- 27. ¿Dónde y cómo se almacenan las contraseñas en Magento?
- 28. ¿Cómo se almacenan los miembros de la unión?
- 29. ¿Dónde se almacenan los literales en una declaración como esta si (var == 'x')?
- 30. ¿Dónde se almacena la memoria en vtable?
+1 Me encantó la explicación ... –
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. –
@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