Jawa / Говнокод #2937 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
public void run()
    {
        try
        {            
            startExport();
        }
        catch (Throwable _t)
        {
            sendEvent(""+_t.getMessage(), true);
            logger.log(Level.SEVERE, charset, _t);
        }
        finally
        {
            System.gc();
        }
    }

А ещё этот человек дёргает в одном сервисе gc каждые 4 секунды. Любые попытки ударить по рукам нарываются на отлуп: "так работает же!". Это не студент! Это реальный production код!

Запостил: konsoletyper konsoletyper, (Updated )

Комментарии (15) RSS

  • Иногда бывает необходимо явно вызывать gc(). Если в десктопном приложении не дергать явно gc(), то рано или поздно оно отожрет максимум памяти который ему дан. А так его можно "держать в форме" 🙂
    Ответить
      • Все верно, это мой код, и gc() я вызываю вполне осознанно, он там и в процессе экспорта вызывается в компании с логгированием использования памяти. А вызов раз в четыре секунды для сервера продиктован характером нагрузки и временем обработки запросов.
        Хотя да, мой параноидный говнокод таки работает в отличии от, скажем так, некоторого участка моего коллеги, который в версии недельной давности умудрялся съедать 500 метров на обработку 4 метрового json'а. Впрочем я думаю он сам порадует почтенную публику своими шедеврами 🙂
        Ответить
        • >А вызов раз в четыре секунды для сервера продиктован характером нагрузки и временем обработки запросов.

          А также тем, на каком парке железа ему предстоит крутится....
          Ответить
        • Коллега банально ошибся в коде, а не сознательно писал такую вот туфту. Тем более, что коллега написал:
          1. Внутренний транспорт
          2. GUI
          3. Бизнес-логику
          4. Поддержку периферии
          5. Отчёты и печатные формы
          в то время, как ты корпел над всего лишь... внешним транспортом. И, кстати, в апреле мой код, более гибкий и выразительный, тоже заработал. А вот теперь вопрос: насколько твой код готов к тому, чтобы в него вносились изменения при возникновении хотелок от пользователей?
          Ответить
        • Кстати, что-то не вижу я в finally логгирования памяти. Тем более, что System.gc() не означает запуска GC в текущем работающем потоке. Это значит, что мы толкнули JVM с просьбой "ау, если тебе особо заняться нечем, можешь почистить кучу в фоновом потоке". Т.е. для твоего логгирования пользы мало. А вот случаи, когда это действительно нужно, можно по пальцам пересчитать. И никаким "характером нагрузок" тут ничего не объяснишь - в этом смысле дяди из Сана, делающие JVM и GC для него, лучше тебя подумали. Ибо думали они годами и не в одиночку.
          Ответить
  • Хуже дураков бывают только дураки убежденные и дураки инициативные
    Ответить
  • Уважаемые Алексей (konsoletyper) и Андрей (guest)

    Ваша проблема ВЫШЕ, причем не выше на этой странице, а выше по оргструктуре Вашего "отдела разработки и внедрения программного обеспечения".
    Ответить
  • Нах надо вызывать gc()? Все равно реально сборка мусора запустится когда самой VM будет угодно...
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8