zoukankan      html  css  js  c++  java
  • 老李分享:jvm垃圾回收

    老李分享:jvm垃圾回收

     

     poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-84505200。 

    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,以回收内存。

  • 相关阅读:
    JAVA-AbstractQueuedSynchronizer-AQS
    线程封闭
    安全发布对象
    JAVA并发基础
    C#JsonConvert.DeserializeObject反序列化json字符
    Java并发容器
    JAVA简易数据连接池Condition
    Java线程读写锁
    JDK提供的原子类和AbstractQueuedSynchronizer(AQS)
    协方差矩阵分解的物理意义
  • 原文地址:https://www.cnblogs.com/poptest/p/5064107.html
Copyright © 2011-2022 走看看