首页 > 其他 > 详细

java垃圾回收

时间:2014-02-23 20:52:28      阅读:528      评论:0      收藏:0      [点我收藏+]

jvm何时回收一个java对象所占的内存?

当java对象失去引用时,JVM垃圾回收机制会清除他们,回收所占内存空间。

java有没有内存泄漏?

无用的内存没有被回收就是内存泄漏。

C++内存泄漏:内存是由程序员显示回收,忘了回收会导致内存泄漏

java内存泄漏:不可达对象由jvm回收不会导致内存泄漏,可达的但程序员不使用的对象会导致内存泄漏,其实就是浪费内存,占着空间自己又不用。

bubuko.com,布布扣

数组的remove

element[--size]=null删除元素要把引用赋值为null,否则就内存泄漏

自定义stack的pop

elementData[size]=null同样的道理

jvm回收java对象内存细节

垃圾回收的任务:跟踪并监控每个java对象,当不可达,回收内存;清理内存分配的时候产生的内存碎片。

垃圾回收算法:

执行方式:

(1)串行执行和并行执行

(2)并发执行和应用程序停止

回收内存方式:(目的是回收不可达对象)

(1)复制:搜索全部A可达对象,然后直接全部复制到B,再把A回收

(2)标记清除:扫描一遍标记A那些可达的,再扫描一遍回收那些不可达的

(3)标记压缩:扫描一遍标记A那些可达的,再压缩把可达对象凑一块,然后再一起回收不可达的。

引用分类

(1)强引用:处于可达状态,不可能回收;

(2)软引用:SoftReference当系统空间不足时,有可能被回收

(3)弱引用:WeakReference生命期更短,更弱

(4)虚引用:PhantomReference不能单独使用,用于跟踪对象被垃圾回收的状态

 

隔代回收机制

young代:复制算法遍历处于可达的对象,对象少,复制成本不大。

old代:young代多次扫描后留下的移动到old代,采用标记压缩算法

permanent代:不会被回收,用于装载class类信息(个人理解就是栈空间outofMermeryError: Perm Gen space)

 

垃圾回收附加选项

-Xmx:设置jvm堆内存最大容量

-Xms:设置jvm堆内存初始容量

-XX:PermSize:设置Permanent代默认容量

-XX:MaxPermSize:设置Permanent代最大容量

 

内存管理技巧

(1)尽量使用直接量

(2)使用StringBuilder和StringBuffer进行字符串连接

(3)尽早释放无用对象的引用

(4)尽早释放静态变量

(5)避免在经常调用的方法和循环中创建java对象

(6)缓存经常使用的对象

(7)尽量不要使用finalize方法

(8)考虑使用SoftReference

java垃圾回收

原文:http://www.cnblogs.com/thly1990/p/3561721.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!