我的問題是關於錯誤預防,而不是關於讓某些工作。製作一個fsm,在一個狀態內改變狀態指針,到底發生了什麼。讓我發佈一些代碼,使我的問題更清楚。我會盡量保持最低限度使對方瞭解我的觀點:java指針和狀態機
class foo{
abstract fsm {
abstract void enter();
final void changeState(fsm state) { State = state; State.enter() }
}
state1 extends fsm ... implementation left out
state2 extends fsm... implementation left out
fsm State = null;
foo(){
State = new state1;
State.changeState(new state2);
}
}
所以我的問題是,當改變狀態時,狀態設置爲一個新的國家,然後將其輸入()方法被調用。但是當前狀態會發生什麼,即currentState.changeState(...)意味着我們仍處於之前狀態的方法調用中。該方法是否保留在堆棧上,直到它遍歷所有代碼並返回(即內存中有兩個狀態 - 前一個狀態(因爲它的方法調用仍在執行)以及新狀態和它的enter方法調用正在執行。 )或者之前的狀態因爲沒有指向它的指針而被標記爲垃圾回收,並且在方法可以完成執行之前可能(不太可能,但可能)該方法可能被垃圾回收?
就像我說的,這個問題更深入,涉及到JVM的工作原理和垃圾收集/指針執行。歡迎所有回覆,但如果可能的話,我想鏈接到文章。謝謝大家
從概念上講,這可能不是我如何執行FSM的方法......我承認,我對這個問題很困惑。你到底在問什麼?你是否問過如果你的'changeState'調用是按原樣調用會發生什麼(假設它是有效的,它真的不是)? – Makoto