我在这个网站上搜索并阅读了许多关于限制 Java 应用程序内存的帖子。我知道不推荐这样做,但如果我真的需要限制我的应用程序使用的最大 RAM。我该怎么做?
我当前的应用程序取自Oracle 教程
站点。 Knock Knock Server我保持服务器运行,不断从客户端向服务器发送消息,并使用任务管理器
监控内存使用情况。我注意到每次发送消息时内存都在增加。
我也了解了 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。
最佳答案
如果你想限制 jvm 的内存(不是堆大小)ulimit -v
要了解 jvm 和堆内存之间的区别,请查看这篇优秀文章 Taking a Closer Look at Sizing the Java Process
NativeHeap可以增加或减少-XX:MaxDirectMemorySize=256M(默认为128)
另一个有趣的读物: Java Performance Tuning
关于java - 试图限制应用程序的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833138/