1. 程式人生 > >JVM執行native方法,計數器為空(undefined),又怎麽繼續執行Java代碼的問題?

JVM執行native方法,計數器為空(undefined),又怎麽繼續執行Java代碼的問題?

執行 重新啟動 一句話 正在 哪裏 fin 獨立 調用 繼續

在Java的自動內存分配中,我們看到一句話:

如果線程正在執行的是一個Java方法,這個計數器記錄的是正在執行的虛擬機字節碼指令的地址;如果正在執行的是native方法,這個計數器值則是為空(undefined)

問題:

我們知道,程序計數器用來存放字節碼指令地址;通過這個地址,虛擬機就能知道執行到哪裏,以及怎麽往下執行,可調用native方法,值就變成空了,那麽機器不就直接崩潰了嗎?

解釋:

參考C++理解是:當線程中調用native方法的時候,則重新啟動一個新的線程,那麽新的線程的計數器為空則不會影響當前線程的計數器,相互獨立。

問題:

如果是新啟動的一個線程,那麽不會因為線程異步問題,無法控制執行順序嗎?

解釋:

當前線程應當會被阻塞,知道另外一個線程執行結束。例如:通過死循環來控制阻塞(當然死循環效率太低,這裏只是一個例子)

JVM執行native方法,計數器為空(undefined),又怎麽繼續執行Java代碼的問題?