Логин:   Пароль:






Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100
Rambler's Top100

Статьи - разминка для умаСравнение производительности Java приложений в среде Windows 2000 Pro и Red Hat Linux 7.2.

Сравнение производительности Java приложений в среде Windows 2000 Pro и Red Hat Linux 7.2.

Возможность Java программ, будучи написанными и скомпилированными на одной платформе, выполняться на другой, хоть и с небольшими проблемами, но все-таки выполняется. Java приложения, написанные и скомпилированные под Windows выполняются на Linux и наоборот, если конечно учесть различия файловых систем, не запускать внешние команды (java.lang.Runtime.exec(…)), а также не использовать JNI.

Производительность Java приложений под различными ОС невооруженным взглядом не заметна, и у меня возникло желание провести тесты для различных типов приложений. Причем на одном и том же компьютере, на котором одновременно установлены и Windows, и Linux. В качестве среды для разработки и компиляции приложений был взят знакомый мне Oracle JDeveloper 9i, в качестве сервера приложений Oracle Containers for Java(OC4J). Объекта тестирования была выбрана последняя на данный момент версия JDK 1.4.1_01. Также в качестве одного из тестирующих инструментов использовался ApacheBench , входящий в состав сервера Apache2 (естественно, для каждой для ОС свой).

Отметим, что OC4J были установлены в единственном экземпляре на раздел FAT32, вмонтированном в файловую систему Linux (о работе и настройке OC4J я надеюсь написать в следующей статье).

Были разработаны 9 тестов для сравнения скорости выполнения приложений работающих с: графикой, файлами, математическими операциями, сокетами, строками, XML, XSLT, серверных приложений JSP и Web-сервисов (исходный код тестов). Тесты не подгонялись под какую либо ОС. Каждый тест выполнялся под Windows, Linux без графической оболочки, Linux+KDE по два раза и затем бралось среднее арифметическое времени выполнения.

Так как производительность Java приложений под Windows мне хорошо известна, то время выполнения теста на Windows я взял за 100%, а время выполнения на Linux считал в процентах от него.

Время выполнения в миллисекундах:

Тест Windows Linux(текст) Linux(KDE) Linux(текст),% Linux(KDE),%
Графика 23110   63955 0,00 276,74
Файлы 211593 177938 172946 84,09 81,74
Математические
операции
221609 221814 222361 100,09 100,34
Сокеты 289656 80617 82205 27,83 28,38
Строки 160875 162681 166106 101,12 103,25
XML 75250 80780 79434 107,35 105,56
XSLT 141697 110054 111490 77,67 78,68
JSP(c инициализацией) 14489 7864   54,28 0,00
JSP(без инициализации) 6328 991   15,66 0,00
Web Service 164906 142519 150362 86,42 91,18


Как видно из таблицы на Linux Java несколько быстрее работает с файлами, однако, на самом деле все не так просто, так как изначально тесты для каждой ОС выполнялись на файловой системе FAT32. К сожалению раздела NTFS на моем жестком диске не нашлось, а вот при выполнении того же теста на Linux разделе EXT3, среднее время - 363887 миллисекунд, так что результат далеко неоднозначен.

Linux в три раза проигрывает Windows в отображении графических интерфейсов Swing (даже пришлось отказаться от изображения этой колонки на диаграмме). Сложности Linux видны даже невооруженным глазом во время работы тестов и даже при запуске JDeveloper 9i.

Математические операции выполняются практически одинаково, также как операции со строками и XML (парсинг и работа с DOM). Удивительно, что XSLT преобразование почему-то на Linux выполняется быстрее, хотя возможно, что здесь сказалась более быстрая работа с файлами, но в таком случае следует признать, что непосредственно XML парсинг на Linux идет медленнее.

Linux значительно обгоняет Windows на серверных приложениях. Например, операции с сокетами на Linux выполняют в 4 раза быстрее. Работа с Web сервисами, при помощи Java клиента происходит на 20% быстрее. Тестирование JSP страниц при помощи утилиты ApacheBench (100 запросов, одновременно при 10 параллельно) дало просто поразительные результаты - работа уже инициализированной страницы JSP на Linux в 5 раз быстрее! При чем если сохранить получаемую страницу и обратиться к ней через Web сервер Apache, то получаем следующие результаты Windows - 250 миллисекунд, Linux - 80 миллисекунд.

В итоге можно сделать следующий вывод, если для клиентских приложений Windows будет быстрее, чем Linux, а для серверных как раз наоборот. Отметим, что были использованы простейшие тесты, которые, возможно, не отображают реальную картину соотношения производительности Java приложений.

Автор: Николай Зенькевич



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 11

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/books/show2b.php on line 19

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/books/show2b.php on line 30
Узнай о чем ты на самом деле сейчас думаешь тут.


Опрос
Считаете ли вы целесообразным сделать аналог упражнений по Hibernate на базе вопросов www.sql-ex.ru?
Да, полный аналог упражнений
Да, но с реализацией основных конструкций объектной модели
Нет, Hibernate не актуален, использую др. технологии
Нет



Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 91

Warning: mysql_db_query() [function.mysql-db-query]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_db_query() [function.mysql-db-query]: A link to the server could not be established in /pub/home/javaport/javaportal/news/worldnews.php on line 93

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /pub/home/javaport/javaportal/news/worldnews.php on line 95