如何用Java编写一段代码引发内存泄露,内存泄露

 我来答
翰林学库
2018-05-20 · TA获得超过32.9万个赞
知道大有可为答主
回答量:6.2万
采纳率:89%
帮助的人:4030万
展开全部
1、首先得搞清楚什么叫内存泄露,简单来说就是一个东西放在内存里的时间太长了,当你的程序都跑完了,它还存在那里。这时它是白白的占用了你的内存,累积起来占用的内存越来越多……最后就会导致JVM报错:out of memory。
2、一般情况下,别人如果能指出你的系统(程序)内存溢出,这个人应该还是挺厉害的。通常对于新人来说,喜欢把变量直接定义在class下(此时称之为实例变量,或者成员变量),那么在方法里调用后,这个实例变量是不会被释放的,大量的这样使用就可能会引发内存泄露。
3、把变量定义在方法里,当这个方法执行完毕后内存就得到释放了,这是个好习惯。
4、如果想要看到内存溢出,可以按这样的思路去尝试一下:定义一个静态的实例变量(list或其它集合),然后在一个方法里循环往这个静态变量塞东西,直到这个实例变量撑爆你的jvm内存。很快你就能看到out of memory……
123456789101112131415161718192021222324import java.util.ArrayList;import java.util.List; public class MemoryTest { private static List list = new ArrayList(); private static int count = 0; public static void main(String[] args) throws InterruptedException { System.out.println("申请前的可用内存 = "+getFreeMemory()); while(true){ list.add(new byte[1024*1024]);//用实例变量申请1M内存,当方法执行完毕时,这个static的变量是不会被释放 count++; if (count % 100 == 0) { System.out.println("当前list.size()="+list.size()+",可用内存 = "+getFreeMemory()); Thread.sleep(500); } } } public static long getFreeMemory() { return Runtime.getRuntime().freeMemory() / (1024 * 1024); } }
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式