java数组释放内存空间_Java垃圾收集器不释放数组的分配堆内存空间的数组列表...

我的Java(.jar)程序访问数据库并将值存储为 private ArrayList (全局变量),以便在显示的JFrame中多次使用 .

数据存储如下:给定表的每一行都作为Array存储在ArrayList中 . 因此,此ArrayList包含来自给定表的所有所需数据 . 使用此方法可以提高程序的速度,因为使用预先存储的ArrayList多次访问数据比访问数据库本身更快 .

问题是每当执行 JFrame.dispose() 以便打开另一个JFrame时,垃圾收集器都不会释放ArrayList的已分配空间(即使不再引用这些ArrayLists)并继续在堆上占用(和堆叠)空间记忆 . 每次处理时,再输入另一个帧,根据JFrame需要的数据创建多个KB到几MB的ArrayLists . 最后达到最大堆空间并抛出 java.lang.OutOfMemoryError: Java heap space error .

除非程序关闭并再次打开,否则内存会不断堆叠 . 请注意 System.gc() 不起作用 .

一个JFrame示例:

import java.util.ArrayList;

public class Test extends javax.swing.JFrame {

private javax.swing.JButton GenerateB;

public Test() {

initComponents();

}

//To create the JButton:

private void initComponents() {

GenerateB = new javax.swing.JButton();

getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

GenerateB.setText("Generate");

GenerateB.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

GenerateBActionPerformed(evt);

}

});

getContentPane().add(GenerateB, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, -1));

}

//Code executed when the button is clicked.

//Clicking the button tens of times will fill the memory heap till it runs out of memory, even though there is no reference to the ArrayLists created

//Note: calling Text.dispose() will not free the used up space.

private void GenerateBActionPerformed(java.awt.event.ActionEvent evt) {

ArrayList A = new ArrayList<>();

for (int i = 0; i < 100000; i++) {

String[] S = {i + "", i + i + "", i + i + i + "", i + i + i + i + ""};

A.add(S);

}

}

}

有没有办法“清理”那些Arrays / ArrayLists的堆内存?难道我做错了什么?


版权声明:本文为weixin_30573089原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。