//a,b都指向方法区中常量池中的内存空间
static Integer a=1;
static Integer b=1;
老师,这里a、b两个变量不是在方法区的静态变量中吗?为什么在常量池中?
2019-06-28 11:04
回复 赞(0)方法区很大,它包含类的版本,字段,方法,接口和常量池。常量池里存储着字面量和符号引用。这里的a和b它是在方法区里,但是字面量1是在常量池里的,什么是字面量,这里static Integer a=1; 1就是Integer类型的字面量。
2019-06-28 17:22
回复 赏课上的这个例子,没举好,虽然我想表达是思议讲到了,但是,确实有bug,不应该用Integer类型的,应该用String的类型来举例,就没的漏洞了,String str = "abc" 字符串的字面量没的说一定是放在常量池里的,但是Integer类型的话,jvm里有一个内存区叫:java缓存池,逻辑上也可以理解为常量池,它是专门用来供装箱和拆箱用的,整数-128到127范围之类的字面量会放在这里,但是超出这个范围,它仍然会new一个对象,放在新堆内存中,这个后面会说到,jdk1.7开始常量池,字符串常量池(interned strings)转移到了Java heap;类的静态变量(class statics)转移到了Java heap。
2019-06-28 17:53
回复 赏最后,在提一句,方法区在jdk1.8后就没有了,后面也有讲,java8中,取消永久代,方法存放于元空间(Metaspace),元空间仍然与堆不相连,但与堆共享物理内存,逻辑上可认为在堆中
2019-06-28 17:56
回复 赏共29节 · 6小时44分钟
¥9.9012234人在学
共68节 · 8小时57分钟
¥499.0030244人在学
共21节 · 5小时20分钟
¥38.0011984人在学
共23节 · 9小时28分钟套餐优惠
¥38.0012156人在学