内存泄露

本文介绍了Java中的内存泄露问题,包括其定义、发生原因以及如何预防。同时提供了内存泄露定位的方法,帮助开发者有效解决内存泄露问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            这是面试中遇到的一个问题,今天大致简绍一下。

 

       内存泄露:指的是无用的对象持续占用内存,的不到释放,造成内存的浪费

java中对象的创建采用new或者反射创建的,这些对象在堆中进行分配,其回收是由java虚拟机的回收机制完成的。垃圾回收机制,会监控每个对象的运行状况,对申请,引用,赋值,等状况进行监控。

回收准:①给对象赋予了空值null,给对予了新值,这时候会重新进行分配空间。

 

泄露的原因:两种情况:

长生命周期的对象应用了生命周期较短的对象。

静态集合类的应用,如Hashmapvector生命周期和程序是一样的。

 

为了避免内存泄露,在编写代码的过程中可以参考下面的建议:

1、尽早释放无用对象的引用;

2、使用字符串处理,避免使用String,应大量使用StringBuffer,每一个String对象都得独立占用内存一块区域;

3、尽量少用静态变量,因为静态变量存放在永久代(方法区),永久代基本不参与垃圾回收;

4、避免在循环中创建对象;

5、开启大型文件或从数据库一次拿了太多的数据很容易造成内存溢出,所以在这些地方要大概计算一下数据量的最大值是多少,并且设定所需最小及最大的内存空间值。

 

内存泄漏定位问题:

 要定位问题,首先你需要获取服务器jvm某刻内存快照。jdk自带的jmap可以获取内存某一时刻的快照,导出为dmp文件后,就可以用Eclipse MAT来分析了,找出是那个对象使用内存过多。


参考文献:http://blog.csdn.net/gzh0222/article/details/8538727

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值