Java作為一門面向?qū)ο蟮木幊陶Z言,在編寫程序時,分別有用戶模式和內(nèi)核模式兩種模式。用戶模式和內(nèi)核模式的不同之處在于它們所使用的內(nèi)存區(qū)域不同。
在Java中,用戶模式也稱為非特權(quán)模式,它是指在Java虛擬機中用戶級別的代碼所使用的內(nèi)存區(qū)域。在用戶模式下,Java程序只能訪問運行時棧和堆內(nèi)存。運行時棧用于存放方法的調(diào)用棧信息,堆內(nèi)存則用于存放Java對象。
相對于用戶模式,內(nèi)核模式也稱為特權(quán)模式,它是指Java虛擬機在運行時所需要的內(nèi)存區(qū)域。在內(nèi)核模式下,Java程序可以訪問整個系統(tǒng)的內(nèi)存。比如,Java程序可以直接操作窗口、線程等系統(tǒng)資源。
Java虛擬機中,用戶模式和內(nèi)核模式的轉(zhuǎn)換是通過調(diào)用本地方法來實現(xiàn)的。本地方法是指使用Java編寫本地代碼,由本地編譯器編譯成本地機器碼后,在Java程序中以一種特殊的方式進行調(diào)用的方法。
public class Test { public static native void f(); // 聲明本地方法 public static void main(String[] args) { f(); // 調(diào)用本地方法 } }
在調(diào)用f()方法時,Java虛擬機會轉(zhuǎn)換成內(nèi)核模式,因為本地方法需要使用特殊的系統(tǒng)資源。當本地方法返回時,Java虛擬機又會轉(zhuǎn)換成用戶模式,使Java程序能夠繼續(xù)使用運行時棧和堆內(nèi)存。