(基础)java内存加载过程,内存区域的划分

一个java程序从源程序到运行,都经历了哪些内存加载过程呢?

 

1.javac命令

启动编译器,由编译器将java源文件编译为字节码文件,该字节码文件放在硬盘上

 

2.java命令

启动JVM,由虚拟机加载指定的类到内存(JVM在电脑上申请到的一部分内存空间)中

JVM将取寻找该类中的main(),从该入口开始运行程序,如果没有,抛NoSuchMethodError:main

 

==============================================================================

 

 函数的执行过程

一定要理解栈的原理:先进后出FILO,栈帧始终指向栈顶位置,指向哪儿就运行哪儿的代码

public static void main(String[] args) {
 
         int a = A();
 
         syso(a);
 
         B();
 
}

 JVM首先从程序的入口(即main方法)开始执行程序

首先,main()入栈

执行第一行代码,发现调用到A()

然后,A()入栈

A()执行完毕,返回结果给调用者

A()出栈

JVM继续执行main()第二行代码,syso(a);

JVM继续执行第三行代码,发现调用到B()

接着,B()入栈

B()执行完毕

B()出栈

JVM继续执行main(),发现代码已执行完毕

最后,main()出栈

程序结束!

 

方法不断调用方法,方法不断压栈,上面的方法执行完毕,不断出栈,直到所有被调用到的方法执行完毕,程序才结束。

这就是程序在内存中执行的过程:由栈和栈帧来控制

 

 ==============================================================================

 

 

JVM如果管理内存

java中的内存划分,一共分为5大块

java虚拟机申请到一片内存区域后,会对内存进行划分

不同区域的功能不同,内部数据的处理方式不同,所以需要单独划分,单独管理

寄存器内存         CPU处理数据的区域

本地方法区内存  运行本地系统平台中的程序,不同系统会安装不同的JVM

方法区 内存               

栈内存                存储的都是局部变量,随时释放(方法中的变量,循环中的变量,代码块中的变量等)

堆内存                存储数组和对象(凡是new出来的都在堆中)

                           堆中的变量都有默认初始值

                                   整数:0

                                   小数:0.0f,0.0

                                   字符:'\u0000'  unicode码

                                   布尔:false

                                   引用类型:null

 

 分析以下代码的加载过程和内存分配

public class Test {
	public static void main(String[] args) {

		int[] arr = new int[3];
		System.out.println(arr.length);
	}
}

 首先,

main()方法 和 arr局部变量 入栈

 然后,

new int[10],JVM为其在堆内存中开辟3个连续的内存空间并初始化0(每个单元占4个字节-int类型)

 JVM将这片内存空间的首地址赋给arr存储起来

 接着根据arr指向的内存空间,结合数组的类型为int,计算数组的长度并打印数组长度

 最后,

main()执行完毕,main()和arr出栈

由于arr出栈,生命周期结束,堆中存储数组的10个连续空间没有变量引用了,将被GC清理!

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值