Java 堆/栈 GC相关
2019-05-26 本文已影响0人
崽子猪
一、Java程序运行时的内存分配策略
静态分配[静态存储区]/栈分配[栈区]/堆分配[堆区]
1)静态存储区(方法区):主要存放静态数据、全局staic数据和常量
2)栈区:方法体内的局部变量都在栈上创建
3)堆区:通常就是指在程序运行时直接new出来的内存
二、栈内存/堆内存的区别
---------从内存分配角度---------
在方法体内定义的(局部变量)一些基本类型的变量和对象的引用变量都是再方法的栈内存中分配的
堆内存用来存放所有由new创建的对象(包括该对象其中的所有成员变量)和数组.在堆中分配的内存,将由Java垃圾回收器来自动管理
三、Java内存回收机制
Java内存回收机制流程图四、Java内存泄漏引起的原因
内存泄漏指那些无用对象/不在使用的对象事实占用我们的内存,或者说无用对象内存得不到即使释放.从而造成内存空间的浪费.
长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏
五、总结
堆
是一个运行时的数据区,
是由垃圾回收器来负责的.
是由动态分配内存的
存取速度慢
栈
存取速度快
存在栈中的大小必须和我们的生命周期是绑定的,缺乏一定灵活性