LINUX.ORG.RU
ФорумTalks

[java] сенсация! вызов метода в жаве может длиться дольше таймаута подключения к БД

 


0

1

Вы поймите меня правильно, я лично не имею ничего против жавы, против нее что-то имеет Гугл, особенно Google Reader который недавно подсунул мне следующее

http://ayende.com/Blog/archive/2010/08/31/it-really-happened-legacy-programme...

Для неосиливших инглиш и Ъ краткое резюме: в проге обнаружился баг, что первое обращение к базе отваливалось по таймауту, но следующие шли нормально. Выяснилось, что индусы наколбасили метод в 75000 строк, и подключение к БД отваливалось за время, пока шла JIT-компиляция метода. Для оживления дальнейшего обсуждения скажу, что с С++ такого бы не случилось.

★★★★★

по-моему, дело в индусском подходе, а не в Java. Те индусы, видимо, Голуба не читали...

najar
()

> Выяснилось, что индусы наколбасили метод в 75000 строк

В этом случае надо не язык менять, а индусов.

PolarFox ★★★★★
()

может быть код генерируемый. хотя тогда генерацию индусы писали - не смогли сделать разбиение на отдельные блоки-функции...

olegsov
()

индусы наколбасили метод в 75000 строк, и подключение к БД отваливалось за время, пока шла JIT-компиляция метода.

Это круто! Это новый анекдот, новая городская легенда! Спасибо за хорошее настроение с утра )))

name_no ★★
()

на атоме запускали небось?

Novell-ch ★★★★★
()

https://bugs.kde.org/show_bug.cgi?id=198381 - баг того же рода в Amarok, из-за которого им невозможно пользоваться на медленных интернетах (GPRS).

Суть в том, что при переключении песен происходит запрос в интернеты за текстом, но пока он скачается, то может уже играть другая песня. После того текст таки скачается он присваивается текущему треку. Из-за этого ясное дело происходит каша в песнях и соответствии текстов.

Я наблюдаю этот баг еще с бет 2.0, на багтрекере висит уже больше года.

Turbid ★★★★★
()

>индусы наколбасили метод в 75000 строк, и подключение к БД отваливалось за время, пока шла JIT-компиляция метода

*переосознает подходы к программированию, с сомнением рассматривая свой код*

Zhbert ★★★★★
()

75000 строк - это вся программа в одном методе? ну а чё тогда удивляются?

Tails
()

>Выяснилось, что индусы наколбасили метод в 75000 строк

мне что-то не верится в такое.

mono ★★★★★
()

Шо-то я подозреваю, что какой-нибудь GCC может просто закрешится если попытается переварить в С++ метод в 75k строк :)

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

> Метод 75к строк на С++ скорее призовет дьявола, чем заработает.

ты выход bison'а или еще каких генераторов видел? там и побольше 75к будет...

gods-little-toy ★★★
()
Ответ на: комментарий от a_nan

> Шо-то я подозреваю, что какой-нибудь GCC может просто закрешится если попытается переварить в С++ метод в 75k строк :)

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

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

gods-little-toy ★★★
()
Ответ на: комментарий от olegsov

> может быть код генерируемый. хотя тогда генерацию индусы писали - не смогли сделать разбиение на отдельные блоки-функции...

А зачем?

gods-little-toy ★★★
()

Хм. Никогда не прогил на java, но возникает резонный вопрос. Итак, индусы нафигачили 75000 строк в одном методе - над этим все смеются. Дескать, компилироваться будет вечность, а если бы они сделали 7500 методов по 10 строк компилилось бы это не столько же (при условии, что все 7500 методов задействованы)?

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

> а если бы они сделали 7500 методов по 10 строк компилилось бы это не столько же (при условии, что все 7500 методов задействованы)?

И сколько из этих 7500 методов были бы hot, чтобы hotspot начал их компиляцию? И компиляция делается как раз на уровне одного метода, а не всего сразу, так что постепенно бы hotspot мог и все их скомпилировать, если бы нужно было.

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

Там не так. Там механизм, что метод компилируется непосредственно перед выполнением из байткода. И если бы было 7500 метод по 10 строк, то такой проблемы бы не было.

Tark ★★
()

75К строк, OMG а на х$%^# столько???

Да и вопрос номер два, что они курят?? Я тоже хочу такое.

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

Да и видно, что скриншоты кода сделаны в студии. Причем скорее всего в 10-ой.

Amp ★★★
()

Насколько я помню, jvm никогда не jit-компилирует метод в первый раз исполнения, а только через на 1500 раз в клиентской jvm. Ведь метод может выполниться всего 1-10 раз и зачем его тогда компилировать? И во-вторых компиляция идет в параллельном потоке, пока метод исполняется в режиме интерпретатора. Имхо

Karapuz ★★★★★
()

Для оживления дальнейшего обсуждения скажу, что с С++ такого бы не случилось



Слив ОП защитан

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

по-моему, дело в индусском подходе, а не в Java. Те индусы, видимо, Голуба не читали...

Не люблю жабу, но согласен

erfea ★★★★★
()

Java-код на 75000 строчек вообще бы не скомпилировался - там ограничение на 65k байт байткода на метод. 75000 типовых строчек дадут байткода раз в 10 больше.

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

> Метод 75к строк на С++ скорее призовет дьявола, чем заработает.

Я бы сказал, на 13 сутки программисты продадут душу дьяволу, чтобы этот код на С++ хотя бы скомпилировался.

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

>А вообще по ссылке жабой и не пахнет, да

А ведь могло бы)

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

> Насколько я помню, jvm никогда не jit-компилирует метод в первый раз исполнения, а только через на 1500 раз в клиентской jvm.

нет

Ведь метод может выполниться всего 1-10 раз и зачем его тогда компилировать?


чтобы он быстро выполнился, пусть и один раз. К.О. :)

И во-вторых компиляция идет в параллельном потоке, пока метод исполняется в режиме интерпретатора. Имхо


зачем гадать? открой матчасть и почитай

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

> И во-вторых компиляция идет в параллельном потоке, пока метод исполняется в режиме интерпретатора. Имхо


вруби JVM в режиме чистой интерпретации - получишь тяжелейшее поражение мозга от скорости работы приложения :)

atiyakkha
()

> скажу, что с С++ такого бы не случилось

Чего? Да в одну строку можно наваять такое, что вселенная скорее погибнет тепловой смертью, чем завершится метод с этой строкой. :)

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

открыл матчасть. я был не прав. совсем. :D


Я всегда правду пишу, а меня уже 20 дураков игнорят. Им же хуже

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