我有一个具有13个线程的Java程序,尽管其中只有一个线程的CPU使用率为99%,并且已经运行了约24小时。其他人的CPU使用率为0.0%,并且显示到TIME+
的任何值,从0:00.0
到0:12.82
都有3:51.48
。该程序旨在成为单线程程序,所以我想知道为什么还有其他线程?
他们在做什么,为什么他们的CPU使用率和TIME +这么少?
更新:我有一个旧的Java程序(第一个程序-不要判断我!),它是单线程的,并且显示相同类型的线程用法...
import java.io.*;
class xdriver {
static int N = 100;
static double pi = 3.141592653589793;
static double one = 1.0;
static double two = 2.0;
public static void main(String[] args) {
//System.out.println("Program has started successfully\n");
if( args.length == 1) {
// assume that args[0] is an integer
N = Integer.parseInt(args[0]);
}
// maybe we can get user input later on this ...
int nr = N;
int nt = N;
int np = 2*N;
double dr = 1.0/(double)(nr-1);
double dt = pi/(double)(nt-1);
double dp = (two*pi)/(double)(np-1);
System.out.format("nn --> %d\n", nr*nt*np);
if(nr*nt*np < 0) {
System.out.format("ERROR: nr*nt*np = %d(long) which is %d(int)\n", (long)( (long)nr*(long)nt*(long)np), nr*nt*np);
System.exit(1);
}
// inserted to artificially blow up RAM
double[][] dels = new double [nr*nt*np][3];
double[] rs = new double[nr];
double[] ts = new double[nt];
double[] ps = new double[np];
for(int ir = 0; ir < nr; ir++) {
rs[ir] = dr*(double)(ir);
}
for(int it = 0; it < nt; it++) {
ts[it] = dt*(double)(it);
}
for(int ip = 0; ip < np; ip++) {
ps[ip] = dp*(double)(ip);
}
double C = (4.0/3.0)*pi;
C = one/C;
double fint = 0.0;
int ii = 0;
for(int ir = 0; ir < nr; ir++) {
double r = rs[ir];
double r2dr = r*r*dr;
for(int it = 0; it < nt; it++) {
double t = ts[it];
double sint = Math.sin(t);
for(int ip = 0; ip < np; ip++) {
fint += C*r2dr*sint*dt*dp;
dels[ii][0] = dr;
dels[ii][1] = dt;
dels[ii][2] = dp;
}
}
}
System.out.format("N ........ %d\n", N);
System.out.format("fint ..... %15.10f\n", fint);
System.out.format("err ...... %15.10f\n", Math.abs(1.0-fint));
}
}
引用这里进行的讨论和其他研究。
几个核心JVM线程:
main
方法的主线程。其中一个重要的一点要注意的是,这将取决于JVM实现,多少和哪些所有核心线程就会启动,但即使Java程序被写入是单线程的,也就会JVM多个线程。
Java程序可以是单线程的,但是JVM(将运行用户定义的Java程序)是多线程的,并且甚至从一开始就具有多个线程(至少是最新JVM)。
下面是运行单个线程Java程序的Java HotSpot(TM)客户端VM版本24.55-b03的快照:
回答您的查询
他们在做什么,为什么他们的CPU使用率和TIME +这么少?
是什么: JVM是出于特定目的而启动的,如上所述,就像JVM要侦听任何概要分析或监视程序是否要从JVM获取一些详细信息一样。
原因:由于它们实际上未处于活动状态或正在运行,因此处于等待或停放状态(请参阅附加快照中的黄线,如果您有GUI监视应用程序,则还应该看到黄线,否则,如果命令行,则进入WAIT状态),因此它们不占用任何或最少的CPU周期,因此占用的CPU更少。再次TIME+
会向您显示它们处于活动状态的时间,并且由于它们未处于活动状态,因此此参数也会更少。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句