当我启动我的服务器时,我得到了错误,但服务器仍然正常工作!
线程“main”中的异常java.lang.OutOfMemoryError:无法 在java.lang.Thread.start0创建新的本机线程(本机方法) 在java.lang.Thread.start(Thread.java:658)at Gateway.main(Server.java:21)
public static void main(String args[]) {
try {
DatagramSocket serverSocket = new DatagramSocket(Integer.parseInt(args[0]));;
System.out.println("Waiting for clients");
while (true) {
Child cServer = new Child(serverSocket);
cServer.start();
}
} catch (IOException ex) {
System.out.println(ex);
}
}
}
儿童班
public Child(DatagramSocket ssocket) {
this.socket = ssocket;
}
public void run() {
while(true)
{
byte[] receiveData = new byte[1024];
编辑: 我尝试在这个例子中制作,它在这里工作正常
public static void main(String[] args) throws IOException {
server = new MyServer();
server.runServer();
}
private void runServer() {
int serverPort = 8071;
try {
System.out.println("Starting Server");
serverSocket = new ServerSocket(serverPort);
while(true) {
System.out.println("Waiting for request");
try {
Socket s = serverSocket.accept();
System.out.println("Processing request");
executorService.submit(new ServiceRequest(s));
} catch(IOException ioe) {
System.out.println("Error accepting connection");
ioe.printStackTrace();
}
}
}catch(IOException e)
答案 0 :(得分:1)
您正在无限循环中创建新的Child对象,直到消耗掉所有可用内存。
答案 1 :(得分:1)
new Child()
或cServer.start()
会阻止吗?我怀疑你的while (true)
是一个快速的无限循环,它会占用你的堆空间。一旦抛出OutofMemoryError(最多几毫秒),应用程序就会完成并且服务器回收所有内存,所以看起来你的服务器仍在工作。