
一行JAVA代碼如何運(yùn)行起來(lái)?
在程序員的世界中,您將始終聽到“PHP是世界上最好的語(yǔ)言”的嘲笑。但是,在進(jìn)入軟件程序開發(fā)后,您會(huì)發(fā)現(xiàn)即使開發(fā)語(yǔ)言是數(shù)百萬(wàn),最普遍的是Java。我們可以從淘寶技術(shù)的變化中看到一些線索。當(dāng)早期電子商務(wù)開始時(shí),互聯(lián)網(wǎng)當(dāng)時(shí)很簡(jiǎn)單。您可以使用PHP + MySQL + Apache + Linux快速構(gòu)建電子商務(wù)系統(tǒng)。隨著電子商務(wù)平臺(tái)和支付平臺(tái)的改進(jìn),網(wǎng)上購(gòu)物變得更加容易。越來(lái)越多的人使用淘寶購(gòu)物。淘寶的技術(shù)架構(gòu)也開始不斷升級(jí),增加服務(wù)器的數(shù)量,以提高系統(tǒng)可用性。通過(guò)操作和維護(hù)擴(kuò)展資源是一種解決癥狀但不是根本原因的一種方式。最根本的原因是PHP的語(yǔ)言不夠可擴(kuò)展。當(dāng)用戶數(shù)量是十萬(wàn),一百萬(wàn)或一百萬(wàn)時(shí),可以得到支持,但是當(dāng)?shù)巾敹藭r(shí),它將在數(shù)十億或數(shù)十億的時(shí)候展開如何擴(kuò)展。所以淘寶系統(tǒng)開始分離前后一點(diǎn),后端是以Java語(yǔ)言開發(fā)的,而業(yè)務(wù)則逐步遷移。目前,在我們使用的淘寶制度中,在Java中開發(fā)了超過(guò)80的后端程序。可以看出,贏家是最后一次笑。然而,Java語(yǔ)言入門的難度遠(yuǎn)高于PHP和前端的難度,所以今天我們將向您解釋下一行Java代碼運(yùn)行。 Java海報(bào)可以使用此作為Java入門的基礎(chǔ),啟動(dòng)Java開發(fā),并在生活中獲勝。馬路。 Java是一種半解釋語(yǔ)言,而不是解釋語(yǔ)言?? Python&PHP,并編譯語(yǔ)言?C&C ++。解釋語(yǔ)言意味著它可以在客戶端屬于代碼后運(yùn)行并實(shí)時(shí)查看結(jié)果。編譯的語(yǔ)言意味著需要構(gòu)建并編譯到二進(jìn)制文件中以在機(jī)器上運(yùn)行的源代碼。半解釋語(yǔ)言在其中介紹,它編譯了輸入代碼并在編譯后在JVM虛擬機(jī)中運(yùn)行它(注意:JVM虛擬機(jī)在實(shí)際機(jī)器中運(yùn)行)。半解釋語(yǔ)言的優(yōu)勢(shì)在于它可以是跨平臺(tái),編譯一次并執(zhí)行多次。我們使用以下Java程序?qū)ava程序的整個(gè)過(guò)程從編譯解釋到最終執(zhí)行。 JVM有兩種方法運(yùn)行Java程序,即JAR包和類文件。罐裝包裝是一個(gè)高級(jí)方式。所有程序都包裝成JAR包,方便送貨測(cè)試者測(cè)試,操作和維護(hù)人員釋放,其操作邏輯是通過(guò)Java.exe找到Java附帶的GetMainclassName函數(shù)。此函數(shù)獲取JNienv實(shí)例,并調(diào)用JARFileJnienv實(shí)例中的GetMainFest()函數(shù)以獲取MainClass函數(shù)。然后主函數(shù)然后調(diào)用Java.c中的LoadClass方法來(lái)加載主類。類方法是通過(guò)上層進(jìn)行上層并直接在Java.c中呼叫LoadClass方法以通過(guò)主函數(shù)加載類。所以jar運(yùn)行模式本質(zhì)上是類的運(yùn)行模式,因此讓我們側(cè)重于如何加載和運(yùn)行類。以下代碼想要實(shí)現(xiàn)的功能是打印字符代碼。整體代碼如下。我們首先定義一個(gè)類HelloJava,在此類中創(chuàng)建一個(gè)新對(duì)象以打印代碼字符,此對(duì)象調(diào)用類產(chǎn)品.java
整個(gè)代碼的操作有兩個(gè)步驟。第一步是編譯,第二步是運(yùn)行。創(chuàng)建源文件后,Javac可用于編譯.java程序,程序?qū)⒕幾g為.class文件,并且java命令可用于運(yùn)行.class文件。編譯文件具有在代碼中出現(xiàn)的類名和變量名稱和方法引用名稱,以及分別存儲(chǔ)在常量池和方法字節(jié)碼中的類中的每個(gè)方法的字節(jié)碼。在匯編Java程序期間,如果尚未編譯類的依賴類類,則編譯器將首先編譯依賴類,如果依賴類被編譯,則會(huì)被直接引用它。在Java類的操作中,加載和運(yùn)行有兩個(gè)步驟。 .class文件通過(guò)類加載器傳輸?shù)絁VM。 Java中有三種類型的裝載機(jī),從右下角是自定義類加載器userclassloper(負(fù)責(zé)加載自定義類文件),以及應(yīng)用程序類加載程序appclassloper(負(fù)責(zé)加載類路徑指定的jar包和類目錄中的文件)),擴(kuò)展類加載器Exclassloader(負(fù)責(zé)加載Java平臺(tái)中的擴(kuò)展功能的JAR包),啟動(dòng)類加載器BootstrapClassLoader(負(fù)責(zé)在$ java_home中加載JRE / lib / RT.jar中的所有類類) 。當(dāng)appclassloader收到類加載命令時(shí),它不會(huì)首先加載,而是向擴(kuò)展的類加載器加載。同樣,擴(kuò)展的類加載器本身不首先加載類,但將其賦予啟動(dòng)類加載。加載設(shè)備,如果它失敗,則按層將其遞減。所以Java是動(dòng)態(tài)加載類。
返回我們的示例,在編譯Java程序后,我們得到Hellojava.class文件。在終端中,我們輸入javahellojava,系統(tǒng)將啟動(dòng)JVM進(jìn)程。 JVM進(jìn)程從類路徑的路徑查找hellojava.class的文件。二進(jìn)制文件,將hellojava類加載信息加載到運(yùn)行時(shí)數(shù)據(jù)區(qū)域的方法區(qū)域中,找到hellojava的主要功能條目,并執(zhí)行主函數(shù)。主要功能的第一個(gè)命令是ProductProduct = NewProduct(“代碼”),這需要JVM創(chuàng)建產(chǎn)品對(duì)象,但此時(shí)在方法區(qū)域中沒(méi)有產(chǎn)品類信息,因此JVM加載產(chǎn)品類和設(shè)置產(chǎn)品類的類型信息將其放在方法區(qū)域中。加載產(chǎn)品類后,JVM虛擬機(jī)為堆區(qū)域中的新產(chǎn)品實(shí)例分配內(nèi)存并初始化類。打電話在Roduct.PrintName()方法中,JVM根據(jù)產(chǎn)品參考查找產(chǎn)品對(duì)象,根據(jù)產(chǎn)品對(duì)象所持的觸發(fā)器定位在方法區(qū)域中的動(dòng)物類的類型信息方法表,獲取字節(jié)碼地址printName()函數(shù),并運(yùn)行PrintName()函數(shù),打印出“代碼”。在介紹微編譯和執(zhí)行后,讓我們來(lái)看看Meso的執(zhí)行。在將Java引入作為解釋語(yǔ)言時(shí),我們提到JVM是跨平臺(tái)執(zhí)行,即在編譯Java代碼的副本之后,可以在Linux,UNIX,Windows和MacOS等操作系統(tǒng)平臺(tái)上執(zhí)行它。讓我們來(lái)看看它是如何實(shí)現(xiàn)的? Java程序,JVM,JDK和JRE的操作有三種概念。所謂的JVM是JavaVirtual Machine,Java虛擬機(jī),執(zhí)行Java代碼;所謂的JDK是指Javadevelopment Kit,它由Java開發(fā)人員使用;所謂的JRE是javaruntimeenvironment,Java運(yùn)行時(shí)環(huán)境。 JVM屬于JRE,JRE屬于JDK。在安裝JDK的安裝中,存在不同的版本,例如LinuxX86和WindowsX64。只要安裝JDK,JDK就會(huì)區(qū)分操作系統(tǒng)。 JVM在操作系統(tǒng)上運(yùn)行。區(qū)分操作系統(tǒng)的任務(wù)由JDK完成。只要您的計(jì)算機(jī)配備JDK,任何類副碼都將在JVM中運(yùn)行,JVM可以在任何操作系統(tǒng)中運(yùn)行,從而實(shí)現(xiàn)“跨平臺(tái)編譯一次,多次執(zhí)行一次”。在談?wù)撝虚g級(jí)執(zhí)行后,讓我們來(lái)看看宏級(jí)執(zhí)行。當(dāng)我們編程寫Java代碼時(shí),我們將程序編譯為JAR包并通過(guò)JAR包運(yùn)行程序。 jar包代表了功能模塊的實(shí)現(xiàn)。如果jar包具有我們要使用的功能,則可以在程序中引用它。但是,在開發(fā)和實(shí)現(xiàn)業(yè)務(wù)功能時(shí),可以運(yùn)行許多JAR包,并依賴于業(yè)務(wù)功能。如果每個(gè)函數(shù)實(shí)現(xiàn)的JAR包放在自己的JAR包中,則資源和操作效率將非常浪費(fèi)。此時(shí),我們可以將程序包中的所有JAR包取決于單獨(dú)的文件夾中,然后在JAR包中的“meta-Inf”目錄中修改“Manifest.mf”清單文件。在清單文件中,我們指定清單文件的版本,運(yùn)行的主類的名稱,程序依賴于程序所取決于的jar包的類路徑路徑,并且可以在Java時(shí)加載清單文件程序執(zhí)行。
本文詳細(xì)介紹了JVM系統(tǒng)中的一行Java代碼如何運(yùn)行。對(duì)于那些有興趣加入互聯(lián)網(wǎng)行業(yè)并為Java語(yǔ)言的發(fā)展做出貢獻(xiàn)的人來(lái)說(shuō),他們可以深入了解Java代碼在初學(xué)者時(shí)如何運(yùn)行。什么是JDK&JRE&JVM?在采訪中,您可以更容易和平靜地返回面試官的問(wèn)題