Java基础11
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1、Java是平臺獨立性語言
平臺獨立性是指可以在一個平臺上編寫和編譯程序,而在其他平臺上運行。保證Java具有平臺獨立性的機(jī)制為“中間碼”和“Java虛擬機(jī)(Java Virtual Machine)”。Java程序編譯后不是生成能在硬件平臺上可執(zhí)行的代碼而是生成“中間碼”。不同硬件平臺上會安裝不同的JVM,由JVM負(fù)責(zé)把“中間碼”翻譯成硬件平臺能執(zhí)行的代碼,因此能看出JVM不是平臺獨立的,是與硬件平臺相關(guān)的。
解釋執(zhí)行分三步進(jìn)行:代碼的裝入、代碼的校驗和代碼的執(zhí)行,裝入代碼的工作由“類加載器”完成,裝入的代碼由字節(jié)碼校驗器進(jìn)行檢查。
Java字節(jié)碼的執(zhí)行分兩種方式:
1)解釋執(zhí)行指解釋器通過每次解釋執(zhí)行一小段代碼來完成Java字節(jié)碼程序的所有操作。
2)即時編譯方式,解釋器現(xiàn)將字節(jié)碼編譯成機(jī)器碼,再執(zhí)行該機(jī)器碼。
Java平臺
包含兩個模塊:JVM和Java API。JVM是一個虛構(gòu)出來的計算機(jī),用來把Java編譯成的中間代碼轉(zhuǎn)換為機(jī)器可以識別的編碼并運行。有自己完善的硬件架構(gòu),如處理器、堆棧、寄存器等,還具有相應(yīng)的指令系統(tǒng),它屏蔽了與具體OS相關(guān)的信息,使Java程序只需生成在JVM上運行的目標(biāo)代碼(即字節(jié)碼)就可以在多種平臺上順利運行。每當(dāng)一個java程序運行時,都會有一個對應(yīng)的JVM實例。當(dāng)程序運行結(jié)束后,這個JVM才會退出。JVM實例通過調(diào)用類的main()方法來啟動一個Java程序。
2、GC(Garbage Collection)垃圾回收
自動檢測對象的作用域,把不再使用的存儲空間釋放掉。垃圾回收器需要完成三個任務(wù):分配內(nèi)存、確保被引用對象的內(nèi)存不被錯誤的回收、回收不再被引用的對象的內(nèi)存空間。
垃圾回收器使用有向圖來記錄和管理堆內(nèi)存中的所有對象,通過有向圖來識別哪些對象是“可達(dá)的(有引用變量引用它)”,哪些是不可達(dá)的。
3、內(nèi)存泄漏
Java中的內(nèi)存泄漏主要指一個不再被程序使用的對象或變量還在內(nèi)存中占有存儲空間。
引起內(nèi)存泄漏的幾個原因:
1)靜態(tài)集合類,如HashMap和Vector,若為static,他們的生命周期與程序一致,那么容器中的對象在程序結(jié)束之前不能被釋放
2)各種連接,如數(shù)據(jù)庫連接、網(wǎng)絡(luò)連接、IO連接等,只有連接被關(guān)閉后才會回收,若不顯式的關(guān)閉會造成對象無法被回收。
3)監(jiān)聽器,在釋放對象的時候往往沒有刪除相應(yīng)的見同期
4)變量的不合理作用域,變量的作用域大于其使用范圍,還有未及時的將對象置為null
4、Java中的堆和棧
都是存放數(shù)據(jù)的地方。棧內(nèi)存主要存放基本數(shù)據(jù)類型和引用變量;堆內(nèi)存存放運行時創(chuàng)建的對象
A?a?=?new?A();//a放在棧中,?new?A()放在堆中?
轉(zhuǎn)載于:https://my.oschina.net/doudoulee/blog/672481
總結(jié)
- 上一篇: app开发流程
- 下一篇: Java第八天听课总结--jar 包的使