【发布时间】:2018-07-14 11:23:00
【问题描述】:
我有一个多线程 Java Web 服务器,它接受来自客户端的请求。
RAM中的每个请求都会为这个请求分配内存,但在socket关闭后不会被清除。仅在重新启动 Web 服务器后才会进行清理。
如果是内存泄漏,那么会发生在代码的哪一部分呢?
我的代码:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(80)) {
Socket socket = server.accept();
while (true) {
new Thread(new Client(socket)).start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Client implements Runnable {
private Socket socket;
Client(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
System.out.println("run");
} finally {
try {
socket.close();
System.out.println("Socket closed: " + socket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
【问题讨论】:
-
使用来自 OutOfMemoyError 的堆栈跟踪和 Java 版本的详细信息以及您正在运行的平台更新问题
标签: java multithreading sockets memory-leaks