跨平台性 面向對象 安全性 多線程 簡單易用
Java語言的主要特點:
1. 跨平台性
所謂的跨平台性,是指軟件可以不受計算機硬件和操作系統的約束而在任意計算機環境下正常運行。這是軟件發展的趨勢和編程人員追求的目標。之所以這樣說,是因為計算機硬件的種類繁多,操作系統也各不相同,不同的用戶和公司有自己不同的計算機環境偏好,而軟件為了能在這些不同的環境里正常運行,就需要獨立於這些平台。
而在Java語言中, Java自帶的虛擬機很好地實現了跨平台性。 Java源程序代碼經過編譯后生成二進制的字節碼是與平台無關的,但是可被Java虛擬機識別的一種機器碼指令。 Java虛擬機提供了一個字節碼到底層硬件平台及操作系統的屏障,使得Java語言具備跨平台性。
2. 面向對象
面向對象是指以對象為基本粒度,其下包含屬性和方法。對象的說明用屬性表達,而通過使用方法來操作這個對象。面向對象技術使得應用程序的開發變得簡單易用,節省代碼。Java是一種面向對象的語言,也繼承了面向對象的諸多好處,如代碼擴展、代碼復用等。
3. 安全性
安全性可以分為四個層面,即語言級安全性、編譯時安全性、運行時安全性、可執行代碼安全性。語言級安全性指Java的數據結構是完整的對象,這些封裝過的數據類型具有安全性。編譯時要進行Java語言和語義的檢查,保證每個變量對應一個相應的值,編譯后生成Java類。運行時Java類需要類加載器載入,並經由字節碼校驗器校驗之后才可以運行。 Java類在網絡上使用時,對它的權限進行了設置,保證了被訪問用戶的安全性。
4. 多線程
多線程在操作系統中已得到了最成功的應用。多線程是指允許一個應用程序同時存在兩個或兩個以上的線程,用於支持事務並發和多任務處理。 Java除了內置的多線程技術之外,還定義了一些類、方法等來建立和管理用戶定義的多線程。
5. 簡單易用
Java源代碼的書寫不拘泥於特定的環境,可以用記事本、文本編輯器等編輯軟件來實現,然后將源文件進行編譯,編譯通過后可直接運行,通過調試則可得到想要的結果。
---------------------------------------
JAVA語言實現機制
轉自https://www.cnblogs.com/skylife/p/7762120.html
Java語言實現機制
1.Java虛擬機(Java Virtual Machine)
Java虛擬機(JVM)是在一台計算機上由軟件模擬也可以用硬件來實現的假想的計算機。它定義了指令集(相當於中央處理器CPU)、寄存器集、類文件結構棧、垃圾收集堆、內存區域。
首先,Java編譯器在獲取Java應用程序的源代碼后,把它編譯成符合Java虛擬機規范的字節碼(byte code)的class文件,class文件是JVM中可執行文件的格式。Java編譯器針對Java虛擬機產生的class文件,Java虛擬機規范為不同的硬件平台提供了不同的編譯代碼規范,該規范使Java軟件獨立於平台。然后,Java解釋器負責將Java字節碼文件解釋執行,邊解釋邊執行,這樣,運行速度受到一定影響。為了提高運行速度,java提供了另一種解釋運行的方法JIT(Just In Time),可以一次解釋完,再運行特定平台上的機器碼,這樣就實現了跨平台、可移植的功能。
在Java的運行環境中,每個Java解釋器,不管他是Java開發工具,還是可運行的applets的web瀏覽器,都可以執行Java虛擬機。字節碼的運行要經過下面三個步驟:
(1)加載代碼:由Class Loader完成。
(2)校驗代碼:由Bytecode Verifier完成。
(3)執行代碼:由Runtime Interpreter完成。
部分校驗過的字節碼被編譯成原始機器碼並直接運行於硬件平台。這就使Java軟件代碼能夠以與C或C++接近的速度運行,只是在加載時,因為要編譯成原始機器碼而略有延遲。
構成Java軟件程序的字節碼在運行時被加載、校驗並在解釋器中運行。當運行applets時,字節碼可被下載,然后由建於瀏覽器中的JVM進行解釋。解釋器具備兩種功能,一是執行字節碼,二是對底層硬件平台做適當調用。
Java虛擬機提供了編譯代碼的規范,它要求代碼的格式由字節碼構成,由JVM字節碼編寫的程序必須保持適當的類型約束。對這種類型約束的檢查,大部分是在編譯時完成的。
Java虛擬機也提供了硬件平台規范,它能夠解讀獨立於平台的已編譯好的字節碼文件,每個由Sun批准的Java虛擬機規范中有所指定的類文件格式,如:每個文件都包含最多一個public類。
Java虛擬機執行過程有三個典型特點:
(1)多線程:Java虛擬機支持多個線程的同時運行,這些線程獨立的執行Java代碼,處理公共數據區和私有棧中的數據。
(2)動態連接:Java程序之所以適合在網絡上運行,其主要原因是由於Java虛擬機具有動態連接特性。
(3)異常處理:Java虛擬機提供了可靠的異常處理。
2.Java垃圾回收機制(Garbage Collection)
Java語言中任何事物都封裝在類中,每個類都會創建一個或多個實例對象,每個對象都有生命周期,我們需要時就去創建、調用它,不用時就應清楚它(稍后再用)。這種動態的實例對象是被存放在內存堆(Memory Heap)中的,隨着科技的發展,我們可以不斷更新
擴展硬件設施,但任何存儲介質都是有極限的,那么內存也不異常,對於不再使用的對象,我們應該將其清除,從而釋放資源。許多編程語言都允許在程序運行時動態分配存儲器,分配存儲器的過程由於語言句法的不同而不同,當不再需要分配存儲器或存儲器指針溢
出范圍時,程序或運行環境應停止繼續分配存儲器,進行內存回收,但如何進行內存回收卻是一件很困難很復雜的事情,在C、C++或其他語言中,程序員負責回收已分配的內存。由於存儲器是動態分配的,通常我們無法准確判斷存儲器應在何時被釋放。這就為程序運
行留下隱患,當系統運行中沒有能夠被分配的存儲器時,就會導致程序癱瘓。Java語言解除了程序員釋放已分配存儲器的責任,是通過提供一個系統級線程對內存使用進行跟蹤實現的,由於Java是單根結構,任何一個類都直接或間接地繼承於java.lang.Object類,所
以系統級線程可以跟蹤每一次存儲器的分配情況,並且可以逐級回溯,定期檢測出不再使用的內存,在系統空閑時自動進行回收。垃圾收集是在Java程序的生命周期中自動進行的,我們無法判斷垃圾回收線程何時啟動,要執行多長時間,這使得程序在運行期間出現一
種不連貫的狀態,並且在一定程度上降低了程序的運行效率,但這個代價還是值得的。
3.代碼安全性檢測(Code Security)
Java的安全性的考慮最初來源於Java Applet,由於它可以被輕易的下載到web瀏覽器上運行,改變了以往傳統模式下桌面計算機系統的應用軟件的更新方式,這種移動代碼可以經Internet的web瀏覽器自動下載和更新,在享受便捷快速的技術更新的同時也帶來了安全
隱患。Java v1.0采用了沙箱(sandbox)安全模型,它的主要思想是像applet這樣通過遠程下載的代碼只能受限的訪問系統資源,如不能訪問本地文件、不能建立新的網絡連接等,它們的行為受限於沙箱之中。由於這個模型約束太多,大大削弱了移動代碼的優勢。在
Java v1.1中采用了信任安全模型,其主要思想是使用戶可以有選擇的授權給遠程代碼,如果遠程某地資源可以被信任,那么帶有此地簽名的代碼將被授權可以訪問本地的資源系統,其他不被信任的代碼仍受限於沙箱內。Java2平台則采用了域管理方式的安全模型,無
論是本地代碼還是遠程代碼都可以通過配置的策略,設定可訪問的資源域,這種策略更好的支持了企業級的應用,同時也消除了區分本地代碼和遠程代碼帶來的困難。上面已經講過字節碼需要進行校驗,實際上Java代碼再運行之前要經過幾次檢驗,大都是從安全角度
考慮,JVM將代碼輸入一個字節碼校驗器以測試代碼段格式並進行規則檢查,檢查偽造指針、違反對象訪問權限或試圖改變對象類型的非法代碼、對象域訪問是否合法等。在運行時還要進行字節碼校驗,主要判斷字節碼是否符合JVM規范,是否破壞系統完整性,是否
引起操作數堆棧上溢或下溢,代碼的參數類型是否准確,有無非法數據轉換,有無訪問限制違例等。