Как управление памятью Metaspace и Native Area в Java? - PullRequest
0 голосов
/ 20 января 2019

Из того, что я понял, Родная область внутри JVM полностью запрещена для сборщика мусора. Внутри Родного района, в котором находится Metaspace . В вышеупомянутом Metaspace у нас есть такие области, как Постоянный пул, Поле и Данные метода .

Поскольку Native Area управляется управлением памятью C ++ (или, по крайней мере, я так понимаю), почему Metaspace, который не имеет фиксированного размера, вместо этого динамически увеличивается в зависимости от того, сколько памяти требуется, не хватит памяти? Разрешается ли сборщик мусора в Metaspace, но не в остальной части Native Area? C ++ управляет памятью там динамически?

1 Ответ

0 голосов
/ 20 января 2019

как получается, что Metaspace не имеет фиксированного размера

Вы можете ограничить размер, установив значение для MaxMetaSpaceSize в командной строке.

... не хватит памяти?

Да, на самом деле не хватает памяти. Когда он превысит использование доступной памяти и получит java.lang.OutOfMemoryError: Metaspace исключение.

Разрешен ли сборщик мусора в метаскопе

Да. GC будет собирать кучу Java и Metaspace, но не собственную кучу. Им управляет тот, кому принадлежит нативный код.

Ссылка:

3.2. Понимание исключения OutOfMemoryError

О сборщике мусора G1, постоянной генерации и метапространстве

...