Es posible que desee ver la instrumentación de Java para descubrirlo. Here es un ejemplo de lo mismo.
En su caso, como creo que desea encontrar el tamaño de los objetos de su aplicación, hará que el objeto Instrumentation esté disponible globalmente (static
) para que pueda acceder a él desde su aplicación.
código copiado desde el enlace:
public class MyAgent {
private static volatile Instrumentation globalInstr;
public static void premain(String args, Instrumentation inst) {
globalInstr = inst;
}
public static long getObjectSize(Object obj) {
if (globalInstr == null)
throw new IllegalStateException("Agent not initted");
return globalInstr.getObjectSize(obj);
}
}
Sin embargo, creo que usted será capaz de encontrar el tamaño de sólo objetos (no tipos primitivos, también que no necesite para encontrarlos a medida que ya les saber :-))
Nota que el método getObjectSize() no incluye la memoria utilizada por otros objetos referenciados por el objeto pasado en. por ejemplo, si objeto a tiene una referencia a Ob ject B, luego la memoria informada del objeto A el uso incluirá solo los bytes necesarios para la referencia al Objeto B (generalmente 4 bytes), no el objeto real.
Para obtener un recuento "profunda" del uso de la memoria de un objeto (es decir, que incluye "objetos parciales" o objetos mencionados por el objeto "principal"), entonces usted puede utilizar el agente Classmexer disponible para descarga beta desde el sitio this.
No varían por máquina pero no hay operador sizeof en java si esto es lo que está preguntando – Cratylus