A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张丽 中级黑马   /  2012-10-11 21:45  /  1187 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编程写出一个内存泄露的例子。提示:用反射和IO知识。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
我new一个流对象,不close,就泄露了、、、、
回复 使用道具 举报
  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class LeakageRAM {
  4.         public static void main(String[] args) {
  5.                 List list = new ArrayList();
  6.                 long i = 0;
  7.                 while (i++ < 10000000) {
  8.                         list.add(new Object());
  9.                 }
  10.                 list = null;
  11.                 System.out.println("结束");
  12.                 System.gc();
  13.                 while (true) {
  14.                 }
  15.         }
  16. }
复制代码
这样也可以实现啊
回复 使用道具 举报
  1. package java1.reflect;

  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.Collection;
  5. import java.util.Properties;

  6. /**
  7. 编程写出一个内存泄露的例子。提示:用反射和IO知识。
  8. 所谓内存泄露就是说,这个对象我不要用了,但是它一直占用内存空间,
  9. 没有被释放(有个东西我不再用了,程序一直在运行,再也不用它了,结果它没有被释放掉,浪费内存)
  10.   */
  11. public class Memory {
  12.         public static void main(String args[]) throws IOException, InstantiationException, IllegalAccessException, ClassNotFoundException{
  13.                 //IO操作
  14.                 InputStream in = Memory.class.getResourceAsStream("config.properties");
  15.                  System.out.println(in.available());
  16.                  Properties prop = new Properties();
  17.                  prop.load(in);
  18.                  in.close();
  19.                  String className = prop.getProperty("className");
  20.                  System.out.println(className);
  21.                  //反射
  22.                  Collection coll = (Collection)Class.forName(className).newInstance();
  23.                  Student st1 = new Student("zhangfei",23),                                        
  24.                  st2 = new Student("zhangfei4",24),
  25.                  st3 = new Student("zhangfei6",26),
  26.                  st4 = new Student("zhangfei5",25);
  27.                  coll.add(st2);
  28.                  st2.setAge(400);
  29.                  coll.add(st3);
  30.                  coll.add(st1);
  31.                  coll.add(st4);
  32.                  //在这个地方造成了内存泄露,因为修改了与hashCode相关的属性,导致集合中涉及到st2的操作不能成功。
  33.                  System.out.println(coll.remove(st2));//返回结果为false

  34.         }
  35. }
  36. class Student{
  37.         private String name ;
  38.         private int age;
  39.         public Student(String name, int age) {
  40.                 super();
  41.                 this.name = name;
  42.                 this.age = age;
  43.         }
  44.         @Override
  45.         public int hashCode() {
  46.                 return name.hashCode()+age*33;
  47.         }
  48.         public String getName() {
  49.                 return name;
  50.         }
  51.         public void setName(String name) {
  52.                 this.name = name;
  53.         }
  54.         public int getAge() {
  55.                 return age;
  56.         }
  57.         public void setAge(int age) {
  58.                 this.age = age;
  59.         }
  60.        
  61. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马