Class variables are shared among all instances of a class and can be accessed
even in the absence of any instance. These variables are associated with the
class--not with instances of the class--so they are logically part of the class
data in the method area. Before a Java Virtual Machine uses a class, it must
allocate memory from the method area for each non-final class variable declared
in the class.
类变量是由所有类实例共享的,但是即使没有任何类实例,它也可以被访问。这些变量只与类有关——而非类的实例,因此它们总是作为类型信息的一部分而存储在方法区。除了在类中生命的编译时常量外,虚拟机在使用某个类之前,必须在方法区中为这些类分配空间。
Constants (class variables declared final) are not treated in the same way as
non-final class variables. Every type that uses a final class variable gets a
copy of the constant value in its own constant pool. As part of the constant
pool, final class variables are stored in the method area--just like non-final
class variables. But whereas non-final class variables are stored as part of the
data for the type that declares them, final class variables are stored as
part of the data for any type that uses them. This special treatment of
constants is explained in more detail in Chapter 6, "The Java Class File."
而编译时常量(就是那些用final声明以及用编译时已知的值初始化的类变量)则和一般的类变量的处理方式不同,每个使用编译时常量的类型都会复制它的所有常量到自己的常量池中,或嵌入到它的字节码流中。作为常量池或字节码流的一部分,编译时常量保存在方法区中——就和一般的类变量一样。但是当一般的类变量作为声明它们的类型的一部分数据而保存的时候,编译时常量作为使用它们的类型的一部分而保存。
分享到:
相关推荐
- **方法区**:存储已加载的类信息、常量、静态变量等,JDK8后改为元空间,使用本地内存,可以调整`-XX:MetaspaceSize`和`-XX:MaxMetaspaceSize`来控制大小。 7. **编译优化(JIT编译器)** - **热点代码识别**:...
JVM性学习笔记-基本原理,内存模型,JVM参数设置,类加载器原理,JDK自带工具
### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...
《深入JVM---JVM命令---invokespecial》 在Java虚拟机(JVM)的世界里,`invokespecial`指令扮演着至关重要的角色。它主要用于执行对象的构造方法(即`<init>`方法),以及调用私有方法和父类非静态方法。本文将...
项目名为"jvm-rs-main",通过这个项目,我们可以深入学习Rust语言与JVM的交互,以及如何构建一个简化版的JVM。 一、Rust语言的魅力 Rust是一种系统级编程语言,它强调安全、并发和速度。它的内存管理模型避免了空...
"nginx-upstream-jvm-route-0.1.tar.gz"正是为了解决这个问题而设计的一个解决方案。 首先,让我们了解一下Nginx的Upstream模块。Upstream模块允许Nginx将接收到的请求转发到一组后端服务器,可以根据配置的策略...
本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...
本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...
这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...
### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...
【描述】"Jvm调优练习-jvm-tuning" 暗示了这个压缩包可能包含一系列实验或教程,帮助用户通过实际操作学习如何调整JVM的配置。这可能包括设置不同的JVM参数,分析性能指标,以及理解不同参数对程序运行效率的影响。 ...
【Java分布式应用学习笔记-谈JVM】 在Java分布式应用中,JVM(Java虚拟机)扮演着至关重要的角色。虽然有些人可能认为分布式系统与JVM的关系并不密切,但事实上,尤其是在大型分布式环境,如云计算服务平台,对Java...
3. 类的初始化发生在首次访问类的静态成员变量或静态方法时。 4. 类加载器之间的委托机制确保了类加载的一致性和安全性。 #### 实验总结 通过本次实验,不仅加深了对JVM类加载机制的理解,还学会了如何利用类加载...
**JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...
方法区存储类的相关信息,包括静态变量、常量等。此外,新生代的Eden和Survivor空间以及Old Generation的设置,有助于优化内存分配和垃圾回收效率。 垃圾回收是JVM内存管理的关键。它自动回收不再使用的对象,释放...
方法区是线程共享的,主要存储类信息、常量池、静态变量、JIT编译后的代码等数据。方法区理论上来说是堆的逻辑组成部分。 运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。 Jvm中有多种...
2. **堆**:所有对象实例都在堆中分配内存,包括类的静态变量。堆是垃圾收集的主要区域,分为新生代和老年代,进一步细分为Eden、Survivor(From和To)空间,用于不同的对象分配策略。 3. **堆栈分离**:堆和栈的...
日常笔记-JVM内核-原理、诊断与优化
本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...
2. **方法区/元空间**:存储类信息、常量、静态变量等数据。在Java 8之后,元空间替代了永久代,避免了永久代内存溢出的问题。 3. **栈内存**:每个线程都有一个独立的栈,用于存储方法的局部变量、操作数栈和方法...