解决了此代码中的内存泄漏问题

时间:2010-10-19 14:10:16

标签: java

  

可能重复:
  does these code has memory leakage??

static private       ArrayList   seriesColors      = new ArrayList(); 

public Audiogram(int widthParm, int heightParm) 
            throws Exception 
    { 
        super(widthParm, heightParm); 
        seriesColors.add(new Color(  0,   0, 255)); 

        // Set the default settings to an industrial audiogram 
        setType(INDUSTRIAL_AUDIOGRAM); 
    } 

这段代码会导致内存泄漏。应该是什么变化。

  1. 我应该将静态变量更改为非静态变量。
  2.   

    生成听力图。

         

    这个类主要用于生成   标准的听力图XO图。

         

    听力图是正常的   以最高值显示   底部(即顶部的-10到110的顶部)   线路下降   随着员工的听证会变得更糟。

2 个答案:

答案 0 :(得分:3)

嗯,这段代码可以“泄漏”内存的唯一方法就是你只需要继续向seriesColors添加元素而不删除任何元素。因此,要回答您的问题:从seriesColors删除旧的/不必要的颜色或避免添加它们。

关于static修饰符:如果您希望每个static拥有自己的seriesColors实例,则应移除Audiogram前面的seriesColors。如果您希望在seriesColors的所有实例之间共享Audiogram,那么您应该保留static

答案 1 :(得分:1)

  

Audiogram是一个构造函数,除了这个方法之外不使用seriesColors

假设您的陈述是准确的,并假设您发布了整个构造函数,seriesColors属性(静态或非静态)没有任何用处。

如果是这种情况,那么内存泄漏的修复就是从代码中删除 seriesColors声明,如下所示:

// static private ArrayList seriesColors = new ArrayList();  <<<=== remove this line

public Audiogram(int widthParm, int heightParm) 
        throws Exception 
{ 
    super(widthParm, heightParm); 
    // seriesColors.add(new Color(0, 0, 255)); <<<=== remove this line

    // Set the default settings to an industrial audiogram 
    setType(INDUSTRIAL_AUDIOGRAM); 
} 

然而,我怀疑这不是全部故事......

修改

如上所述,注释掉这两行。如果代码用注释掉的那两行编译,那么它们肯定是多余的。

然而,令我感到震惊的是,您对Java的了解必须接近于零。如果是这种情况,您不应该尝试清除其他人的代码中的内存泄漏等。先学习一些Java。