Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очередные данные о "медленности" JAVA 
:(
    Опции темы
LSD
Дата 3.6.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(SaDFromSpb @  2.6.2006,  19:27 Найти цитируемый пост)
Я в этом треде вычитал такую мысль, что sun'овская ява считается клиентской (потому что не достаточно сбоеустойчивая). Позвольте, господа, а чья же ява считается серверной тогда?

Ну во первых такую мысль культивируют ребята из BEA, противопоставля ей свою JRockit. По чистой производительности в вычислительных тестах, она проиграла Sun-овской JVM, а гонять стресс тесты длительностью в недели у меня нет возможности.
Во вторых есть действительно специфичные JVM, например Aurora от Oracle, там специфика в тесной интеграции с сервером. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
powerOn
Дата 14.7.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Хм... стало жутко интересно, и я накатал тестик, смысл которого скорость создания объекта + вызов метода. 
Код С++ писал под Windows, с использованием MS Visual Studio 6.0 (поскольку другой не имею). На идеальность тест не претендует, поправьте меня если что нет так.

С++:
Код

#include <stdio.h>
#include <conio.h>
#include <windows.h>

class A {
public:
    double calculate(double p1, double p2) {
        return (p1 / p2)/(p1+p2);
    }
};

int main() {
    printf("start...\n");
    long t1 = GetTickCount();
    double res = 0;
    for(int i = 0; i < 10000000; i++) {
        A *a = new A();
        res +=  (a->calculate(i+1, 11));
        delete a;
    }
    long t2 = GetTickCount() - t1;
    printf("res = %f, time = %i \n", res, t2);
    getch();
    return 0;
}


Java: 
Код

public class NewClass {

    public NewClass() {
    }
    public static void main(String[] args) {
        System.out.println("start...");
        double res = 0;
        long t1 = System.currentTimeMillis();
    for(int i = 0; i < 10000000; i++) {
        res += (new A().calculate(i + 1, 11));
    }
        long t2 = System.currentTimeMillis() - t1;
        System.out.println("res = " + res + " time = " + t2);
    }
}

class A {
    public double calculate(double p1, double p2) {
        return (p1 / p2)/(p1+p2);
    }
}


С++: MSVS 6.0 (в настройках оптимизация поставлена на скорость)
Java: 1.5.0_07-b03 (client/server)

Время выполнения (миллисекунды): 
C++ (release) ~ 1297   
Java (client)    ~   422
Java (server)  ~   203


ОС Windows XP Professional sp2
Комп: AMD Athlon 64 X2 4200+ (2.2 гГц) RAM 2 GB

Так что можно сделать выводы, что Java местами даже побыстрее C++ будет  smile . 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Void
Дата 14.7.2006, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 1
Всего: 173



MoonCat, то что при частом создании маленьких объектов GC рулит по сравнению с кучей, было известно давно smile 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Alexandr87
Дата 14.7.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 9
Всего: 39



Слабо вериться. Скорее всего java при компиляции высчитывает значение которое получиться (почему-то мне кажется, что именно так).
Код

    for(int i = 0; i < 10000000; i++) {
        res += (new A().calculate(i + 1, 11));
    }


и просто его выводит, или каким-то подобным макаром. Предлагаю сделать значение 11 случайным и посмотреть, что получиться, в сравнении с с++. 
PM Jabber   Вверх
powerOn
Дата 14.7.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(Void @  14.7.2006,  20:42 Найти цитируемый пост)
MoonCat, то что при частом создании маленьких объектов GC рулит по сравнению с кучей, было известно давно smile 

Да я, вообще, еще тот любилеть Америки открывать.  smile 

Цитата(Alexandr87 @  14.7.2006,  20:44 Найти цитируемый пост)
Предлагаю сделать значение 11 случайным и посмотреть, что получиться, в сравнении с с++.  

Хорошо..., правим код:

Java
Код

public class NewClass {
    
    /** Creates a new instance of NewClass */
    public NewClass() {
    }
    public static void main(String[] args) {
        System.out.println("start...");
        double res = 0;
        Random rand = new Random();
        long t1 = System.currentTimeMillis();
    for(int i = 0; i < 10000000; i++) {
        res += (new A().calculate(i + 1, rand.nextFloat() * 100 ));
    }
        long t2 = System.currentTimeMillis() - t1;
        System.out.println("res = " + res + " time = " + t2);
    }
}

class A {
    public double calculate(double p1, double p2) {
        return (p1 / p2)/(p1+p2);
    }
}


C++:
Код

#include <stdio.h>
#include <conio.h>
#include <windows.h>

class A {
public:
    double calculate(double p1, double p2) {
        return (p1 / p2)/(p1+p2);
    }
};

int main() {
    printf("start...\n");
    long t1 = GetTickCount();
    double res = 0;

    for(int i = 0; i < 10000000; i++) {
        A *a = new A();
        res +=  a->calculate(i+1, ((double) rand()/ (double) RAND_MAX) * 100);
        delete a;
    }
    long t2 = GetTickCount() - t1;
    printf("res = %f, time = %i \n", res, t2);
    getch();
    return 0;
}


Время выполнения (миллисекунды): 
C++ (release) ~ 1453   
Java (client)    ~   937
Java (server)  ~   531

Может я в коде где ошибся? Но Java все равно быстрее... 

 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
JUncle
Дата 17.7.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Цитата(SaDFromSpb @  2.6.2006,  18:27 Найти цитируемый пост)
Графический интерфейс в яве очевидно медленнее, чем написанный на "нативном языке" (не надо меня убеждать в обратном, я уж насиделся в IntlliJ IDEA на втором пне).

Есть разумный компромисс - Eclipse SWT. Нативные графические библиотеки.  Собственно, GUI Eclipse на нем сделан.
В Java 6.0 Mustang обещали увеличить производительность GUI до уровня нативных приложений без всяких копромиссов в стиле SWT.

Цитата(SaDFromSpb @  2.6.2006,  18:27 Найти цитируемый пост)
К тому же джага больно жадная до памяти по мелочи. Вроде (хотя надо бы, конечно, проверить) аналоги сишных строк, контейнеров и т.д, на яве занимают больше памяти (хотя бы потому что у них иерархия аж от Object'a у всех).
Затем, при работе со всевозможными очень удобными классами в яве бывают накладные расходы по количеству операций (например объекты класса String во многих местах неявно копируются).


Цитата(SaDFromSpb @  2.6.2006,  18:27 Найти цитируемый пост)
ЗЫ: Я против явы ничего против не имею. Ява - это такой "программистский рай", без отслеживания кусков не нужной более памяти и с огромной кучей готового и удобного (Особенно мне понравилось, как здорово в ней воплотили многие паттерны проектирования в графическом интерфейсе).  

Ну раз против не имеете, и такие разумные доводы за приводите, что же жалуемся? 
Это как в пилотировании самолета - размен скорости на высоту (C - > Java) либо наоборот.
Ничего из ничего не получается. И ничто никуда не пропадает.

Цитата(MoonCat @  14.7.2006,  20:50 Найти цитируемый пост)
Может я в коде где ошибся? Но Java все равно быстрее... 

Вряд ли ошиблись. Все дело в технологии HotSpot. "Узкие места" компилируются в машинный код и оптимизируются по адаптивному алгоритму, включая оптимизацию под конкретно ВАШУ архитектуру процессора (note: если он известен на момент выхода JDK).
(А под какие процессоры может оптимизировать VS 6.0? - ритор. вопрос).
Так что ничего удивительного тут нет.
Кстати, попробуйте еще на VS 7.0 прогнать.  

Это сообщение отредактировал(а) JUncle - 17.7.2006, 20:22
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
Void
Дата 17.7.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 1
Всего: 173



Цитата(JUncle @  17.7.2006,  22:19 Найти цитируемый пост)
Вряд ли ошиблись. Все дело в технологии HotSpot.

HotSpot, JIT и прочие радости управляемых сред здесь не при чем. Единственное узкое место в C++ коде здесь — это создание и удаление объекта. В Java это буквально пара инструкций, в C++ — проход по chunck'ам кучи.
В этом легко убедиться, заменив calculate в варианте на Java на статический метод, а в C++ — на свободную функцию. В этом случае VC 7.1 примерно равен Java, а Intel C++ 9.0 обгоняет процентов на 15–20.

Добавлено @ 23:57 
Цитата(JUncle @  17.7.2006,  22:19 Найти цитируемый пост)
Это как в пилотировании самолета - размен скорости на высоту (C - > Java) либо наоборот.

Странно, чего это межконтинентальные лайнеры забираются в стратосферу, а кукурзники летают в пределах 3–4 тыс. м smile 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
JUncle
Дата 18.7.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Цитата(Void @  17.7.2006,  23:54 Найти цитируемый пост)
Странно, чего это межконтинентальные лайнеры забираются в стратосферу, а кукурзники летают в пределах 3–4 тыс. м smile  

Не хочу оффтопить, но это утверждение верно при пилотировании одного конкретного самолета.  smile
Это размен кинетической энергии на потенциальную и наоборот. На этом весь пилотаж и основан, в принципе.
 
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
$tatic
Дата 16.11.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 28.1.2005

Репутация: нет
Всего: 22



Прогнал тест powerOn (без ГСЧ) на Sun Java 1.5.0_06-b05, VC++ 8.0 и .NET 2.0:
Код

using System;
using System.Diagnostics;

namespace SpeedSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Start...");
            double res = 0;
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 10000000; i++)
            {
                res += (new A().calculate(i + 1, 11));
            }
            sw.Stop();
            Console.WriteLine("res = {0} time = {1}", res, sw.ElapsedMilliseconds);
        }
    }

    class A
    {
        public double calculate(double p1, double p2)
        {
            return (p1 / p2) / (p1 + p2);
        }
    }
}


Результаты:
Java client ~ 800
Java server ~ 471
.NET (release) ~ 735
VC++ (release) ~ 3555

AMD Duron 1300 MHz, 512 Mb DDRAM, WinXP SP2.
У плюсов результат действительно такой - приложение работает ощутимо дольше, чем на остальных платформах.

Такой вопрос - почему существуют отдельно клиент и сервер для джавы? Или возможности серверной версии недостаточны для настольных приложений? Почему Sun не сделала универсальную версию на основе серверной?
PM MAIL   Вверх
LSD
Дата 16.11.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата($tatic @  16.11.2006,  12:00 Найти цитируемый пост)
Такой вопрос - почему существуют отдельно клиент и сервер для джавы? Или возможности серверной версии недостаточны для настольных приложений? Почему Sun не сделала универсальную версию на основе серверной?

Там разное поведение: для серверной ставится задача максимальной производительности, а для клиентской быстрый старт и минимизация потребления памяти. Например серверная JVM не отдает полученую память вообще, а клиентская отдаст когда в куче будет большой процент свободной памяти.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
unkis
Дата 3.12.2006, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



а говорят что java 6 будет только серверной?
Правда ли это?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
powerOn
Дата 3.12.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(unkis @  3.12.2006,  15:25 Найти цитируемый пост)
а говорят что java 6 будет только серверной?
Правда ли это? 

Нет.

Цитата

C:\Documents and Settings\root>java -version
java version "1.6.0-rc"
Java™ SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot™ Client VM (build 1.6.0-rc-b104, mixed mode, sharing)

C:\Documents and Settings\root>java
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)

where options include:
    -client       to select the "client" VM
    -server       to select the "server" VM
    -hotspot      is a synonym for the "client" VM  [deprecated]

                  The default VM is client.

 smile 



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
unkis
Дата 3.12.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Спасибо теперь все ясно.
 smile 
Извиняюсь за оффтоп.

но питаюсь запустить в серверном режиме мою программу а мне тут вот такую ошибку.

Код

C:\>java -server -jar screenClientApplet_1.jar
Error: no `server' JVM at `C:\Java\jre1.6.0\bin\server\jvm.dll'.
  

Проверил действительно такой папки с файлом там нет. Хотя установил JDK 1.6 RC.

Что же тогда устанавливать надо чтобы оно заработало в серверном режиме?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
powerOn
Дата 3.12.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(unkis @  3.12.2006,  15:55 Найти цитируемый пост)
Хотя установил JDK 1.6 RC.

Ты запуск делаешь на JRE-шной JVM. Запускай именно на JDK-шной java.exe.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
cerf_machine
Дата 16.2.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 12.2.2007
Где: тебя носило?

Репутация: нет
Всего: 1



А в чем заключается принцип игры жизнь, про которую был разговор в начале?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1088 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.