Java把内存分红两种,一种叫作栈内存,一种叫作堆内存java
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的做用域后,java会自动释放掉为该变量分配的内存空间,该内存空间能够马上被另做他用。web
堆内存用于存放由new建立的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在数组
数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,可是仍然占着内存,在随后的一个不肯定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要缘由。数据结构
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 函数
静态存储分配是指在编译时就能肯定每一个数据目标在运行时刻的存储空间需求,于是在编译时就能够给他们分配固定的内存空间.spa
栈式存储分配也可称为动态存储分配,栈式存储分配要求在过程的入口处必须知道全部的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都没法肯定存储要求的数据结构的内存分配。orm
从堆和栈的功能和做用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的.对象