java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式
**
- 栈内存
- 堆内存
- 方法区
- 本地方法栈
- 寄存器
栈内存:方法运行时进入的内存,局部变量都存放于这块内存当中
堆内存:new出来的内容都会进入堆内存,并且会存在地址值
方法区:字节码文件,(.class)加载是进入的内存
本地方法栈:调用操作系统相关资源
寄存器:交给CPU去使用
我们来举个栗子
首先编译代码,(1)字节码文件进入代码区,main方法在在字节码文件中,(2)main方法被虚拟机(JVM)自动调用进入栈内存中,(3)然后代码运行到 int[] arr=new int[3]这句,首先:int[] arr,因为main方法在栈内存中,而数组在main方法中所以数组也在main在栈内存开辟的空间中。数组变量在main方法中声明。(4)然后 new int[3]。因为new都会在堆内存中所以,数组在堆内存中开辟了一块空间,因为我们定义数组大小是3,多以他把开辟的内存空间分成三份,并且产生地址值(假设是001),每个格子都有自己的索引(数组的下标)和默认初始值。(5)System.out.println(arr);将地址付给mian 方法中的arr变量。System.out.println(arr[0]);地址(001)先找空间(堆内存开辟的空间)然后再找位置把值取出来进行打印…….。arr[0]=1地址找空间,索引找位置,然后赋值。
以上就是java内存的分配。



