java中堆栈内存解析

原创 2011年01月20日 15:57:00

堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。java中的对象和数组都存放在堆中。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象引用。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义: int a = 3;
int b = 3;
编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b, 它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Hive 创建表报"Specified key was too long; max key length is 767 bytes" 错误

Hive元数据库使用MySQL数据库,在使用Hive创建表的时候,报了以下错误: hive> create table base ( id int, name string, address...

Linux下用于查看系统当前登录用户信息的4种方法

作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动。有些时候,你甚至需要知道他(她)们正在做什么。本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法。 1. 使用...

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

只为成功找方法,不为失败找借口! MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作   上一篇博文MyBatis学习总结(一)——MyBatis快速入门中...

shell脚本如何获取当前时间

在shell脚本里常常需要获取系统时间来处理某项操作,今天系统的学习了一下如何获取系统时间。记录如下: linux的系统时间在shell里是可以直接调用系统变量的如: 获取今天时期:`date ...

crontab中如何实现每隔多少天执行一次脚本

在工作中,经常会碰到每隔多少天/小时/分钟执行一次脚本,或某个命令的情况。如果是每隔多少小时,多少分运行一次程序,在crontab中可能比较好实现一些,下面是一些示例及crontab的格式说明:

信号拦截器,汽车遥控干扰器,汽车电脑解码器,快开工具13026698505业务QQ:826842605

深圳宏伟电子科技有限公司是于2001年2月创立的汽车解码品牌,致力于汽车解码应用服务的运营商。公司拥有一支由业内资深技术专家、优秀的管理、服务人才组成的销售团队,有着超过6年的汽车解码销售服务从业经验...

Crontab 实现定时执行一个shell脚本(以每隔十分钟执行一次为例)

Linux中常常遇到需要使用脚本定时检查系统状态、监控网络等需求,这个时候最方便的方法就是使用Crontab来实现定时器的功能。如下: ①   [root@hyserver ~]# cd/etc/i...

linux crontab 实现每秒执行

linux crontab 命令,最小的执行时间是一分钟。如需要在小于一分钟内重复执行,可以有两个方法实现。 1.使用延时来实现每N秒执行 创建一个php做执行动作,非常简单,就是把当前时...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)