Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中管理元空间和本机区域内存?_Java_Memory_Java 8_Jvm_Metaspace - Fatal编程技术网

如何在Java中管理元空间和本机区域内存?

如何在Java中管理元空间和本机区域内存?,java,memory,java-8,jvm,metaspace,Java,Memory,Java 8,Jvm,Metaspace,据我所知,JVM内部的本机区域对垃圾收集器是完全禁止的。在本机区域内,元空间位于其中。在前面提到的元空间中,我们有诸如常量池、字段和方法数据等区域 因为本地区域是由C++内存管理(或者至少我是如何理解的)来管理的,为什么Meta空间不是固定大小的,而是根据需要存储多少内存而动态地增长,不会耗尽内存吗?是否允许在元空间中使用垃圾收集器,但不允许在本机区域的其余部分使用垃圾收集器?C++是动态管理内存的吗? 为什么元空间不是固定大小的 您可以通过在命令行上设置MaxMetaSpaceSize的值来限

据我所知,JVM内部的本机区域对垃圾收集器是完全禁止的。在本机区域内,元空间位于其中。在前面提到的元空间中,我们有诸如常量池、字段和方法数据等区域

因为本地区域是由C++内存管理(或者至少我是如何理解的)来管理的,为什么Meta空间不是固定大小的,而是根据需要存储多少内存而动态地增长,不会耗尽内存吗?是否允许在元空间中使用垃圾收集器,但不允许在本机区域的其余部分使用垃圾收集器?C++是动态管理内存的吗? 为什么元空间不是固定大小的

您可以通过在命令行上设置
MaxMetaSpaceSize
的值来限制大小

…不会耗尽内存吗

是的,它确实耗尽了内存。当它超过可用内存的使用量时,将获得
java.lang.OutOfMemoryError:Metaspace
异常

元空间中是否允许使用垃圾收集器

对。GC将收集Java堆和元空间,但不收集本机堆。它由本机代码拥有者管理

参考:


而不是
java.lang.OutOfMemoryError:Metaspace
,是不是
java.lang.StackOverflowerError
?@对于Infinity来说,从技术上来说,两者都是不同的
StackOverflower
并不意味着
OutOfMemory
,相反,您已经超过了堆栈的大小。此外,还有一个主要问题尚未得到解答,除了元空间之外,本机区域的其他区域是否允许使用GC?@ForInfinity(并非罕见)的混淆源于对两个完全不同的事物使用术语“垃圾收集器”。垃圾收集器是否遍历元空间中的对象?否。垃圾收集器的活动是否允许回收元空间内的内存?对另见