如图像所示,Permgen进一步分为几个部分。

运行时常量池存储与类加载器加载的每种类型有关的常量。 方法区域存储方法返回类型、方法名称等方法信息。(如果我错了,请纠正我。) 而预留区是在permgen需要更多内存的情况下保留的部分。
但我不明白的是,图像中的代码区域是什么?任何代码都存储在这个空间中(在我看来似乎很模糊)?
发布于 2013-11-21 11:51:13
Any code is stored in this space(seems vague to me)?有什么特别的原因吗?
可能的答案可能是:代码区域存储加载到内存中的类的字节代码。
但是接下来的问题是:为什么不直接在内存中加载类?
因为我们有一个JVM来提供互操作性,因为JVM是java代码和机器之间的中介,所以我们需要一些地方来存储代码语句,直到OS计划JVM执行其代码(因为OS是一个进程)。因此,它加载代码区域中的字节代码(如果我是正确的),并在计划时进一步将代码(.class)解释为底层机器指令。
我的答案是“代码区域保存类的字节代码”。
为了支持上面提到的想法,下面是从Oracle博客复制的一些概念,它说:
因此Java类存储在永久代中。这一切意味着什么?除了Java类的基本字段之外,还有:
希望一切都过去了。
发布于 2013-11-21 11:54:44
来自一篇关于PermGen:Java 8会解决PermGen OutOfMemoryError吗?问题的有趣文章
Oracle在他的博客中解释了永久生成的目的:永久生成包含关于类的信息,例如字节码、名称和JIT信息。它存储在一个单独的空间中,因为它大多是静态的,而垃圾收集可以通过将其分离来得到更多的优化。
发布于 2013-11-21 11:58:52
实际上,PermGen存储了所有的静态代码。我认为这对您来说是有道理的,为什么在PermGen中有一个代码区域。
https://stackoverflow.com/questions/20119478
复制相似问题