Я хочу изменить максимальный размер кучи через jinfo .
jinfo -flag MaxHeapSize=3122032640 <pid>
Поскольку AdaptiveSizePolicy
включен по умолчанию, изменение флагов напрямую приведет к исключению. Поэтому я отключил AdaptiveSizePolicy при запуске процесса.
java -XX:-UseAdaptiveSizePolicy Sleep.java
Я также могу получить правильный результат через jinfo
jinfo -flag UseAdaptiveSizePolicy 18220
-XX:-UseAdaptiveSizePolicy
Но когда я снова изменяю максимальную память кучи через jinfo, исключения будут
jinfo -flag MaxHeapSize=3122032640 18220
Exception in thread "main" com.sun.tools.attach.AttachOperationFailedException: flag 'MaxHeapSize' cannot be changed
at jdk.attach/sun.tools.attach.VirtualMachineImpl.execute(VirtualMachineImpl.java:224)
at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:309)
at jdk.attach/sun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java:282)
at jdk.jcmd/sun.tools.jinfo.JInfo.flag(JInfo.java:146)
at jdk.jcmd/sun.tools.jinfo.JInfo.main(JInfo.java:127)
Кажется, что -XX:-UseAdaptiveSizePolicy
неэффективен.
Кто-нибудь знает причину?
Я знаю флаг -Xmx
установить максимальный размер кучи.
JDK: openjdk 13.0.1
ОС: Ubuntu 18.04
Флаги VM:
-XX: CICompilerCount = 3 -XX: ConcGCThreads = 1 -XX: G1ConcRefinementThreads = 4 -XX: G1HeapRegionSize = 1048576 -XX: GCDrainStackTargetSize = 64 -XX: InitialHeapSize = 134217728 -XX: MarkStackSize = 41943036XX2XX2XX2XX2SX2: 5XX2XXXXXXXXXXXXX: : MinHeapDeltaBytes = 1048576 -XX: MinHeapSize = 134217728 -XX: NonNMethodCodeHeapSize = 5830732 -XX: NonProfiledCodeHeapSize = 122913754 -XX: профилированный кодHeapSize = 1229640 -XXXXX5XXXXXXXXXXXXXXXXXXXXXXX5XXXX5XXXX5XX8XX8XX8XX8SX: 8S: 16XXXXXXXX5 -UseAdaptiveSizePolicy -XX: + UseCompressedClassPointers -XX: + UseCompressedOops -XX: + UseFastUnorderedTimeStamps -XX: + UseG1G C