Czy istnieje maksymalny rozmiar kodu w Javie? Napisałem funkcję z ponad 10 000 wierszami. Właściwie każdy wiersz przypisuje wartość do zmiennej tablicowej.
arts_bag[10792]="newyorkartworld";
arts_bag[10793]="leningradschool";
arts_bag[10794]="mailart";
arts_bag[10795]="artspan";
arts_bag[10796]="watercolor";
arts_bag[10797]="sculptures";
arts_bag[10798]="stonesculpture";
A podczas kompilacji pojawia się ten błąd: kod jest za duży
Jak mam to przezwyciężyć?
java
arrays
compiler-errors
code-size
trójca
źródło
źródło
Odpowiedzi:
Ale powinieneś to posprzątać!
Użyj
.properties
pliku do przechowywania tych danych i załaduj je za pośrednictwemjava.util.Properties
Możesz to zrobić, umieszczając
.properties
plik w swojej ścieżce klas i używając:Properties properties = new Properties(); InputStream inputStream = getClass().getResourceAsStream("yourfile.properties"); properties.load(inputStream);
źródło
W metodzie istnieje ograniczenie rozmiaru kodu bajtowego do 64 KB
Powiedziawszy to, muszę się zgodzić z Richardem; dlaczego potrzebujesz tak dużej metody? Biorąc pod uwagę przykład w OP, plik właściwości powinien wystarczyć ... lub nawet baza danych, jeśli jest to wymagane.
źródło
enum
zobaczyćZgodnie ze specyfikacją Java Virtual Machine , kod metody nie może być większy niż 65536 bajtów :
code_length
definiuje rozmiarcode[]
atrybutu, który zawiera rzeczywisty kod bajtowy metody:źródło
To trochę przypomina szaleństwo. Czy nie możesz zainicjować tablicy, odczytując wartości z pliku tekstowego lub innego źródła danych?
źródło
Ten błąd czasami występuje z powodu zbyt dużego kodu w jednej funkcji ... Aby rozwiązać ten błąd, podziel tę funkcję na wiele funkcji, takich jak
//Too large code function private void mySingleFunction(){ . . 2000 lines of code } //To solve the problem private void mySingleFunction_1(){ . . 500 lines of code } private void mySingleFunction_2(){ . . 500 lines of code } private void mySingleFunction_3(){ . . 500 lines of code } private void mySingleFunction_4(){ . . 500 lines of code } private void MySingleFunction(){ mySingleFunction_1(); mySingleFunction_2(); mySingleFunction_3(); mySingleFunction_4(); }
źródło
Spróbuj refaktoryzować swój kod. W Javie istnieje ograniczenie rozmiaru metody.
źródło
Jak wspomniano w innych odpowiedziach, istnieje limit 64 KB kodu bajtowego dla metody (przynajmniej w kompilatorze java firmy Sun)
Dla mnie sensowniejsze byłoby podzielenie tej metody na więcej metod - każda przypisuje pewne powiązane elementy do tablicy (może być bardziej sensowne użycie ArrayList w tym celu)
na przykład:
public void addArrayItems() { addSculptureItems(list); ... } public void addSculptureItems(ArrayList list) { list.add("sculptures"); list.add("stonesculpture"); }
Alternatywnie możesz załadować elementy z zasobu statycznego, jeśli są one naprawione jak z pliku właściwości
źródło
Sam napotkałem ten problem. Rozwiązaniem, które zadziałało dla mnie, była refaktoryzacja i zmniejszenie metody do łatwiejszych w zarządzaniu fragmentów. Podobnie jak ty, mam do czynienia z metodą prawie 10 tys. Linii. Jednak dzięki zastosowaniu zmiennych statycznych, a także mniejszych funkcji modułowych, problem został rozwiązany.
Wydaje się, że byłoby lepsze obejście, ale w Javie 8 nie ma ...
źródło
Możesz dodać inną metodę, aby utworzyć miejsce na kod dla dodatkowej przestrzeni danych, możesz mieć metodę, która zajmuje dużą ilość miejsca na dane. Spróbuj podzielić swoje metody, ponieważ miałem ten sam problem i napraw go, tworząc kolejną dodatkową metodę dla tych samych danych w moim kodzie java na Androida. Po tym, jak to zrobiłem, problem zniknął.
źródło
Mam wyliczenie, które powoduje, że rozmiar pliku .java przekracza 500 KB. Eclipse może go zbudować z jakiegoś powodu; plik build.xml wyeksportowany za pomocą eclipse nie może. Zaglądam do tego i zaktualizuję ten post.
źródło
Ponieważ istnieje limit rozmiaru dla metod i nie chcesz przeprojektowywać swojego kodu w tej chwili, możesz podzielić tablicę na 4-5 części, a następnie umieścić je w różnych metodach. W czasie czytania tablicy wywołaj wszystkie metody w serii. Możesz również utrzymywać licznik, aby wiedzieć, ile indeksów przeanalizowałeś.
źródło
jest to spowodowane całym kodem w rozwiązaniu pojedynczych metod: utwórz więcej małych metod, a ten błąd zniknie
źródło
ok, może ta odpowiedź jest za późno, ale myślę, że ta droga jest lepsza niż inna
na przykład mamy 1000 wierszy danych w kodzie
rozgryść ich
private void rows500() { //you shoud write 1-500 rows here } private void rows1000() { you shoud write 500-1000 rows here }
aby uzyskać lepszą wydajność, umieść w swoich kodach „jeśli”
if (count < 500) { rows500(); } else if (count > 500) { rows1000(); }
Mam nadzieję, że ten kod ci pomoże
źródło