LINUX.ORG.RU

C vs. JVM's benchmark

 , ,


1

0

Стэфан Краузе в своём блоге
http://www.stefankrause.net/
опубликовал новые тесты производительности кода, написанного на C и на Java.

В тесте используются компилятор GCC 4.2.3 и различные версии JVM (Sun JDK 6, IBM JDK 6, Excelsior JET, Apache Harmony, BEA JRockit).

Тесты проводились на ноутбуке Dell Insprion 9400 с 2GB RAM и процессором Intel Core 2 2GHz под Ubuntu 8.04 (x86). Исходные коды прилагаются.

>>> Подробности

Ответ на: комментарий от Legioner

>байт - минимально адресуемая ячейка памяти. сколько там битов - не важно.

А как на счёт определения термина "адресуемая"?:)

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

>Например скомпилировать нормально mplayer что б не лагал на x86 и EMT64

Не лагает. Вынь руки из задницы и возми mplayer из дистрибутива/репозитария.

Led ★★★☆☆
()
Ответ на: комментарий от tailgunner

>> байт - минимально адресуемая ячейка памяти. сколько там битов - не важно.

>Байт - это 8 бит. Сколько байт в минимально адресуемой ячейке - не важно.

8 бит это октет. И... Вроде были Ъ-архитектуры, где sizeof(char)==sizeof(short)==sizeof(int)==sizeof(long)==1, при этом CHAR_BITS==32.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>Вроде были Ъ-архитектуры, где sizeof(char)==sizeof(short)==sizeof(int)==sizeof(long)==1, при этом CHAR_BITS==32. Absurd (*) (04.07.2008 0:48:18)

Хренасе, были. Да почти все ваши мобильники-шмобильники на ARM архитектуре, на которой так и есть. char и все его братья = 32 бита

anonymous
()
Ответ на: комментарий от Absurd

>> Байт - это 8 бит. Сколько байт в минимально адресуемой ячейке - не важно.

> 8 бит это октет.

Этот термин отчеканили связисты лет 30-35 назад, когда еще не вымерли редкие чудаки, называвшие байтом последовательность от 7 до 12 бит (вроде не припомню других).

> Вроде были Ъ-архитектуры, где sizeof(char)==sizeof(short)==sizeof(int)==sizeof(long)==1, при этом CHAR_BITS==32.

До сих пор есть. Только никто из работающих на них не называет тамошние адресуемые единицы "байтами" - только "словами'.

P.S. кстати, были когда-то машины с побитовой адресацией.

tailgunner ★★★★★
()
Ответ на: комментарий от Am6er

>>Ну это я ещё как-то могу понять. Но как они умудрились сделать так, что программа работает в 5-й и не работает в 6-й??

>Да запросто, добавились новые методы, конструкторы и т.д. и т.п. Такие вещи кругом и повсюду.

От того, что что-то добавилось, старое стало хуже работать? Читай внимательнее: работает под СТАРОЙ, но не работает под НОВОЙ.

Да, код, написанный для Qt 4.3, может не собраться под 4.2 (добавили новые феньки), но вот чтобы наоборот.... =\

MYMUR ★★★★
()
Ответ на: комментарий от tailgunner

>> вы чё - прикалываетесь?

> Только отчасти %)

Но ведь и одно, и другое официальные определения байта имеет место быть. Можно только спорить насколько одно "более официальное" чем другое... тут уж нужно "стандартами мерятся" - чей длиннее:)

Led ★★★☆☆
()
Ответ на: комментарий от Led

> Но ведь и одно, и другое официальные определения байта имеет место быть.

Никогда не слышал определения байта как "минимальной адресуемой единицы". Добускаю, что оно было в ходу 30+ лет назад, но с тех пор много что изменилось. Более того, понятие "байт" используют электронщики, у которых адрсации вообще может не быть :)

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

> можно, но буква г в названии советует держатся подальше.

Если вам буква г уже что-то советует, то держитесь... %)

cruxish ★★★★
()
Ответ на: комментарий от anonymous

> char *message = malloc(strlen(text_1)+strlen(text_2)); strcpy(message, text_1); strcpy((message+strlen(text_1)), text_2);

1. man strcat

2. man wcscat

iBliss
()
Ответ на: комментарий от anonymous

>можно, но буква г в названии советует держатся подальше.

Буква "г" в данном случае - от GNU. Почему ты не "держишся подальше" от сайта, посвящённому GNU/Linux?

Led ★★★☆☆
()
Ответ на: комментарий от lester

Значит очень жаль, что ты не понял простую истину - инструмент выбирается для решения задачи, а не любую задачу надо решать единожды выбранным инструментом. С в очень многих областях просто смешон. Например в вебе или для доступа к структурированным табличным данным. Вряд-ли ты с таким красноглазием станешь толковым начальником. К тебе прийдет заказчик с пустяковой проблемой, а ты заявишь, что на ее решение тебе нужно в 5 раз больше денег и времени чем соседям, но зато у тебя сплошное Ъ на С. Заказчик покрутит пальцем у виска и пойдет к конкурентам.

Поучительный пример из жизни говорящий о (не)умении выбирать инструменты. На работе есть тупой старый сишник. Он даже С++ не собирается смотреть, ибо не Ъ. Ведь Ъ - это любимый "быстрый" С. Так вот этот чудак на букву М написал сервер кеширования геолокаций в любимом суперязыке - С. Долго писал, упорно. И в итоге сделал все "как надо" - никаких левых библиотек, все на указателях. В итоге это жрало память аки пылесос и медленно работало. Пришел вчерашний студент, переписал все с использованием хештаблиц. Теперь сервант держит нагрузку в 10 раз большую с меньшим временем отклика.

anonymousI
()
Ответ на: комментарий от MYMUR

>От того, что что-то добавилось, старое стало хуже работать? Читай внимательнее: работает под СТАРОЙ, но не работает под НОВОЙ.

>Да, код, написанный для Qt 4.3, может не собраться под 4.2 (добавили новые феньки), но вот чтобы наоборот.... =\

Да я прочитал-то внимательно, попробую объяснить еще раз: изменились классы их методы, вызываемые из rt.jar. То есть то, что было, например, создано в старушке 1.3 уж наверняка не будет работать под 6-кой, к сожалению, это так. :(

Am6er
()

бенчмарк ненужен реузльтат предсказуем ява ненужна ибо опенсорс рулит там куда хотят ее.

anonymous
()
Ответ на: комментарий от tailgunner

>>> Байт - это 8 бит

>> С чего это вдруг?

>Так уж повелось.

Так уж повелось, что на ЛОРе масса народа, не слышавшего про машины, где байт равен 9 битам или чар равен шорту :)

KRoN73 ★★★★★
()
Ответ на: комментарий от tailgunner

>Более того, понятие "байт" используют электронщики, у которых адрсации вообще может не быть :)

Можно пример ситуации, когда байт имеет смысл без адресации?

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymousI

Им не понять, не стоит сотрясать топики :)

anonymous
()
Ответ на: комментарий от KRoN73

>Можно пример ситуации, когда байт имеет смысл без адресации?

Старший байт в регистре AX на x86?

Led ★★★☆☆
()
Ответ на: комментарий от anonymousI

>Пришел вчерашний студент, переписал все с использованием хештаблиц.

Что это за язык такой - "хештаблиц"?

anonymous
()
Ответ на: комментарий от KRoN73

>> Более того, понятие "байт" используют электронщики, у которых адрсации вообще может не быть :)

> Можно пример ситуации, когда байт имеет смысл без адресации?

Байт состояния аппаратуры.

tailgunner ★★★★★
()
Ответ на: комментарий от KRoN73

> Так уж повелось, что на ЛОРе масса народа, не слышавшего про машины, где байт равен 9 битам или чар равен шорту :)

Чар == шорт? Фи, как банально. У меня в проце чар == лонг :D

tailgunner ★★★★★
()
Ответ на: комментарий от iZEN

> Вот только "грамотно написанный код на C" пишется очень долго. :(

Байко. Чтобы написать однопоточный TCP сервер в грёбаном жабовском NIO - надо будет нагенерировать руками кода значительно больше.

Другое дело что для жабы есть много готового ентерпрайза - это лечит.

eXOR ★★★★★
()

Скачал исходник. Смотрю код.

1) Человек не знает про clock_gettime, а использует везде gettimeofday, что делает переключение контекста между userspace и kernelspace и тем самым тормозит программу.

2) Это скорее C++ чем C.

catap ★★★★★
()
Ответ на: комментарий от catap

>Скачал исходник. Смотрю код.

Ты не труЪ

anonymous
()
Ответ на: комментарий от Legioner

> Ну давайте уже финальный вариант, господа сишники, в нормальном оформлении.

#include <QString>

int main(int argc, char **argv){

QString result = QString("blah") + QString("blah");

return 0;

}

eXOR ★★★★★
()
Ответ на: комментарий от catap

> gettimeofday, что делает переключение контекста между userspace и kernelspace

Не на более-менее современном Линуксе :)

tailgunner ★★★★★
()
Ответ на: комментарий от eXOR

А многопоточный сервер с пулом потоков? Уверен что сделаешь это проще и эффективней CachedThreadPool ?

anonymousI
()
Ответ на: комментарий от anonymous

>>Cтарший байт в регистре AX на x86?

>Его адрес - AH :)

Блин, тормознул:) Думал про старшее слово в EAX, вот и написал бред:)

Led ★★★☆☆
()
Ответ на: комментарий от tailgunner

> Так уж повелось.

Меня учили по-другому.

> Ты первый.

http://en.wikipedia.org/wiki/Byte

> In computer science a byte (pronounced "bite", IPA: /baɪt/) is a unit of measurement of information storage, most often consisting of eight bits. In many computer architectures it is a unit of memory addressing.

> A datatype or synonym for a datatype in certain programming languages. C and C++, for example, defines byte as "addressable unit of data storage large enough to hold any member of the basic character set of the execution environment" (clause 3.6 of the C standard). Since the C char integral data type must contain at least 8 bits (clause 5.2.4.2.1), a byte in C is at least capable of holding 256 different values (signed or unsigned char does not matter). Various implementations of C and C++ define a "byte" as 8, 9, 16, 32, or 36 bits[4][5]. The actual number of bits in a particular implementation is documented as CHAR_BIT as implemented in the limits.h file. Java's primitive byte data type is always defined as consisting of 8 bits and being a signed data type, holding values from −128 to 127.

Для меня звучит убедительно.

Legioner ★★★★★
()
Ответ на: комментарий от eXOR

Сиплюсплюсников не звали :) На glib-е круче.

PS а в Qt, насколько я помню, malloc = 0 тоже не обрабатывался (точнее Q_ASSERT-ом проверяется). Не круто.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

> И, да, это не канает, не unicode-aware.

С utf8 никаких проблем не будет. Остальное не нужно.

anonymous
()
Ответ на: комментарий от Legioner

и чо ты будешь делать при malloc() = 0 ?

"У тя кончилась память, балбес! Сходи в магаз и купи еще планку"

имхо ассерт там норм

anonymous
()
Ответ на: комментарий от Legioner

Вот это: "C and C++, for example, defines byte as "addressable unit of data storage large enough to hold any member of the basic character set of the execution environment" демонстрирует приличный возраст Си, родившегося в те времена, когда PDP-10 с 36бит словами был мэйнстримом ("Various implementations of C and C++ define a "byte" as 8, 9, 16, 32, or 36 bits") ;)

Заметь: "The actual number of bits in a particular implementation is documented as CHAR_BIT", не BYTE_BITS.

tailgunner ★★★★★
()
Ответ на: комментарий от DiKeert

>Вот у меня сейчас собирается ядро. Более чем 4 миллиона строк. Это как по вашему, простая программа? Ну напишите это на яве или на пыхпыхе - я поржу.


Можешь ржать:
http://lwn.net/Articles/239896/

Eclipse Foundation объявили доступность комплекта этого года по имени Europa, включающего 17 млн строк кода при участии более 310 разработчиков из 19 стран.

iZEN ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

Тем не менее мы пишем именно на этом С.

> Заметь: "The actual number of bits in a particular implementation is documented as CHAR_BIT", не BYTE_BITS.

Слово char меня вообще убивает, честно говоря.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

:))) и где гарантия что вызов free_mega_super_cache() вызовется - если память закончилась, на вызов функции может и не хватить.

anonymous
()
Ответ на: комментарий от anonymous

С чего это? Стека то хватит, кончается динамически распределяемая память.

Legioner ★★★★★
()
Ответ на: комментарий от cruxish

>>> a + b - сложение строк на жава.
>> Весьма неэффективное, надо сказать.
>Вы весьма неправы, надо сказать.

И я это уже понял и, главное, рассказал другим. ;)

iZEN ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.