面向对象的内存分析

Java虚拟机内存分为三个区域:栈stack、堆heap、方法区method area

  1. 栈是方法执行的内存模型,每个方法被调用都会创建一个栈帧,存储局部变量,操作数,方法出口等。

  2. JVM为每个线程创建一个栈,用于存放该线程的执行方法的信息,实际参数,局部变量等。

  3. 栈属于线程私有,不可以线程共享

  4. 栈的存储特性是 "先进后出,后进先出"

  5. 栈由系统自主分配,速度快,栈是一个连续的内存空间

  1. 堆用于存储建好的对象或者数组;

  2. JVM只有一个堆,被所有线程共享

  3. 堆是一个不连续的内存空间,分配灵活,速度慢

  4. 堆被所有线程共享,在堆上的区域,会被垃圾回收器进一步划分,例如新生代、老生代的划分

方法区

  1. 方法区是JAVA虚拟机规范,可以由不同的实现:
  1. JVM只有一个方法区,被所有线程共享
  2. 方法区实际也是堆,用与存储类、常量等信息
  3. 用于存放程序中不变的内容,例如类信息,静态变量,字符串常量
  4. 常量池主要存放常量,如文本字符串、final常量值
ini 复制代码
public class Person {
    String name;
    int age;

    public void show() {
        System.out.println(name);
    }

    public static void main(String[] args) {
        Person p1 =  new Person();
        p1.age = 24;
        p1.name = "张三";
        p1.show();

        Person p2 = new Person();
        p2.age = 35;
        p2.name = "李四";
        p2.show();

        Person p4 = p1;
        p4.age = 80;
        System.out.println(p4.age);
    }
}

参数的传值机制

Java中,所有的参数传递都是"值传递",也就是传递的是值的副本。

基本数据类型的参数传递:传递的是副本,副本改变不会影响原件。

引用类型参数传递:传递的是值的副本,但是引用类型指的是"对象的地址",所以原参数指向的对象也会跟着发生改变。

相关推荐
组合缺一14 分钟前
Spring Boot 国产化替代方案。Solon v3.7.2, v3.6.5, v3.5.9 发布(支持 LTS)
java·后端·spring·ai·web·solon·mcp
s***117036 分钟前
常见的 Spring 项目目录结构
java·后端·spring
7***477142 分钟前
在2023idea中如何创建SpringBoot
java·spring boot·后端
IT_陈寒2 小时前
React性能优化:这5个Hooks技巧让我减少了40%的重新渲染
前端·人工智能·后端
L***d6702 小时前
十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解
前端·spring boot·后端
本妖精不是妖精2 小时前
基于 Rokid Max 与 JSAR 构建空间锚定型 AR 信息面板
后端·ar·restful
芳草萋萋鹦鹉洲哦2 小时前
【tauri+rust】App会加载白屏,有时显示在左上角显示一小块,如何优化
开发语言·后端·rust
aiopencode2 小时前
网络调试工具推荐,Fiddler抓包教程、HTTPS配置与接口调试完整指南
后端
q***38512 小时前
SpringBoot + vue 管理系统
vue.js·spring boot·后端