熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

深入探索Java工作原理:JVM,內存回收及其他

2013-11-23 19:22:19  來源: Java核心技術 

  Java語言引入了Java虛擬機具有跨平台運行的功能能夠很好地適應各種Web應用同時為了提高Java語言的性能和健壯性還引入了如垃圾回收機制等新功能通過這些改進讓Java具有其獨特的工作原理

  .Java虛擬機

  Java虛擬機(Java Virtual MachineJVM)是軟件模擬的計算機它可以在任何處理器上(無論是在計算機中還是在其他電子設備中)安全兼容地執行保存在class文件中的字節碼Java虛擬機的機器碼保存在class文件中有時也可以稱之為字節碼文件

  Java程序的跨平台特性主要是指字節碼文件可以在任何具有Java虛擬機的計算機或者電子設備上運行Java虛擬機中的Java解釋器負責將字節碼文件解釋成為特定的機器碼進行運行因此在運行時Java源程序需要通過編譯器編譯成為class文件

  Java虛擬機的建立需要針對不同的軟硬件平台來實現既要考慮處理器的型號也要考慮操作系統的種類由此在SPARC結構X結構MIPS和PPC等嵌入式處理芯片上在UNIXLinuxWindows和部分實時操作系統上都可實現Java虛擬機

  .無用內存自動回收機制

  在程序的執行過程中部分內存在使用過後就處於廢棄狀態如果不及時進行回收很有可能會導致內存洩漏進而引發系統崩潰在C++語言中是由程序員進行內存回收的程序員需要在編寫程序時把不再使用的對象內存釋放掉這種人為管理內存釋放的方法往往由於程序員的疏忽而致使內存無法回收同時也增加了程序員的工作量而在Java運行環境中始終存在著一個系統級的線程專門跟蹤內存的使用情況定期檢測出不再使用的內存並自動進行回收避免了內存的洩露也減輕了程序員的工作量

  .代碼安全性檢查機制

  安全和方便總是相對矛盾的Java編程語言的出現使得客戶端計算機可以方便地從網絡上上傳或下載Java程序到本地計算機上運行但是如何保證該Java程序不攜帶病毒或者沒有其他危險目的呢?為了確保Java程序執行的安全性Java語言通過Applet程序來控制非法程序的安全性也就是有了它才確保Java語言的生存

  Java字節碼的執行需要經過以下個步驟

  ()由類裝載器(class loader)負責把類文件(class文件)加載到Java虛擬機中在此過程需要檢驗該類文件是否符合類文件規范

  ()字節碼校驗器(bytecode verifier)檢查該類文件的代碼中是否存在著某些非法操作例如Applet程序中寫本地計算機文件系統的操作

  ()如果字節碼校驗器檢驗通過由Java解釋器負責把該類文件解釋成為機器碼進行執行

  注意

  Java虛擬機采用沙箱運行模式即把Java程序的代碼和數據都限制在一定內存空間裡執行不允許程序訪問該內存空間以外的內存如果是Applet程序還不允許訪問客戶端機器的文件系統

  Java的運行環境

  無論哪種語言都需要有它特定的運行環境也就是平台Java語言同樣不例外但是如何理解Java程序與硬件環境無關呢?

  幾乎所有的語言都需要通過編譯或者解釋才可以被計算機執行但是Java有一點不同它同時需要這兩個過程其實也正是因為這個原因才使Java這種語言具有了平台無關性當完成一個Java源程序後首先通過Java翻譯程序將它編譯成一種叫做字節碼的中間代碼然後再由Java平台的解釋器將它轉換成為機器語言來執行這一平台的核心就是JVM

  Java的編譯過程與其他的語言不同像C++這樣的語言在編譯時它是與計算機的硬件平台信息密不可分的編譯程序通過查表將所有指令的操作數和操作碼等轉換成內存的偏移量即程序運行時的內存分配方式目的是保證程序正常運行而Java卻是將指令轉換成為一種class的文件這種文件不包含硬件的信息需要執行時只要經過安裝有JVM的機器進行解釋創建內存分配後再通過查表來確定一條指令所在的地址這樣就有效地保證了Java的可移植性和安全性

  Java平台具有這樣的特性和它的結構有關通常一個程序運行的平台是一個硬件或者軟件運行的環境目前比較流行的是Windows XPLinuxSolaris和MacOSJava的平台不太一樣它由兩個部分組成即JVM和應用程序設計接口

  .JVM

  JVM是Java平台的核心為了讓編譯產生的字節碼能更好地解釋與執行因此把JVM分成了個部分JVM解釋器指令系統寄存器存儲區和碎片回收區

  ◆JVM解釋器即這個虛擬機處理字段碼的CPU

  ◆JVM指令系統該系統與計算機很相似一條指令由操作碼和操作數兩部分組成操作碼為位二進制數主要是為了說明一條指令的功能操作數可以根據需要而定JVM有多達種不同的操作指令

  ◆寄存器JVM有自己的虛擬寄存器這樣就可以快速地與JVM的解釋器進行數據交換為了功能的需要JVM設置了個常用的位寄存器pc(程序計數器)optop(操作數棧頂指針)frame(當前執行環境指針)和vars(指向當前執行環境中第一個局部變量的指針)

  ◆JVM棧指令執行時數據和信息存儲的場所和控制中心它提供給JVM解釋器運算所需要的信息

  ◆存儲區JVM存儲區用於存儲編譯過後的字節碼等信息

  ◆碎片回收區JVM碎片回收是指將使用過的Java類的具體實例從內存進行回收這就使得開發人員免去了自己編程控制內存的麻煩和危險隨著JVM的不斷升級其碎片回收的技術和算法也更加合理JVM 版後產生了一種叫分代收集技術簡單來說就是利用對象在程序中生存的時間劃分成代以此為標准進行碎片回收

  .Java應用程序設計接口

  Java Application Programming Interface簡稱Java API其中文名為Java應用程序設計接口它是一個軟件集合其中有許多開發時所需要的控件可以用它來輔助開發

  Java API和JVM構成了Java運行的基本環境這兩種軟件整合在一起處於計算機之上通過這兩種軟件Java平台把一個Java應用程序從硬件系統分離開從而很好地保證了程序的獨立性為了更好地適應開發的需要Java的設計者們提供了種版本的Java平台Java Micro Edition (JME )Java Standard Edition(JSE)和 Java Enterprise Edition (JEE)每一種版本都提供了豐富的開發工具以適應不同的開發需要


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26733.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.