`
stephen830
  • 浏览: 3010606 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于JAVA内存泄漏问题注意事项

    博客分类:
  • java
阅读更多
引用
申明:本篇属于转载,原文地址 http://blog.chinaitlab.com/html/14/1372714-166017.html
感谢原文作者为我们提供这么好的文章。有转载的朋友要注明以上原文地址,谢谢!




  Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或 JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。

  在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。

  在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此不需要考虑这部分的内存泄露。

  注意事项:

  1.最基本的建议是尽早释放无用对象的引用。如:

  //……

  A a = new A();

  //应用a对象

  a = null; //当使用对象a之后主动将其设置为空

  //…。


  注:如果a 是方法的返回值,不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除

  2.尽量少用finalize函数。它会加大GC的工作量。

  3.如果需要使用经常用到的图片,可以使用soft应用类型。它尽可能把图片保存在内存中

  4.注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。

  5.尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费

  6.尽量避免强制系统做垃圾内存的回收,增长系统做垃圾回收的最终时间

  7.尽量避免显式申请数组空间

  8.尽量做远程方法调用类应用开发时使用瞬间值变量,除非远程调用端需要获取该瞬间值变量的值。

  9.尽量在合适的场景下使用对象池技术以提高系统性能。
分享到:
评论

相关推荐

    java内存泄漏解决

    本文将详细介绍如何解决Java内存泄漏问题,帮助开发者更好地理解和应对这一挑战。 #### 二、Java内存模型与内存区域 Java虚拟机(JVM)管理着多种不同类型的内存区域,包括堆内存(Heap Memory)、方法区(Method Area)...

    opencv3和opencv4多线程内存泄漏问题

    opencv3和opencv4多线程内存泄漏问题:以cv::resize函数测试结果为例。 使用中可修复或者可避免内存泄漏:1)使用opencv2的版本;2)在代码中设置修复该问题.

    ibm的java内存泄漏检测工具

    IBM的Java内存泄漏检测工具是专门用于解决Java应用程序中出现的内存管理问题的高效诊断工具。在实际的项目开发和运维过程中,内存泄漏是常见的性能瓶颈,可能导致系统响应变慢,甚至崩溃。IBM的这款工具提供了强大的...

    jProfiler7 java内存分析 linux版本

    6. **注意事项** - 使用jProfiler7时,确保目标应用程序和jProfiler7在同一网络环境中,或者使用SSH隧道进行远程连接。 - 分析内存问题时,避免在高峰时段进行,以免影响正常服务。 jProfiler7作为一个强大的Java...

    java 内存溢出分析工具 HeapAnalyzer

    Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...

    JProfiler对应用服务器内存泄漏问题诊断

    JProfiler是一款强大的Java性能分析工具,尤其在诊断内存泄漏方面表现出色。本文将深入探讨如何使用JProfiler来识别和解决应用服务器的内存泄漏问题。 一、了解内存泄漏 内存泄漏是指程序在申请内存后,无法释放已...

    JAVA注意事项

    以下是一些关于"JAVA注意事项"的详细说明: 1. **命名规范**:Java有严格的命名规则,类名应使用驼峰式命名,首字母大写;变量和方法名首字母小写;常量全大写,单词间用下划线分隔。遵循这些规范能提高代码可读性...

    Java中堆内存与栈内存分配浅析

    理解这两种内存类型的工作原理及其区别对于优化程序性能、避免内存泄漏等问题至关重要。本文将深入探讨Java中堆内存与栈内存的分配机制,并通过对比分析它们之间的差异,帮助读者更好地掌握Java内存管理的核心概念。...

    IBM内存分析工具(java)

    IBM内存分析工具,作为一个专业的Java内存诊断工具,专门针对Java内存溢出(Memory Overflow)和内存泄露(Memory Leak)问题进行深度分析,帮助开发者定位并解决这些问题。本文将详细介绍IBM内存分析工具的功能、...

    apache服务器出现内存溢出的解决方法.doc

    - 如果应用程序中存在内存泄漏,则需要修复代码中的问题。 2. **PermGen space** - **原因**:永久代(PermGen)用于存储类定义、常量池等信息。当永久代空间不足时,会抛出这种异常。这通常是由于加载了过多的类...

    Java堆外内存的使用Java开发Java经验技巧共5页

    Java开发中的堆外内存使用是优化程序性能... Java堆外内存的使用是提升系统性能的有效手段,但需要谨慎对待,避免内存泄漏和资源浪费。开发者应熟悉其原理,结合具体业务场景,恰当运用并做好监控,才能发挥出其优势。

    IBM的内存泄漏检测工具 最新 有使用说明和教程

    内存泄漏是计算机编程中一个严重的问题,特别是在大型企业级应用...总的来说,IBM的内存泄漏检测工具是Java开发者诊断和修复内存问题的强大武器。通过熟练掌握这些工具的使用,可以大大提高代码的质量和系统的稳定性。

    Java中内存泄露及垃圾回收机制宣贯.pdf

    收机制在Java中,垃圾回收(Garbage Collection, GC)是一项自动管理内存的重要机制,它主要负责识别并清除不再使用的对象,从而释放内存...理解垃圾回收的工作原理和注意事项,对于编写高质量的Java应用程序至关重要。

    Jni 调用注意事项

    在使用JNI开发时,理解这些注意事项是至关重要的,能够帮助避免许多潜在的问题和错误,确保本地代码和Java代码之间的无缝交互。同时,使用JNI还涉及到线程安全、错误处理和性能优化等多个方面,这些都是开发者在实践...

    JProfiler内存泄漏查找文档

    **JProfiler内存泄漏查找文档** JProfiler是一款强大的Java性能分析工具,特别...通过深入理解和熟练运用JProfiler,开发者可以有效地管理和优化Java应用程序的内存使用,提高程序性能,减少由于内存泄漏引发的问题。

    was内存溢出 javacore分析工具jca 401

    `readme.txt`通常包含关于如何使用工具、注意事项以及版本信息等内容。`jca.properties.xml`可能包含了JCA工具的配置信息,允许用户根据自己的环境进行定制。`readme.zip`可能是一个包含额外文档或示例的压缩文件,...

    深入解读 Java 堆外内存(直接内存)1

    - **内存泄露**:由于堆外内存不由JVM管理,因此程序员需要注意关闭不再使用的`DirectByteBuffer`,释放对应的堆外内存,防止内存泄漏。 - **性能监控**:在使用堆外内存时,需要定期监控系统的内存使用情况,确保...

    Android内存优化——常见内存泄露及优化方案

    2. LeakCanary:一个开源的内存泄漏检测库,能自动检测并报告内存泄露。 3. HPROF文件分析:通过生成HPROF文件,使用MAT(Memory Analyzer Tool)进行深度分析。 三、优化策略与最佳实践 1. 使用弱引用...

Global site tag (gtag.js) - Google Analytics