為什麼Java平台獨立語言?

已發表: 2021-02-08

目錄

介紹

Java 自誕生以來就在所有其他編程語言中廣受歡迎。 如此巨大反應的原因是提供獨特功能的能力。 Java 語法與 c++ 幾乎相似,但提供的功能遠遠超過 c++。

面向對象編程 (OOP) 的可用性使 java 在當時所有其他語言中脫穎而出。 Java 的開發以 OOP 為核心,這也是成為最常用語言的原因之一。 這個概念增加了可重用性,無縫執行。 這時,我們的腦海中可能會出現一個問題“我們為什麼要使用一個對象?”。

Java 中的對像類似於 c 語言中的結構,我們將相似的方法和變量綁定在一起。 除此之外,Java 還提供抽象、封裝、繼承和多態性,鼓勵用戶實現對象。

Java 在應用程序開發、Web 開發、構建軟件工具等許多領域都發揮著主導作用。 它還具有豐富的庫,使事情變得更容易。 此外,IDE 的可用性在吸引開發人員的注意力方面起著至關重要的作用。 許多開發人員經常使用 Eclipse、IntelliJ、NetBeans 等 IDE。

好的,現在讓我們進入我們的討論。

但首先,平台獨立性是什麼意思? 為了得到這個問題的答案,我們需要知道編譯代碼時會發生什麼。

編譯代碼

每當我們編寫代碼時,我們都遵循編程語言的語法,這將具有相當多的可讀性。 它包含很少的單詞、短語、變量名、方法名等。所有這些都被認為是人類可讀和人類可以理解的文本。

因此機器使用編譯器將源代碼轉換為機器可讀的代碼,也稱為機器級語言。 編譯器在特定表示中構建機器級代碼,以便 CPU 可以輕鬆理解並無縫執行它。

這種機器級語言的構建因每種編程語言和每種操作系統而異。 例如,如果兩台機器運行在不同的操作系統上,c/c++ 會生成一個不同的 .exe 文件。

這裡出現了問題!

當每個操作系統的機器級語言不同時,我們就不能在新機器上運行在不同機器上編譯的代碼,除非兩個系統都在同一個操作系統上運行。 對於許多程序員和開發人員來說,這感覺像是廢話。

但是 Java 使事情變得更容易,而 Java 對此有一個解決方案。 讓我們開始吧。

Java 獨立於平台

那麼當我們在java中編譯代碼時會發生什麼呢?

每當我們輸入“javac filename.java”語句或在java中編譯代碼時,javac都會編譯代碼。 它創建了一個稱為字節碼的中間代碼。

這就是java在所有不同編程語言之間產生差異的地方。 它創建一個 .class 文件,該文件被視為字節碼。 而像 c/c++ 這樣的語言在編譯時會創建一個本機可執行代碼,從而使它們依賴於平台。

等等,現在慶祝還為時過早。 該字節碼不可執行。 我們需要一個翻譯器來執行這個字節碼。 JVM 完成了這項工作。 通常,JVM 駐留在我們計算機的主內存中。 Java 虛擬機充當解釋器,然後執行 javac 生成的字節碼。

現在我們完成了,我們的代碼成功執行。

那麼java將如何單獨管理它呢?

答案是,這是因為 JVM。 源代碼編譯生成的字節碼可以在任何操作系統中運行,但是機器中存在的 JVM 對於每個操作系統都不同。 這就是 java 被認為是一種獨立於平台的編程語言的原因。

為了正確理解它,讓我們了解一下 JVM 的架構和工作原理。

JVM架構

JVM 是 java 運行時環境的一部分,負責將 .java 文件轉換為 .class 文件。 當我們編譯 java 代碼時,JVM 會調用源代碼中的 main 方法。

JVM架構

類加載器

它是java虛擬機中的一個子系統。 它加載 .class 文件,檢查是否有任何異常,這是運行時異常很少的原因。 在檢查它為變量和存在的方法分配內存後,為變量和數組分配默認值。 它還執行代碼中存在的靜態方法或變量。

JVMm中內置了3個類加載器,引導類加載器,擴展類加載器,應用類加載器。

JVM 中的內存區域

方法/類區

它存儲類名、方法名、變量等信息。 它是一個類中所有方法和變量的共享資源。

它存儲了堆區域中存儲的所有數據的信息。

JVM 語言棧

它將信息存儲在也稱為堆棧幀/幀的塊中,當有函數調用時存儲當前信息,存儲局部變量,它還在線程管理中起主導作用。

電腦寄存器

它存儲當前正在執行的指令的地址。 它在多線程執行情況下很有用。

本機方法堆棧

它存儲使用的本機方法的所有信息。

執行引擎

執行引擎將執行字節碼,並將分配的內存刪除給無法訪問或未引用的對象。 執行引擎中的解釋器將通過在流中讀取字節碼並逐行解釋來執行字節碼。

它還有一個令人興奮的部分,稱為 JIT 編譯器(Just In Time Compiler),它為方法創建一個本機可執行代碼,因此如果有多個函數調用,那麼 JVM 不需要再次解釋它,而是直接使用本機可執行代碼。 因此,它提高了執行性能。

本機方法接口

這個接口被 java 用於與用不同語言(如 C/C++)實現的應用程序交互。 交互是雙向的,JVM 可以調用這些應用程序,也可以由這些應用程序調用。

本機方法庫

它跟踪可能由執行引擎使用的本地語言庫。

現在我們已經了解了 JVM 的架構,讓我們回到我們的討論。 所以這個 JVM 對於不同的操作系統是不同的,但是這些 JVM 生成的輸出對於提供的相同字節碼是相同的。

另請閱讀: Java 項目理念和主題

從世界頂級大學在線學習軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

結論

我們已經了解了 java 的一些獨特功能,了解了當我們用 C/C++ 等語言編譯代碼時會發生什麼,了解本機可執行代碼和字節碼之間的區別。 我們已經解釋了為什麼 java 被認為是一種平台獨立的語言,明白 JVM 是 java 平台獨立背後的原因。 為了更好地理解,我們查看了 JVM 架構。

既然您已經了解了 java 獨立於平台的原因,那麼探索 java 的其他獨特功能並開始使用它們吧!

如果您有興趣了解有關 Java 全棧軟件開發的更多信息,請查看 upGrad 和 IIIT-B 的全棧軟件開發執行 PG 計劃,該計劃專為工作專業人士設計,提供 500 多個小時的嚴格培訓,9+項目和任務、IIIT-B 校友身份、實用的實踐頂點項目和頂級公司的工作協助。

Java相對於其他語言的優勢是什麼?

與其他語言相比,Java 有許多優點。 讓我們從最大的優勢開始,Java 是獨立於平台的。 Java 代碼可以在任何硬件平台、操作系統和瀏覽器上運行。 它可以在任何設備上運行。 這意味著一旦您用 Java 編寫了應用程序,您就可以在任何設備上運行它。 就這麼簡單! 此外,一旦您編寫了代碼,就很容易調試和修復錯誤。 最後,Java 是面向對象的。 這意味著您需要使用更小的程序和代碼。 這將使您的代碼更易於使用。 如果需要進行任何修改,代碼就不容易出錯。 它具有多線程、內存管理、平台無關、安全、虛擬機(即字節碼)、收集框架、垃圾收集器、分層架構等功能。

為什麼Java平台獨立?

Java 是獨立於平台的,因為它使用虛擬機。 Java 編程語言和所有 API 都被編譯成字節碼。 字節碼實際上是獨立於平台的。 虛擬機負責處理不同平台的字節碼之間的差異。 因此,Java 的運行時要求非常小。 Java 虛擬機負責所有與硬件相關的問題,因此無需為不同的硬件編譯代碼。

什麼是 Java 中的自動垃圾回收?

自動垃圾收集是一種垃圾收集技術,其中垃圾收集器自動運行,無需程序員為其編寫代碼。 在 Java 中,垃圾收集是通過將 Java 虛擬機置於特殊模式來完成的。 垃圾收集器會在它看到機會時運行。 一些垃圾收集器使用 stop-the-world 方法,Java 虛擬機必須停止執行程序才能進行垃圾收集。 垃圾收集不是一個簡單的概念,但一旦你得到它,就沒有回頭路了。 而 Java 的垃圾收集是最容易理解的一種。