Я не уверен, что вы имеете в виду под "захватом большего количества памяти" , но определенно можно найти, какой из них выделяет больше памяти.Это может быть сделано как внутри приложения, так и снаружи.
Внутри приложения
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 не имеет ничего общего с измерениями памяти.