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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
Integer obj = (Integer)dump.get("size");
        if(obj == null) {
            return;
        }
        int size = obj;
        for(int i=0; i<size; i++) {

Самое странное, что автор явно знает, что такое автобоксинг, но всё равно использовал его коряво.

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

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

  • А надо так:
    Integer dumpedSize = (Integer)dump.get("size");
    if (dumpedSize == null) return;
    for (int i = 0; i < dumpedSize.intValue(); i++) { //...
    ?
    Ответить
      • Не знаю, по-моему, не такое уж и говно. Избавился человек от вызова intValue() на каждой итерации. Название obj не очень, но не критично.
        Ответить
        • Если компилятор не безобразно туп, там не будет вызова intValue на каждой итерации. Проведу эксперимент.
          Ответить
          • Проведите. Насколько я знаю, компилятор java практически не делает оптимизаций. Этим заведует JIT, ему виднее, что реально нужно оптимизировать.
            Ответить
            • Ёлки-иголки, и правда.

              public static void main(String[] args) {
              		Integer count = 5;
              		
              		for (int i = 0; i < count; i++) {
              			System.out.println("i = " + i);
              		}
              	}


              превращается в...

              0  iconst_5
                   1  invokestatic java.lang.Integer.valueOf(int) : java.lang.Integer [17]
                   4  astore_1 [count]
                   5  iconst_0
                   6  istore_2 [i]
                   7  goto 35
                  10  getstatic java.lang.System.out : java.io.PrintStream [23]
                  13  new java.lang.StringBuilder [29]
                  16  dup
                  17  ldc <String "i = "> [31]
                  19  invokespecial java.lang.StringBuilder(java.lang.String) [33]
                  22  iload_2 [i]
                  23  invokevirtual java.lang.StringBuilder.append(int) : java.lang.StringBuilder [36]
                  26  invokevirtual java.lang.StringBuilder.toString() : java.lang.String [40]
                  29  invokevirtual java.io.PrintStream.println(java.lang.String) : void [44]
                  32  iinc 2 1 [i]
                  35  iload_2 [i]
                  36  aload_1 [count]
                  37  invokevirtual java.lang.Integer.intValue() : int [49]
                  40  if_icmplt 10
                  43  return


              То есть действительно на каждой итерации.
              Ответить
              • Вот и я об этом. Возможно, ваш коллега не так уж и глуп, как кажется 🙂
                Ответить
                • Странная какая-то фигня получается.
                  Способ автора с использованием int медленнее способа с Integer на 200мс лично у меня.
                  Количество итераций 1000000000.
                  Ответить
                    • Дак там толком ничего нету.
                      Тело цикла заполняется однородным одинарным слоем говна не зависящего от типа аргументов в условии цикла.
                      for(int i=0;i<size;i++) - вариант с size типа int медленнее.
                      Ответить
                      • Возможны погрешности из-за нагрузки системы и т.п. Увидеть здесь разницу в производительности вряд ли удастся.
                        p.s. ХЗ, во что это превратит JIT 🙂
                        Ответить
                        • Нагрузки системы не было. Стабильная работа. Фоновые программы в ожидании данных и не более того. Вообще на меньшем количестве итераций все примерно одно и тоже, так что не шибко критично, посему хоть это и не ГК, но оптимизировать человеку, видимо, все таки захотелось 😀
                          Ответить
                          • Все, я отказываюсь от каких либо заявлений. Результаты с одним и тем же типом начали отличаться чуть ли не на секунду.
                            Ответить
                            • Ммм, провел еще кучу тестов. Все встало на свои места. Теперь использование int вместо Integer быстрее на 250мс
                              Ответить
                        • JIT по идее должен заинлайнить вызов intValue, ведь это простой геттер, если посмотреть в исходники класса Integer. Но утверждать не берусь.
                          Ответить
  • Не говнокод. Явная оптимизация, чтобы "наверняка".
    Ответить
  • т"C.Z S)N:Z!K(V.H U?RNE I?F!Q.J)N)E"B,N A!VE:Q:Y!E D.W.GR(M,X$Z$X!Y,G K H.H)T(L:Q"L(K$IU"O(J,C?C)V,A:X"ZB)ID Y)P(Z P$D"R,E)T$Y.A(A$T P,W,F$Z?Q:T!O$K$B I E(I"R,U(K:I"Y,CH)T T"N)NQ.M"D,A)X(I!K.ZL(U,V(D:A.T C"Y)T!Y.F!M!Y:R)D(FJ.U,P.B S:W(A,R,P P?T.W?Q?DBO,E(L?X F:G,W$C)N!A"I,X.Q"B,Q!Q:N$O.Y"X?G)S$M(K?D.X:R!Q!Z)B$G.M)I:M$E)Q,B$V R(W)X:Y$A"B:QB$W?G$L O?V"V,L.N!B"Q)A.U)N)G?K$XO)C:N!X Q"F$A.O)KR)R W!B S?E(J$HP:S!U)F"N?D:S$U C!P Y"L,P$X L A$J,B)MH V!T:F A,U"AQ(Q$E!V.C!N(E(R.Z.N!T,T,T?Z!J?J R$G!P!Z(K$I)G)MA?X T$X:Y!MIU"B?Z.R Y)X?T,D!D"A,P N"F)U!I:N(X J,N!U$I.F Q.T"W!T.S!S P(H.PF.V"F V:C?O F:E.B RL.N?O.Q)A JO:E$HU$P.P:QA"N:A)K.D,K.J"O"S(T!U?K:P)V)D)Y:G(MO S.J$B W!V)V.N!T T Z J:UR G P J$G!T$O.G:SN(Q)Z(I(G$J)G?IV$R$V"D"K)X$BY(S:S J)Y,V:K.G"M?S(O$R!QM"N(B"J?R)G$P P,P.I.R E(ZJ:O.F)P?K.O,K.F.LQ"M:T$V,E,A:X J?U G:T,V(F$O$P.ME.J!Z C$F!I,S(DZ D B.X"B)M$V.B A!N(O,SA!O$E"A"H)K"G,Z,G(A?J(L.SA O?L)S:Q$U:Z$Z,C.S)C Q:G(M:I(T:K(R$M(JI.X,C.J!X"X?K!V(X.C,C$T$Q)B"C!M:H K!Q$L)D$N)K(T R"XE.SX.Q(CA.R,M!F?A:K)G,D"F:G"S)Z?G?Q(B)G!G,V O.Q)I)H?J!C!K)T"U.W)X!I$Y.U:JT:L(P QY?BSI I)Q.R?L(Y,V.K$S,E.I?D,W,B.C.N$N!E:X V?F?BEF!Z.H Y,W.C)MJ.R$V"E Q:C)T(C$U:J"D?L$ZB:M)L.M,Q?Q.I X,H:E!N S,G G$W:Z)LC,Q?Y,N.AU Z"J)O"A.K$D)P)VU)E!V.I.T,E$I$F.C(W S"U$Q$A)CY R UH,E H F B!Q?G"F,F,B"HS,W V(OI$H(D$J,W,U?WRЙLQHNEGWUOSYSKZOTZYSYQWZUTXZVALJMPISLSMBZVQPCKTJHLZAOXLMJDOMERNVUALWWIXAOOQCEUDYGOYGCSAFMAB
    Ответить

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

Из-за тебя ушел bormand, guest!

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


    8