• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 小学学习 > 正文

    浅谈java内存泄露的具体原因和解决措施:java static 内存泄露

    时间:2019-04-22 03:25:05 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘要:在众多高级编程语言中,Java具有程序高度安全的特点,越来越多的企业级应用系统采用Java技术开发,这些系统往往长时间运行,哪怕是很小量的内存泄露也有可能导致系统的崩溃,因此内存泄露的问题不容忽视。本文重点分析研究了Java内存泄露的原因及表现形式,并在此基础上提出了内存泄露的表现形式。
      关键词:Java;内存泄露;内存管理
      基于安全性的考虑,很多网络程序的编写都采用Java程序设计技术,互联网最常见的编程语言就是Java。C、C++等高级编程语言容易产生内存泄露,这是因为编程人员需要自己对对象的产生和回收做出声明,而对象的回收一般都比较繁琐,容易产生内存的泄露。Java与其它高级编程语言不同,它自身带有垃圾收集器(英文全称Garbage Collector,简称GC),这种垃圾回收机制可以实现内存的自动管理与回收。正是基于这点考虑,许多编程人员都认为采用Java编程语言,就可以在管理创建对象的同时,不考虑内存方面的事情,且内存不会泄露,其实这种想法是不对的,采用Java仍然会有内存泄露问题出现。
      一、为何会产生内存泄露
      1、内存泄露的主观原因
      在主观方面主要是人为因素造成的,比如编程人员的编程能力不足,或者编程时的专注度不够,这些都会使得错误或无意保持引用一些无用对象,进而造内存泄露的普遍发生。
      2、内存泄露的客观原因
      在客观方面主要是垃圾收集器的回收机制的作用,垃圾收集器对垃圾的判断法则与普通编程人员不同,例如,垃圾收集器认为垃圾都是一些不可达的对象,而其他一些有句柄指向的对象应该被认作正在使用的对象;普通编程人员认为垃圾是不再需要使用的对象,但是这些不再使用的对象还被其他正在使用的对象引用。这样就产生了判断准则的差异,普通编程人员认为应该回收的对象垃圾收集器不予回收。除此之外,垃圾收集器的参数设置要非常注意,如果设置出现差错容易导致内存泄露。
      二、Java中内存泄露的主要表现
      针对C、C++等传统语言回收对象的不方便,Java作了一个很突出的变革——引入了便捷的垃圾收集器的机制。垃圾收集器可以为编程人员分担内存管理工作,可以使编程人员从繁杂的对象回收工作中解脱出来从事关键的程序开发工作。在具体实践中,编程人员可以使用关键字new或者用Java的反射机机制,预留出一部分内存空间给对象,这个内存空间可以自动回收不再使用的对象。这种收支两条线的内存管理机制有效地解决了传统语言中的内存泄露问题,极大地提高了编程的效率。虽然垃圾收集器的引入带来了效率的提高,但是Java中仍然会出现的内存泄露的问题。与传统语言的内存泄露方式不同,Java的内存泄露是指某些对象不被需要和使用时,一些程序或代码仍然对其进行保持或引用,这样使得垃圾收集器无法回收这些垃圾对象占用的内存。这是由于垃圾收集器的垃圾对象判断机制认为这些对象仍然“有用”。
      三、内存泄露的分析与处理方式
      1、要做好提前预防内存泄露的工作
      对于不同的JVM,垃圾回收机制和启动参数也各不相同,需要具体分析。有的垃圾收集器是在堆内存出现不足时收集垃圾,有的垃圾收集器是定时启动的,而有的垃圾收集器是当中央处理器的资源空闲时开始收集工作。要预防内存泄露,一定要优化好垃圾收集器的配置。垃圾收集器的参数和算法容易对程序产生重要影响,如果垃圾回收机制使用不当,或者参数配置不合理,都会形成内存泄露的隐患。
      2、编程人员要养成良好的编程习惯
      如果编程人员的水平较高,能够编写出高质量的代码,可以降低内存泄露的可能。减少内存泄露的可能性的最重要原则是,对于“无用”对象的引用应该尽快的予以释放,具体来说就是当某个对象不再使用,可以采用“对象=null”的方式进行显式释放对象,这样垃圾收集器可以快速回收这些对象占有的内存。要尽量少采用临时对象,因为临时对象的存活时间短,不再使用就及容易变成垃圾,如果使用过多地临时对象,垃圾收集器会频繁启动来进行内存回收,这样应用程序的性能必然受到影响。另外,要尽量避免在类的构造函数中创建大量对象,防止在调用其自类的构造方法时造成不必要的内存资源占用。最后,要避免过深的类层次结构和过深的方法调用,这两种方式都很浪费内存,容易影响应用程序得性能。
      3、按系统运行环境调优JVM运行参数
      系统内存环境的变化会对垃圾收集器产生影响,对于垃圾收集器的参数设置要根据具体的系统环境进行调整,要经过仔细测试找到最佳的参数。参数如果调整得当,垃圾收集器可以很平缓地释放内存空间,可以通过一些小步骤来对垃圾进行回收,这样垃圾收集器可以更高效的运行。垃圾收集器可以调整和优化的参数不仅多,而且具体设置过程也很复杂,具体操作需要借助一定的资料。
      四、结语
      综上所述,Java的内存泄露主要是由于一些无用对象被错误地保持着,导致它们的空间不能被GC回收造成的。本文通过对Java中GC工作的原理和产生内存泄露的原因进行的研究分析,希望为开发更优的Java应用提供一些参考。(作者单位:大连大学)

    推荐访问:浅谈 泄露 内存 措施

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章