我搜索并阅读了很多关于限制本网站上java应用程序记忆的帖子。我知道不推荐,但如果我真的需要限制我的应用程序使用的最大RAM。我该怎么办?
我目前的申请来自Oracle tutorial
网站。 Knock Knock Server我保持服务器运行,不断从客户端向服务器发送消息,并使用Task Manager
监视内存使用情况。我注意到每次发送消息时内存都会不断增加。
我也了解了System.gc();
和Runtime.gc();
,我希望它可以减少内存消耗,不幸的是它没有。正如所料。
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
PrintWriter out =
new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
这些命令中的任何一个都可以使用gc()
命令吗?我还尝试了 -Xmx 和 -Xms ,希望它也能正常工作。
最后,如果创建一个简单的Java服务器不是一个好主意。我该怎么办?
编辑:我正在使用-Xms9m
和-Xmx10m
。我希望让应用程序以10MB运行,但首次启动时。它可以从14MB到17MB,从那里可以继续增加超过20MB。
答案 0 :(得分:1)
如果要限制jvm的内存(不是堆大小)ulimit -v
要了解jvm和堆内存之间的区别,请看一下这篇优秀文章Taking a Closer Look at Sizing the Java Process
NativeHeap可以通过-XX增加或减少:MaxDirectMemorySize = 256M(默认值为128)
另一个有趣的读物: Java Performance Tuning
答案 1 :(得分:0)
答案 2 :(得分:0)
首先,不监控任务管理器的虚拟机内存使用情况。使用GC日志记录可以获得VM的确切内存使用情况。 如果您在GC日志中看到内存消耗增加,则表示您遇到问题。
其次,确保正确重用套接字/连接。不关闭连接可能是内存增加的原因 - 如果有的话。