так рождаются нездоровые сенсации. java vs с++

Тема в разделе "WASM.ZEN", создана пользователем _staier, 25 авг 2005.

  1. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    http://kano.net/javabench/



    если бы уважаемый автор сказал . что java компилируется в родной код процессора то ещё можно было бы поверить,но не в то что интерпретируемый язык может обогнать компилируемый причём такой язык промышленного качества как с++.

    это просто абсурд.

    чушь не заслуживающая упоминания.

    это как же надо подкрутить опции компилятора чтобы такое получить - то ?
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    staier



    Наверно это был компилер Borland C++ 1.0 запущеный по DOS-BOX-ом, который работал на vmware :))
     
  3. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    Самое пародоксальное что это близко к реальности.

    Мощь JIT-а реально впечатляет...



    Я лично таких экспериментов не проводил, но проводил мой друган, который сравнивал C++ и Java и в части тестов Java реально обгоняла C++!!!



    Особенно это проявляется на конвеерных операциях

    Друган сказал что по мере выполнения JIT компилит байткод в натив код, с использованием расширений процессора (!) и при повторном выполнении оно просто летает
     
  4. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    _DEN_

    английским по белому написано что компилер "G++ (GCC) 3.3.1 20030930", а ОС - "Red Hat Linux 9 / Fedora Test1 with the 2.4.20-20.9 kernel"



    хотя я думаю интеловский компилер Жабу бы перегнал :)
     
  5. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    Kola

    я и говорю,в статье про jit ни слова , но даже при этом

    в статье вызов методов на java в несколько раз( около 7 ) быстрее чем на с++



    возьмём вызов виртуального метода без параметров



    в с++ это одна операция индексного вызова

    что то типа

    call eax[15]



    как можно сделать вызов в 7 раз быстрее ?





    или я чего - то не понимаю ?
     
  6. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    staier

    JIT ведь Just In Time компилер, и если вся работа происходит в сравнительно небольшом куске кода, то этот кусок будет Just In Time скомпилирован в родной машинный код один раз. Так почему бы ему и не догнать C++ по производительности? А может даже перегнать, в некоторых ситуациях. Другое дело, что все java-приложения, которые я видел, тормозили просто жутко. Но автор явно предпочитает изучать специально заделанные программы, а не реально полезные результаты творчества программеров :)
     
  7. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    staier

    я тоже не догнал :)



    кстати тут монстры джавы говорят, что 1.5 еще быстрее чем 1.4.2
     
  8. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87


    точнее



    mov eax, offset virtual_table

    call eax



    И кто сказал что был вызов? Может JIT или оптимизатор сделал функцию inline а C++ не смог. Надо изучать что он там понаписал...
     
  9. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    а вообще я посмотрел код который там есть сравнил с++

    и java



    например на с++ используются такие конструкты как

    множественные вызовы strdup в цикле

    так,конечно можно всё что угодно доказать
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Эти сенсации - ровестницы ХИТ-компилера, который на ура справляется с определёнными типами кода, а с другими неуклюже тормозит. Тут даже не в С-компиляторе дело, т.к. ХИТ может обогнать и Интел, если автор очередной сенсации этого пожелает ;)



    Заинтересовавшимся данной темой рекомендую почитать что-нибудь по архитектуре ХИТ-компилеров. Sun подобные публикации не поддерживает, но зато есть пейпер "LaTTe: A Java VM Just-in-Time Compilerwith Fast and Ecient Register Allocation" (можно найти в гугле) и ещё много чего интересного по сабжу.
     
  11. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Хе, а кто-нибудь сорсы прилагаемые смотрел? Если посмотреть все встает на свои места. Я без труда добился выиграша с++ во много раз на двух самых подозрительных примерах - дальше лень...

    Kola, rgo

    Чушь говорите товарищи, jit`у пока далеко до современных си компилеров + ограничение по времени компилирования + особенности языка иногда не позволяют сделать эффективным код никак, например сборьщик мусора.
     
  12. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia
    http://www.optim.ru/cs/2001/3/compar/compar.asp

    http://www.optim.ru/cs/2001/4/test2/test2.asp

    http://www.optim.ru/cs/2002/1/shustric3/shustrik3.asp



    Согласно этим тестам JIT с байт-кодами Java и .NET действительно может показывать неплохие результаты, но не быстрее же, чем компилируемый C++! Кстати, по первой ссылке есть и вызов виртуального метода - посмотрите, какая там разница между Жабой и Си++.
     
  13. Nothing

    Nothing New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2003
    Сообщения:
    139
    Адрес:
    Russia
    Странно все это...

    Здравый смысл подсказывает, что код генерируемый на лету JIT-компилером, каким бы крутым он там не был, ну никак не может выполняться в среднем быстрее заранее скомпилированного кода (в отдельных частных случаях - все-таки может, но не в 7 же раз!). Ведь кодогенераторы в C++ и JIT - по сути одинаковые, а время на анализ и компиляцию-то надо хоть какое-то да потратить!.. Хотя если взять плохой С++ компилятор, то может и обогнать, но это же нечестно. Еще и от программы зависит, можно написать чтобы выигрывали и те и те (подробности есть на rsdn, там и программы есть и описание почему так, но ссылку не знаю, т.к. у себя читал в оффлайн версии)...



    А вообще, если все именно так и есть и JIT-компилятор делает C++ код в разы, то почему бы не улучшить компиляторы C++ идеями из кодогенератора JIT??? Была бы жуткая польза, ведь производительность C++ компилеров тоже не подарок! Но что-то этой деятельности не видно, зато яву хвалят на каждом шагу ... А это уже похоже на какие-то махинации, либо люди не умеют ставить эксперименты...
     
  14. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Nothing

    Небиспакойся, c++ куче, я проверил на msvs8, intel 8, gcc 4. Эти тесты как всегда коммерческие...
     
  15. Elderine

    Elderine New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    3
    Ап! :)



    Потестировал си++ вс. джава на предмет работы с матрицами. Код и там и там почти идентичный (благо что синтаксисы языков не сильно отличаются). Делал следующее: берется матрица 8 на 8, заполняется случайными числами, и потом она 2*К раз инвертируется. Совершенно тупо, через определители миноров и т. п. Определитель тоже считается совершенно тупо, путем разложения по первому столбцу. Результаты:

    К = 3 (то есть 6 инвертирований) - си сделал это за 7 секунд, джава за меньше, чем за 2.

    К = 5 - си за 10 секунд, джава за 2.5 - 2.6 где-то...

    Чем это можно объяснить? :) Только кривизной моих рук наверное... Но факт - на си я пишу уже давно (время измеряется в годах), а с джавой познакомился всего несколько дней назад.



    З.Ы.: я не хочу ничего доказать, просто описал забавный феномен. :)
     
  16. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Превосходство JIT над скомпилированным кодом, имхо в настоящее время можно называть лишь переспективным. Например , если в отдаленном будущем появляется супер-производительная платформа, на которую исходный код на Це++ оптимизированн не был, а вот JIT компилятор разработан удачный (вплоть до жуткой аппаратной реализации), то да - из двух старых программ быстрее окажеться та что использует JIT. Но не факт, что перекомпилированная версия (в этом случае уже требуются сорцы, заявит защитник JIT), на оптимизирующем компилере C++ окажеться хуже.
     
  17. HitmaN85

    HitmaN85 New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2005
    Сообщения:
    36
    А какова уверенность, что обращение матриц жабой не было выполнено один раз, а потом подставлялись готовые результаты?
     
  18. apple

    apple Виктор

    Публикаций:
    0
    Регистрация:
    26 апр 2005
    Сообщения:
    907
    Адрес:
    Russia
    Nothing

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



    40% рынка у Sun с Java, еще 40% - у Microsoft. Соответственно, сделав .NET и встроив его в Windows (а заодно оптимизировав как саму ОС, так и железо) десяток-другой процентов уйдет к мелкомягким.



    alpet

    Превосходство JIT над скомпилированным кодом, имхо в настоящее время можно называть лишь переспективным.

    В будущем в процессоры планируется "встроить" поддрежку .NET.
     
  19. captain cobalt

    captain cobalt New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    222
    Адрес:
    /ru/perm
    apple> В будущем в процессоры планируется "встроить" поддрежку .NET.



    Кто?

    Когда?

    В какие процессоры?

    Ссылки на заявления о намерениях?
     
  20. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Нифига себе :) в процессоры... не доживет .NET до таких времен, уверен ..