JAVA基础(栈和堆)
1,概念:
栈:stack,它是java运行的单位
堆:heap是存储的单位
java虚拟机中,数据类型分为两种:基本类型和引用类型。
基本类型8种:byte,char,short,int,long,float,double,boolean
引用类型包括:类类型,接口类型,数组。
栈:栈中存的是基本类型和局部变量,当代码块中定义一个变量时,java会自动分配内存。当超过变量的作用域后,java会自动释放掉这块内存。
堆:堆中内存的是引用类型,当通过new实例化得到一个引用变量时,java虚拟机会在堆中开辟一个不一定是连续的空间分配给该实例,根据零散的内存地址,实则是根据哈希 算法生成一长串数字指向该实例的物理地址,相当于门牌号起到标识作用。当引用丢失了,会被垃圾回收机制回收,但不是立马释放堆内存。
在这提个问题:java的参数传递到底是值传递还是引用传递呢?
2,Java中的内存分配以及栈和堆的区别
-
栈:存储局部变量,运行结构上先进后出
-
堆:存储new出来的数组或对象
-
方法区:面向对象部分讲解
-
本地方法区:系统相关
-
寄存器:给CPU使用
3,一个数组内存图
4,两个数组的内存图
5,三个引用,有两个数组的引用指向同一个地址