一、JVM内存的划分
Java程序在运行时要在内存中开辟一片内存区域,虚拟机中每一片内存处理的方式都不同,需要单独进行管理。
JVM内存分为五部分:
1)寄存器
2)本地方法区
3)方法区
4)栈内存
5)堆内存
二、栈内存和堆内存
栈内存:
栈内存储局部变量,即定义在方法中的变量都是局部变量(方法外的是全局变量)。加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。
堆内存:
存储的是对象,凡是new建立的对象都是在堆中。如果一个数据消失,这个实体也没有消失,所以堆是不会随时释放的。堆里的实体虽然不会被释放,但是会被当成垃圾,垃圾回收机制会不定时的收取。
三、堆和栈的联系
接下来我们举个例子来说明下:
int [] arr=new int [10]
当执行主函数中的这行代码的啥时候,主函数先进栈,在栈中定义一个变量arr。
同时堆里通过new关键字开辟一个空间,内存在存储数据的时候都是通过地址来体现的,然后给变量arr分配一个指向开辟空间的内存地址。arr就通过地址指向了数组。arr想操纵数组时,就需要通过地址来操控。
四、堆与栈的区别
1)栈内存存储的是局部变量,而堆内存存储的是对象
2)栈内存存放的变量生命周期一旦结束就会被释放,更新速度快。而堆内存存放的对象会被垃圾回收机制不定时的回收,更新速度慢。