как получить память, используемую процессом Java в Java - PullRequest
2 голосов
/ 30 января 2009

Я запускаю сервер JBOSS, развертывая свои собственные классы. Теперь я начал выполнять некоторые операции с моим приложением. Теперь я хотел бы знать, сколько памяти используется моим приложением до и после выполнения операций. Пожалуйста, поддержите меня в этом отношении

Ответы [ 3 ]

5 голосов
/ 30 января 2009

Используя 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 () и спит в производственном коде:)]

2 голосов
/ 30 января 2009

Получите свободную память перед выполнением операции Runtime.getRuntime (). FreeMemory () и затем снова после завершения операции, и вы получите память, используемую вашей операцией.

0 голосов
/ 26 июля 2009

Вы можете найти результаты, которые вы не получили. GC очистит использованную память в случайных точках в фоновом режиме, поэтому вы можете обнаружить, что если вы будете выполнять одни и те же операции много раз, вы получите разные результаты. У вас даже может появиться больше свободной памяти после выполнения операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...