為什麼java虛擬機器可以幫助程式碼更好地執行

要知道為什麼java虛擬機器比應用程式的本機程式設計給java帶來更多優勢?繼續讀下去!...

您目前是否正在討論是將java用於下一個應用程序,還是使用本機工具包和框架?您想知道java為應用程序提供了哪些優於本機編程的優勢嗎?繼續讀下去!

java-virtual-machine-featured

什麼是本機應用程序(a native application)?

本機應用程序是專門為操作系統(OS)編寫的程序,也可能是為運行該操作系統的特定硬件編寫的程序。它主要是用C/C++等語言編寫的。C/C++源代碼使用編譯器編譯成對象形式,然後通過鏈接所需的庫將其組裝成可執行文件。以這種方式構建的程序將在為其構建的特定硬件和操作系統上運行,但可能無法在其他系統上正常工作。

Preparing a Native Executable

為什麼本機應用程序不能移植?

一個用於編譯的語言,如C/C++,將源代碼語句翻譯成目標語言的機器語言。當您嘗試在不同的CPU上運行此代碼時,程序可能無**常工作(或根本無法工作),因為編譯代碼中的機器語言指令可能不受此CPU支持。

此外,新的操作系統可能與原來的操作系統不同,甚至可能無法將程序文件識別為可執行文件。這是由於不同操作系統(如Windows、Linux、MacOS等)的可執行文件使用不同的文件格式造成的。

可移植性是本機應用程序的一個大問題,僅僅將編譯器升級到下一個版本可能會帶來重大變化。您的代碼可能需要修復才能使用較新的編譯器。因此,用ifdef語句來分離特定於硬件、操作系統或編譯器的解決方法來分散源代碼是很常見的。

以下是BZLib壓縮庫中的一個小代碼段,它演示瞭如何使用ifdef隔離平臺特性:

#ifdef _WIN32# include <windows.h># ifdef **all /* windows.h define **all to char */# undef **all# endif# ifdef BZ_EXPORT# define BZ_API(func) WINAPI func# define BZ_EXTERN extern# else /* import windows dll dynamically */# define BZ_API(func) (WINAPI * func)# define BZ_EXTERN# endif#else# define BZ_API(func) func# define BZ_EXTERN extern#endif

源代碼跨操作系統的可移植性

通過重新編譯C/C++源代碼到新的CPU,可以在一定程度上減輕這種情況。但是,新CPU的操作系統可能不同。而且源代碼可能不經過修改就無法編譯,不管是大的還是小的。即使是操作系統版本的微小更改也可能需要一些源代碼更改。

當你考慮到不同的操作系統如Windows和Linux/UNIX時,可移植性是一個全新的遊戲。除非您使用的工具箱或框架將您與操作系統完全隔離,否則源代碼的可移植性是不可能的。這是因為這些系統之間的操作系統接口完全不同。如果您在代碼最偏遠的角落直接使用任何操作系統原語,那麼您的代碼將無法跨這些不同的操作系統移植。

java有什麼不同?

正是在這種情況下,java提供了一種新的範例,一種構建軟件的新方法。在java中編程時,您的目標是虛擬機。這種機器是作為一個概念存在的,java語言提供了針對這種機器編程的接口。例如,您可以查詢虛擬機的可用內存量、CPU數量、網絡接口等。

Virtual Machine Executing Code

java應用程序是如何構建的?

java語言提供了一個java編譯器,可以將源代碼轉換為目標代碼。然後目標代碼由java虛擬機執行,java虛擬機是一個獨立於編譯器的程序。而操作系統則將java虛擬機視為在該操作系統上運行的另一個程序。

可移植性的負擔現在已經從應用程序程序員轉移到java虛擬機供應商身上。應用程序程序員使用java語言的原語編寫軟件,java虛擬機負責將這些原語翻譯到主機操作系統設施。當新版本的操作系統出現時,供應商有責任更新java虛擬機,使其在新操作系統上正常工作。

Building Java Programs

什麼是java虛擬機的優點(the advantages of the java virtual machine)?

如前所述,java虛擬機為應用程序程序員提供了操作系統和硬件的虛擬視圖。這個虛擬視圖以各種接口和方法的形式出現,用於將應用程序程序員與主機操作系統和底層硬件的差異隔離開來。因此,應用程序程序員可以訪問諸如窗口工具箱、網絡、3D圖形、多cpu等設施,而不必求助於最終使程序不可移植的低級調用。

java程序是用java編譯器編寫和編譯的。生成的目標代碼(稱為字節碼)可以傳輸到運行在不同硬件上的不同主機操作系統,並且應該可以正常運行。

jit編譯器

java虛擬機使用JIT編譯器專門為目標CPU優化字節碼。JIT代表Just-in-Time,指的是JVM應用於字節碼的運行時優化,以使其在當前CPU上更好地運行。

使用Java虛擬機的另一個優點是,它可以為不同的用例應用不同的優化,所有這些優化都使用相同的字節碼。例如,oraclejvm提供了兩個運行字節碼的選項:服務器模式和客戶機模式。服務器模式針對長時間運行的服務器程序進行優化,而客戶機JVM模式針對快速響應時間進行優化,因為它可能在交互模式下使用。

總而言之,本機應用程序是為特定的硬件和操作系統構建的。另一方面,java應用程序遵循一個Build-Once-Run-Anywhere原理,讓JVM運行編譯的字節碼指令。雖然本機應用程序傳統上被認為比java應用程序性能更高,但由於JVM使用了JIT編譯器,這一點可能並不總是正確的。

您是否開發了本機應用程序,並且由於可移植性而不得不轉換為java?反之亦然,因為性能問題?請在下面的評論中告訴我們。

圖片來源:圖片來源Shutterstock.com網站

  • 發表於 2021-03-13 07:13
  • 閱讀 ( 50 )
  • 分類:程式設計

你可能感興趣的文章

原始碼(source code)和位元組碼(bytecode)的區別

...器程式碼之間的中間程式碼。 目錄 1. 概述和主要區別 2. 什麼是原始碼 3. 什麼是位元組碼 4. 原始碼和位元組碼的相似性 5. 並行比較-原始碼與表格式的位元組碼 6. 摘要 什麼是原始碼(source code)? 編寫了一個程式來解決一個計算...

  • 發佈於 2020-10-19 15:49
  • 閲讀 ( 57 )

這就是ios裝置比android裝置使用更少ram的原因

...們已經探討了一些問題,比如哪個移動作業系統更安全,為什麼iOS應用程式通常比Android應用程式更好。但有一點你可能沒有注意到:iOS裝置的RAM通常只有Android裝置的一半(或更少)。為什麼會這樣? ...

  • 發佈於 2021-03-11 20:01
  • 閲讀 ( 47 )

為什麼java虛擬機器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器器可以幫助程式碼更好地執行

在路上保持高效率從來都不是一件容易的事。離開正常的工作場所會帶來全新的分心因素。別介意去探索一個新城市。 ...

  • 發佈於 2021-03-13 08:23
  • 閲讀 ( 41 )

為什麼有些程式語言比其他語言快?

現在有很多程式語言,每種語言都有自己的特點。由於不同的設計選擇和用例,有些比另一些更快或更慢。當然,這種速度(或缺乏速度)通常是有代價的。簡單地說,正是這些差異導致了這些效能變化。 ...

  • 發佈於 2021-03-13 15:07
  • 閲讀 ( 42 )

在mac上執行windows程式的最簡單方法

... 如果上述解決方案都不適用於您,為什麼不以不同的方式解決問題呢?那些已經擁有Windows電腦的人可以簡單地使用遠端控制軟體從Mac**問Windows。 ...

  • 發佈於 2021-03-14 01:03
  • 閲讀 ( 53 )

應該在虛擬機器中嘗試的7大linux作業系統

... 如果Lubuntu本身對你來說不夠輕,為什麼不試試LXLE,Lubuntu額外的壽命延長?LXLE甚至比Lubuntu更輕,非常適合在低規格但支援虛擬化的硬體上作為虛擬機器執行。 ...

  • 發佈於 2021-03-16 11:49
  • 閲讀 ( 52 )

為什麼應該(不應該)雙引導linux的7個原因

... 但為什麼不選擇兩者呢?這裡有五個理由雙重啟動和兩個理由你不應該。 ...

  • 發佈於 2021-03-17 06:05
  • 閲讀 ( 51 )

vmware fusion 11使虛擬機器變得更好

...我們看看VMware Fusion 11提供了什麼,有什麼新功能,以及為什麼要使用它。 ...

  • 發佈於 2021-03-22 23:18
  • 閲讀 ( 47 )

在windows上執行linux應用程式和遊戲的4種方法

...您所需要的只是一臺可以隨時輕鬆訪問的Linux機器,那麼為什麼不考慮使用專用的Linux機器呢? ...

  • 發佈於 2021-03-24 10:20
  • 閲讀 ( 48 )
l3811714255
l3811714255

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦