高級(jí)答辯問(wèn)題總結(jié)_第1頁(yè)
高級(jí)答辯問(wèn)題總結(jié)_第2頁(yè)
高級(jí)答辯問(wèn)題總結(jié)_第3頁(yè)
高級(jí)答辯問(wèn)題總結(jié)_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1、JVM原理以及JVM調(diào)優(yōu):JVM原理Public class HelloWordpublic static void main(String args)System.out.print(zzHello Word) Java代碼一 java字節(jié)碼(class文件)一 Java HelloWord加載配置(根據(jù)系統(tǒng)版本, 尋找jvm.cfg文件)一根據(jù)配置找到j(luò)vm.dll (jvm.dll文件則是JVM的主要實(shí)現(xiàn))一初 始化jvm,獲取JNI接口(JNI接口是java本地接口,通過(guò)JNI接口才能裝載class文件, 他還常用于和操作系統(tǒng)、硬件等交互)一 找到main方法并運(yùn)行Java代碼通過(guò)

2、編譯之后生成字節(jié)碼文件(class文件),通過(guò):java HelloWorld執(zhí)行,此時(shí) java根據(jù)系統(tǒng)版本找到j(luò)vm.cfg,通過(guò)jvm.cfg文件找到對(duì)應(yīng)的jvm.dll, jvm.dll則是java 虛擬機(jī)的主要實(shí)現(xiàn)。接下來(lái)會(huì)初始化JVM,并獲取川I接口 QNI接口: java本地接口, java被編譯成class文件,通過(guò)JNI接口從硬盤上找到class文件并加載到JVM中,然后 找到main方法,最后執(zhí)行)JVM體系結(jié)構(gòu):(1) Class Loader 類加載器負(fù)責(zé)加載.class文件,class文件在文件開(kāi)頭有特定的文件標(biāo)示,并且ClassLoader負(fù)責(zé)class 文件的加載

3、,至于它是否可以運(yùn)行,則由Execution Engine決定。定位和導(dǎo)入二進(jìn)制class文件驗(yàn)證導(dǎo)入類的正確性為類分配初始化內(nèi)存幫助解析符號(hào)引用JVM數(shù)據(jù)運(yùn)行區(qū):/ Native Method Stack 本地方法棧/ PC Register程序計(jì)數(shù)器/ Method Area方法區(qū):靜態(tài)變量+常量+類信息+運(yùn)行時(shí)常量池存在方法區(qū)中,實(shí)例變 量存在堆內(nèi)存中。/ Stack棧:基本類型的變量和對(duì)象的引用變量都是在函數(shù)的棧內(nèi)存中分配。遵循:“先進(jìn)后出” / “后進(jìn)先出”原則棧是運(yùn)行時(shí)的單位。棧中存的是基本數(shù)據(jù)類型和堆中對(duì)象的引用。/ Heap堆:基本類型的變量和對(duì)象的引用變量都是在函數(shù)的棧內(nèi)存中

4、分配。堆是存儲(chǔ)的單位。堆中存的是對(duì)象堆分為三大塊:新生區(qū)(包括伊甸區(qū)、幸存者區(qū)0和幸存者區(qū)1)、養(yǎng)老區(qū)、永久存儲(chǔ)區(qū) *00M 異常:如果出現(xiàn) java.lang.OutOfMemoryErrouJava.heap.space 異常,說(shuō)明 Java 虛擬 機(jī)的堆內(nèi)存不夠。原因有二:A、java虛擬機(jī)的堆內(nèi)存設(shè)置不夠,可以通過(guò)參數(shù)-Xms、Xmx來(lái)調(diào)整。B、代碼中創(chuàng)建了大量大對(duì)象,并且長(zhǎng)時(shí)間不能被垃圾收集器收集(存在被引用)*如果出現(xiàn) java.lang.OutOfMemoryError:PermGen space,說(shuō)明是 java 虛擬機(jī)對(duì)永久代 Perm 內(nèi)存設(shè)置不夠。原因有二:(jdkl.8

5、及之后不會(huì)出現(xiàn)該問(wèn)題)A、程序啟動(dòng)需要加載大量的第三方j(luò)ar包。例如:在一個(gè)Tomcat下部署了太多的 應(yīng)用。B、大量動(dòng)態(tài)反射生成的類不斷被加載,最終導(dǎo)致Perm區(qū)被占滿。JVM調(diào)優(yōu):建議:1、初始化內(nèi)存和最大內(nèi)存盡量保持一致,避免內(nèi)存不夠用繼續(xù)擴(kuò)充內(nèi)存。最大內(nèi)存 不要超過(guò)物理內(nèi)存,例如內(nèi)存8g,可以設(shè)置最大內(nèi)存4g/6g但是不能超過(guò)8g否 則加載類的時(shí)候沒(méi)有空間會(huì)報(bào)錯(cuò)。2、Gc/fullgc頻率不要太高、每次gc時(shí)間不要太長(zhǎng)、根據(jù)系統(tǒng)應(yīng)用來(lái)定。4) JVM調(diào)優(yōu)總結(jié):1、年輕代大小選擇:A、響應(yīng)時(shí)間優(yōu)先的應(yīng)用:盡可能設(shè)大,直到接近系統(tǒng)的最低響應(yīng)時(shí)間限制(根 據(jù)實(shí)際情況選擇)。在此種情況下,年輕

6、代手機(jī)發(fā)生的頻率也是最小的。同時(shí), 減少到達(dá)年老代的對(duì)象。B、吞吐量?jī)?yōu)先的應(yīng)用:盡可能的設(shè)置大,可能到達(dá)Gbit的程度。因?yàn)閷?duì)響應(yīng)時(shí) 間沒(méi)有要求,垃圾收集可以并行進(jìn)行,一般適合8CPU以上的應(yīng)用。2、年老代大小選擇:A、響應(yīng)時(shí)間優(yōu)先的應(yīng)用:年老代使用并發(fā)收集器,所以其大小需要小心設(shè)置, 一般要考慮并發(fā)會(huì)話率和會(huì)話持續(xù)時(shí)間等一些參數(shù)。如果堆設(shè)置小了,可以 會(huì)造成內(nèi)存碎片、高回收頻率以及應(yīng)用暫停而使用傳統(tǒng)的標(biāo)記清除方式;如 果堆大了,則需要較長(zhǎng)的收集時(shí)間。最優(yōu)化的方案,一般需要參考一下數(shù)據(jù) 獲得:令并發(fā)垃圾收集信息;令持久代并發(fā)收集次數(shù)令 傳統(tǒng)GC信息花在年輕代和年老代回收上的時(shí)間比例。減少年輕代

7、和年老代花費(fèi)的時(shí)間,一般會(huì)提高應(yīng)用的效率B、吞吐量?jī)?yōu)先的應(yīng)用:一般吞吐量?jī)?yōu)先的應(yīng)用都有一個(gè)很大的年輕代和一個(gè)較 小的年老代。原因是:這樣可以盡可能回收掉大部分短期對(duì)象,減少中期的對(duì)象,而年 老代盡存放長(zhǎng)期存活對(duì)象。2、Linux (命令和shell腳本):查找系統(tǒng)正在運(yùn)行的進(jìn)程的命令、一ps-A顯示所有程序查找指定文件的命令一find-namehello.txt查找當(dāng)前目錄下名稱為hello.txt的文檔3、閉包:方法里面返回方法。將應(yīng)用的變量在返回的方法中調(diào)用確保變量不會(huì)被回收,但 是用多了會(huì)影響內(nèi)存。(曹博)閉包的開(kāi)發(fā)原理a、閉包概念:閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。(也可以理解為

8、定義在一個(gè)函數(shù)內(nèi)部 的函數(shù),故閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來(lái)的橋梁)b、閉包的用途:1、可以讀取函數(shù)內(nèi)部的變量2、讓這些變量的值始終保持在內(nèi)存中,不會(huì)再函數(shù)調(diào)用后被自動(dòng)清除。c、使用的注意點(diǎn)1、由于閉包會(huì)使得函數(shù)中的變量都被保存在內(nèi)存中,內(nèi)存消耗很大,所以不能濫 用閉包,否則會(huì)造成網(wǎng)頁(yè)的性能問(wèn)題,在IE中可能導(dǎo)致內(nèi)存泄漏。解決的方法 是:在退出函數(shù)之前,將不使用的局部變量全部刪除。2、閉包會(huì)在父函數(shù)外部,改變父函數(shù)內(nèi)部的值。所以,如果你把父函數(shù)當(dāng)做對(duì)象 (Object)使用,把閉包當(dāng)做它的公用方法(public method),把內(nèi)部變量當(dāng)作 它的私有屬性(private value),

9、這是一定要小心,不要隨便改變父函數(shù)內(nèi)部變 量的值d、子對(duì)象會(huì)一級(jí)一級(jí)地向上尋找所有父對(duì)象的變量。所以,父對(duì)象的所有變量,對(duì)子對(duì)象都是可見(jiàn)的,反之則不成立。這種現(xiàn)象稱為“鏈?zhǔn)阶饔糜颉苯Y(jié)構(gòu)(chain scope)4、Bytecode的應(yīng)用可以說(shuō)Javaassist那部分內(nèi)容,通過(guò)class loader動(dòng)態(tài)加載 字符串為類, 可以舉例子dubbo中的服務(wù)端接受消息就是使用這種機(jī)制動(dòng)態(tài)根據(jù)接口創(chuàng)建動(dòng)態(tài) 代 理(曹博)Byte code 開(kāi)發(fā):bytecode 與 sourcecode 的區(qū)另一sourcecode指的是源代碼,也就是我們根據(jù)java語(yǔ)言規(guī)范所編寫的源程序文件,擴(kuò) 展名為java;b

10、ytecode叫字節(jié)碼,是擴(kuò)展名為java的源程序文件經(jīng)過(guò)java編譯器后所生成的類文 件,它的擴(kuò)展名為class。字節(jié)碼文件不是二進(jìn)制文件,字節(jié)碼文件通過(guò)java解釋器 在java虛擬機(jī)中解釋執(zhí)行。2、class文件是一組以8位字節(jié)為基礎(chǔ)單位的二進(jìn)制流,各個(gè)數(shù)據(jù)項(xiàng)按順序緊密的從前 向后排序。根據(jù)java虛擬機(jī)規(guī)范的規(guī)定,class文件只使用兩種存儲(chǔ)結(jié)構(gòu):無(wú)符號(hào)數(shù) 和表無(wú)符號(hào)數(shù)屬于基本的數(shù)據(jù)類型,一 ul、u2、u4、u8來(lái)分別代表一個(gè)字節(jié)、兩 個(gè)字節(jié)、四個(gè)字節(jié)、8個(gè)字節(jié)的無(wú)符號(hào)數(shù),無(wú)符號(hào)數(shù)可以用來(lái)描述數(shù)字、索引 引用、數(shù)量值,或者按照UTF.8編碼構(gòu)成字符串值表是由多個(gè)無(wú)符號(hào)數(shù)或者其他表作為

11、數(shù)據(jù)項(xiàng)構(gòu)成的復(fù)合數(shù)據(jù)類型,所有表都習(xí) 慣性的以“_info”結(jié)尾。5、反射 是java jdk提供的一種動(dòng)態(tài)調(diào)用實(shí)例的方法。但是有壞處。舉例:框架中從controller 到服務(wù)層就是用了反射。壞處是:不能使用其他框架做的任何代理。比如hibernate的 事務(wù)處理就用不了了,所以框架是自行處理事務(wù)的可以適應(yīng)bytecode進(jìn)行動(dòng)態(tài)的服務(wù) 優(yōu)化(曹博)java的反射機(jī)制:在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方 法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以 及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語(yǔ)言的反射機(jī)制6、Spring 原理及 Spri

12、ng 的 IOC 和 AOP一、Spring工作原理:IOC動(dòng)態(tài)注入,讓一個(gè)對(duì)象的創(chuàng)建不用new,可以自動(dòng)的生產(chǎn),這其實(shí)就是利用了 java里的反射,反射其實(shí)就是在運(yùn)行時(shí)動(dòng)態(tài)的去創(chuàng)建、調(diào)用對(duì)象,spring就是在運(yùn) 行時(shí),跟xml Spring的配置文件來(lái)動(dòng)態(tài)創(chuàng)建對(duì)象和調(diào)用對(duì)象里的方法。Spring另一個(gè)核心AOP (面向切面編程),可以位某一類對(duì)象進(jìn)行監(jiān)督和控制(也就 是在調(diào)用這類對(duì)象的具體方法的前后去調(diào)用你指定的模塊)從而達(dá)到對(duì)一個(gè)模塊 擴(kuò)充的功能。這些都是通過(guò)配置類達(dá)到的。目的:就是讓對(duì)象與對(duì)象(模塊與模塊)之間的關(guān)系沒(méi)有通過(guò)代碼來(lái)關(guān)聯(lián),都是通 過(guò)配置類說(shuō)明管理的(spring根據(jù)這些配

13、置內(nèi)部通過(guò)反射去動(dòng)態(tài)的組裝對(duì)象)4) Spring是一個(gè)容器,凡是在容器里的對(duì)象才會(huì)有spring所提供的服務(wù)和功能。Spring 中經(jīng)典設(shè)計(jì)模式:模板方法模式。二、Spring依賴注入方式:IOC,另外一種說(shuō)法叫DI,及依賴注入,不是技術(shù),是一種 思想1、Autowired:自動(dòng)裝配,用于替代基于XML配置的自動(dòng)裝配(1)構(gòu)造器注入:1、在構(gòu)造器上添加人田0/血1注解:Autowired /構(gòu)造器注入private TestBean 11 (String message) this.message = message;)2、在spring配置文件中添加bean配置:(2)字段注入:在字段上添加AutoWired,同構(gòu)造器注入(3)方法參數(shù)注入:在字段上添加AutoWired,同構(gòu)造器注入1、在方法上添加AutoWired注解:package cn.javass.spring.chapterl2; private TestBean 11 (String message) 省略 importpublic class TestBean 14 private String message;private List li

溫馨提示

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

評(píng)論

0/150

提交評(píng)論