首页 > 代码库 > java堆和栈的理解
java堆和栈的理解
栈:stack,它是java运行的单位
堆:heap是存储的单位
java虚拟机中,数据类型分为两种:基本类型和引用类型。
基本类型8种:byte,char,short,int,long,float,double,boolean
引用类型包括:类类型,接口类型,数组。
所以栈中存的是基本类型和局部变量,当代码块中定义一个变量时,java会自动分配内存。当超过变量的作用域后,java会自动释放掉这块内存。
而堆内存的是引用类型,当通过new实例化得到一个引用变量时,java虚拟机会在堆中开辟一个不一定是连续的空间分配给该实例,根据零散的内存地址,实则是根据哈希 算法生成一长串数字指向该实例的物理地址,相当于门牌号起到标识作用。当引用丢失了,会被垃圾回收机制回收,但不是立马释放堆内存。
在这提个问题:java的参数传递到底是值传递还是引用传递呢?
回答这个问题呢,首先要明确,程序运行过程中永远是在栈内运行,所以java的参数传递只能传基本数据类型和对象的引用,不会传对象本身。
堆:heap是存储的单位
java虚拟机中,数据类型分为两种:基本类型和引用类型。
基本类型8种:byte,char,short,int,long,float,double,boolean
引用类型包括:类类型,接口类型,数组。
所以栈中存的是基本类型和局部变量,当代码块中定义一个变量时,java会自动分配内存。当超过变量的作用域后,java会自动释放掉这块内存。
而堆内存的是引用类型,当通过new实例化得到一个引用变量时,java虚拟机会在堆中开辟一个不一定是连续的空间分配给该实例,根据零散的内存地址,实则是根据哈希 算法生成一长串数字指向该实例的物理地址,相当于门牌号起到标识作用。当引用丢失了,会被垃圾回收机制回收,但不是立马释放堆内存。
在这提个问题:java的参数传递到底是值传递还是引用传递呢?
回答这个问题呢,首先要明确,程序运行过程中永远是在栈内运行,所以java的参数传递只能传基本数据类型和对象的引用,不会传对象本身。
java堆和栈的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。