Как предотвратить GC при использовании Caliper

При использовании калипера я получаю

ERROR: GC occurred during timing.

так как в моем тесте создается некоторый мусор, которого я не могу избежать. Я предполагаю, что выделение большего объема памяти для целевой JVM может помочь, так как мусора не так уж много. Я знаю о вариантах -D и -J, но у меня почему-то не работает.

Во-первых, я вижу в этом вопросе, что несколько аргументов переданные через Jmemory=-Xmx512M,-Xmx16M, используются отдельно, т. е. каждый аргумент, разделенный запятыми, приводит к новому запуску. Но я хотел бы передать несколько аргументов, которые будут использоваться вместе, например, -Xmx16G -XX:NewSize=12G, чтобы GC максимально откладывался (и на самом деле вообще не наступал, поскольку прогон тем временем заканчивается). Как мне это сделать?

Во-вторых, каковы наилучшие аргументы, максимально откладывающие GC? Я имею в виду, дать JVM много памяти (-Xmx), использовать ее всю для Эдема и не заботиться о том, насколько она заполнена.


person maaartinus    schedule 15.09.2014    source источник
comment
Какая у вас версия Калипера?   -  person BeeOnRope    schedule 23.09.2014
comment
@BeeOnRope Трудно сказать, я использую HEAD из git, сейчас половина год. Но я готов обновиться или перейти на какой-нибудь репозиторий, если это поможет.   -  person maaartinus    schedule 23.09.2014
comment
Точно, новее меня тогда. Я все еще на 0.5rc и собирался проверить там. Мне повезло предотвратить GC, гарантируя, что я делаю System.gc() в настройке, а затем устанавливаю NewSize как можно больше. Однако это заходит так далеко, что если вы выделяете больше, чем eden, вы собираетесь GC, а не наоборот. Чтобы передать несколько аргументов JVM (а не список комбинаций, которые нужно попробовать), вам просто нужно иметь несколько аргументов -J, например -JXmx=-Xmx512M -JNewSize=-XX:NewSize=12G и т. д. Имя, которое вы даете, не имеющий отношения.   -  person BeeOnRope    schedule 24.09.2014