您的位置:首页 > 编程语言 > Java开发

Java内存分配管理知识点

2017-03-04 17:22 120 查看

Java内存分配策略为静态存储区、栈内存区、堆内存区

静态存储区:主要存放呗static声明的变量或者常量,该区域在编译时候经常分配完成并且在运行期间都是存在的可被全局使用。

栈内存区:用于存放局部变量,即在执行某方法时方法体内所声明的基本类型或对象的引用地址,当方法执行结束后这些局部变量持有内存将被自动释放。因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

堆内存区:又称动态内存分配,主要存放那些运行时 new 出来对象实体的内存,这部分内存内存用 Java 垃圾回收机制负责回收管理。

Java回收机制GC

java new 出来的对象实体存储在堆内存中,那么这些内存是如果被释放的呢? 那就是通过 Java 的回收机制 GC 来管理。

GC 释放或者说回收内存的原则是当这个实体不再被使用时回收释放,因为 GC 随时需要监控每个对象的状态,包括对象的申请、引用、被引用、赋值等,GC 都需要进行监控。所以GC给程序员带来管理内存方便的同时也给 JVM 增加负担。

GC是如何判断那些内存需要回收的请看示意图:



Java 内存泄漏

Java 内存泄漏是指在有向图中是可达的,但是该对象是无用的却不能被 GC 回收释放。也就是说程序在内存中为 new 出来的对象申请了一块内存,但是该对象在程序中是用不到无用的。GC 又不会释放该对象内存。这种情况可以判定为内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: