2011-07-04 16 views
22

Dowiedziałem się, że maksymalny rozmiar metody w java wynosi 64k. A jeśli przekroczy, otrzymamy ostrzeżenie kompilatora, takie jak "Kod zbyt duży, aby skompilować". Więc możemy nazwać to wadą java z tak małą ilością pamięci.Maksymalny rozmiar metody w języku Java?

Czy możemy zwiększyć ten limit rozmiaru lub czy naprawdę można go zwiększyć?

Jeszcze więcej pomysłów dotyczących tej metody wielkości?

+1

(a) Gdzie to przeczytałeś? (b) Dlaczego to ma znaczenie? –

+24

Ten limit powinien być ustawiony na 2k, aby wymusić refaktoryzację i ładny design :) Podobnie jak limit 255 parametrów metody powinien być ustawiony na 10. –

+3

I (b) Jeśli twój kod jest większy niż 64kb dla pojedynczej metody ... może czas na refaktoryzację? – SJuan76

Odpowiedz

36

Z mojego doświadczenia wynika, że ​​ograniczenie do 64 KB jest tylko problemem dla wygenerowanego kodu. esp. przy wprowadzaniu dużych tablic (co odbywa się w kodzie):

W dobrze skonstruowanym kodzie, każda metoda jest dająca się zarządzać długością i jest znacznie mniejsza niż ten limit. Duże fragmenty danych, które można załadować do tablic, można odczytać z plików innych niż Java, takich jak tekst lub plik binarny.

EDIT:

Warto nic, że nie będzie kompilacji JIT metod większa niż 8 K. Oznacza to, że kod działa wolniej i może mieć wpływ na czasy GC (jak to jest mniej wydajny, aby szukać stosu wywołań z gwintem z metod, które nie są sporządzane szczególnie te duże)

Jeśli to możliwe chcesz ograniczyć swoje metody do 8 K zamiast 64 K.

+7

+1: Limit jest prawdziwym bólem dla wygenerowanego kodu. –

+3

Moją pracą dla ograniczenia było wygenerowanie metod dla każdego N linii wygenerowanego kodu. Następnie wywołaj je wszystkie w nowej metodzie. – Diederik

+2

@Diederik to wstyd, że kompilator nie jest wystarczająco inteligentny, aby to zrobić dla ciebie, lub że kod bajtowy obsługuje większe metody. –

6

64k to całkiem sporo, jeśli je przekroczysz, pomyśl o reorganizacji kodu.

W moim projekcie spotkałem się z tym ograniczeniem raz w wygenerowanych źródłach. Rozwiązany przez podzielenie jednej metody na kilka.

3

Jeśli metoda jest dłuższy niż 50 linii, w tym wewnątrz komentarze - Split to. W takim przypadku nigdy nie osiągniesz żadnych ograniczeń (nawet jeśli taki istnieje).

Osobiście widziałem metody o długości 1000 linii (napisane przez przestępców, którzy nazywają się programistami :)), ale nie widzieli tego rodzaju ograniczeń.

+6

To bights najczęściej w 2 przypadkach: (a) JSP, czyli tam, gdzie ja potknął się o to; oraz (b) wygenerowany kod. W obu przypadkach może to być piekielnie dużo pracy, aby upewnić się, że twój kod bajtowy jest zawsze poniżej 64k. – corlettk

Powiązane problemy