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);
}
我有大约五种这样的方法,但是由于seriesColors是静态的,所以想知道上面的代码是否会导致内存泄漏。
如果存在内存泄漏,那么该如何解决?
private static final ColorModel rgbModel = ColorModel.getRGBdefault();
public void setPixels(int x, int y, int w, int h, ColorModel model, int[] pixels, int off, int scansize )
{
if ( model == rgbModel ) {
try {
encodePixelsWrapper( x, y, w, h, pixels, off, scansize );
}
catch ( IOException e ) {
iox = e;
stop();
return;
}
}
else {
int[] rgbPixels = new int[w];
for ( int row = 0; row < h; ++row ) {
int rowOff = off + row * scansize;
for ( int col = 0; col < w; ++col ) {
rgbPixels[col] = model.getRGB( pixels[rowOff + col] );
}
try {
encodePixelsWrapper( x, y + row, w, 1, rgbPixels, 0, w );
}
catch ( IOException e ) {
iox = e;
stop();
return;
}
}
}
}
public static ColorModel getRGBdefault() {
if (RGBdefault == null) {
RGBdefault = new DirectColorModel(32,
0x00ff0000, // Red
0x0000ff00, // Green
0x000000ff, // Blue
0xff000000 // Alpha
);
}
return RGBdefault;
}
在这两个代码中,哪一个存在严重缺陷?
静态变量在类的所有实例之间共享。(使用“ new”运算符创建一个实例。)
在这些示例中;使用静态(实例变量)存储颜色可能不是一个好主意,因为实例之间会相互干扰。该变量应更改为“普通”实例变量。
第二个示例中的最终静态colorModel非常好;它是一个不可变的对象(至少接口是不可变的),这些方法非常线程安全,并且可以同时被许多实例使用。
请注意,第一个问题不是“内存泄漏”。您可能会说,这些实例无意间在它们之间泄漏数据,但这不是经典的内存泄漏,在这种情况下,活动对象会无意间保留对“死”对象的引用。
由于某种原因,IF
seriesColors应该为每个创建的实例包含一种颜色。(这可能是一个愚蠢的设计)必须以某种方式同步访问arraylist。但是我认为这超出了范围…
本文向大家介绍什么是内存泄漏?相关面试题,主要包含被问及什么是内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。
我试图在我们非常小且简单的Spring Boot应用程序中跟踪并确定内存泄漏的根本原因。 它使用以下内容:-Spring Boot 2.2.4-azure servicebus jms Spring Boot starter 2.2.1-MSSQL 功能:该应用程序只发送Azure ServiceBus队列,存储数据并将数据发送到其他目的地。这是一个小应用程序,所以它很容易启动64兆的内存,尽管我
今天给大家聊聊咱们平时写代码的时候,最常见的String字符串代码,它的一些底层原理,以及使用不当可能引发的内存泄漏的问题,相信对于大家平时日常开发写代码会有一定的帮助。 String字符串在内存里是如何存储的? 首先呢,当我们平时在代码中写下一行String类型的代码时,大家知道这个String字符串在内存里是如何存储的吗?比如这样的一行代码:String username = “zhangsa
问题内容: 我正在编写一个测试程序,如下所示: 当用户单击按钮A时,它将打开50个JFrame。 当用户单击按钮B时,它将放置所有通过单击按钮A显示的JFrame。 我发现单击按钮B后内存不会减少。我使用任务管理器(在Windows中为+ + ,并检查“ java”的内存使用情况)确定了这一点。 问题答案: 是的,没有办法,无法解决(不仅在Java PL中), 1)实际上,不要在运行时/运行时创建
本文向大家介绍内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?相关面试题,主要包含被问及内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?时的应答技巧和注意事项,需要的朋友参考一下 (1)内存溢出(OOM)和内存泄露(对象无法被回收)的区别。 (2)引起内存泄露的原因 (3)内存泄露检测工具 ------>LeakCanary 内存溢出 out of memory:是指程序在申请内存时,没有足够的内
问题内容: 我认为我的android应用正在泄漏内存。我不是绝对确定这是问题所在。 应用程序打开时经常崩溃,并且logcat尝试加载位图图像时会显示“内存不足”异常。 崩溃后,我重新打开了该应用程序,它运行正常。Logcat会显示许多“ gc”,并且JIT表会不时地向上调整大小,而不会向下调整,直到应用程序因内存不足错误而崩溃。 这听起来像是内存泄漏吗?如果是这样,我该如何定位和关闭泄漏点。 这是