Tôi có một chương trình java trong đó có 13 chủ đề, mặc dù chỉ có một trong số họ là 99% sử dụng CPU và đã chạy trong ~ 24 giờ. Những người khác đang ở mức sử dụng CPU 0,0% và hiển thị một số TIME+
ở bất kỳ đâu từ 0:00.0
đến 0:12.82
và một có 3:51.48
. Chương trình này được dự định là một chương trình luồng đơn, vì vậy tôi tự hỏi tại sao các luồng khác lại có?Tại sao một chương trình java đơn luồng có quá nhiều luồng?
Họ đang làm gì và tại sao họ hiển thị quá ít sử dụng CPU và TIME +?
UPDATE: Tôi có một chương trình java cũ tôi đã viết (chương trình đầu tiên - không phán xét tôi!) Là đơn ren và cho thấy cùng một loại sử dụng chủ đề ...
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));
}
}
Một số có thể liên quan đến Bộ sưu tập rác. Đó là loại chương trình gì? Nó có GUI không? –
Vui lòng đăng chương trình của bạn! – ganeshvjy
Không có GUI - Tôi đang chỉ định '-XX: ParallelGCThreads = 1 -XX: + UseConcMarkSweepGC' vì vậy nó là GC đơn luồng. – drjrm3