(Java) 异常 "GC overhead limit exceeded",我该如何解决?

(Java) Exception "GC overhead limit exceeded", how can I resolve this?

尝试 运行 eclipse 中的代码时出现以下异常:

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
    at javax.swing.event.EventListenerList.add(Unknown Source)
    at javax.swing.DefaultButtonModel.addItemListener(Unknown Source)
    at javax.swing.AbstractButton.setModel(Unknown Source)
    at javax.swing.JButton.<init>(Unknown Source)
    at javax.swing.JButton.<init>(Unknown Source)
    at ComputerBookingSystemGUI.<init>(ComputerBookingSystemGUI.java:23)
    at ComputerBookingSystemGUI.main(ComputerBookingSystemGUI.java:59)

最初,我只是 运行 内存不足,所以我将专用内存增加到 -Xms1024m -Xmx2048m。这解决了这个问题,但创建了这个新问题。当我尝试执行以下程序(带有图形用户界面的计算机预订系统)时:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import main.kof;

public class ComputerBookingSystemGUI extends JFrame {

    int computer = 30;

    private JLabel computerL;
    private JButton button;
    private JButton button2;
    private JLabel label;
    private JLabel label2;
    private JTextField tf;

    ComputerBookingSystemGUI() {
        while (1 == 1) {

            JTextField tf = new JTextField(20);
            add(tf);

            JButton button = new JButton("Book");
            add(button);

            JButton button2 = new JButton("Cancel");
            add(button2);


            button.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String g = tf.getText();
                    int i = Integer.parseInt(g);
                    if (computer >= i) {
                        computer = computer - i;

                    } else {
                        JLabel label = new JLabel("There aren't enough computers");
                        add(label);
                    }

                }
            });
            button2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent d) {
                    String g = tf.getText();
                    int i = Integer.parseInt(g);
                    int q = computer + i;
                    if (q <= 30) {
                        computer = computer + i;
                    } else {
                        JLabel label2 = new JLabel("There aren't enough computers.");
                        add(label2);
                    }
                }
            });
        }

    }

    public static void main(String[] args) {
        ComputerBookingSystemGUI gui = new ComputerBookingSystemGUI();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setVisible(true);
        gui.setSize(250, 250);
        gui.setTitle("Computer booking system.");
    }
}

非常感谢任何提供的解决方案,感谢您的宝贵时间。

你在 while(1 == 1 )

中产生了一个死循环

这个无限循环被放置在构造函数中,因此永远不会结束。当您创建了足够多的按钮时,您的程序最终将耗尽内存。