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);
}
这段代码会导致内存泄漏。应该是什么变化。
生成听力图。
这个类主要用于生成 标准的听力图XO图。
听力图是正常的 以最高值显示 底部(即顶部的-10到110的顶部) 线路下降 随着员工的听证会变得更糟。
答案 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。