JVM 内存分布详解

java 复制代码
/**
 * 示例类,展示各种成员在JVM中的存储位置
 */
public class MemoryDistributionExample {
    // 1. 实例变量(普通成员变量) - 存储在堆内存的对象实例中
    private int instanceVar = 10;
    private String instanceRef = "Instance Reference";
    
    // 2. 静态变量(类变量) - 存储在方法区/元空间
    private static int staticVar = 20;
    private static String staticRef = "Static Reference";
    
    // 3. 常量 - 存储在方法区/元空间的常量池
    public static final int CONSTANT_INT = 100;
    public static final String CONSTANT_STR = "CONSTANT_STRING";
    
    // 4. 实例方法 - 方法字节码存储在方法区/元空间
    public void instanceMethod() {
        // 5. 局部变量 - 存储在栈帧的局部变量表中
        int localVar = 30;
        String localRef = "Local Reference";
        
        System.out.println("实例方法执行");
        System.out.println("可以访问所有变量:");
        System.out.println("instanceVar: " + instanceVar);
        System.out.println("staticVar: " + staticVar);
        System.out.println("CONSTANT_INT: " + CONSTANT_INT);
        System.out.println("localVar: " + localVar);
    }
    
    // 6. 静态方法 - 方法字节码存储在方法区/元空间
    public static void staticMethod() {
        // 局部变量同样存储在栈帧中
        int localStaticVar = 40;
        
        System.out.println("静态方法执行");
        System.out.println("只能访问静态变量和常量:");
        System.out.println("staticVar: " + staticVar);
        System.out.println("CONSTANT_STR: " + CONSTANT_STR);
        // System.out.println(instanceVar); // 错误!不能访问实例变量
    }
    
    public static void main(String[] args) {
        // 创建对象实例
        MemoryDistributionExample obj = new MemoryDistributionExample();
        
        // 调用实例方法
        obj.instanceMethod();
        
        // 调用静态方法
        MemoryDistributionExample.staticMethod();
        
        // 访问常量
        System.out.println("直接访问常量: " + CONSTANT_INT);
    }
}


相关推荐
2401_8822737221 分钟前
如何在 CSS 中正确加载本地 JPG 背景图片
jvm·数据库·python
极客先躯35 分钟前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户606487671889640 分钟前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java
我命由我123451 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
aXin_ya1 小时前
微服务第八天 Sentinel 四种分布式事务模式
java·数据库·微服务
Halo_tjn1 小时前
Java Set集合相关知识点
java·开发语言·算法
Linsk1 小时前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
许彰午1 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
zhouwy1131 小时前
Java 快速入门笔记:从基础语法到 Spring Boot 实战
java
大飞记Python2 小时前
【2026更新】Python基础学习指南(AI版)——04数据类型
开发语言·人工智能·python