Используя MemoryMXBean (извлекается путем вызова ManagementFactory.getMemoryMXBean ()
а также [Runtime.getRuntime ()] (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#getRuntime())'s методы [.totalMemory ()] (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#totalMemory()), [.maxMemory ()] (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#maxMemory()) и [.freeMemory () ] (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#freeMemory())
Обратите внимание, что это не точное искусство: при создании нового объекта могут быть выделены другие временные объекты, которые не дадут вам точного измерения. Как мы знаем, сборка Java-мусора не гарантируется, поэтому вы не можете сделать это для устранения мертвых объектов.
Если вы исследуете, вы увидите, что большинство кодов, которые пытаются выполнить эти измерения, будут иметь циклы вызовов Runtime.gc () и снов и т. Д., Чтобы попытаться гарантировать, что измерение является точным. И это будет работать только на определенных реализациях JVM ...
На сервере приложений / развернутом приложении вы, скорее всего, получите только грубые измерения / изменения использования, когда выделяется куча и запускается gc, но этого должно быть достаточно. [Я предполагаю, что вы не реализуете gc () и спит в производственном коде:)]