多线程Java堆内存使用率波动
亲爱的开发者们,大家好
我在java应用程序中面临堆内存使用问题。 应用程序本身只是简单地接受socket连接
主线程我没有以下脚本(除了静态ExecutorService实例):
ServerSocketFactory serverFactory = ServerSocketFactory.getDefault();
ServerSocket server = serverFactory.createServerSocket(Configuration.port);
for(;;)
{
Socket client = server.accept();
Configuration.getExecutor().submit(new Client(client));
}
当应用程序运行时,它应该阻止循环,直到有人连接。。。 这意味着我的主线程大部分时间处于等待状态
问题是:当没有人连接到我的服务器时,堆内存使用率会波动(请参见下面的屏幕截图) 这意味着内存泄漏?不或者这是java应用程序的自然行为方式
先谢谢你
# 1 楼答案
看起来好像有什么东西被垃圾收集了。记住,在一台拥有真实内存量的计算机上,这个斜率会小一千倍。我认为这不值得担心
# 2 楼答案
您的内存使用在0到20MB之间波动,并且没有增加。没有内存泄漏,也没有任何理由需要注意这一点
# 3 楼答案
如果您使用
visualvm
或jconsole
或jmc
来监视堆的使用情况,那么它将使用RMI和JMX,这会产生大量垃圾。i、 e.是您的监控在进行此操作顺便说一句,即使你有一个简单的程序
这些工具将显示正在创建垃圾,但不是由程序创建的
我建议你试着改用
获取进程id或
pid
监视内存使用情况。这也会产生少量的垃圾,远远少于这些垃圾