黑马程序员技术交流社区

标题: Java中堆内存和栈内存的区别 [打印本页]

作者: 小米哥    时间: 2016-3-2 10:20
标题: Java中堆内存和栈内存的区别

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在

数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因。

按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的.

静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.

栈式存储分配也可称为动态存储分配,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配。

从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的

作者: xiaotvsit    时间: 2016-3-2 10:50
请问java虚拟机是怎么样回收内存的?
作者: xiaotvsit    时间: 2016-3-2 10:51
请问java虚拟机是怎么样回收内存的?
作者: 小米哥    时间: 2016-3-2 11:04
xiaotvsit 发表于 2016-3-2 10:51
请问java虚拟机是怎么样回收内存的?

Java语言对内存的释放是采用垃圾回收机制。Java虚拟机自动判断并收集垃圾
作者: 南国强    时间: 2016-3-2 11:15
受教了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2