您需要对象吗,我帮你new一个吧?

本文详细介绍了Java虚拟机(JVM)的内存结构,包括堆、栈和方法区,以及对象创建时JVM的具体操作。通过示例代码展示了`Student`类和`TestMain`类的加载过程,以及对象`student`的创建和赋值步骤。同时,探讨了垃圾回收(GC)在堆区的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们java程序员从来不缺对象,因为我们平时都是面向对象开发,所以你要是需要,我来帮你new一个吧,new一个看起来很容易,但是你知道Java虚拟机为我们做了什么事情吧,看看下面的内容你就懂了。

首先,先给大家看看JVM的简图
在这里插入图片描述

然后,给大家先简单介绍jvm的三个区

1.堆区(heap):

用于存放所有对象,是线程共享的(注:也属于对象)

2.栈区(stack):

用于存放基本数据类型的数据和对象的引用,是线程私有的(分为虚拟机栈和本地方法栈)

3.方法区(method):

用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆即None-Heap)

4.GC

java的垃圾回收器,主要针对堆区


我们来看看下面的代码,以及执行的结果。

package com.example.demo;

public class Student {

    private String username;

    static {

        System.out.println("Student");

    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "Student{" +
                "username='" + username + '\'' +
                '}';
    }
}
package com.example.demo.designMode;

import com.example.demo.Student;

public class TestMain {

    static {
        System.out.println("TestMain");
    }

    public static void main(String[] args) {

        System.out.println("main方法");

        Student student = new Student();
        student.setUsername("张三");
        System.out.println(student);

    }

}

在这里插入图片描述


如上可知,jvm new了一个对象,做了如下操作:

1.将TestMain类加载到方法区,以及main方法入栈

2.将Student类加载到方法区

3.将new Student()放到堆中,开辟空间,并初始化值username=null,student变量入栈

4.对username进行赋值,username=“张三”

5.main方法出栈,GC回收




知是行之始,行是知之成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值