Я не знаю, откуда взялась эта цифра "50 раз", но это довольно подозрительно. Возможно, конкретный прокси заметно медленнее, чем прокси, в зависимости от того, что делает каждый из них, но в целом можно сказать, что «шаблон прокси очень медленный» - это взять очень драматичный и весьма сомнительный скачок в логике.
Попробуйте это:
Thingy.java
public class Thingy
{
public int foo(int param1, int param2)
{
return param2 - param1;
}
}
ThingyProxy.java
:
public class ThingyProxy
{
Thingy thingy;
public ThingyProxy()
{
this.thingy = new Thingy();
}
public int foo(int param1, int param2)
{
return this.thingy.foo(param1, param2);
}
}
WithoutProxy.java
:
public class WithoutProxy
{
public static final void main(String[] args)
{
Thingy t;
int sum;
int counter;
int loops;
sum = 0;
t = new Thingy();
for (loops = 0; loops < 300000000; ++loops) {
sum = 0;
for (counter = 0; counter < 100000000; ++counter) {
sum += t.foo(1, 2);
}
if (sum != 100000000) {
System.out.println("ERROR");
return;
}
}
System.exit(0);
}
}
WithProxy.java
:
public class WithProxy
{
public static final void main(String[] args)
{
ThingyProxy t;
int sum;
int counter;
int loops;
sum = 0;
t = new ThingyProxy();
for (loops = 0; loops < 300000000; ++loops) {
sum = 0;
for (counter = 0; counter < 100000000; ++counter) {
sum += t.foo(1, 2);
}
if (sum != 100000000) {
System.out.println("ERROR");
return;
}
}
System.exit(0);
}
}
Простые испытания на моей машине:
$ time java WithoutProxy
real 0m0.894s
user 0m0.900s
sys 0m0.000s
$ time java WithProxy
real 0m0.934s
user 0m0.940s
sys 0m0.000s
$ time java WithoutProxy
real 0m0.883s
user 0m0.850s
sys 0m0.040s
$ time java WithProxy
real 0m0.937s
user 0m0.920s
sys 0m0.030s
$ time java WithoutProxy
real 0m0.898s
user 0m0.880s
sys 0m0.030s
$ time java WithProxy
real 0m0.936s
user 0m0.950s
sys 0m0.000s
Немного медленнее? Да. В 50 раз медленнее? Нет.
Теперь, синхронизация JVM общеизвестно трудна , и простые эксперименты, подобные вышеописанным, обязательно подозрительны. Но я думаю, что разница в 50 раз, вероятно, обнаружилась бы.
Редактировать : Я должен был упомянуть, что вышеприведенное с очень, очень небольшим числом циклов публикует номера, подобные этому:
real 0m0.058s
user 0m0.040s
sys 0m0.020s
... который дает представление о времени запуска виртуальной машины в среде. Например, приведенные выше временные интервалы - это в основном не запуск виртуальной машины с разницей в фактическом времени микросекунды, а в основном время выполнения.