采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
视频开头说Jdk8以后开始把类的元数据放在本地堆内存中,这一块区域叫做MetaSpace,这是有问题的吧 元空间没有使用堆内存,而是与堆不相连的本地内存区域,之前从线程分析java内存模型那张图上,元空间和堆空间也是分开的
没太明白同学的意思,视频里这样说的,"jdk8以后,确实把类的元数据放到本地堆内存*(native heap)中,这一块区域就叫做metaSpace. 前面咱们提及过方法区,实际上元空间便是方法区的实现,而方法区只是一种JVM的规范,在java7之后,方法区里的里的字符串常量池已被移动到了java堆中,并且在java8中使用元空间替代了永久代,这一替代并非仅仅是名字上的替代,两者最大的区别是元空间使用本地内存,而永久代使用的是jvm的内存,使用本地内存有什么好处呢,最直接的表现就是老版本的java中见到java.lang.OutOfMemoryError: PermGen space这个异常的将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上metaspace就可以有多大,这解决了空间不足的问题,不过也不可能放任其无限壮大,JVM默认在运行时候会根据需要动态地设置其大小"。堆内存并不是指对象存储的堆。
好的 开头说的本地堆内存 并不是所有线程锁共享的堆(老师回答中的最后一句中的 对象存储的堆),那就可以理解了,就是本地内存的一块区域,应该是独立于jvm内存的区域,二者是不同的概念
对的哈,可以这么理解
登录后可查看更多问答,登录/注册
招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航
1.8k 27
2.7k 22
1.2k 15
1.4k 14
1.3k 14