浅议java内存泄露具体原因及解决措施.docVIP

浅议java内存泄露具体原因及解决措施.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅议java内存泄露具体原因及解决措施

浅议java内存泄露具体原因及解决措施摘要:在众多高级编程语言中,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的内存泄露主要是由

文档评论(0)

linsspace + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档