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的时候运行时常量池,字符串常量池,和静态变量是在哪个区域呢?
推荐阅读
- 盐城|盐通高铁试运行时速350公里 盐城到上海最快1.5小时
- 请问c语言中怎样测试不到一个tick的程序运行时间呢?
- xcode编写C时,指针为啥不能改变const修饰的一个常量?
- tmall 爬虫出问题,单独调试无问题,运行时报错
- 用车|新手司机课程普及,汽车正常运行时不小心挂入倒档会出现什么后果
- 在家挂服务器时,家用光纤存在 DNS 被拉黑的说法吗当 20M 光纤满负载运行时,经常无法访问网站,提示 DNS 解析错误,这是被拉黑吗
- JAVA 进程使用物理内存超过预期(JDK8+G1)?
- java中声明一个接口与直接声明实现类的区别请从晚绑定、运行时等原理讲解,不要不求甚解
- C语言规定常量表达式不应包含逗号运算符,除非在sizeof的操作数内
- Java为啥将异常分为受检的和运行时异常这样分的依据和好处是啥
