小编Mis*_*iso的帖子

Java消耗太多内存

我的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)

java heap

12
推荐指数
1
解决办法
6048
查看次数

标签 统计

heap ×1

java ×1