最近在学jvm,了解了jvm中方法区只是一个规范,具体的落地实现视不同的厂商而定。但作为1.8之前hotspot虚拟机以永久代这一方式来实现,我一直想弄清楚它到底在哪,元空间在本地内存,而网上提到永久代的大部分文章仅仅说堆不包括永久代,那么1.8之前的永久代(也就是方法区)到底在哪,求解惑
这些jvm会转换划分出一块进程内的内存空间。
可以看下这篇文章
https://ask.csdn.net/questions/685108
这时有几篇文章https://blog.csdn.net/leesinbad/category_12083271.html
参考GPT和自己的思路:
1.8之前的hotspot虚拟机将永久代(也就是方法区)放在了堆中,具体来说,是在堆的非年轻代中。这一设计可能是为了方便内存管理和垃圾回收。不过需要注意的是,虽然永久代与堆处于相同的内存空间中,但永久代与堆并不是同一个内存区域,它们在内存分配和回收上具有不同的特点。
在1.8之后的版本中,由于永久代容易导致内存泄漏和OOM等问题,被移除并被元空间所取代,并且元空间不再是堆中的一部分,而是在本地内存中分配。