美文网首页
JVM内存模型2--类加载与方法区

JVM内存模型2--类加载与方法区

作者: Guoke24 | 来源:发表于2018-12-05 10:15 被阅读0次

参考:
Java 类中各成分加载顺序 和 内存中的存放位置

引用:

加载类文件时,除了非静态成员变量(对象的特有属性)不会被加载,其它的都会被加载。
记住:加载,是将类文件中的一行行内容存放到了内存当中,并不会执行任何语句。---->加载时期,即使有输出语句也不会执行。
静态成员变量(类变量) ----->方法区的静态部分
静态方法 ----->方法区的静态部分
非静态方法(包括构造函数) ----->方法区的非静态部分
静态代码块 ----->方法区的静态部分
构造代码块 ----->方法区的静态部分

注意:在Person.class文件加载时,静态方法和非静态方法都会加载到方法区中,只不过要调用到非静态方法时需要先实例化一个对象
,对象才能调用非静态方法。如果让类中所有的非静态方法都随着对象的实例化而建立一次,那么会大量消耗内存资源,
所以才会让所有对象共享这些非静态方法,然后用this关键字指向调用非静态方法的对象。

参考:
java虚拟机内存区域的划分以及作用详解

图片描述 图片描述

方法区和其中的运行时常量池:

和堆一样,是各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、和编译器编译后的代码(也就是存储字节码文件。.class)等数据,这里可以看到常量也会在方法区中,是因为方法区中有一个运行时常量池,为什么叫运行时常量池,因为在编译后期生成的是各种字面量(字面量的意思就是值,比如int i=3,这个3就是字面量的意思)和符号引用,这些是存放在一个叫做常量池(这个常量池是在字节码文件中)的地方,当类加载进入方法区时,就会把该常量池中的内容放入运行时常量池中。这里要注意,运行时常量池和常量池,不要搞混淆了,字节码文件中也有常量池,在后面的章节会详细讲解这个东西。现在只需要知道方法区中有一个运行时常量池,就是用来存放常量的。还有一点,运行时常量池不一定就一定要从字节码常量池中拿取常量,可能在程序运行期间将新的常量放入池中,比如String.intern()方法,这个方法的作用就是:先从方法区的运行时常量池中查找看是否有该值,如果有,则返回该值的引用,如果没有,那么就会将该值加入运行时常量池中。

相关文章

  • 《32个Java面试必考点》学习笔记之四------JVM

    JVM知识点汇总知识点详解JVM内存模型栈本地方法栈程序计数器堆方法区JMM与内存可见性类加载与卸载加载过程加载机...

  • JVM内存模型2--类加载与方法区

    参考:Java 类中各成分加载顺序 和 内存中的存放位置 引用: 加载类文件时,除了非静态成员变量(对象的特有属性...

  • Java虚拟机

    JVM 组成部分 类加载器 执行引擎 内存区 本地方法调用 类加载器 双亲委派模型 类的加载过程采用双亲委派机制,...

  • 收集几十位大厂面试者的面试题及见解-JVM模块

    一 内存图 1.1 内存模型有哪些?有什么区别? JVM分为:运行时方法区、类加载器、本地接口、执行引擎。类加载器...

  • 类加载机制和双亲委派模型

    类加载机制和双亲委派模型 1. 类加载机制 JVM将.class文件加载到内存(方法区)中,并对数据进行解析和初始...

  • JVM类加载总结

    JVM类加载总结 1、概述 类加载的过程,就是将类的字节码装载到内存方法区的过程(方法区的相关知识参看Java内存...

  • JAVA微服务技术栈相关 知识点梳理

    JVM jvm作为底层支撑,需要了解的有: 其中重点为类加载器与内存模型。类加载器中,主要自定义类加载器,加载自定...

  • JVM内存模型

    一、jvm内存模型图 二、内存模型描述 堆:所有新建对象都会在堆中开辟内存 方法区(本地内存):存放类信息,方法信...

  • 虚拟机类加载过程

    虚拟机内存模型 方法区 方法区与Java堆一样,线程共享的数据区域,用于存储已经被类加载器加载的类信息,常量,静态...

  • 随谈Java - (三) 对象的生命周期

    1、类加载 类加载器将类信息加载到JVM的内存(方法区) 为静态变量分配内存并赋零值,常量则直接赋值 如果符合以下...

网友评论

      本文标题:JVM内存模型2--类加载与方法区

      本文链接:https://www.haomeiwen.com/subject/gytbcqtx.html