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,一个数组内存图

JAVA基础(栈和堆)

 

4,两个数组的内存图

JAVA基础(栈和堆)

 

5,三个引用,有两个数组的引用指向同一个地址

    JAVA基础(栈和堆)