【精讲JVM】方法区、堆这块彻底玩儿明白了

作者: 寒食君分类: 计算机技术 发布时间: 2021-09-12 11:30:26 浏览:16729 次

【精讲JVM】方法区、堆这块彻底玩儿明白了

Achiteya:
Up大大您好,有两个问题想要请教您一下。之前看您的类加载机制那一期视频说“加载是一个读取Class文件,将其转化为某种静态数据结构存储在方法区内,并在堆中生成一个便于用户调用的java.lang.Class类型的对象的过程”,所以我理解在加载类时在方法区内存储其静态数据结构,而在堆内存放Class对象;而这期视频5:07处所说的话似乎可以理解为Class对象是存储在方法区内的,这就有之前的“Class对象存在堆内”产生了矛盾,所以哪种理解是正确的呢? 另外我记得您在之前的某一期视频中讲到“在jdk8之前,类的元信息、常量池、静态变量等都存储在永久代这种具体实现中,在jdk8以后,常量池和静态变量都移出了方法区转移到了堆中,元信息等依然保存在方法区中,只是实现方式改成了元空间”,所以我理解的对于jdk8来说常量池是在堆中的一块空间,而从这期视频来看似乎将常量池归在了方法区的范畴里,那针对“jdk8常量池是在方法区内还是在堆内”这个问题究竟应该怎样理解呢?

【回复】回复 @喝奶茶瘦了 : 假设你A a1 = new A();A a2 = new A()。new出来的对象a1,a2是放在堆里的。但是你加载A这个类的时候,A的相关信息是放在方法区里的。堆里的a1和a2,只包含变量信息,没有A类中的方法的信息。方法的相关信息存放在方法区中A类的方法表里。可以看下这个,了解下对象在堆里的布局https://juejin.cn/post/7215528103467515964
【回复】https://stackoverflow.com/questions/10209952/what-is-the-purpose-of-the-java-constant-pool
【回复】其实我也想知道class对象在哪,之前的视频说在堆里,现在又到了方法区,懵了。常量池的话,我理解是,字符串常量池在堆,运行时常量池在元空间
褪色的指环:
我搜了很多国内外的博客,很多都说字符串常量池是在堆里的。寒食能解答一下吗[思考]

【回复】字符串常量池的存储位置在不同版本下变化了多次,早期是在方法区(1.7以前),后来又放到堆里了,可能是方便回收。这一点感谢指出
雨霭潇潇:
有点意思,以后上班摸鱼就刷codegym了[tv_doge]

傲娇缇娜:
下次更一下三色标记吧 尤其是G1,stab那几个指针看不懂……着实难理解。虽然开发用不到,架不住面试官问[笑哭]

乖子阿:
讲的真的比很多机构好多了!![热词系列_吹爆][热词系列_你币有了][热词系列_好耶]

格子1s:
寒食老师,财富密码是露脸[捂眼][捂眼]

ysysysr_泡芙:
博主你好,学习视频受益匪浅,写了学习笔记发布到CSDN,如果有侵权立马删

【回复】想给你的博客增加浏览量[保卫萝卜_笔芯]
【回复】回复 @寒食君 :嗯嗯,放心,写了的

知识分享官 大学 学习 计算机 程序员 编程 虚拟机 JVM Java 学习心得

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

更多相关阅读