`
- 浏览:
95947 次
- 性别:
- 来自:
北京
-
当JVM使用类装载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例。上面是对类的装载过程作了个简单的描述,看了上面一段文字,也许你会问:方法区是什么?里面存了哪些内容?下面我们将对方法区作一个详细的描述。
方法区是什么?有哪些特点?
方法区是系统分配的一个内存逻辑区域,是用来存储类型信息的(类型信息可理解为类的描述信息)。方法区主要有以下几个特点:
一.方法区是线程安全的。由于所有的线程都共享方法区,所以,方法区里的数据访问必须被设计成线程安全的。例如,假如同时有两个线程都企图访问方法区中的同一个类,而这个类还没有被装入JVM,那么只允许一个线程去装载它,而其它线程必须等待
二.方法区的大小不必是固定的,JVM可根据应用需要动态调整。同时,方法区也不一定是连续的,方法区可以在一个堆(甚至是JVM自己的堆)中自由分配。
三.方法区也可被垃圾收集,当某个类不在被使用(不可触及)时,JVM将卸载这个类,进行垃圾收集
方法区里存放的是哪些内容?
方法区里存的都是类型信息,也就是类的信息,而类的信息又包括以下内容:
类的全限定名(类的全路径名)
类的直接超类的全限定名(如果这个类是Object,则它没有超类)
这个类是类型(类)还是接口
类的访问修饰符,如public、abstract、final等
所有的直接接口全限定名的有序列表(假如它实现了多个接口)
常量池
字段、方法信息、类变量信息(静态变量) 装载该类的装载器的引用(classLoader)、类型引用(class)
其实,我们没必要全部记住,只要根据上面内容有个大概的了解,然后对类型这个概念有个大概的认识即可。下面我们将主要对常量池和类变量信息作一下分析。
先说类变量吧,类变量内容少些,描述起来比较容易。类变量,顾名思义,就是属于类的变量,所有类的实例都共享的变量,也就是常说的静态变量。关于类变量,我们只要知道方法区里有个静态区,静态区是专门用来存放静态变量以及静态块的。所有类的实例都共享方法区中的内容。访问类变量的方式可通过实例(对象)来访问,也可通过类型来直接访问,java规范推荐使用类型来直接访问。
相对于类变量来说,常量池比较复杂,关于常量池将在后面分析
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本教程——“深入JVM内核—原理、诊断与优化视频教程”,将重点讲解这些关键点,帮助开发者提升技术水平,更好地解决实际问题。 首先,我们来探讨JVM的内核原理。JVM主要由类加载子系统、运行时数据区、执行引擎、...
1. **JVM架构解析**:书中可能详细介绍了JVM的内存模型,包括堆内存、栈内存、方法区、本地方法栈以及程序计数器等组成部分,帮助读者理解JVM如何管理和使用内存。 2. **垃圾收集机制**:JVM的垃圾收集是其性能的...
介绍JVM规范中的最重要的内容——Class文件结构,同时介绍ASM库的使用以及对class文件的修改。 第十一课 字节码执行 案例以及javap JIT及相关参数 介绍JVM的字节码以及反汇编方法,同时介绍JIT相关的参数和应用。
《深入JVM内核——原理、诊断与优化》是一份深度探讨Java虚拟机核心机制、问题诊断和性能优化的专业资料。这份资料涵盖了JVM的各个方面,对于Java开发者来说,理解和掌握这些知识至关重要。 首先,我们要了解JVM...
本地方法栈是JVM的一部分,它主要负责处理与本地方法(通常是由C或C++编写)相关的调用。本地方法栈在Java线程调用本地方法时起作用,此时不会在Java栈上创建新的栈帧,而是直接调用本地方法。 本地方法栈的设计是...
本教程——“深入JVM内核—原理、诊断与优化视频教程”着重讲解了JVM的内部机制,特别是关于垃圾收集(Garbage Collection, GC)的算法和种类,这对于理解和提升Java应用性能至关重要。 一、JVM内存模型 首先,...
《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发人员和运维人员必备技能的书籍。本书作者葛一鸣以其丰富的实战经验,详细阐述了JVM(Java Virtual Machine)的工作原理,以及如何有效地进行故障...
《Java实现的JVM——深入理解与实践》 在计算机科学领域,Java虚拟机(JVM)是Java语言的关键组成部分,它使得Java程序能够在不同平台上运行而无需重新编译。本项目“jvmjava”是一个开源项目,由Java语言实现,...
《深入理解JVM-2Edition-类文件结构》是一份详细阐述Java虚拟机(JVM)如何处理类文件的文档。类文件是Java程序编译后的二进制表示,其结构直接影响了Java的平台无关性和语言无关性。下面将详细探讨类文件的各个组成...
【JVM】类的奇幻漂流——类加载机制探秘 Java虚拟机(JVM)是运行Java程序的核心组件,它负责将我们编写的类加载到内存中并执行。类加载机制是JVM的一个重要组成部分,它确保了程序的正常运行。本文将带你深入理解...
JVM内存分为堆、栈、方法区、本地方法栈和程序计数器五大部分。其中,堆存储对象实例,栈处理方法调用,方法区存储类信息,本地方法栈服务于本地方法,程序计数器记录下一条要执行的指令地址。 5. Applet Applet...
JVM提供了一套自动内存管理系统——垃圾回收器(Garbage Collector),用于跟踪不再使用的对象并释放其占用的内存空间。常见的垃圾回收算法包括标记-清除算法、复制算法、标记-整理算法等。不同版本的JVM可能会采用...
总之,jstat是JVM性能监控的得力工具,通过熟练运用它可以深入了解JVM的运行状况,从而进行有效的性能优化。在实际工作中,结合JVisualVM、JConsole等可视化工具,可以更全面地分析和调优Java应用的性能。
根据提供的文档信息,本文将对Java中的方法、内存结构及方法重载等核心概念进行深入解析。 ### 一、方法(Method) #### 1. 什么是方法 方法是Java编程语言中用于封装特定功能的代码块。它允许程序员将程序划分为...
这有助于更深入地理解JVM如何处理不同类型的对象引用和方法分派。 综上所述,Java虚拟机指令集是Java程序执行的关键组成部分。通过深入研究JVM的工作原理和指令集,可以帮助我们更好地理解和优化Java程序的性能。
此外,JVM还有一块特殊的内存区域——方法区,用于存储类的信息,如类的静态变量和常量池等。理解这些内存区域的划分和工作方式,对于优化内存使用和避免内存泄漏至关重要。 三、类加载机制 JVM的类加载机制包括...
- **JVM简单理解**:JVM的内存模型包括Java栈、堆、方法区、程序计数器和本地方法栈。其中,堆和方法区是所有线程共享的,而Java栈、程序计数器和本地方法栈则是线程私有的。 #### JAVA垃圾收集器 - **垃圾收集...