1、尽早释放无用对象的引用。特别是大对象和集合对象,通过置为NULL,暗示垃圾收集器来收集该对象,防止发生内存泄露。
2、程序中如果出现大量使用字符串处理,避免使用 String ,应使用 StringBuffer。
for(Int i=0;i<100;i++)
{
String s1="";
s1=s1+"abc";//不要这样写
}
3、尽量少用静态变量,因为静态变量是全局的, GC 不会回收的;
4、避免集中创建对象尤其是大对象, JVM 会突然需要大量内存,这时必然会触发 GC 优化系统内存环境;显示的声明数组空间,而且申请数量还极大。
5、尽量运用对象池技术以提高系统性能;生命周期长的对象拥有生命周期短的对象时容易引发内存泄漏,例如大集合对象拥有大数据量的业务对象的时候,可以考虑分块进行处理,然后解决一块释放一块的策略。
5、不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。可以适当的使用 hashtable , vector 创建一组对象容器,然后从容器中去取那些对象,而不用每次 new 之后又丢弃。
6、一般都是发生在开启大型文件或跟数据库一次拿了太多的数据,造成 Out Of Memory Error 的状况,这时就大概要计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。
7、注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。
8、尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费。
9、尽量避免强制系统做垃圾内存的回收,增长系统做垃圾回收的最终时间。
10、代码中是否有死循环或递归调用
11、是否有大循环重复产生新对象实体。
12、检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
下面给出了一个简单的内存泄露的例子。在这个例子中,我们循环申请Object对象,并将所申请的对象放入一个Vector中,如果我们仅仅释放引用本身,那么Vector仍然引用该对象,所以这个对象对GC来说是不可回收的。
Vector v=new Vector(10);
for (int i=1;i<100; i++)
{
Object o=new Object();
v.add(o);
o=null;
}
函数内,如果可以清除的,清除集合中对象
Map<Object,Object> v=new Map<Object,Object>();
for (int i=1;i<100; i++)
{
Object o=new Object();
v.put(i,o);
}
v.clear();
分享到:
相关推荐
### 如何解决Java内存泄漏 #### 1. 背景 ...总之,解决Java内存泄漏的关键在于预防。通过提高代码质量、加强测试以及持续监控,可以在开发早期阶段发现并解决问题,确保应用程序的长期稳定运行。
Java内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。为了有效地诊断和解决这类问题,开发者需要借助特定的分析工具。本篇将详细探讨Java内存泄漏及其相关的分析工具。 内存泄漏是指...
Java内存泄露检测是Java开发中一个关键的议题,因为它直接影响到程序的稳定性和资源效率。内存泄露是指程序中已分配的内存无法被正确地释放,从而导致系统资源的浪费和可能导致程序性能下降甚至崩溃。 首先,理解...
本文将深入探讨Java内存泄露的原因、表现形式以及预防措施。 #### 二、Java内存回收机制 Java的内存管理机制主要依赖于垃圾回收器(Garbage Collection, GC),这是一种自动化的内存管理方式。当对象不再被引用时,...
Java内存泄漏问题是一个重要的主题,尤其对于大型的J2EE应用程序而言,理解并避免内存泄漏至关重要。虽然Java的垃圾收集机制能自动管理内存,但并不意味着程序员可以完全忽视内存管理。以下是一些关于Java内存泄漏的...
Java内存泄露是一个严重的问题,它可能导致系统性能下降,甚至服务崩溃。分析和解决这些问题需要深入理解Java内存模型、垃圾收集机制以及JVM优化策略。以下是对这个主题的详细阐述: 1. **Java内存模型** Java内存...
### Java内存泄露总结 #### 一、Java内存回收机制 Java中的内存管理主要依赖于垃圾回收(Garbage Collection, GC)机制。与C/C++等需要手动管理内存的语言不同,Java虚拟机(JVM)自动处理对象的创建与销毁过程。...
### Java内存泄露的理解与解决 #### 一、深入理解Java内存泄露 在深入探讨Java内存泄露之前,我们先回顾一下Java内存管理的核心机制——垃圾回收(Garbage Collection, GC)。与C/C++等语言不同,Java自动管理内存...
### Java内存泄露、溢出检查方法及工具详解 #### 一、引言 在实际的项目开发和运维过程中,经常会遇到Java应用程序出现内存溢出(`java.lang.OutOfMemoryError`)的情况。这类问题不仅影响应用程序的稳定性和性能...
本文将详细介绍如何使用JMAP工具来定位Java代码中的内存泄漏问题。 首先,理解内存泄漏的概念:内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能并不明显,但随着时间的推移,这些未...
通过显式地释放资源、使用弱引用来管理对象引用等手段,可以有效地预防内存泄露问题,提高程序的稳定性和性能。 #### 六、参考资料 - [IBM DeveloperWorks: Java理论与实践]...
本文将深入探讨 Java 内存管理机制、内存泄漏的定义以及如何检测和预防这类问题。 首先,Java 的内存管理主要依赖于垃圾收集器(Garbage Collector, GC)。当一个对象不再被任何引用指向时,GC 会自动回收该对象所...
Java内存泄漏通常发生在程序中存在不再使用的对象,但由于某些引用依然存在,垃圾收集器(Garbage Collector, GC)无法正确识别并回收这些对象。 Java的内存管理机制主要是通过自动垃圾收集来实现的。当一个对象被...
Java内存泄漏是开发过程中常见的问题,可能导致系统性能下降,甚至应用程序崩溃。为了有效地排查和解决这类问题,开发者通常会借助专业工具,...同时,定期进行内存分析和优化是预防和解决Java内存问题的关键策略之一。
#### 一、Java内存泄漏基本概念 在程序开发中,内存管理是一项重要的任务。不同的编程语言采用了不同的内存管理机制。本文重点讨论Java内存泄漏问题,并将其与C/C++的内存泄漏进行对比分析。 C/C++程序在运行时...
### 关于Java内存泄露问题解决 #### 引言:Java内存管理的核心——垃圾回收机制(GC) Java作为当今产业界和学术界最炙手可热的编程语言之一,以其独特的安全性和可移植性赢得了广泛的应用,尤其是在服务器端编程...
XML文件的拆分与拼装是一种有效预防Java内存泄露的策略。这种方法的核心思想是避免一次性加载整个XML文件到内存中,而是将其分解为较小的部分,逐个处理,然后在需要时重新组合。这样做的好处是可以控制内存使用,...
Java内存管理是一个复杂而微妙的主题,尤其是当涉及到内存泄漏时。Java的自动垃圾回收机制虽然在大多数情况下工作得很好,但并不能完全防止内存泄漏的发生。内存泄漏通常发生在程序中,当不再需要的对象仍然被引用,...
Java内存泄露是一个严重的问题,它可能导致系统性能下降,甚至服务中断。本文将深入探讨Java内存泄露的定位与分析,帮助开发者识别和解决这类问题。 首先,理解Java内存模型至关重要。Java内存主要分为堆(Heap)和...