j2me 애플리케이션에서 메모리 문제가 있습니다. (another question 참조)루프 중지 문제가 발생했습니다.
하나의 클래스가 응용 프로그램이 닫힐 때까지 멈추지 않는 루프가 있음을 발견했습니다. 이 루프는 사용 가능한 모든 메모리를 소비합니다.
나는이 클래스를 만들지 않았으므로 이런 식으로 일이 이루어진 이유를 알 수 없습니다. 그래서 어떤 제안이라도 환영합니다.
다음은 클래스의 단순화 된 버전입니다 :
import java.util.TimerTask;
public class SomeClass extends TimerTask implements Runnable {
private boolean running = false;
private Thread thread;
public void invokeThread() {
running = true;
thread = new Thread(this);
thread.start();
}
public void run() {
while(running) {
try {
Thread.sleep(800);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
doSomeStuff();
}
}
private void doSomeStuff() {
// do some stuff that consumes my memory
}
public void dispose() {
running = false;
}
}
가 또 다른 클래스 SomeClass.invokeThread()를 호출 (이 이미 일부 메모리를 소비) 일부 사용자의 응답을 기다립니다.
사용자가 데이터 입력을 끝내고 다른 클래스가 dispose()를 호출하고 while 루프가 멈추지 않으면 잠시 기다리거나 응용 프로그램을 조금 더 탐색하려고하면 OutOfMemoryError가 발생합니다.
도와 주시겠습니까?
감사는 루프가 종료되지 않는 이유를 알려 불가능) (doSomeStuff의 내부에 무슨 일이 일어나고 있는지 보지 않고
1. invokeThread() 및 dispose()가 클래스의 동일한 인스턴스에서 호출되는지 확인하십시오. 2. 무슨 일이 일어나고 있는지 더 정확한 그림을 얻기 위해 코드에 몇 가지 로깅을 시도 했습니까? –
@quant_dev 1- 아니, 잘 모르겠지만 그렇게 생각합니다. dispose()가 호출됩니다. 2 - 몇 가지 로깅을 넣고 좀 더 정확한 그림을 얻으려고합니다. –