javaw.exe高cpu使用率
我已经创建了一个可运行的jar,它在单个线程上运行。线程执行具有100次迭代的for循环。但是,在i3处理器win7 64位机器上,cpu usgae将高达60%。 我试着分析计算机中的cpu使用情况 本机线程正在使用CPU。 本机线程都位于msvcr100.dll!endthreadex+0x60 消耗cpu 我使用的是JDL1.7。 有人能告诉我这里可能出了什么问题吗 代码如下: 应用程序接受套接字连接并处理客户端发送的日期javaw.exe高cpu使用率,java,java-7,Java,Java 7,我已经创建了一个可运行的jar,它在单个线程上运行。线程执行具有100次迭代的for循环。但是,在i3处理器win7 64位机器上,cpu usgae将高达60%。 我试着分析计算机中的cpu使用情况 本机线程正在使用CPU。 本机线程都位于msvcr100.dll!endthreadex+0x60 消耗cpu 我使用的是JDL1.7。 有人能告诉我这里可能出了什么问题吗 代码如下: 应用程序接受套接字连接并处理客户端发送的日期 while (true) { try {
while (true)
{
try
{
Socket sock = ssock.accept();
// This is the function which has the for loop
obj.MyFunction();
}
catch(Exception ex)
{
ssock.close();
}
Thread.sleep(1000);
}
void MyFunction()
{
for(int i=0; i < 1000;i++)
{
// Processing done here
}
}
while(true)
{
尝试
{
Socket sock=ssock.accept();
//这是具有for循环的函数
obj.MyFunction();
}
捕获(例外情况除外)
{
ssock.close();
}
睡眠(1000);
}
void MyFunction()
{
对于(int i=0;i<1000;i++)
{
//处理在这里完成
}
}
分析您的代码,请参阅以了解更多信息。我怀疑如果您尝试以下方法:
ex.printStackTrace();
你可能会得到更多的信息。现在,当你遇到异常时,你不知道发生了什么或为什么。您对此保持沉默,这很少是命中异常的正确行为
处理过程是什么?如果您试图做大量的工作,使用60%的cpu可能并不意外。你的算法的大O运行时是什么?数据集的大小是多少?如果在此处显示代码,可能会有所帮助!!刚刚发布的代码这里是Process Explorer分析图像的链接,
MyFunction
?如果它运行约1400毫秒并消耗100%的CPU,平均负载将为60%,加上1000毫秒的睡眠。(这也有助于为MyFun
和MyFunction
赋予相同的名称,并决定是运行100次迭代还是1000次迭代。)这里不需要sleep()
<代码>接受()。它包含解析xml的代码。我以xml的形式向进程传递数据,函数迭代所有节点以获取数据。所有这些都发生在单个线程中。cpu使用率从40%到60%不等,有时甚至会冻结我的机器。这里有指向Process Explorer所做分析图像的链接。为什么本机线程会占用最大的cpu周期?为什么有些代码会占用大量时间是一个非常广泛的问题,需要迭代的答案太多了。所有的慢度问题最终归结为算法和技术问题。如果你能谈谈你正在做的事情的算法复杂性,那么你就有可能去寻找速度缓慢的技术原因,但就目前而言,我不认为排除效率低下的算法是正确的。