java内存的分析

  • 栈:一般来说,基本数据类型直接在栈中分配空间,局部变量(在方法代码段中定义的变量)也在栈中直接分配空间,当局部变量所在方法执行完成之后该空间便立刻被JVM回收,还有一种是引用数据类型,即我们通常所说的需要用关键字new创建出来的对象所对应的引用也是在栈空间中,此时,JVM在栈空间中给对象引用分配了一个地址空间(相当于一个门牌号,通过这个门牌号就可以找到你家),在堆空间中给该引用的对象分配一个空间,栈空间中的地址引用指向了堆空间中的对象区(通过门牌号找住址);
  • 堆:一般用来存放用关键字new出来的数据。
    package demo;
    
    public class Student {
        private String name;
        private int age;
    
        public void study() {
            System.out.println("I love study!");
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    package demo;
    
    public class StudentDemo {
        public static void main(String[] args) {
            Student student = new Student();
    
            System.out.println(student.getName() + ":" + student.getAge());
            student.setName("John");
            student.setAge(23);
            System.out.println(student.getName() + ":" + student.getAge());
            
            student.study();
            
            Student student2 = student;
            student2.setName("Jack");
            student2.setAge(25);
            System.out.println(student2.getName() + ":" + student2.getAge());
            System.out.println(student.getName() + ":" + student.getAge());
        }
    }

    java内存的分析