jvm 类加载

资料:

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 会存储在方法区中,并且该对象在堆中的地址也会存储在方法区中(注意此时静态变量只存储了对象的堆地址,而对象本身仍在堆内存中)
  • 实例变量存储在堆中

 

 

 

 

posted @ 2020-09-18 22:16  Numerz  阅读(104)  评论(0编辑  收藏  举报