jdk8中,运行时常量池,字符串常量池和和静态变量在jvm内存中的位置

指出一个错误, jvm的规范当中,只有方法区(method area)的定义,在不同的jvm实现当中,使用的不同的策略来实现的, hotspot的jvm当中在1.8以前使用的是永久带来实现方法区的定义的,而其他的jvm比如j9(ibm)以及JRocket是没有永久代的,但是官方的若干个严重的内存溢出都来源于永久代的实现,因此在1.8以后使用了元空间(meta space)来实现jvm的方法区定义。常量池存储的东西 基本包括 加载的类信息, 以及常量,静态变量。另外还有jit编译出来的机器码文件

■网友
jdk以后,好像都是在meta space中
■网友
在1.8 得时候已经把原先的方法区移到了源空间,运行时常量池存放的其实就是在类加载的时候由字节码转为他也特有的数据结构其实就是c需要中的结构体一样的东西,然后静态变量值,常量值都是在运行时常量池中,在类初始化的时候然后一些字符串都会在堆中创建对象由stringtable指向,静态变量数值的话其实是放在运行时常量池的,由堆中的类对象指向,可能会说错,希望指出,一起探讨

■网友
楼主我测试了一下JDK1.8的情况,跟你所发的网址实验结果不同,是堆溢出,而不是元空间溢出,请问你有碰到这种问题吗?
在1.6的时候,HotSportJVM中字符串常量池,运行时常量池(虚拟机规范没有具体规定),类的静态变量是在方法区中,1.7的时候符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。
【jdk8中,运行时常量池,字符串常量池和和静态变量在jvm内存中的位置】 那么1.8的时候运行时常量池,字符串常量池,和静态变量是在哪个区域呢?
jdk8中,运行时常量池,字符串常量池和和静态变量在jvm内存中的位置



    推荐阅读