Java функция / метод управления памятью - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть несколько вопросов по поводу Jvm управления памятью:

1) если два метода или функции работают в фоновом режиме непрерывно, можно ли узнать, какой из них занимает больше памяти?

2) если это возможно, то можем ли мы сделать это с помощью Java Reflection?

1 Ответ

0 голосов
/ 16 ноября 2018

Я не уверен, что вы имеете в виду под "захватом большего количества памяти" , но определенно можно найти, какой из них выделяет больше памяти.Это может быть сделано как внутри приложения, так и снаружи.

Внутри приложения

private static final com.sun.management.ThreadMXBean threadMXBean =
        (com.sun.management.ThreadMXBean) ManagementFactory.getThreadMXBean();

public void myAllocatingMethod() {
    long before = threadMXBean.getThreadAllocatedBytes(Thread.currentThread().getId());

    // ... some business logic that allocates memory ...
    byte[] array = new byte[500000];

    long after = threadMXBean.getThreadAllocatedBytes(Thread.currentThread().getId());
    System.out.println("Method allocated " + (after - before) + " bytes");
}

Примечание: это подсчитывает память, выделенную в контексте текущего потока.Если метод порождает новые потоки или выполняет некоторый код в пуле потоков, то не очевидно, как учитывать выделенную память для конкретного метода.

За пределами приложения

Использовать профилировщики распределения, такие как Java Mission Control .

PS Отражение Java не имеет ничего общего с измерениями памяти.

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