资料:
Hotpot Java虚拟机Class对象是在方法区还是堆中 https://my.oschina.net/u/3628059/blog/1557569
Java基础-JVM内存划分 https://juejin.im/post/6844903958977183757
注:
1. class对象在堆中,作为方法区二进制数据结构的访问入口
2. 类变量在方法区中
三、方法区**
method(方法区)又叫静态区,存放所有的①类(class),②静态变量(static变量),③静态方法,④常量和⑤成员方法。
1.又叫静态区,跟堆一样,被所有的线程共享。
2.方法区中存放的都是在整个程序中永远唯一的元素。这也是方法区被所有的线程共享的原因。
-
存储常量:static final修饰的成员变量
-
存储静态变量:static修饰的成员变量
存储方法:静态方法、普通方法
- 八种基本数据类型(byte、short、int、long、float、double、char、boolean)的静态变量会在方法区开辟空间,并将对应的值存储在方法区
- 对于引用类型的静态变量如果未用new关键字为引用类型的静态变量分配对象(如:static Object obj;)那么对象的引用obj会存储在方法区中,并为其指定默认值null;若,对于引用类型的静态变量如果用new关键字为引用类型的静态变量分配对象(如:static Person person = new Person();),那么对象的引用person 会存储在方法区中,并且该对象在堆中的地址也会存储在方法区中(注意此时静态变量只存储了对象的堆地址,而对象本身仍在堆内存中)
-
实例变量存储在堆中