这6种原因,真能让 Java 应用 CPU 使用率飙升至 100% 吗?

1、无限循环的while会导致CPU使用率飙升吗?2、经常使用Young GC会导致CPU占用率飙升吗?3、具有大量线程的应用程序的CPU使用率是否较高?4、CPU使用率高的应用程序的线程数是多少?5、处于BLOCKED状态的线程会导致CPU使用率飙升吗?6、分时操作系统中的CPU是消耗 us还是 sy?

思路
1.如何计算CPU使用率?
CPU%= 1 - idleTime / sysTime * 100

idleTime:CPU空闲的时间

sysTime:CPU处于用户模式和内核模式的时间总和

2.与CPU使用率有关的是什么?
人们常说,计算密集型程序的CPU密集程度更高。

那么,JAVA应用程序中的哪些操作更加CPU密集?

以下列出了常见的CPU密集型操作:

1、频繁的GC; 如果访问量很高,可能会导致频繁的GC甚至FGC。当调用量很大时,内存分配将如此之快以至于GC线程将连续执行,这将导致CPU飙升。2、序列化和反序列化。稍后将给出一个示例:当程序执行xml解析时,调用量会增加,从而导致CPU变满。3、序列化和反序列化;4、正则表达式。我遇到了正则表达式使CPU充满的情况; 原因可能是Java正则表达式使用的引擎实现是NFA自动机,它将在字符匹配期间执行回溯。5、线程上下文切换; 有许多已启动的线程,这些线程的状态在Blocked(锁定等待,IO等待等)和Running之间发生变化。当锁争用激烈时,这种情况很容易发生。6、有些线程正在执行非阻塞操作,例如 while(true)语句。如果在程序中计算需要很长时间,则可以使线程休眠。

3、CPU是否与进程和线程相关?
现在,分时操作系统使用循环方式为进程调度分配时间片。如果进程正在等待或阻塞,那么它将不会使用CPU资源。线程称为轻量级进程,并共享进程资源。因此,线程调度在CPU中也是分时的。但在Java中,我们使用JVM进行线程调度。因此,通常,线程调度有两种模式:时间共享调度和抢占式调度。

答案
1、while的无限循环会导致CPU使用率飙升吗?
是。

首先,无限循环将调用CPU寄存器进行计数,此

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值