我的Java编写的应用程序消耗了太多的内存.
程序如何工作:用户从日历(GUI)中选择日期,应用程序将数据加载到JTable组件中.每次加载数据时,都会创建并设置新的TableModel.没有创建新的JTable,只是模型.
问题是什么?:从日历和加载到JTable的每个新的一天选择消耗大约2-3 MB的内存.在启动应用程序消耗cca 50-60 MB的RAM,在日历上几次"点击"(如20)后,应用程序消耗完整的堆大小(128MB).应用程序崩溃,当然......
我该怎么办?:我非常确定数据库查询是否正常.我可能以某种方式设置更大的堆大小(我googled,但这只是我的计算机的解决方案,用户不会这样做)或者我应该以某种方式删除旧的TableModel与数据库.但这不应该是垃圾收集器的工作吗?我能够强制它(System.gc()),但这没有帮助......
谢谢你的建议!
编辑:处理日历事件的代码(我删除了Javadoc,它是我的母语)
package timesheet.handlers;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import org.jdesktop.swingx.JXMonthView;
import org.jdesktop.swingx.event.DateSelectionEvent;
import org.jdesktop.swingx.event.DateSelectionListener;
import timesheet.database.WorkerOperations;
import timesheet.frames.WorkerFrame;
import timesheet.logictrier.*;
public class WorkerMonthViewHandler {
private JXMonthView monthView;
private WorkerFrame workerFrame;
private WorkerOperations wops;
private Date[] week = new Date[5];
private WorkerTasksTableHandler wtth;
public WorkerMonthViewHandler(WorkerFrame workerFrame) {
this.workerFrame = workerFrame;
this.monthView = workerFrame.getWorkerMonthView();
wops = workerFrame.getWorkerOperations(); // for DB usage
} …Run Code Online (Sandbox Code Playgroud)