【0dsyong.com--一周工作總結(jié)】
轉(zhuǎn)眼間,來(lái)到公司接近一個(gè)月了,從校園里走到實(shí)習(xí)崗位,學(xué)習(xí)環(huán)境變了,與周?chē)娜说年P(guān)系變了,一開(kāi)始最重要的就是做好角色的轉(zhuǎn)變,融入到環(huán)境中。從學(xué)校學(xué)生到公司員工是一次非常重要的角色轉(zhuǎn)變,同時(shí)也是一次人生的跨越。對(duì)于大學(xué)生來(lái)講,這不是一道不可逾越的障礙,實(shí)習(xí)的機(jī)會(huì)也將是我未來(lái)職業(yè)生涯助力的跳板。在實(shí)習(xí)的適應(yīng)階段,我最重要的轉(zhuǎn)變就是態(tài)度的變換,我自己也體會(huì)到態(tài)度決定著一切。作為一個(gè)新人,在加入新的團(tuán)隊(duì)中,態(tài)度是最應(yīng)該去注意的。要有學(xué)會(huì)反思的習(xí)慣,回顧這一周的學(xué)習(xí)情況:
作為一名Java開(kāi)發(fā)工程師,Java虛擬機(jī)是必須要了解的,其中的內(nèi)存劃分,工作原理自己要熟悉,所以這一周花了一部分時(shí)間閱讀了Java虛擬機(jī)規(guī)范文檔,學(xué)習(xí)了classloader機(jī)制,了解并熟悉了虛擬機(jī)內(nèi)存的劃分以及其中的各項(xiàng)參數(shù)。先說(shuō)一下什么是classloader機(jī)制?
當(dāng)我們寫(xiě)好一個(gè)Java程序之后,不是管是CS還是BS應(yīng)用,都是由若干個(gè).class文件組織而成的一個(gè)完整的Java應(yīng)用程序,當(dāng)程序在運(yùn)行時(shí),即會(huì)調(diào)用該程序的一個(gè)入口函數(shù)來(lái)調(diào)用系統(tǒng)的相關(guān)功能,而這些功能都被封裝在不同的class文件當(dāng)中,所以經(jīng)常要從這個(gè)class文件中要調(diào)用另外一個(gè)class文件中的方法,如果另外一個(gè)文件不存在的,則會(huì)引發(fā)系統(tǒng)異常。而程序在啟動(dòng)的時(shí)候,并不會(huì)一次性加載程序所要用的所有class文件,而是根據(jù)程序的需要,通過(guò)Java的類(lèi)加載機(jī)制(ClassLoader)來(lái)動(dòng)態(tài)加載某個(gè)class文件到內(nèi)存當(dāng)中的,從而只有class文件被載入到了內(nèi)存之后,才能被其它c(diǎn)lass所引用。所以ClassLoader就是用來(lái)動(dòng)態(tài)加載class文件到內(nèi)存當(dāng)中用的。
Java虛擬機(jī)提供了三層classLoader
Bootstrap classLoader:采用native code實(shí)現(xiàn),是JVM的一部分,主要加載JVM自身工作需要的類(lèi),如java.lang.、java.uti.等; 這些類(lèi)位于$JAVA_HOME/jre/lib/rt.jar。Bootstrap ClassLoader不繼承自ClassLoader,因?yàn)樗皇且粋€(gè)普通的Java類(lèi),底層由C++編寫(xiě),已嵌入到了JVM內(nèi)核當(dāng)中,當(dāng)JVM啟動(dòng)后,Bootstrap ClassLoader也隨著啟動(dòng),負(fù)責(zé)加載完核心類(lèi)庫(kù)后,并構(gòu)造Extension ClassLoader和App ClassLoader類(lèi)加載器。
ExtClassLoader:擴(kuò)展的class loader,加載位于$JAVA_HOME/jre/lib/ext目錄下的擴(kuò)展jar。
AppClassLoader:系統(tǒng)class loader,父類(lèi)是ExtClassLoader,加載$CLASSPATH下的目錄和jar;它負(fù)責(zé)加載應(yīng)用程序主函數(shù)類(lèi)。
其實(shí)了解了classloader機(jī)制,個(gè)人覺(jué)得比較重要的還是要學(xué)會(huì)自定義類(lèi)加載器。為什么要學(xué)會(huì)自定義類(lèi)加載器?
JVM提供的類(lèi)加載器,只能加載指定目錄的jar和class,如果我們想加載其他位置的類(lèi)或jar時(shí),例如加載網(wǎng)絡(luò)上的一個(gè)class文件,默認(rèn)的ClassLoader就不能滿(mǎn)足我們的需求了,所以需要定義自己的類(lèi)加載器。
看過(guò)《【javascript學(xué)習(xí)指南】JAVA工程師實(shí)習(xí)一周總結(jié)》的人還看了以下文章