Область CompressedClassSpaceSize содержит область MaxMetaspaceSize?

Случайно я наткнулся на другой способ сделать силовое убийство в Unix (для тех, кто использует Weblogic). Это дешевле и элегантнее, чем запуск / bin / kill -9 через Runtime.exec ().

import weblogic.nodemanager.util.Platform;
import weblogic.nodemanager.util.ProcessControl;
...
ProcessControl pctl = Platform.getProcessControl();
pctl.killProcess(pid);

И если вы пытаетесь получить pid, вы можете использовать отражение на java.lang.UNIXProcess , например:

Process proc = Runtime.getRuntime().exec(cmdarray, envp);
if (proc instanceof UNIXProcess) {
    Field f = proc.getClass().getDeclaredField("pid");
    f.setAccessible(true);
    int pid = f.get(proc);
}
0
задан Hearen 25 March 2019 в 01:23
поделиться

1 ответ

Metaspace - это область памяти для хранения метаданных класса - внутренних структур JVM, созданных при анализе файлов .class.

Метаданные класса включают в себя:

  • Внутреннее представление классов Java
  • Методы с их байт-кодом
  • Дескрипторы поля
  • Пулы констант
  • Символы
  • Аннотации
  • и т. Д.

-XX:MaxMetaspaceSize не ограничен по умолчанию.

Когда опция -XX:+UseCompressedClassPointers включена (по умолчанию для куч < 32G), классы перемещаются из Metaspace в отдельную область, называемую Compressed Class Space . Это должно разрешить адресацию структур классов VM с помощью 32-битных значений вместо 64-битных.

Итак, Compressed Class Space содержит внутреннее представление классов Java, в то время как Metaspace содержит все остальные метаданные: методы, пулы констант, аннотации и т. Д.

Размер сжатого пространства классов ограничен -XX:CompressedClassSpaceSize, который по умолчанию равен 1G. Максимально возможное значение -XX:CompressedClassSpaceSize составляет 3G.

Неклассовое Metaspace и Compressed Class Space являются двумя непересекающимися областями. MaxMetaspaceSize ограничивает фиксированный размер обеих областей:

committed(Non-class Metaspace) + committed(Compressed Class Space) <= MaxMetaspaceSize

Если значение MaxMetaspaceSize меньше CompressedClassSpaceSize, последнее автоматически уменьшается до

CompressedClassSpaceSize = MaxMetaspaceSize - 2*InitialBootClassLoaderMetaspaceSize
0
ответ дан apangin 25 March 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: