java 多线程 变慢_为什么Java中的多线程程序运行速度慢而且CPU使用时间不多?...

OutOfMemoryError可能来自Java自身对内存使用的限制.尝试使用一些参数

here来增加最大内存.

为了提高速度,Adam Bliss首先提出了一个很好的建议.如果这是一遍又一遍的同一个文件,那么我想有多个线程试图同时读取它可能会导致对文件锁定的大量争用.更多线程甚至意味着更多的争用,甚至可能导致更糟糕的整体性能.因此,请尽量避免这种情况,只需加载文件一次即可.即使它是一个大文件,你也有24 GB的RAM.您可以保存相当大的文件,但可能需要增加JVM允许的内存以允许加载整个文件.

如果正在使用多个文件,请考虑以下事实:您的磁盘一次只能读取一个文件.因此,如果线程没有花费太多时间处理,那么让多个线程同时尝试使用磁盘可能不会太有效.由于CPU占用率很低,因此线程可能会加载文件的一部分,然后在缓冲的部分上运行得非常快,然后花费大量时间等待文件的其余部分加载.如果你一遍又一遍地加载文件,那甚至可能仍然适用.

简而言之:磁盘IO可能是你的罪魁祸首.您需要努力减少它,以便线程不会如此争用文件内容.

编辑:

经过进一步考虑后,更有可能出现同步问题.尝试添加到结果列表时,线程可能会被阻止.如果访问频繁,这将导致对象上的锁的大量争用.考虑做一些事情,比如让每个线程将结果保存在本地列表中(如ArrayList,这不是线程安全的),然后将所有值复制到最终的共享列表中以尝试减少争用.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值