先看以下图片:
含义及用法
通常我们定义一个基本数据类型的变量,一个对象的引用、方法调用的现场保存都使用内存中的栈空间;栈空间操作最快但是也很小。
而通过new关键字和构造器创建的对象放在堆空间;整个内存包括硬盘上的虚拟内存都可以被当成堆空间来使用。
静态区存储class字节码文件、静态变量。
堆与栈的区别
| 堆 | 栈 | |
| 内存申请方式 | 程序员自己申请,申请时需要指明申请的大小 | 系统自己分配 |
| 系统响应方式 | 遍历内存空闲地址链表,找到比申请的要大的堆结点,将其
中申请的大小分配给程序,程序空间放入空闲链表中 |
栈的剩余空间不足时会overflow |
| 最大空间大小 | 由系统中的有效虚拟内存决定 | 2M |
| 执行效率 | 慢、易产生内存碎片、灵活 | 快、无内存碎片 |
参考:
http://blog.csdn.net/mishifangxiangdefeng/article/details/7200730