`

关于jvm方法区

    博客分类:
  • JVM
jvm 
阅读更多

先以两个问题开篇:

1.如果一个类有多个子类,那么new多个子类对象时,父类的对象是一个还是多个?

2.每个类型有一个常量池,还是每个对象都有自己的常量池?

你可以很快地正确回答吗?了解了java虚拟机方法区的原理,这两个问题就很清晰了。

java 虚拟机把内存划分为方法区、堆和线程栈。简单说方法区用来存储类型的元数据信息,一个.class文件是类被java虚拟机使用之前的表现形式,一旦这个 类要被使用,java虚拟机就会对其进行装载、连接(验证、准备、解析)和初始化。而装载(这里涉及到类加载器的相关理论)后的结果就是由.class文 件转变为方法区中的一段特定的数据结构。这个数据结构会存储如下信息:

类型信息

这个类型的全限定名

这个类型的直接超类的全限定名

这个类型是类类型还是接口类型

这个类型的访问修饰符

任何直接超接口的全限定名的有序列表

字段信息

字段名

字段类型

字段的修饰符

方法信息

方法名

方法返回类型

方法参数的数量和类型(按照顺序)

方法的修饰符

 

除了常量以外的所有类(静态)变量

一个指向ClassLoader的指针

一个指向Class对象的指针

类型的常量池(这里就回到了开篇时的第二个问题):常量数据以及对其他类型的符号引用。

 

每个类的这些元数据,无论是在构建这个类的实例还是调用这个类某个对象的方法,都会访问方法区的这些元数据。

构 建一个对象时,jvm会在堆中给对象分配空间,这些空间用来存储当前对象实例属性以及其父类的实例属性(而这些属性信息都是从方法区获得),注意,这里并 不是仅仅为当前对象的实例属性分配空间,还需要给父类的实例属性分配,到此其实我们就可以回答第一个问题了,即实例化父类的某个子类时,jvm也会同时构 建父类的一个对象。从另外一个角度也可以印证这个问题:调用当前类的构造方法时,首先会调用其父类的构造方法直到Object,而构造方法的调用意味着实 例的创建,所以子类实例化时,父类肯定也会被实例化。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    jvm方法区.xmind

    自己总结的jvm中方法区的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合jvm的爱好者和学习者

    2020 宋红康 JVM 09 方法区.pptx

    学习 09 方法区, 记录方法区相关知识,重绘图示和 PPT。 文章包括栈、堆和方法区交互、方法区基本概念、方法区的演进、方法区的内部结构、方法区垃圾回收等相关内容。

    jdk,jvm源码

    堆存储对象实例,方法区存放类信息,程序计数器记录当前线程执行的指令地址,虚拟机栈保存每个方法的局部变量、操作数栈等,本地方法栈为JNI调用的本地方法服务。 3. 指令集:JVM使用一套基于栈的指令集,这些指令...

    JVM中[方法区]的所有内容-pdf

    《JVM中方法区的深度解析》 方法区,作为Java虚拟机(JVM)内存模型的重要组成部分,是理解JVM工作原理的关键所在。本文将深入探讨方法区的定义、功能、与其它内存区域的关系,以及其在不同JVM版本中的演进,包括...

    JDK8的JVM内存结构,元空间替代永久代成为方法区及常量池的变化1

    在JDK8中,JVM内存结构发生了显著变化,尤其是元空间(MetaSpace)替代了永久代(Permanent Generation)作为方法区的一部分。这种方法区的调整是由于永久代存在的一些问题,比如大小设定困难,容易引发溢出,以及给...

    jvm 启动过程 JVM 原理

    这些变量存储在方法区的运行时常量池中。 4. **解析**:此时,JVM将常量池中的符号引用转换为直接引用。这个阶段不是必需的,可以在类或接口被首次使用时动态解析。 5. **初始化**:最后,JVM执行类的初始化方法...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    内存管理涉及JVM内存区域,包括堆、栈、方法区、程序计数器和本地方法栈,每部分都有其特定的用途和管理方式。 2. JVM内存模型:JVM内存模型定义了内存中各个部分的关系,以及在多线程环境下如何共享和分配内存。...

    浅谈jvm原理

    运行时数据区是 JVM 运行时的内存模型,它包括方法栈、PC 寄存器、本地方法栈、Java 堆、方法区和直接内存等部分。执行引擎负责读取运行时数据区的字节码,并逐个执行它们。 类加载器子系统是 JVM 的一个重要组成...

    JVM图解-JVM指令-JVM原型图.rar

    - **运行数据区**:包括堆、方法区、虚拟机栈、本地方法栈和程序计数器等几个部分。 - **堆**:存储对象实例,是所有线程共享的一块内存区域。 - **方法区**(在Java 8后变为元空间):存储已加载类的信息,如类...

    JVM内存空间分配笔记

    - **回收策略**:从JVM方法栈和本地方法栈引出来的引用开始,把每一个引出来的引用作为根依次搜索(遍历),如果从这个根开始寻找,找不到这个对象,那这个对象就是垃圾。 - **触发条件**:当对象不再被任何引用关联...

    JVM

    3. **方法区**:存储类信息、常量、静态变量等,也称为永久代,在现代JVM中通常被元空间(Metaspace)替代。 ### 垃圾收集(Garbage Collection) JVM自动进行内存清理,防止内存泄漏。垃圾收集器主要有串行、并行...

    Tomcat JVM内存设置方法

    ### Tomcat JVM内存设置方法详解 #### 一、前言 Tomcat作为一款广泛使用的Java应用服务器,其性能优化一直是开发者关注的重点之一。而在性能优化的过程中,合理设置JVM(Java Virtual Machine)内存是非常关键的一...

    Jvm入门必备手册

    - **堆与方法区的区别**:堆主要用来存储对象实例,而方法区用来存储类的信息和其他静态数据。 - **栈与堆的不同**:栈用于存储局部变量和方法调用信息,而堆用于存储对象实例。栈的内存是自动管理的,而堆上的对象...

    从JVM内存管理的角度谈谈静态方法和静态属性

    静态属性在类加载时分配空间,存储在方法区(Method Area)中,这部分内存是所有类共享的。基本类型的静态属性直接存储值,而引用类型的静态属性存储的是对象在堆中的地址。静态属性可以通过类名直接访问,而无需...

    狂神说JVM探究.rar

    - 运行时常量池:方法区的一部分,存储编译期生成的各种字面量和符号引用。 4. **垃圾收集(GC)**: - 垃圾收集的目的是自动回收不再使用的对象所占用的内存。 - 分代收集理论:将堆分为新生代(Eden、Survivor...

    jvm视频及笔记

    3. **内存模型**:包括堆内存、栈内存、方法区(在Java 8之后变为元空间)、程序计数器、本地方法栈等,理解它们的作用有助于避免内存溢出和内存泄漏问题。 4. **垃圾收集**:JVM如何自动管理内存,理解不同垃圾...

    JVM知识点汇总

    JVM在运行时,将内存空间分为若干个区域,主要包括方法区、堆内存、虚拟机栈、本地方法栈、程序计数器五个部分。 1. 方法区 方法区主要用于存储类信息、常量、静态变量等数据。在jdk1.7之前,方法区是堆的一个逻辑...

    jvm详细介绍以及性能优化方法

    首先,JVM的内存结构分为堆、栈、方法区、程序计数器、本地方法栈等几个关键区域。堆是所有对象实例的存储区域,而栈则用于存储方法调用时的局部变量。方法区存储类信息、常量、静态变量等。程序计数器记录下一条要...

    JVM虚拟机复习宝典

    - **Method Area(方法区)**:方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。在JDK 8之前,HotSpot虚拟机中的方法区被称为永久代(Permanent Generation)。随着JDK 8的发布,永久...

    深入JVM内核—原理、诊断与优化视频教程-3.常用JVM配置参数

    运行时数据区包括堆、栈、方法区、程序计数器和本地方法栈,它们各自承担着不同的职责,如存储对象实例、管理方法执行上下文等;执行引擎是JVM的心脏,它负责解释或编译执行字节码;本地方法接口和本地方法库则为JVM...

Global site tag (gtag.js) - Google Analytics