c 和 java 内存管理 比较-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 263847
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2015-03-03 10:05
文章分类

(138)

  • (1)
  • (3)
  • (3)
  • (7)
  • (22)
  • (2)
  • (5)
  • (8)
  • (87)
文章存档

(1)

(137)

我的朋友
最近访客
相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: java

2015-06-02 10:56:24

java中,引用在栈中,申明时,引用不占内存,实例化赋值时,引用才占空间。基本数据类型在栈中object数据类型在堆中
c 中,指针变量在栈中,直接声明的变量在栈中new操作分配的对象在堆中。 
具体的:
 先来看java,由于java中没有指针(*p),代替指针(*p)功能的是常说的名词引用(这里的引用和c 中又完全不同。。),java中的引用类似与指针的功能,它存放的是所指向的变量值的地址。比如int a=5;  animal an=new animal();引用a和an存放的是所指向的变量的地址,引用的值通常存放在栈内存中。关于java引用和c 指针得区别,请参考前辈的文章http://skyriver123.iteye.com/blog/690905。回到正题,在java创建变量时,涉及到基本类型变量和object类型变量的区别。所谓基本类型boolean,int(4),float, 
double(8),byte(1),long(8),short(2),char(1)就是基本的存储单元,在编译时,编译器会在栈内存中分配相应的空间,注意是栈内存。还有一种就是object类型的变量,他们在创建时,变量的引用(地址)存放在栈内存中,变量的具体信息,存放在堆内存中。当回收内存的时候,由于栈内存的生命周期由编译器决定,所以在变量生命周期结束时,变量自动消亡。而堆内存中的变量是由java垃圾回收器自动回收。在函数传值时,当我们对基本数据类型进行传值时,传递的是变量的值,对object类型传值时,传递的是变量引用。具体的关于栈和堆的区别请参考前辈的文章:http://liufei-fir.iteye.com/blog/699509 
       再来看c ,和java不同的是他拥有强大的指针功能使得我们能够对内存自由的操作。然而c 中的内存模型也分为stack和heap。那么什么类型的变量存在栈中,什么类型的变量存在堆中呢?经过我的总结,简单的说,直接申明的变量存在栈中,由指针通过new命令分配内存的变量存放在堆中。int a=5,栈中;int *a;a=new int[4],堆中。栈中的内存和java 一样,生命周期结束就消亡,堆中的内存比较悲剧,没有像java一样的垃圾回收及可以回收,只能由delete命令人工回收(这也是c 内存分配灵活性的体现)。有关于具体的c 栈和堆的总结,请参考前辈的文章:http://www.programfan.com/blog/article.asp?id=27508。在c 中还有一个引用的概念,他的意思是别名,她是独立的一个概念,不占内存空间,只是一个别名和初始化时的变量绑定,操作别名即操作初始化时所绑定的变量。 
阅读(1626) | 评论(0) | 转发(0) |
0

上一篇:

下一篇:

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图