java对象内存管理的简单认识!

java里面有句名言:Everything is object!但是java还算不上是纯面向对象的语言。它的数据类型包括基本数据类型(byte,short,int,char,long ,float,double,boolean)和引用类型(数组,类对象等)。

java语言是C++的儿子。java升级了C++中对于对象的理解,除去了C,C++中难以理解的指针使用,让编程人员更加舒适的表达自己的程序(只是从复杂性和易操作性方面考虑,另外一个说法是C语言让程序员更加随心所欲放飞思想,因为编译系统给予程序员更多的信任)。虽然java语言不再推荐程序员使用指针,然而我们还是能在程序中看到指针的影子。只不过换了一种称呼,名曰“引用”。
看了李刚的《疯狂java》,对一些基础的概念有了更深一步的了解。这实在不失为一本入门级好书,对入门到中级的Java学习者安利一下。
即使是学习高级语言,对于自己定义的类,数据,变量在底层的存放都需有一个大概的了解。这对于日后优化大有脾益。
在java中,数组也是一种引用。数组名就是引用变量。下面看看在内存中存放情况。
这里写图片描述

以上是java语言在定义变量时候,系统分配内存的情况。变量所指的内存存放的都是默认的初始值。由箭头可知,变量a,b都是引用变量,这个是和指针的功能一模一样,指向分配的内存首地址,代表内存地址。
这里数组定义有两种方式:

  1. type[] arrayName

  2. type arrayName[]

    可能受C语言定义数组的影响,我们习惯后者定义。
    但是java中把数组做为引用来处理,显然前者是更符合定义变量的理解的。
    这里有个重要的概念:栈内存和堆内存。我也是初学者,傻傻分不清。只要记住,数组元素,引用变量所指的对象的值都是分配在堆内存中的,而引用变量,方法这些都是存放在栈内存中的,方法对应有方法栈,方法中定义的变量都是存放在方法栈中。栈内存中的引用变量是访问堆内存中数据的唯一方式。
    由于引用变量一般放在方法栈内存中,当方法运行结束,对应的方法栈内存会销毁释放。但是在程序中创建的对象,它是保存在堆内存中的,不会随着方法的结束而销毁释放,这个对象还可能被其他的引用变量引用。只有当对象失去引用时,这个对象变成垃圾,系统的机制可以再合适的时候回收这部分内存。
    如果在上图所示的a,b引用变量,执行以下语句
    b=a;
    将a的值赋给b,那么此时引用变量b指向a所指向的对象,原先被b指向的对象没有任何引用变量引用,变成了垃圾。
    这里写图片描述
    后记:看了各位大手的博文,凭良心说,我对程序设计一无所知。所谓闻道有先后,术业有专攻。计算机覆盖面太广,涉及知识浩如烟海,希望自己在某方面有所建树,至少有所长吧。路漫漫其修远兮!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值