请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

6-10视频元空间问题

视频开头说Jdk8以后开始把类的元数据放在本地堆内存中,这一块区域叫做MetaSpace,这是有问题的吧 元空间没有使用堆内存,而是与堆不相连的本地内存区域,之前从线程分析java内存模型那张图上,元空间和堆空间也是分开的

正在回答 回答被采纳积分+3

1回答

翔仔 2019-02-20 23:31:35

没太明白同学的意思,视频里这样说的,"jdk8以后,确实把类的元数据放到本地堆内存*(native heap)中,这一块区域就叫做metaSpace.     前面咱们提及过方法区,实际上元空间便是方法区的实现,而方法区只是一种JVM的规范,在java7之后,方法区里的里的字符串常量池已被移动到了java堆中,并且在java8中使用元空间替代了永久代,这一替代并非仅仅是名字上的替代,两者最大的区别是元空间使用本地内存,而永久代使用的是jvm的内存,使用本地内存有什么好处呢,最直接的表现就是老版本的java中见到java.lang.OutOfMemoryError: PermGen space这个异常的将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上metaspace就可以有多大,这解决了空间不足的问题,不过也不可能放任其无限壮大,JVM默认在运行时候会根据需要动态地设置其大小"。堆内存并不是指对象存储的堆。

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_灬Mamba磊_0 #1
    好的 开头说的本地堆内存 并不是所有线程锁共享的堆(老师回答中的最后一句中的 对象存储的堆),那就可以理解了,就是本地内存的一块区域,应该是独立于jvm内存的区域,二者是不同的概念
    回复 有任何疑惑可以回复我~ 2019-02-21 10:44:17
  • 翔仔 回复 提问者 qq_灬Mamba磊_0 #2
    对的哈,可以这么理解
    回复 有任何疑惑可以回复我~ 2019-02-21 23:24:33
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信