(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 )
中产生了一个死循环
这个无限循环被放置在构造函数中,因此永远不会结束。当您创建了足够多的按钮时,您的程序最终将耗尽内存。
尝试 运行 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 )
这个无限循环被放置在构造函数中,因此永远不会结束。当您创建了足够多的按钮时,您的程序最终将耗尽内存。