设为首页收藏本站language 语言切换
查看: 998|回复: 0
收起左侧

南京Java培训带你认识Java中的内存分配

[复制链接]
发表于 2016-3-23 17:55:01 | 显示全部楼层 |阅读模式
  今天南京万和Java培训和大家分享Java 中的两种内存分配:一种是栈内存,另一种是堆内存。

  在函数中定义的一些基本类型的变量和对象的成员变量(初始化)都是采用栈内存分配方式。当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。

  new创建的对象和数组采用堆内存分配方式。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或者对象之后,还可以在栈中定义一个特殊的变量,让栈中的这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量(句柄),以后就可以在程序中使用栈中的引用变量来访问堆中的数组或者对象,引用变量就相当于是为数组或者对象起的一个名称。引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候(=null),才变为垃圾,不能再被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。

  这也是Java比较占内存的原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

  以上是南京万和Java培训机构讲师对于Java 中的两种内存分配的详解,后续会为大家提供更多的技术讲解。


您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-3-4 23:16 , Processed in 0.065981 second(s), 25 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表