请稍等 ...
×

采纳答案成功!

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

jdk8 静态变量和静态方法放在哪个区域

老师,jdk7及之前,静态变量是放在永久代的,jdk8之后,永久代被移除,我看网上的一些文章说是, 类信息、方法信息这些编译后的数据放到了元空间(使用本地内存),但是静态变量和常量池是放到堆中的,而正常的堆又分成年轻代和老年代, 那它具体是放到哪里了呢

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

2回答

翔仔 2019-03-22 23:47:34

同学好,

Static methods and variables have been Stored in the PERMGEN space before the 8th version of the java. But,now they have introduced a new memory space called METASPACE now this is the place where all those name and fields of the class, methods of a class with the bytecode of the methods, constant pool, JIT optimizations etc are stored. Reason for removing PERMGEN in java 8.0 is It is very hard to predict the required size of PERMGEN.It helps in improving Garbage Collection Performance and Class data-de allocation.

JDK8之后,类信息、常量池、静态变量、方法数据、方法代码等存储在元空间里,通常也叫做"非堆"


0 回复 有任何疑惑可以回复我~
  • 老师jdk8中静态成员变量已经在堆内存了吧,在程序里面new一个Long数组,size99999999,也会报堆内存溢出http://openjdk.java.net/jeps/122
    回复 有任何疑惑可以回复我~ 2019-12-24 04:30:25
  • 同学好,类的方法代码,变量名,方法名,访问权限等等都是在方法区即元空间的,注意这里只是名字和属性信息,就是一些元信息,而class对象是存在堆中,所以同学说的new出来的值是存在堆中的
    回复 有任何疑惑可以回复我~ 2019-12-25 01:28:13
慕标6355498 2019-03-22 19:51:04

我觉得应该就是存在放元空间中的,先mark一下,看老师怎么回答

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信