Mi pregunta está relacionada con la huella de memoria en Java para la clase sin miembro de datos. Supongamos que en Java tengo una clase que no tiene un miembro de datos y solo contiene métodos. Entonces, si estoy creando una instancia de una clase particular, ¿ocupa la memoria en la memoria primaria, excepto en la memoria de referencia del objeto?¿La clase sin miembro de datos tiene huella de memoria en java?
Respuesta
En última instancia, cada objeto Java conoce su clase y tiene una primitiva de sincronización opcionalmente unida (aunque this
puede ser sintético). Esas son dos referencias que es difícil hacer una instancia java.lang.Object
sin. Todo lo demás deriva de esa clase, por lo que tienes un piso para los costos que resultó ser al menos 8 bytes in Java 1.3.1. Un generador de perfiles le informará los costos actuales si realmente los necesita.
Sí, lo hace, porque como mínimo incluso un objeto "vacío" tiene un puntero a su tipo de información.
Tienes razón. Es por eso que mencioné en cuestión que excepto referencia/puntero de objeto. Entonces, aparte de la referencia/punto, ¿tiene alguna huella de memoria? –
Depende de la implementación de JVM. Es probable que haya algún tipo de mecanismo de sincronización por objeto o marcadores de marcador para el recolector de basura. Mi mejor estimación sería al menos 8 bytes de sobrecarga por objeto en una máquina de 32 bits. –
La tara puede ser de hasta 16 bytes, para una JVM de 32 bits ... según los detalles de implementación de JVM. Los gastos generales incluyen el tamaño del objeto primitivo, el enlace a la clase, la representación del mutex primitivo, la representación del código hash de identidad, los indicadores para la finalización, etc. –
Seamos claros. Las referencias a su objeto, por supuesto, tomarán espacio. Pero su objeto también tomará espacio para su puntero "this" (es decir, para que pueda distinguir diferentes instancias) y también para los campos de cualquier superclase, p. Ej. Objeto, y finalmente, cualquier sobrecarga que tengan las estructuras de datos internas del montón.
memoria evaluación comparativa es difícil debido a diversas fuentes de interferencia (creciente montón, CG), pero es todavía vale la pena intentarlo:
public static void main(String[] args)
{
final int n = 1000000;
final Runtime runtime = Runtime.getRuntime();
final Object[] objects = new Object[n];
final long memory0 = runtime.totalMemory() - runtime.freeMemory();
for (int i = 0; i < objects.length; i++)
{
objects[i] = new Object();
}
final long memory1 = runtime.totalMemory() - runtime.freeMemory();
final long memory = memory1 - memory0;
System.out.printf(
"%s %s\n",
System.getProperty("java.vm.name"),
System.getProperty("java.vm.version"));
System.out.printf("%d %d %.1f\n", n, memory, 1.0 * memory/n);
}
Java HotSpot (TM) Server VM 14.3-b01 1000000 8000336 8.0
+1 para una prueba real !! – mikera
- 1. Huella de memoria para una aplicación Java
- 2. Multiple .NET procesa la huella de memoria
- 3. Huella de memoria de los tipos de datos Haskell
- 4. ¿Qué aspecto tiene Java en la memoria?
- 5. inicialización de miembro de la clase java
- 6. .NET Huella de memoria EXE
- 7. minimizar la huella de memoria "por conexión" de Tomcat
- 8. Características de la huella de memoria de la colección Scala
- 9. Huella de memoria de mapas de Apple
- 10. Minimizando la huella de memoria en los programas C
- 11. ¿Cuál es la huella de memoria de un método objeto Java intensivo?
- 12. miembro de datos protegidos comunes en la clase base?
- 13. ¿Tiene algún objeto en Java restricciones de tamaño de memoria?
- 14. ¿Cuál es la huella de memoria del DLR?
- 15. Rails 3.1 activos no tiene huella digital en la producción
- 16. Java sin memoria Excepción
- 17. Python: ¿Cómo estimar/calcular la huella de memoria de las estructuras de datos?
- 18. ¿Cuánta memoria tiene mi hilo de Java?
- 19. miembro de la clase estática del propio tipo de clase
- 20. Java: ¿la clase Object tiene un constructor?
- 21. C++: copiar datos de objetos en la función miembro de la clase base
- 22. lector de datos es incompatible ... miembro no tiene correspondiente en la columna lector de datos
- 23. Java "truco", redefiniendo miembro de la clase hija
- 24. Java: Estimaciones de la memoria de la estructura de datos
- 25. ¿Agregar métodos a una clase Java aumenta el uso de memoria de sus instancias?
- 26. Clase de miembro estático: ¿declara clase privada y miembro de clase paquete privado?
- 27. Definir punto de corte para la función de miembro de la clase no tiene éxito
- 28. Cargador de clase de memoria cifrada Java
- 29. Asignación de memoria sin bloqueo de Java
- 30. ¿Los miembros de la clase ocupan memoria?
+1 para el enlace muy bueno – Arne
Una JVM moderna contiene los datos del monitor de objetos en bits no utilizados de otros punteros que contiene (por ejemplo, los dos bits inferiores del puntero de clase) – dty
@Danny: Tiene tres bits disponibles; Los administradores de memoria "modernos" se alinean en límites de 8 bytes (cuando no se trabaja con matrices, que son más densas). Y por "moderno" quiero decir * todo * por 10 años o más. –