在毕玄的<>一书中,明确指定持久代分布在方法区中,但我看了这张图
说持久代位于堆中,故求解
[img]http://dl.iteye.com/upload/attachment/0063/9400/d9238aa5-459d-3dfb-8fa2-b7ff91345d04.png[/img]
首先你说的“持久代”仅仅是HotSpot存在的一个概念,并且将其置于方法区,JRocket与IBM的VM都不存在这个“持久代”,最新的HotSpot也计划将其移除。所以你说的都对,在heap中和在Method Area中并没定论。
建议参考RednaxelaFX的一贴:http://rednaxelafx.iteye.com/blog/905273
而且一般说堆的持久代就是说方法区,因为一旦JVM把方法区(类信息,常量池,静态字段,方法)加载进内存以后,这些内存一般是不会被回收的了。
都对,方法区物理上存在于堆里,而且是在堆的持久代里面;但在逻辑上,方法区和堆是独立的。