码迷,mamicode.com
首页 > 编程语言 > 详细

java内存管理浅析

时间:2015-03-17 16:04:04      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:java内存管理   数组存储方式   

   首先感谢强大的网络资源,本博文是根据网络上的各种资源进行整合,然后加入自己的理解而成,可能会与其它网络资源有重复,望其他作者多多包涵。由于初学java,如有不准确的描述还请读者指正。下面正式切入正题:

  众所周知,java和C++都是面向对象的编程语言,但是与C++相比,java上手比较容易,而且使用方便。小弟对c++了解不是很多,但是有一点是C++初学者最为头痛的问题,那就是内存管理,这也正是C++和java之间很大的一个区别。在C++中,内存是依靠程序员自己来管理的,编写程序过程中稍有不慎就会导致致命的错误————崩溃;而java中,内存是依靠java虚拟机来管理的,叫做垃圾回收机制,程序员可以不用去过多关心这方面的东西,因此也剩下了不少的时间和精力。但是对于一个优秀的程序员而言,这种内存自动管理的机制并不是一件好事,就像手工制作的皮鞋远比机器制作的皮鞋要好的多,舒服的多一样。内存自动管理不仅会降低程序的运行效率,同时也降低了程序的可靠性,所以,java获得了方便,易学的优势是在牺牲了效率和程序可靠性的基础之上的。既然java内存管理都是自动化的,那我们为啥还要去了解呢,原因很简单:有助于个人能编写出更加优秀的代码。

下面就让我们了解一下java内存的管理机制:

  java内存的管理无非就是两点:内存的分配和内存的回收。

  其中内存分配包括堆和栈两部分:堆中存储的都是实体,而栈中存储的是指向实体的引用;

例如:新建一个数组  int[] arr = new int[3];在内存中的分配是这样的:

技术分享

  其中,栈中的数据不是长久存在的。arr位于栈中,其中存放的是数组的地址,一旦出了作用域,arr将被释放掉,而堆中的数据不会被释放,但是也没有索引能够获取数组的数据。因为arr是找到数组数据的唯一一把钥匙,钥匙丢了,那么数据也就无法被利用了,也就成了内存垃圾,在C++中,这部分垃圾是程序员自己去处理的,但是在java中有专门的垃圾回收机制,由虚拟机来完成。

  同样,java程序运行中调用函数时,也是先加载到栈中,每一个函数形成一个帧,同样遵循先进后出的原则,执行完后这部分内存就被释放掉,这也是为什么函数中局部变量为什么会只在作用域中有效的原因。

 附图:Java虚拟机运行时的数据区

相关详细知识参见:http://www.cnblogs.com/gw811/archive/2012/10/18/2730117.html

技术分享


本文出自 “软件开发交流” 博客,请务必保留此出处http://smile2015.blog.51cto.com/9250194/1621428

java内存管理浅析

标签:java内存管理   数组存储方式   

原文地址:http://smile2015.blog.51cto.com/9250194/1621428

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!