第01講丨談談你對java平臺的理解_第1頁
第01講丨談談你對java平臺的理解_第2頁
第01講丨談談你對java平臺的理解_第3頁
第01講丨談談你對java平臺的理解_第4頁
第01講丨談談你對java平臺的理解_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

圾收集(GC,GarbageCollection),Java通過收集器(GarbageCollector)回收我們?nèi)粘佑|到JRE(JavaRuntimeEnvironment)或者JDK(JavaDevelopmentKit)。JRE,也就是Java運行環(huán)境,包含了JVM和Java類庫,以及一些模塊等。而JDK可以看作是JRE的一個超集,提供了工具,比如編譯器、各種診斷工具等。對于“Java是解釋執(zhí)行”這句話,這個說法不太準確。我們開發(fā)的Jaa的源代碼,首先通過Jaac編譯成為字節(jié)碼(yeoe),然后,在運行時,通過Jaa虛擬機(JVM)內(nèi)嵌的解釋器將字節(jié)碼轉換成為最終的機器碼。但是常見的JVM,比如我們大多數(shù)情況使用的raeJDK提供的otsotJVM,都提供了JIT(Js-n-Time)編譯器,也就是通常所說的動態(tài)編譯器,JIT能夠在運行時將熱點代碼編譯成機器碼,這種情況下部分熱點代碼就屬于編譯執(zhí)行,而不是解釋執(zhí)行了。其實這個問題,問得有點籠統(tǒng)。題目本身是非常開放的,往往的是多個方面,比如,基礎知識理解是否很清楚;是否掌握Jaa平臺主要模塊和運行原理等。很多面試者會在這種問題上吃虧,稍微緊張了一下,不知道從何說起,就給出個很簡略的回答。對于這類籠統(tǒng)的問題,你需要盡量表現(xiàn)出自己的思維深入并系統(tǒng)化,Java知識理解得也比較全面,一定要避免讓面試官覺得你是個“知其然不知其所以然”的人。畢竟明白基本組成即使感覺自己的回答不是非常完善,也不用擔心。我個人覺得這種籠統(tǒng)的問題,有時候回答得稍微片面也很正常,大多數(shù)有經(jīng)驗的面試官,不會因為一道題就對面試者輕易結論。通常會盡量引導面試者,把他的真實水平展現(xiàn)出來,這種問題就是做個開場熱身,面試官經(jīng)常會根據(jù)你的回答擴展相關問題?;貧w正題,對于Jaa平臺的理解,可以從很多方面簡明扼要地談一下,例如:Java語言特性,包括泛型、Lamba等語言特性;基礎類庫,包括集合、IO/NIO、網(wǎng)絡、并發(fā)、安全等基礎類庫。對于我們?nèi)粘9ぷ鲬幂^多的類庫,面試前可以系統(tǒng)化總結一下,有助于臨場發(fā)揮?;蛘哒務凧VM的一些基礎概念和機制,比如Jaa的類加載機制,常用版本JDK(如JDK8)內(nèi)嵌的Class-Loaer,例如Bootstrap、Apliaion和ExeionClass-loaer;類加載大致過程:加載、驗證、、初始化(這里參考了周志明的《深入理解Jaa虛擬機》,非常棒的JVM上手書籍);自定義Class-Loaer等。還有收集的基本原理,最常見的收集器,如erialGC、ParallelGC、CMS、G1等,對于適用于什么樣的工作負載最好也心里有數(shù)。這些都是可以擴展開的領域,我會在后面的專欄對此進行更系統(tǒng)的介紹。當然還有JDK包含哪些工具或者Java領域內(nèi)其他工具等,如編譯器、運行時環(huán)境、安全工具、診斷和工具等。這些基本工具是日常工作效率的保證,對于我們工作在其他語言下圖是我總結的一個相對寬泛的藍圖供你不再擴展了,回到前面問到的解釋執(zhí)行和編譯執(zhí)行的問題。有些面試官喜歡在特定眾所周知,我們通常把Java分為編譯期和運行時。這里說的Java的編譯和C/C++是有著不同的意義的,Javac的編譯,編譯Java源碼生成“.class”文件里面實際是字節(jié)碼不是可以直接執(zhí)行的機器碼。Java過字節(jié)碼和Java擬機(JVM)這種跨平臺的抽象,在運行時,JVM會通過類加載器(Class-Loader)加載字節(jié)碼,解釋或者編譯執(zhí)行。就像我前面提到的,主流Java版本中,如JDK8實際是解釋和編譯混合的一種模式,即所謂的混合模式(-Xmixed)。通常運行在server模式的JVM,會進行上萬次調(diào)用以收集足夠的信息進行高效的編譯,模式這個門限是1500次。OracleHotspotJVM內(nèi)置了兩個不同的JITcompiler,C1對應前面說的 如普通Java桌面應用;C2對應server模式,它的優(yōu)化是為長時間運行的服務器端應用設 pilation)。這里不再展開JIT的細Java虛擬機啟動時,可以指定不同的參數(shù)對運行模式進行選擇。比如,指定“-Xint”,就是告訴JVM只進行解釋執(zhí)行,不對代碼進行編譯,這種模式拋棄了JIT可能帶來的性能優(yōu) p”參數(shù),這是告訴JVM關閉解釋器,不要進行解釋執(zhí)行,或者叫作最大優(yōu)化 JVM啟動變慢非常多,同時有些JIT編譯器優(yōu)化方式,比如分支預測,如果不進行除了我們?nèi)粘W畛R姷腏ava使用模式,其實還有一種新的編譯方式,即所謂的(Ahead-of-TimeCompilation),直接將字節(jié)碼編譯成機器代碼,這樣就避免了JIT熱等各方面的開銷,比如OracleJDK9就引入了實驗性的AOT特性,并且增加了新的jaotc工具。利用下面令把某個類或者某個模塊編譯成為AOT庫。代jaotc--outputliboWorld.sojaotc--outputlibjava.base.so--module然后,在啟動時直接指定就可以代java- oWorld.so,./libjava.base.so而且,OracleJDK支持分層編譯和AOT協(xié)作使用,這兩者并不是二選一的關系。如果你有,可以參考相關文檔:。AOT也不僅僅是只有式,業(yè)界早就有第工具(如GCJ、ExcelsiorJET)提供相關功能。另外,JVM為一個強大的平臺,不僅僅Java言可以運行在JVM,本質上合規(guī)的字節(jié)碼都可以運行,Java語言自身也為此提供了便利,我們可以看到類似Clojure、Scala、Groovy、JRuby、Jython等大量JVM語言,活躍在不同的場景。今天,我簡單介紹了一下Java臺相關的一些內(nèi)容,目的是提綱挈領地構建一個整體的印象,包括Java語言特性、類庫與常用第類庫、Java虛擬機基本原理和相關工具,希望對你有所幫助關于今天我們討論的題目你做到心中有數(shù)了嗎?知道不如做到,請你也在留言區(qū)寫寫自己對Java平臺的理解。我會選出經(jīng)過認真思考的留言,送給你一份學習鼓勵金,歡迎你與我一起討論。你的朋友是不是也在準備面試呢?你可以“請朋友讀”,把今天的題目給好友,或許你 不得售賣。頁面已增加防盜追蹤,將依 上一 開篇詞|以面試題為切入點,有效提升你的Java內(nèi)下一 第2講|Exception和Error有什么區(qū)別言精選留言言

604

291我對『Compileonce,runanywhere』這個宣傳語歷史背景非常感。這個宣傳語似乎在暗示C語言有一個缺點:對于每一個不同的平臺,源代碼都要被編譯一次。我不C言源文件這一塊。我沒有C語言的編程經(jīng)驗,但是似乎C語言程序經(jīng)常需要調(diào)用操作系… 面向對象(封裝,繼承,多態(tài)類庫(

135首先,個人覺得這個題目非常的抽象和籠統(tǒng),這個問題沒有標準答案,但是有『好』答

131 99 1,JVM的內(nèi)存模型,堆、棧、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論