結論:dalvik虛擬機器是基於暫存器之上,而jvm虛擬機器基於棧。dalvik虛擬機器的效率會更高。
棧,後進先出,聽起來就很黃的樣子。這裡面有乙個叫做運算元棧的概念。任何對於記憶體的操作都要經過這個運算元棧,儘管這個運算元棧,與變數同在記憶體裡,依然需要先傳遞到運算元棧,然後再由運算元棧進行處理。看圖:
當我們宣告乙個int a = 11; 的時候,虛擬機器需要先將11從變數表,傳遞到運算元棧中,才能夠進行使用。
如果進行乙個簡單的加法,int a = 11;int b = 22;int c = a + b;
基於棧的虛擬機器上位元組碼指令如下所示:
1.load a;
2.load b
3.add
4.storge c
位元組碼很短,但是行數很多。
另外,每次將變數從變數表copy至運算元棧中,都要經過cpu匯流排進行傳輸(雖然都在記憶體裡,但是記憶體之前的資料傳遞還是要走cpu匯流排)。也就是說,load a 一次,先把資料傳至cpu,cpu再將資料放入,資料棧。
1.load a -> cpu -> 資料棧 ,2次
2.load b -> cpu -> 資料棧 ,2次
3.add 從運算元棧中傳遞至cpu 2次 ,add 操作完放回運算元棧,3次
4.storge c 運算元棧 -> cpu -> 資料表,2次。
這個就是基於棧的虛擬機器效率問題,一次加法操作,經過cpu次數9次。
基於暫存器的虛擬機器則沒有運算元棧的概念,暫存器本身就是cpu的一部分用於存放指令,資料和位址,因此暫存器操作一次簡單的加法,只要找到a,找到b,將a和b送入cpu中去進行計算,cpu將計算結果送回暫存器。
只要3次。
而且位元組碼只有一句
1.add a, b, c
可移植性:棧 > 暫存器
棧的操作都是通過運算元棧來完成,而不是直接操作cpu。jvm目標是跨平台,所以選擇了這種比較中庸的辦法。
**量 : 棧 < 暫存器
執行效率: 棧 < 暫存器
為什麼Docker比虛擬機器快?
1.docker有著比虛擬機器更少的抽象層,由於docker不需要hypervisor實現硬體資源虛擬化,執行在docker容器上的程式直接使用的都是實際物理機的硬體資源,因此在cpu 記憶體利用率上docker將會在效率上有明顯優勢。docker容器 虛擬機器 vm 作業系統 與宿主機共享os 宿...
OS學習筆記 四 什麼是虛擬機器
虛擬機器是軟體 對於第一次聽說虛擬機器 virtual machine,vm 的人來說,可能以為還要再花錢買一台計算機,這恐怕是他們最擔心的。所謂虛擬機器,就是在你的計算機上再虛擬出另一台計算機來。這台虛擬出來的計算機,和真正的計算機一樣,可以啟動,可以關閉,還可以安裝作業系統 安裝和執行各種各樣的...
xshell連線不上虛擬機器
一,啟動 service ssh start 如未安裝則sudo apt get install openssh server 安裝完成後service sshd start啟動 檢視是否啟動成功 ps e grep ssh 二,更改ip位址 我試了沒效果 二,關閉防火牆 service iptab...