我有一个基于Java的命令行服务器运行,它托管我在我的网站上制作的游戏的高分。它工作高效快速。但是,它占用了大约200MB的RAM!我曾尝试一切从手动归零了一切调用System.gc() Java游戏服务器占用太多内存!
我开始怀疑,这可能是与输入流和输出流对象,我从Socket连接使用。我注意到当我第一次运行程序时,它占用了正常数量的RAM。然后一旦获得连接,它就会跳到100MB,并且每个连接都会变得更高。
编辑:在我的班级之一,我认为所有的名字,成绩,并在3周不同的ArrayList时间戳。但是,使用jhat和jmap进行的彻底检查表明,它们仅使用大约5MB的RAM。
如果这太过于模糊,任何人都不能回答,请问我会很乐意给出源代码。
如果您发现它随着每个连接而上升并且在客户端断开连接时不下降,那么您可能会保留对已关闭套接字的引用。 – ide 2011-02-05 04:15:43
如果JVM与.NET类似,那么即使有没有引用它们的未使用对象,“强制”垃圾收集也不能保证实际收集任何东西。另外,200M是花生,当你可以购买300GB的24GB内存。这真的是一个问题吗? – 2011-02-05 04:42:29
@ide它随着每个连接的增加而增加很多,然后随着它们的断开而下降一点,因为我试图在它们的生命结束之前手动将所有对象的每个引用归零。 – ra4king 2011-02-05 04:59:56