java運(yùn)行機(jī)制:
????????程序員編寫*.java文件刽射,使用 javac 編譯該文件生成*.class字節(jié)碼文件屈芜,這個(gè)字節(jié)碼文件是與平臺(tái)無關(guān)的拍棕,需要解釋器解釋并執(zhí)行揪荣,java中用于此功能的是JVM宇葱,即瘦真,java虛擬機(jī)。每個(gè)平臺(tái)的JVM都是不同的黍瞧,但是都提供了相應(yīng)的接口用于執(zhí)行字節(jié)碼文件诸尽,JVM解釋執(zhí)行字節(jié)碼文件之后就會(huì)生成對(duì)應(yīng)平臺(tái)的機(jī)器碼。JVM在不同的平臺(tái)上解釋執(zhí)行相同的字節(jié)碼文件印颤,生成對(duì)應(yīng)不同平臺(tái)的機(jī)器碼您机,這種機(jī)制可以把JVM看成上下兩部分,向上提供給java字節(jié)碼程序的接口完全相同年局,向下適應(yīng)不同平臺(tái)的接口互不相同际看。
????????相同的字節(jié)碼文件想在不同的平臺(tái)上使用是不可能的,只有通過JVM進(jìn)行轉(zhuǎn)換矢否,將其轉(zhuǎn)成對(duì)應(yīng)平臺(tái)的機(jī)器碼才能執(zhí)行仲闽,所以這就是偉大的java跨平臺(tái)機(jī)制的關(guān)鍵點(diǎn)--------JVM機(jī)制。
JDK , JRE, JVM????
? ? ? ? JRE是java運(yùn)行環(huán)境僵朗,Java Runtime Environment,其包含了核心虛擬機(jī)JVM赖欣,類加載器屑彻,字節(jié)碼校驗(yàn)器以及大量的基礎(chǔ)類庫等其他環(huán)境。
? ? ? ? JDK是開發(fā)環(huán)境顶吮,包含了JRE社牲。????
垃圾回收機(jī)制
? ? ? ? JAVA程序的內(nèi)存分配和回收都是由JRE在后臺(tái)自動(dòng)進(jìn)行的。JRE會(huì)提供一個(gè)后臺(tái)線程來進(jìn)行檢測和控制悴了,一般都是在CPU空閑或內(nèi)存不足的時(shí)候自動(dòng)進(jìn)行垃圾回收搏恤,程序員時(shí)無法精確控制垃圾回收的時(shí)間和順序。java的堆內(nèi)存保存類的實(shí)例(對(duì)象)让禀,java虛擬機(jī)的堆內(nèi)存中存放著正在運(yùn)行的應(yīng)用程序所建立的所有對(duì)象挑社,垃圾回收機(jī)制會(huì)自動(dòng)回收不再被程序引用的對(duì)象。