code

Java의 "코드가 너무 큼"컴파일 오류

codestyles 2020. 9. 19. 11:13
반응형

Java의 "코드가 너무 큼"컴파일 오류


Java에서 코드의 최대 크기가 있습니까? 10,000 줄이 넘는 함수를 작성했습니다. 실제로 각 줄은 배열 변수에 값을 할당합니다.

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"; 

컴파일하는 동안이 오류가 발생합니다. 코드가 너무 큽니다.

이것을 어떻게 극복합니까?


Java 클래스의 단일 메소드는 최대 64KB의 바이트 코드 일 수 있습니다.

그러나 이것을 정리해야합니다!

사용하여 .properties파일이 데이터를 저장하고,를 통해 그것을로드java.util.Properties

.properties클래스 경로에 파일을 배치하여이를 수행 하고 다음을 사용할 수 있습니다.

Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);

메서드 에 64K 바이트 코드 크기 제한이 있습니다.

그렇긴하지만, 나는 리처드와 동의해야합니다. 왜 그렇게 큰 방법이 필요한가요? OP의 예제가 주어지면 속성 파일이 충분해야합니다 ... 또는 필요한 경우 데이터베이스도 충분합니다.


에 따르면 Java 가상 머신 사양 하는 방법의 코드는보다 큰 65536 바이트 안 :

code_length항목 의 값은 65536보다 작아야합니다.

어디 code_length에서 정의 §4.7.3 Code특성 :

code_length: code_length항목 의 값은 이 메서드에 대한 코드 배열의 바이트 수를 제공합니다. code_length의 값은 0보다 커야합니다. 코드 배열은 비워 둘 수 없습니다.

code[]: 코드 배열은 메소드를 구현하는 Java 가상 머신 코드의 실제 바이트를 제공합니다.


이것은 마치 광기처럼 보입니다. 텍스트 파일이나 다른 데이터 소스에서 값을 읽어 배열을 초기화 할 수 없습니까?


코드를 리팩터링하십시오. Java에서는 메소드 크기에 제한이 있습니다.


다른 답변에서 언급했듯이 메서드에 대한 바이트 코드 제한은 64KB입니다 (적어도 Sun의 Java 컴파일러에서는)

나에게도 그 메서드를 더 많은 메서드로 나누는 것이 더 합리적 일 것입니다. 각각은 특정 관련 항목을 배열에 할당합니다 (이 작업을 수행하기 위해 ArrayList를 사용하는 것이 더 합리적 일 수 있음).

예를 들면 :

public void addArrayItems()
{
  addSculptureItems(list);
  ...
}

public void addSculptureItems(ArrayList list)
{
  list.add("sculptures");
  list.add("stonesculpture");
}

또는 속성 파일 에서처럼 고정 된 경우 정적 리소스에서 항목을로드 할 수 있습니다.


나는이 문제를 직접 겪었습니다. 나를 위해 일한 솔루션은 방법을 더 관리하기 쉬운 부분으로 리팩토링하고 축소하는 것이 었습니다. 당신처럼 저는 거의 10K 라인 방법을 다루고 있습니다. 그러나 정적 변수와 더 작은 모듈 식 함수를 사용하여 문제가 해결되었습니다.

더 나은 해결 방법이있을 것 같지만 Java 8을 사용하면 아무것도 없습니다.


You can add another method to create space for your code for additional data space, you might have a method that is taking a large amount of data space. Try dividing your methods because I had the same issue and and fix it by creating another an additional method for the same data in my java Android code, The issue was gone after I did that.


This error sometimes occur due to too large code in a single function... To solve that error, split that function in multiple functions, like

//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();
}

참고URL : https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java

반응형