Matrix a = new Matrix(60, 60), b = new Matrix(60, 60), res = new Matrix(60, 60);
long time = System.currentTimeMillis();
for (int i = 0; i < 1000; i++)
a.mul(b, res);
time = System.currentTimeMillis() - time;
System.out.println("Time: " + time / 1000.0);
разница между -client/-server
Почему так происходит?
Почему так происходит?[/QUOTE]
У сервера немного по другому установленны параметры управления хепом... То есть если приложение оперирует большим количеством объектов, то опцию клиент лучше забыть, так как она заточена под конфигурации с маленьким объемом памяти.
Еще лучше нагрести документации по параметрам GC для JVM и подобрать те, которые показывают лучшие результаты...
А еще лучше (все лучшее и лучшее) стараться не множить разного рода временные объекты в коде...
По сути, используются только 3 объекта, над которыми производятся различные операции, но, скорее всего, дело в скорости работы с памятью
То есть оператор new не используется вообще?
Вот код тестирования:
Код:
и перемножения:
Код:
public Matrix mul( Matrix m, Matrix res )
{
for (int i = 0; i < res.a.length; i++)
for (int j = 0; j < res.a[0].length; j++) {
double sum = 0;
for (int k = 0; k < a[0].length; k++)
sum += a[k] * m.a[k][j];
res.a[j] = sum;
}
return res;
}
{
for (int i = 0; i < res.a.length; i++)
for (int j = 0; j < res.a[0].length; j++) {
double sum = 0;
for (int k = 0; k < a[0].length; k++)
sum += a[k] * m.a[k][j];
res.a[j] = sum;
}
return res;
}
Да, действительно только "хождение по поинтерам"... Честно говоря это радует, что Sun, наконец, сподобился начать оптимизацию кода... А вот интересно, если res.a b вытаскивать в стек перед обработкой во внутреннем цикле код будет быстрее работать ;)?
Цитата:
What's the difference between the -client and -server systems?
These two systems are different binaries. They are essentially two different compilers (JITs) interfacing to the same runtime system. The client system is optimal for applications which need fast startup times or small footprints, the server system is optimal for applications where the performance is most important. In general the client system is better on GUIs. Some of the other differences include the compilation policy used, heap defaults, and inlining policy.
These two systems are different binaries. They are essentially two different compilers (JITs) interfacing to the same runtime system. The client system is optimal for applications which need fast startup times or small footprints, the server system is optimal for applications where the performance is most important. In general the client system is better on GUIs. Some of the other differences include the compilation policy used, heap defaults, and inlining policy.
Короче говоря, сервер чуть умнее клиента :)