程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中應用synchronized症結字完成簡略同步操作示例

Java中應用synchronized症結字完成簡略同步操作示例

編輯:關於JAVA

Java中應用synchronized症結字完成簡略同步操作示例。本站提示廣大學習愛好者:(Java中應用synchronized症結字完成簡略同步操作示例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中應用synchronized症結字完成簡略同步操作示例正文


在運轉任何代碼之前,Lua都邑把源代碼翻譯(預編譯)成一種外部的格局。這類格局是一個虛擬機指令序列,與真實的CPU所履行的機械碼相似。以後,這個外部格局將會被由一個包括偉大的switch構造的while輪回構成的C代碼說明履行,switch中的每一個case對應一條指令。

能夠你曾經在別處懂得到,從5.0版開端,Lua應用一種基於存放器的虛擬機。這裡所說的虛擬機“存放器”與真實的CPU存放器其實不雷同,由於後者難於移植,並且數目異常無限。Lua應用一個棧(經由過程一個數組和若干索引來完成)來供給存放器。每一個運動的函數都有一個激活記載,也就是棧上的一個可供該函數存儲存放器的片斷。是以,每一個函數都有本身的存放器[1]。一個函數可使用最多250個存放器,由於每一個指令只要8位用於援用一個存放器。

因為存放器數量浩瀚,是以Lua預編譯器可以把一切的部分變量都保留在存放器裡。如許帶來的利益是,拜訪部分變量會異常快。例如,假如a和b是部分變量,語句

a = a + b

將只會生成一個指令:

ADD 0 0 1

(假定a和b在存放器裡分離對應0和1)。作為比較,假如a和b都是全局變量,那末這段代碼將會釀成:

GETGLOBAL 0 0 ; a
GETGLOBAL 1 1 ; b
ADD 0 0 1
SETGLOBAL 0 0 ; a

是以,可以很簡略地得出在Lua編程時最主要的機能優化方法:應用部分變量!

假如你想壓搾法式的機能,有許多處所都可使用這個辦法。例如,假如你要在一個很長的輪回裡挪用一個函數,可以事後將這個函數賦值給一個部分變量。好比說以下代碼:

for i = 1, 1000000 do
    local x = math.sin(i)
end

比上面這段要慢30%:

local sin = math.sin
for i = 1, 1000000 do
    local x = sin(i)
end

拜訪內部部分變量(或許說,函數的上值)沒有直接拜訪部分變量那末快,但仍然比拜訪全局變量要快一些。例以下面的代碼片斷:


function foo (x)
    for i = 1, 1000000 do
        x = x + math.sin(i)
    end
    return x
end

print(foo(10))

可以優化為在foo外聲明一次sin:


local sin = math.sin
function foo (x)
    for i = 1, 1000000 do
        x = x + sin(i)
    end
    return x
end

print(foo(10))

第二段代碼比前者要快30%。

雖然比起其他說話的編譯器來講,Lua的編譯器異常高效,然則編譯仍然是重膂力活。是以,應當盡量防止運轉時的編譯(例如應用loadstring函數),除非你真的須要有如斯靜態請求的代碼,例如由用戶輸出的代碼。只要很少的情形下才須要靜態編譯代碼。

例如,上面的代碼創立一個包括前往常數值1到100000的若干個函數的表:


local lim = 10000
local a = {}
for i = 1, lim do
    a[i] = loadstring(string.format("return %d", i))
end

print(a[10]()) --> 10

履行這段代碼須要1.4秒。

經由過程應用閉包,我們可以免應用靜態編譯。上面的代碼只須要非常之一的時光完成雷同的任務:

function fk (k)
    return function () return k end
end

local lim = 100000
local a = {}
for i = 1, lim do a[i] = fk(i) end

print(a[10]()) --> 10

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved