jdk中的哪些源碼是必看的 java虛擬機(jī)是用什么語言編寫的?它的原理誰能通俗的講出來嗎?
java虛擬機(jī)是用什么語言編寫的?它的原理誰能通俗的講出來嗎?Java虛擬機(jī)的功能是執(zhí)行Java字節(jié)碼,其編碼實(shí)現(xiàn)是一個(gè)死循環(huán)。每個(gè)循環(huán)都是獲取字節(jié)碼并執(zhí)行字節(jié)碼的過程,因此與其他程序沒有本質(zhì)區(qū)別。主
java虛擬機(jī)是用什么語言編寫的?它的原理誰能通俗的講出來嗎?
Java虛擬機(jī)的功能是執(zhí)行Java字節(jié)碼,其編碼實(shí)現(xiàn)是一個(gè)死循環(huán)。每個(gè)循環(huán)都是獲取字節(jié)碼并執(zhí)行字節(jié)碼的過程,因此與其他程序沒有本質(zhì)區(qū)別。主流的JavaVM大多是用C語言實(shí)現(xiàn)的,然后用匯編語言輔助實(shí)現(xiàn),用Java實(shí)現(xiàn)JavaVM的情況有一些,但不多。
下面是使用C語言在智能設(shè)備中實(shí)現(xiàn)虛擬機(jī)的一個(gè)片段。
此代碼是短加法字節(jié)碼的實(shí)現(xiàn)。
這段代碼只是獲取字節(jié)碼并執(zhí)行它。你認(rèn)為JavaVM就是這樣嗎。
為了優(yōu)化虛擬機(jī)的效率,很多人選擇用匯編的方式重寫執(zhí)行頻率高的代碼。
小結(jié)是C語言實(shí)現(xiàn)的許多,將與匯編結(jié)合起來作為輔助工具。有其他語言,但不是主流。
寫JAVA后端代碼時(shí)邏輯混亂怎么辦?
后端代碼的復(fù)雜性通過分割和裁決來解決。首先,通過拆分項(xiàng)目,項(xiàng)目之間可以存在依賴關(guān)系,但必須是單向依賴而不是環(huán)依賴。如果存在環(huán),我們必須考慮將環(huán)依賴分解為單獨(dú)的項(xiàng)目來解決環(huán)依賴。
對于項(xiàng)目中的代碼,可以通過水平拆分和垂直拆分來降低復(fù)雜性。水平層分為控制器、服務(wù)、Dao和sqlmap,垂直層分為系統(tǒng)、biz1、biz2、Bizn,但在數(shù)據(jù)通暢連接中,水平拆分和垂直拆分相結(jié)合,如下圖所示:
通過這種分層方式,代碼層是分開的,結(jié)構(gòu)清晰。對于一些跨模塊調(diào)用的接口,如同一個(gè)數(shù)據(jù)表需要在不同的模塊中操作時(shí),可以將該接口作為公共接口升級到上層cxmodule,對于一些可重用的、相對獨(dú)立的功能,可以在cxmodule中定義一個(gè)干凈的接口,業(yè)務(wù)邏輯可以通過在模塊的功能模塊中實(shí)現(xiàn)接口來實(shí)現(xiàn),而不需要使用spring的事務(wù)管理機(jī)制,從而降低代碼的復(fù)雜度。
用C#、C 、Java能編寫出Adobe等級的行業(yè)軟件嗎?
Adobe軟件工具的核心是算法,它可以在所有三種語言中很好地實(shí)現(xiàn)。
上世紀(jì)90年代初,我做了一個(gè)骨折圖像處理的基金項(xiàng)目,它有很多類似adobe的功能。當(dāng)時(shí),還沒有用C語言編寫的CSharp、Java語言或Adobe軟件,更不用說這些面向?qū)ο蟮恼Z言了。
用C語言編寫,相當(dāng)于手工制作。擦除一行需要逐位對每個(gè)點(diǎn)進(jìn)行異或處理。與C#不同,可以刪除對象。對于圖像去噪、去毛刺、二值化和特征提取,需要編寫相應(yīng)的算法。例如插值算法用于邊緣增強(qiáng)和平滑,圓形鄰域法用于模式匹配,現(xiàn)在很多算法都有函數(shù)庫,可以通過接口調(diào)用函數(shù)庫。它簡單得多,使用C#、C和Java就足夠了。