Как правило, обычно используется последний вариант, если инструмент не отклоняет дубликат, но вы не можете рассчитывать на это, если инструмент не задокументирует его.
Лучше всего посмотреть, что происходит с вашей конкретной JVM, с помощью Runtime
totalMemory
и maxMemory
:
public class HeapSize {
public static final void main(String[] args) {
Runtime rt = Runtime.getRuntime();
System.out.println("Total currently: " + rt.totalMemory());
System.out.println("Max: " + rt.maxMemory());
System.exit(0);
}
}
На my JVM (Sun / Oracle 1.6.0_26-b03 под Linux) вступает в силу последняя опция:
$ java -Xmx16m HeapSize
Total currently: 16121856
Max: 16121856
$ java -Xmx32m HeapSize
Total currently: 32178176
Max: 32178176
$ java -Xmx16m -Xmx32m HeapSize
Total currently: 32178176
Max: 32178176
$ java -Xmx16m -Xmx32m -Xmx128m HeapSize
Total currently: 59113472
Max: 119341056