加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java堆内存使用量波动

发布时间:2020-12-15 04:31:20 所属栏目:Java 来源:网络整理
导读:亲爱的开发人员你好, 我在java应用程序中遇到堆内存使用问题. 应用程序本身只接受Socket连接 主线程我没有以下脚本(静态ExecutorService实例除外): ServerSocketFactory serverFactory = ServerSocketFactory.getDefault();ServerSocket server = serverFac
亲爱的开发人员你好,

我在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应用程序行为的自然方式?

JConsole

提前致谢…

解决方法

如果您使用visualvm或jconsole或jmc来监视堆使用情况,它会使用RMI和JMX,这会产生大量垃圾.也就是说,这是你的监控.

顺便说一句,即使你有一个简单的程序

System.in.read();

这些工具将显示正在创建垃圾,但不会显示您的程序.

我建议你尝试改用

jps -lvm

获取进程ID或pid

jstat -gccause {pid} 10s

监视内存使用情况.这也会产生少量垃圾.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读