6
Hice algunos benchmarks que comparaban el rendimiento de int vs Integer, long vs Long, instancia de clase vacía vs instancia de clase con valor largo.28 bytes para instancia de objeto/clase vacía?
Y tengo algunas preguntas que no puedo contestar a mí mismo:
- razón por la creación de instancias de la clase vacía o un objeto lleva 28 bytes?
- creación de instancias de objeto largo toma 29 bytes, 8 bytes primitivos, entonces ¿por qué la diferencia a la clase vacía es de solo 1 byte? ¿Qué tipo de optimización está haciendo JVM?
que utilizan JDK1.6.0_30 en MacOS, y el código está disponible en https://github.com/mousator/benchmarks/blob/master/src/sk/emandem/michal/AutoboxingTypeBenchmark.java (usted puede pagar todo el proyecto)
Gracias por las respuestas!
Gracias por la respuesta @Louis. Probé MemoryMeasurer, para la clase vacía obtengo 20 bytes, por lo que 4 bytes como puntero de matriz y 16 por ejemplo (aunque 16 un poco raro). Sin embargo, el método de tiempo de ejecución es interesante ya que produce mediciones bastante estables: repetición iterativa de la secuencia "invocar GC, medir memoria, código de llamada, medir memoria, invocar GC" obteniendo los mismos valores. La única diferencia en las mediciones entre el uso del tiempo de ejecución y MemoryMeasurer es en clase vacía y envoltura int (ambas 25B frente a 20B) – mousator
Presioné enter ... Entonces la pregunta seguida es, ¿puedo estimar OOME usando 20 o 25B? – mousator
Uh. Yo no dependería de eso. Mucho más simple solo para probarlo y ver. –