2011-05-06 10 views
1

저는 오래 전에 상속 된이 끔찍한 예전 자바 웹 앱에 대해 어떤 작업을하려고합니다.65536 바이트 한도에 도달했습니다.

tomcat을 가져온 후 프로젝트와 이클립스 작업 공간을 모두 가져온 경우 서블릿의 메소드가 65536 바이트 제한을 초과하는 오류가 발생합니다.

이 방법은 한계를 초과 할 수 있습니다. 몇 천 가지가 넘습니다. 하지만,이 오류가 발생하지 않고 전에이 응용 프로그램에서 작업했으며 커밋 로그에 따르면 이후 서블릿에 코드가 추가되지 않았습니다.

내가 이번에는 맥북에서 일하고 있기 때문일 수 있습니까? 마지막으로 우분투와 함께 HP 데스크톱을 사용하여 응용 프로그램을 작업했습니다. 다른 자바 버전, CPU 아키텍처? 이것은 가능한가?

리팩터링 코드를 제외하면 수행 할 수있는 작업이 있습니까?

+0

가능한 복제본 : http://stackoverflow.com/questions/5689798/why-does-java-limit-the-size-of-a-method-to-65535-byte – smas

+0

매우 유사하며 잠재적으로 동일한 문제 : http://stackoverflow.com/questions/5484253/jspservice-is-exceeding-the-65535-bytes-limit – WhiteFang34

답변

6

리팩터링 코드 을 제외한 나머지 작업은 수행 할 수 있습니까?

아니요. 코드를 리팩토링하십시오. 방법은 그렇게 길지 않아야합니다. 이제까지. Write small methods!

심각하게 : 모든 IDE가 리팩토링을 안내하지만 완료해야합니다. 또한 안내를 위해 Refactoring: Improving the Design of Existing Code을 읽고 싶을 수도 있습니다.

+2

"Ever"는 모두 대문자 여야합니다. – izb

+0

전적으로 관련성이없는 부분에 작은 변화를주기 위해서만 고용되었습니다. 나는 괴물 같은 서블릿에 책임이 없다. 코드를 리팩토링하는 것을 좋아하지만, 시계를 사용하고 있기 때문에 다른 컴파일러를 대신 사용해 보겠습니다. – jim

+0

방법을 리팩토링 할 때 너무 어려워요? 하느님 방법의 일부 크거나 중복 된 블록을 다른 방법으로 붙여 넣은 다음,이 방법을 하느님 방법에서 호출하십시오. 그게 다야. 일부 IDE는 코드 블록을 선택하면이 바로 가기/컨텍스트 메뉴 옵션을 갖습니다. – BalusC

1

사용중인 CPU는 중요하지 않습니다. 당신이 현재 사용하고있는 컴파일러가 한계를 초과하는 다른 출력을 생성하고있을 가능성이 큽니다.

필자는 확실히 리펙터를 사용 하겠지만 코드를 마지막으로 컴파일 한 것과 같은 컴파일러로 전환하려고 할 수 있습니다.

+0

감사합니다. 나는 이클립스의 이전 버전을 설치하려고 할 것이다. 이번에는 가니메데 등을 사용하여 마지막으로 헬리오스를 사용하고 있습니다. – jim

1

코드가 JSP 페이지에서 생성 된 경우 64k method limit을 초과 할 수 있습니다. Weblogic과 같은 일부 웹 컨테이너는 실제로이 문제를 해결합니다. Tomcat은 이전에 다른 웹 컨테이너를 사용하고 있었을 것입니다. this page가 정적을 변경 제안이 문제를 해결하려면 다음과 같이 포함

<jsp:include page="test.jsp" /> 

업데이트 : 동적

<%@ include file="test.jsp" %> 

이 같이 포함이 서블릿을 취급하고 있기 때문에 아마 당신은 밖으로있어 행운의. 이것은 JVM 사양 제한입니다. Why does Java limit the size of a method to 65535 byte? 주위에서 작동하는 컴파일러를 찾지 못할 것 같습니다. 너 은 컴파일 된 크기를 최소화하기 위해 ProGuard과 함께 운이 좋을 것이다.

+0

Nope. 문제는 서블릿에 있습니다. 같은 일이 거기에 적용되지만, 모든 코드는 별도의 메소드 등에 넣어 져야합니다. – jim

+0

아, 와우! Sean은 올바른 대답을했습니다. 비록이 문제를 해결하는 컴파일러를 찾으려고하는지 확신 할 수 없다. 이는 JVM 스펙의 제한 사항 때문입니다. – WhiteFang34

0

메소드를 더 작게 만들 수있는 한 가지는 디버깅을 끄는 것입니다. 디버깅이 켜져 있으면 각 줄 (코드 포함)에 줄을 레이블하는 문이 있습니다.

관련 문제