java - 试图限制应用程序的内存

标签 java memory-management garbage-collection java-server

我在这个网站上搜索并阅读了许多关于限制 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/

相关文章:

git - Team Foundation Server 2015 (tfs2015) 在 orgin/remote 上运行 git gc --prune=now

python - 覆盖析构函数而不调用他们的 parent

java - 使用 Java 实现 powerpoint 转换/动画

java - 主打印 null 和 0;而不是正确的名称;由于数组/列表问题

objective-c - 确定何时释放 UITableViewCell

c# - 内存消耗管理策略

java - 监听器垃圾收集说明(Java/Android)

Java,将所有数据类型放在一个数组中

java - 一种让我的应用消耗更少内存的方法

c++ - 是否可以在其范围之外访问局部变量的内存?