Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 permgen在JDK 7 JVM中的位置是什么?_Java_Jvm_Permgen - Fatal编程技术网

Java permgen在JDK 7 JVM中的位置是什么?

Java permgen在JDK 7 JVM中的位置是什么?,java,jvm,permgen,Java,Jvm,Permgen,我正在研究JDK 7 JVM的运行时数据区域 我想比较JDK7JVM和JDK8JVM。JDK7JVM中有一些内存区域,但我感到困惑 我正在博客中寻找JDK 7 JVM运行时数据区体系结构图片和文章,但所有的文章都有不同的说法 堆包括年轻一代,老一代 JVM中的方法区域在哪里?堆非堆?本机内存?还是独立? 方法区域中的运行时常量池 本机内存中的JVM堆栈 本机内存中的本机方法堆栈 本机内存中的PC寄存器 但我对PermGen在运行时数据区域中的位置感到困惑 有人告诉PermGen是方法领域的一部分

我正在研究JDK 7 JVM的运行时数据区域

我想比较JDK7JVM和JDK8JVM。JDK7JVM中有一些内存区域,但我感到困惑

我正在博客中寻找JDK 7 JVM运行时数据区体系结构图片和文章,但所有的文章都有不同的说法

堆包括年轻一代,老一代 JVM中的方法区域在哪里?堆非堆?本机内存?还是独立? 方法区域中的运行时常量池 本机内存中的JVM堆栈 本机内存中的本机方法堆栈 本机内存中的PC寄存器 但我对PermGen在运行时数据区域中的位置感到困惑

有人告诉PermGen是方法领域的一部分

有人告诉我们这个区域是PermGen的一部分

有人告诉PermGen不是堆。 那么PermGen是否位于本机内存中?那么运行时数据区域分为3个部分?堆,非HeapMethod区域,本机内存

有人的照片告诉PermGen是堆的一部分


什么是正确的?

如果只区分堆和本机内存,PermGen是堆区域的一部分。方法领域也是如此

你所附的图片在这方面基本上是正确的

在热点VM中,永久性生成PermGen是/曾经是堆区域之一

然而,它是一个与主内存堆分离的特殊堆空间。
它不受-Xmx或-Xms等Java选项的影响,并且有自己的限制和垃圾收集行为。因此,根据视点和上下文,也可以说它是非堆。

我很好奇你为什么会在意?一天结束时,所有内存都是从操作系统分配的,并通过MMU或类似机制映射的。人们选择给它起什么名字并不重要。如果你链接/引用你在网上找到的相互矛盾的信息,也许也会有所帮助。最后,JVM规范没有提到这些术语中的任何一个,让JVM实现或多或少地做它想做的事。因此,最好将这个问题的范围限制在特定的JVM上,如热点等。“堆内存”和“非堆内存”在技术上没有区别。它是从同一进程分配的同一种RAM。在技术方面,人们可能会认为这两种类型都是典型的,但是一旦这种分类不起作用,就像在“PyMGEN”的情况下,讨论它属于哪一类是没有意义的。讨论您感兴趣的特定技术方面会更有用。