Java程序运行底层过程

本文介绍了Java中的数据类型、内存分配(栈内存、堆内存、方法区),以及程序运行过程,包括编译成字节码、执行过程中的栈和堆使用,以及垃圾回收机制的应用。
摘要由CSDN通过智能技术生成

在了解程序的运行过程之前,必须要先了解java的数据类型,这是为了让你了解不同类型的数据会被存放在那个内存区中

数据分配

引用数据类型:

①在栈内存的栈帧中存放的是一个引用,这个引用的内容就是堆内存中对象的地址(就像是下段代码中的存放于栈内存中的user是指向堆内存中的user的引用)

②在堆内存的对象中存放的是一个引用,这个引用的内容就是堆内存中另一个对象的地址(就像是下段代码中的存放于user中的addr是指向堆内存中的addr的引用

public class Test {

    public static void main(String[] args) {

        User user =new User();

        user.id=10;

        user.s="abcd";

        user.addr.s1="abcd";

    }

}
class User {

    int id;

    String s;

    Address addr;

}
class Address{

    String s1;

}

基本数据类型:比较灵活,既可以在栈内存又可以在堆内存中

new运算符:用于在jvm的堆内存中开辟一块空间

方法区内存:用于存放代码片段,字节码文件

栈内存:用于方法区代码片段在执行时会给该区域分配内存,在栈内存中压栈,局部变量在栈内存中存储

堆内存:new出的的对象在堆内存中存储

程序运行的过程

首先计算机会进行编译,这样才能使计算机看懂你的代码。即计算机启动jdk中的jvm来将你写的代码(.java文件)编译成存储类的结构信息的字节码文件(.class文件),字节码文件包含了类的字段、方法信息、方法

然后jvm执行.class文件(首先将.class文件存入jvm的方法区内存(包含代码片段,静态变量)中,然后jvm根据方法区中的代码片段在栈内存中(包含局部变量,方法的相关参数)开辟一个用来执行main方法的空间,用来存储main方法的数据和变量

最后按照方法区内存中的字节码进行其他操作,同时按照GC机制(堆内存垃圾回收机制)将后续代码逻辑中存在于堆内存中不再引用的数据地址释放

public class Test {

    public static void main(String[] args) {
        int a =10;

        User user =new User();

        user.id=a;

        user.s="abcd";

        user.addr = new Address();
        addr.s1 = "abcd";

    }

}
class User {

    int id;

    String s;

    Address addr;

}
class Address{

    String s1;

}

上述代码在jvm的实际存储情况如图所示

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值