未知數(shù)據(jù)

          從頭看Java

             ::  :: 聯(lián)系 :: 聚合  :: 管理
            28 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

          1. java程序的運(yùn)行機(jī)制

              1. java語言是編譯型還是解釋型?

              編譯型語言指使用特定的編譯器,針對特定的平臺(操作系統(tǒng))將源代碼一次性翻譯成可被該平臺硬件執(zhí)行的機(jī)器碼(包括機(jī)器指令和操作數(shù)),并包裝成該平臺所能識別的可執(zhí)行的程序.這個(gè)過程稱為編譯(Compile).編譯生成的可執(zhí)行的程序可以脫離開發(fā)環(huán)境,在特定的平臺上運(yùn)行.解釋型語言指使用專門的解釋器對源代碼逐行解釋成特定平臺的機(jī)器碼,并立即執(zhí)行.解釋型語言相當(dāng)于將編譯型語言中的編譯和解釋工作混合在一起同時(shí)進(jìn)行.

              解釋型語言每執(zhí)行一次源代碼就需要重新編譯一次,因此執(zhí)行效率比較低,但解釋型語言跨平臺確比較容易,只需要提供特定平臺的解釋器,該解釋器就會(huì)負(fù)責(zé)將源代碼解釋成特定平臺上的機(jī)器指令.而編譯型語言的運(yùn)行效率較高,但移植比較麻煩.如果需要移植,則需要將源代碼復(fù)制到新的平臺上,針對該平臺進(jìn)行修改并重新編譯.

              java語言既是編譯型語言也是解釋型語言.

                 java語言在編譯的時(shí)候不是生成特定平臺相關(guān)的機(jī)器碼,而是生成與平臺無關(guān)的字節(jié)碼,只面向JVM(Java Virtual Machine).

                 這種字節(jié)碼必須由JVM解釋執(zhí)行.

              2. 關(guān)于JVM

              JVM可以看做是一個(gè)抽象的計(jì)算機(jī),和實(shí)際的計(jì)算機(jī)一樣,也具有指令集和存儲區(qū)域.它負(fù)責(zé)執(zhí)行指令,還要負(fù)責(zé)管理數(shù)據(jù),內(nèi)存和寄存器.不同平臺上的JVM是不同的,但是它們都提供相同的編程接口.所以JVM是java語言可以跨平臺的關(guān)鍵部分,只要不同的平臺實(shí)現(xiàn)不同的JVM,編譯后的class文件就可以在該平臺上運(yùn)行.

          2. 關(guān)于Java的部分概念

              1. JDK=Java SE Development Kit,java標(biāo)準(zhǔn)版開發(fā)包,包括java編譯器,運(yùn)行時(shí)環(huán)境(JRE)以及常用的java類庫等

              2. JRE=Java Runtime Environment.java運(yùn)行時(shí)環(huán)境.包含JVM以外,還有其他類的加載器,字節(jié)碼校驗(yàn)器以及大量的基礎(chǔ)類庫.

              3. Java EE SDK . 包括JDK.學(xué)習(xí)java EE的軟件和開發(fā)包(Software Development Kit)

          3. java的環(huán)境配置

             1. 在windows下用戶變量和系統(tǒng)變量的區(qū)別?

             系統(tǒng)變量對所有用戶有效,用戶變量只對當(dāng)前用戶有效.對于當(dāng)前用戶而言,兩者沒有區(qū)別,只是系統(tǒng)變量中的配置會(huì)優(yōu)先于用戶變量中的配置.

             2. classPath需要配置嗎?

             JDK1.4以前的版本需要手動(dòng)的設(shè)置classPath變量,讓JRE去搜索java類文件.需要配置當(dāng)前路徑(.)及%JAVA_HOME%\lib\dt.jar和%JAVA_HOME%\lib\tools.jar.但在JDK1.5中可以不配置classPath變量,JRE可以自動(dòng)搜索當(dāng)前路徑下的類文件和自動(dòng)加載dt.jar和tools.jar,同時(shí)如果配置了classPath變量,則JRE會(huì)嚴(yán)格按照變量的路徑去搜索類文件.也就是說如果要配置classPath路徑就一定要配置準(zhǔn)確,否則還是要報(bào)錯(cuò)的.

             3. classPath變量中的路徑盡量不要出現(xiàn)空格,否則可以引發(fā)錯(cuò)誤

          4. java的垃圾回收機(jī)制(Garbage Collection GC)

              1. java語言不需要程序員直接控制內(nèi)存回收.垃圾回收的發(fā)生有不可預(yù)知性,不建議使用finalize()和System.gc()來建議系統(tǒng)進(jìn)行垃圾回收,因?yàn)檫@樣做不不能精準(zhǔn)的控制垃圾回收機(jī)制.可以通過暗示使垃圾回收機(jī)制可以盡快的回收那些不再使用的對象.也就是將該對象的引用變量設(shè)置為null.

              2. java程序的內(nèi)存分配和回收都是由JRE在后臺進(jìn)行維護(hù).通常JRE會(huì)提供一個(gè)超級線程來進(jìn)行檢測和控制,一般是在CPU空閑或內(nèi)存不足的情況下自動(dòng)進(jìn)行的,程序員無法精確控制垃圾回收的時(shí)間和順序.

              3. java運(yùn)行時(shí)的數(shù)據(jù)存放在堆內(nèi)存,垃圾回收機(jī)制就是負(fù)責(zé)這部分內(nèi)存中的資源.它并不能回收其他如磁盤IO等物理資源.

              4. 垃圾回收機(jī)制的缺點(diǎn)是它的開銷會(huì)影響程序的性能.JVM所做的就是監(jiān)控程序中所有的對象,確認(rèn)哪些是無用的對象,并最終釋放這些無用的對象.而且java的垃圾回收機(jī)制還不是很完備,它并不能保證可以100%地收集所有廢棄的內(nèi)存.

              5. 垃圾回收的精確性主要包括2個(gè)方面:

                 a. 垃圾回收機(jī)制可以精確地標(biāo)記活著的對象.Java中的對象具有唯一性.

                 b. 垃圾回收機(jī)制可以精確地定位對象之間的引用關(guān)系.這是實(shí)現(xiàn)歸并和復(fù)制等算法的必要條件,通過這種引用關(guān)系,可以保證所有相關(guān)的對象都能被可靠的回收及重新分配,從而有效地減少內(nèi)存碎片的產(chǎn)生

              6. 現(xiàn)在的JVM有多種不同的垃圾回收機(jī)制,每種機(jī)制會(huì)因其算法差異而表現(xiàn)各異.有的當(dāng)垃圾回收開始時(shí)就停止應(yīng)用程序的運(yùn)行,有的當(dāng)垃圾回收運(yùn)行時(shí),同時(shí)允許應(yīng)用程序運(yùn)行,還有的同一時(shí)間垃圾回收有多個(gè)線程在運(yùn)行.

          posted on 2009-01-04 19:29 wangjc 閱讀(159) 評論(0)  編輯  收藏 所屬分類: 從頭看Java
          主站蜘蛛池模板: 榕江县| 措勤县| 铜梁县| 阳曲县| 清水县| 灵武市| 肃宁县| 呼玛县| 西丰县| 四子王旗| 岳阳市| 西昌市| 武陟县| 瑞金市| 晋城| 曲阳县| 横山县| 周宁县| 达拉特旗| 罗山县| 西丰县| 婺源县| 灵台县| 万荣县| 麟游县| 辉南县| 简阳市| 白水县| 灵寿县| 鄂尔多斯市| 攀枝花市| 大荔县| 平塘县| 夹江县| 兴宁市| 普宁市| 长汀县| 嘉峪关市| 丰台区| 临城县| 晴隆县|