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). Исходные коды прилагаются.

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

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

кстати mod_jk уже давно deprecated, насколько я помню

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

>А почему тогда спрашиваешь, зачем запускать GC при нехватке памяти? Памяти не хватает, запустили GC, освободили неиспользуемую память, памяти стало хватать, работаем дальше.

Я просто неасили сакральный смысл декрементить вручную каунтеры ссылок и запускать ГЦ, в программе с ручной сборкой мусора, где можно просто сделать фри. Идея ГЦ вроде как в том, что он считает ссылки за тебя(да, я в курсе что современные ГЦ работают сложнее, чем просто банальный подсчет ссылок). Вобщем забей, не думаю что это к теме обсуждения относится...

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

Ну как бы суть GC в том, что он может просмотреть все глобальные переменные и стек, и оттуда уже начать граф используемых объектов строить. В C портабельно это нельзя сделать, поэтому нужно руками говорить, когда мы указатель начали использовать и когда закончили. Тогда можно во-первых удалять все объекты со счётчиком равным нулю, во-вторых находить замкнутые графы объектов, на которые извне никто не ссылается и их тоже удалять. Вообще это был поток мыслей, в реальности это будет очень неудобно использовать (хотя если в С++ поколдовать, то можно чего-нибудь юзабельное придумать). Чаще используют пулы - выделяем память в пуле, освобождать не обязательно, а потом по истечение какой-нибудь операции освобождаем весь пул разом.

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

> Конечно могут. Через биндинги к библиотекам на C :)
Собственно как раз для этого C и предназначен - прослойка между кодом и железом (Java -> C -> GPU) :) :) :)

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

> Собственно как раз для этого C и предназначен - прослойка между кодом и железом (Java -> C -> GPU) :) :) :)

чем же тогда будет быстрее Жабка, и чем она лучше, если Си служит "прослойкой" ?

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

> чем же тогда будет быстрее Жабка, и чем она лучше

чем C

Legioner ★★★★★
()

хехе. новость от изеня. знаменитого лоровского жабофила. ergo по ссылкам можно не ходить

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

>чем же тогда будет быстрее Жабка, и чем она лучше, если Си служит "прослойкой" ?

а чем веник лучше кочерги? Здесь некоторые господа утверждают, что кочерга - это уже не модно и весь мир перешёл на веники. Веник легче весит и цвет у него веселее, чем у кочерги, а сделать веник так вообще проще пареной репы - не то, что металлическую кочерёжку. Ай-да все на веники! Это основная тема дискуссии.

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

> чем же тогда будет быстрее Жабка, и чем она лучше, если Си служит "прослойкой" ?
Тем, что нет серебрянной пули и каждый язык должен использовать там, где наиболее эффективен.

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

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

LOR тебе не поверит =)

HappyCoder
()

... такими темпами скоро будут доказывать всему миру, что Ось под виртуалкой работает быстрее Оси, на которой установлена виртуалка...

anonymous
()

Ловкость рук и никакого мошенничества?

> -O3 -msse2 -march=native -mfpmath=387

А почему -mfpmath=387, а не sse?

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

>> Да и на счет простоты и изящества ты загнул. А ну сложи 2 стринга переданных в качестве параметров:)?

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

Вот она простота кода. Не то что лошарский синтаксис :))))))
return text_1 + text_2;

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

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

void f(int x, int y, int z);

int i=0; f(++i,++i,++i);

что пойдет в качестве параметров в С/С++ (hint: насколько это зависит от компилятора и платформы?) :)))

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

> Вот она простота кода. Не то что лошарский синтаксис :))))))
> return text_1 + text_2;

да я вижу ты с++ знаешь? ;)

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

> что пойдет в качестве параметров в С/С++ (hint: насколько это зависит от компилятора и платформы?) :)))

на любом вменяемом компиляторе, такой невменяемый код должен дать

1, 2, 3

П.С. я уже жду фразы в ответ "А нет!..." :)

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

> Тем, что нет серебрянной пули и каждый язык должен использовать там, где наиболее эффективен.

низкий уровень - Си, Асм.

веб - питон, ну и раби с рельсой

пользовательское ПО - питом(морда) + Си/Си++

зачем нам Жабка, она же нигде не эффективна ...

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

> Человек который на С будет писать например вебприложение - не просто быдлокодер а быдлокодер шизонутый на всю голову.

так делают в Гугл. и них есть такая платформа для написания масштабируемых приложений. Так вот на ней и веб приложения пишут в том числе. Там приложение - это библиотека, написанная на C++, которая работает в окружении этой платформы.

Они даже руководство по оформлению кода на C++ недавно выложили.

Вообще, все эти холивары - отражение узости сознания. Нужно просто понимать, для каких задач какой иструмент подходит лучше всего. А для этого нужен кругозор широкий.

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

>зачем нам Жабка, она же нигде не эффективна ...

Зачем phasma? Он же везде туп.

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

>Вообще, все эти холивары - отражение узости сознания. Нужно просто понимать, для каких задач какой иструмент подходит лучше всего. А для этого нужен кругозор широкий.

LOR без холивара не Ъ!

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

>Зачем ручками декрементить счетчики и потом "натравливать" на эти куски ГЦ, если можно просто освободить эту память с помощью фри?

ГЦ нужен из-за того, что счётчики ссылок на практике постоянно текут из-за кольцевых ссылок. И их не всегда просто избежать. С другими схемами ручного управления памяти тоже свои проблемы.

Поэтому все, кто говорят "зачем нужен ГЦ, если можно сделать free?" идут в лес, как полные кретины.

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

> Достаточно сложная для C. Тем более это компилится часа два на AthlonXP 2500+, наверное?

у меня - 4 минуты

> Eclipse содержит 17 миллионов строк кода и компилится javac пятнадцать минут на том же процессоре.

и запускается часа два

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

>А не желаете пересмотреть решения/алгоритмы Java когда в условии задачи известно, что текст на входе в однобайтовой кодировке, но его очень много?

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

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

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

Я скалюсь потому что простая задачка по конкатенации 2х строк превращается в войну представления в памяти, выделения памяти, освобождения памяти, кодировок, заманухи с кросплатформеннростью а некоторые апологеты даже не поинмают почему запись за пределы выделенной памяти работает - и все это в 2008 году. Я понимаю что до сих пор существует микроаппараты где каждый байт на счету и т.д. - но в прикладном программировании _это очень смешно_. И потому я скалюсь - потмоу что Сшники до сих пор борются с языком, а не решают задачи.

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

>Более чем 4 миллиона строк. Это как по вашему, простая программа?

Это прослойка между железкой и софтом.

>Ну напишите это на яве или на пыхпыхе - я поржу.

JavaOS, Singularity - видел?

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

>>Ну напишите это на яве или на пыхпыхе - я поржу.
Любитель серебряных пуль?

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

>За сколько строк кода считают один ява-бин с пятью полями и десятью геттерами и сеттерами?

Если считала метрика KLOC - то за 0.

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

>дабы не ипать моск, use glib2 ;)

То есть нашелся один тот самый который признал - что даже сложение строк на С - ебля мозга:)

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

>strlen, вроде как длинна строки в СИМВОЛАХ, а не в байтах.

Именно.

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

Все это замечательно. Только 21 век на дворе.

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

>Эти "кретины" написали ядро линуха, не забывай.

Те кто пишет ядро, знают что "просто free" - это далеко не всё, что нужно.

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

>что даже сложение строк на С - ебля мозга

На Си - не ебля. Там вполне можно написать функцию которая их будет конкатенировать или воспользоваться примитивами из библиотеки которую изначально используешь.

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

>btw, не знаю ни одного

Это потому что не знаешь не одного, а не потому, что ненаписаны или не используются.

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

>А то в продакшене она всем сливает со страшной силой, а от ее сторонников аргументов кроме "хреновые программисты писали" больше ничего.

Странно - не сливает, клиенты довольны.

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

>> что пойдет в качестве параметров в С/С++ (hint: насколько это зависит от компилятора и платформы?) :)))

>на любом вменяемом компиляторе, такой невменяемый код должен дать >1, 2, 3 >П.С. я уже жду фразы в ответ "А нет!..." :)

Ан нет!...

проверь на своем компиляторе и отпиши результат ;)

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

> Странно - не сливает, клиенты довольны.

Наши подрядчики тоже думают что мы довольны... хотя довольны только боссы... откатами, а продукт - говно.

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

>Хотя вот стоит задачка - обернуть матрицу размером 10^6 x 10^6 на 8и-корном проце (еще лучше на GPUах). Где Ваши erlangи и Java?

А ниче что наш софт например на жабе конвертирует картинки внутри PDF печатного качества (сотни мегабайт) и при этом помещается в память выделенную апплету?

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

>незачот! во-первых - это apache модуль, написанный на C

Да ты просто эксперт по вебсерверам! Ниче что этому модулю сам апач и нахрен не нужен?

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

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

>Да запросто, добавились новые методы, конструкторы и т.д. и т.п. Такие вещи кругом и повсюду. Надо как бы понимать, что кроссплатформенность != обратная совместимость релизов. Как вариант использую 5-е либы и будет счастье.

Вообще Java еще и обратно совместима. К СОЖАЛЕНИЮ со стародавних пор! Отрубить обратную совместимость можно воспользовавшись несовместимым пакетом или левой библиотекой, которая в следующем релизе не используется.

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

>>Java никогда не догонит и тем более, никогда не перегонит, по скорости, потреблению памяти, простоте и изяществу грамотно написанный код на С

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

>Ассемблер никогда не догонит и тем более, никогда не перегонит, по скорости, потреблению памяти, простоте и изяществу грамотно написанный код на машинных кодах.

>Машинные коды универсальных процессоров никогда не догонят и тем более, никогда не перегонят, по скорости, потреблению памяти, простоте и изяществу грамотно разработанную аналоговую схему.

+1

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

Хуево поставленная задача. Это раз. А когда на жабе s + p делаешь, это разве не библиотечный вызов? Дык и на сях можно взять библиотеку и складывать.

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

>удивительно, что сами веб-сервера написаны на C. >btw, не знаю ни одного (без якзотики, простейший я и сам на пишу in 5мин на любом языке) написанного на какоми-нибудь другом (java, php, даже C++).

Все Java контейнеры написаны на Java, и Apache им, в принципе, нахрен не нужен. Другое дело, что, например, статику отдавать быстрее другим сервером, nginx, lighttpd, ну Apache на худой конец.

Ещё часто бывает, что Apache работает, как некий фронтенд, собираюший в одно целое серию приложений на разных языках (Java, PHP, и.т.д). В таком случае, Tomcat, например, пристёгивают через модуль к Apache. Но запросы всё равно Tomcat обрабатывает, Apache в лучшем случае их парсит и полупереваренные отдаёт Tocmat-у. А может и вообще как обычный прокси работать, передавая запросы Tomcat-у как есть.

А так Jetty/Tomcat/JBOSS/Glassfish/WebSphere/Oracle AS/Weblogic все большей частью на Java написаны.

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

>Поэтому все, кто говорят "зачем нужен ГЦ, если можно сделать free?" идут в лес, как полные кретины.

Анимус ты дибил. Вопрос был "зачем нужен ГЦ _В ПРОГРАММЕ С РУЧНЫМ УПРАВЛЕНИЕМ ПАМЯТЬЮ_ на Ц".

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

>>>>Байт - по своему происхождению и по логике счётная единица и поэтому обязан адресоваться.

>Проадресуйте мне пожалуйста 1 байт на HDD 8)

Вот вам адрес одного из байтов на моем HDD - дорожка 0, сторона 1, сектор 2, 3-й по счету байт в секторе. Легче стало?

> Хех - зайдем с другой стороны линия RS-232 8 бит дата (ака byte) - и где адрес ?

Это ведь вы(!) сейчас сказали (ака byte)? Это вы(!) сказали 8 бит дата?

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

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