繁体   English   中英

Java Game Server占用太多内存!

[英]Java Game Server taking up too much memory!

我有一个基于Java的命令行服务器正在运行,该服务器承载我在网站上制作的游戏的高分。 它有效且快速地工作。 但是,它占用约200MB的RAM! 我已经尝试了从手动清空所有内容到调用System.gc()的所有内容

我开始怀疑这可能与我从Socket连接中使用的输入流和输出流对象有关。 我注意到,当我第一次运行该程序时,它会占用正常数量的RAM。 然后,一旦获得连接,它就会跳至100MB,并且每个连接的连接数都将继续增加。

编辑:在我的一堂课中,我在3个不同的ArrayLists中保存所有名称,乐谱和时间戳。 但是,使用jhat和jmap进行的全面检查表明,它们结合在一起仅使用大约5MB的RAM。

如果对于任何人来说都太模糊了,请询问,我将很乐意提供源代码。

保留对对象的引用超出其使用寿命可能会导致泄漏。

我建议您得到一个探查器,并使用它进行调查。 一个不错的免费起点是随Java 6一起分发的VisualVM程序。

探查器是一个单独的程序,可以附加到JVM或为您的程序托管JVM,并监视程序的执行。 它可以统计地或通过“指示”正在执行的代码来跟踪对象分配和代码执行。 它会告诉您对象是否正在分配而不是释放,并可以显示它们是什么对象以及它们在哪里分配(还有许多其他有用的东西)。

我使用的是商业的jProfiler(但对于专业人士而言非常值得)。 上次我搜索时,有几个免费的(至少供个人使用的)高质量剖析器。 VisualVM具有基本但有用的性能分析功能,我将从这里开始(在Windows上,您可以在JDK bin目录中找到它;我认为Linux和Mac也是一样)。

尝试使用jmap之类的方法,然后再使用jhat来查看实际使用内存的方式。

Sun(Oracle)的JVM从不将内存释放回操作系统,因此看到内存使用量的单调增加也就不足为奇了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM