博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM垃圾回收
阅读量:6220 次
发布时间:2019-06-21

本文共 875 字,大约阅读时间需要 2 分钟。

hot3.png

1、垃圾收集算法核心思想

    java语言建立了垃圾回收机制,用于跟踪正在被使用(引用)的对象和没有被使用(引用)的对象,该机制可以有效防范动态内存分配中可能发生的两个危险:因垃圾过多而导致内存耗尽,以及不恰当的内存释放造成内存非法引用。

    垃圾收集的核心思想是:对虚拟机的可用空间即堆空间进行识别,如果对象正在被引用,则称其为活对象,如果没有被引用,则称为垃圾对象。可以回收其占据的空间,用于再分配。

2、触发主GC的条件

    (1)、当应用程序空闲时,gc会被调用。因为gc运行在优先级最低的线程中,当没有应用线程运行的时候,gc会被调用。

    (2)、当jvm内存空间即堆空间不足时,gc会被调用。应用线程在运行过程中创建对象时,如果没有足够的内存空间,jvm会强制执行一次GC用于回收内存再分配。如果内存空间任然不够,则会再执行2次GC,如果任然无法满足的话,就会报”out of memory“错误。

3、减少GC开销的措施

    (1)、将不再使用的对象置为null。一般情况下,jvm会将值为null的对象当做垃圾,将不再使用的对象置为null,方便GC判定,从而提高GC效率。

    (2)、不要显示调用System.gc()。显示调用GC,多数情况下回增加主GC的频率,也就增加了间歇性停顿的次数。

    (3)、减少临时对象的使用。临时对象在跳出调用函数后,会成为垃圾对象。

    (4)、能用基本类型就不用引用类型。基本类型变量占用的内存资源和其引用对象所占内存资源要少很多

    (5)、在做字符串累加时,用stringBuffer替代String。string存储的字符串不可变,string在累加的时候会产生垃圾对象。而stringBuffer在累加时在原来对象上直接增加就可以了。

    (6)、尽量少使用静态对象。静态对象不会被当做垃圾回收,会常驻内存。

    (7)、分散对象创建和删除的时间。短时间内创建大量的对象,会需要大量的内存,jvm此时只能进行主GC,以回收内存。

    

转载于:https://my.oschina.net/u/1474079/blog/278478

你可能感兴趣的文章
make与makefile
查看>>
我的友情链接
查看>>
敏捷开发思想及Scrum实践
查看>>
几套好用的主题
查看>>
linux下文件删除的原理
查看>>
系统安全
查看>>
多生成树协议MSTP
查看>>
解决奇葩的win7文件不能拖动问题
查看>>
linux网络属性管理总结
查看>>
2015/03/23 磁盘管理
查看>>
2015/03/25 LVM(逻辑卷组管理)
查看>>
好玩的三角型
查看>>
自动化中图像识别
查看>>
mongoDB之用户及权限设置
查看>>
eclipse无法导入项目解决方法
查看>>
svn 的一些坑
查看>>
mycat核心配置详解(rule.xml配置,以及常用分片算法)
查看>>
第二十一天 引用传递
查看>>
Delphi和C 的语法区别 (关于构造和析构)_xuebabybaby-ChinaUnix博客
查看>>
vm虚拟机NAT模式下无法ping通主机&putty连接问题
查看>>