Java减少CPU使用率

Ste*_*eve 6 java performance cpu-usage

Greets-

我们在工作中使用了一些喜欢使用的疯子

while(true) { //Code } 
Run Code Online (Sandbox Code Playgroud)

在他们的代码中.你可以想象这会最大化CPU.有没有人知道降低CPU利用率的方法,以便其他人也可以使用服务器.

代码本身只是不断地在互联网上轮询网站上的更新.因此,我想一点睡眠方法会大大降低CPU使用率.

所有操作都在String对象(Java)中进行,任何人都知道StringBuilders会减少多少?

谢谢你的任何指示

Ste*_*n C 7

很多"民间智慧" StringBuilder都是不正确的.例如,更改此:

String s = s1 + ":" + s2 + ":" + s3;
Run Code Online (Sandbox Code Playgroud)

对此:

StringBuilder sb = new StringBuilder(s1);
sb.append(":");
sb.append(s2);
sb.append(":");
sb.append(s3);
String s = sb.toString();
Run Code Online (Sandbox Code Playgroud)

可能不会让它走得更快.这是因为Java编译器实际上将串联序列转换为临时StringBuilder的等效序列.除非你在循环中连接字符串,否则你最好只使用+运算符.您的代码将更容易阅读.

应该做的另一点是,您应该使用分析器来识别代码中可以从提高性能的工作中受益的位置.大多数开发人员对值得优化的直觉并不可靠.


Yan*_*eve 6

我将从你的第二个问题开始,我想同意其余的一点,StringBuilder vs String非常依赖于特定的字符串操作.我曾经"基准化"了一次,一般来说,随着新字符串分配量的增加(通常采用连接形式),总体执行时间会增加.我不打算详细说明,与String,StringBuffer,String.format(),MessageFormat相比,StringBuilder最有效的加班时间......

我的经验法则是,每当我想连接3个以上的字符串时,我总是使用StringBuilder.

至于你的第一个问题.我们要求将CPU使用率提高到5%.这不是一件容易的事.我们使用Spring的AOP机制在CPU密集型方法的任何方法执行之前添加Thread.sleep().只有在超出某个限制时才会调用Thread.sleep().我很遗憾地说这个限制的计算并不那么简单.甚至有些人说我还没有获得在网上发布的许可.所以这只是为了让你进入一个有趣而复杂的轨道,这个轨道已被证明可以随着时间的推移而发挥作用.

  • 什么可能的推理可能导致"不超过5%的CPU时间"的要求?如果您有CPU密集型任务,那么您将拥有CPU密集型任务.没有办法解决这个问题,并且为代码添加睡眠只会让任务花费更长时间.如果您担心特定程序对整个系统资源的影响,那么简单地降低该程序的优先级就会更加智能.或者购买另一台电脑. (4认同)