1. 程式人生 > 其它 >淺析Nuxt.js主要作用、應用架構(5步)及其模式選擇介紹-SPA路由請求執行流程、Universal模式(SSR渲染執行流程路由請求流程、SSG渲染、SSR與SSG對比)

淺析Nuxt.js主要作用、應用架構(5步)及其模式選擇介紹-SPA路由請求執行流程、Universal模式(SSR渲染執行流程路由請求流程、SSG渲染、SSR與SSG對比)

一、背景

  《Java虛擬機器規範》嘗試定義一種Java記憶體模型(Java Memory Model)來遮蔽各種硬體和作業系統訪問記憶體的差異,在不同平臺訪問記憶體方式一致。

二、記憶體模型

  Java記憶體模型就是定義訪問各種變數的規則,也就是說關注Java虛擬機器想記憶體儲存變數和從記憶體讀取變數的細節。

  1. 主記憶體和工作記憶體

  Java記憶體模型規定所有的變數儲存在主記憶體中(Main Memory)(這裡的主記憶體不是物理上的記憶體,Java記憶體模型指的主記憶體是Java虛擬機器記憶體的一部分,可以類比成實體記憶體),執行緒有自己的工作記憶體(Working Memory)(工作記憶體可以類比為快取記憶體),執行緒的工作記憶體儲存了該執行緒使用變數的主記憶體的副本,執行緒對變數的所有操作(讀取、賦值)都是在工作記憶體進行的。執行緒是不如許直接讀取主記憶體變數資料的。

  執行緒的工作記憶體是執行緒私有的,不同執行緒間是不能訪問對方執行緒工作記憶體的變數的。執行緒之間的變數資料傳遞是通過主記憶體完成的。不同執行緒讀寫主記憶體變數資料涉及到執行緒安全問題。

  2. 記憶體間互動協議

  記憶體間互動是指主記憶體和工作記憶體間的互動,即變數在主記憶體的值拷貝到工作記憶體,再將變數的值從工作記憶體同步到回記憶體變數上的過程。Java虛擬機器通過一下步驟完成記憶體互動,並且Java虛擬機器保證以下操作都是原子的、不可再分的。

  • lock(鎖定):作用於主記憶體的變數,它將主記憶體變數標識為被一條執行緒鎖定狀態。
  • unlock(解鎖):作用於主記憶體的變數,它將被一條執行緒鎖定狀態的主記憶體變數釋放出來,釋放出來的主記憶體變數才能被其他執行緒鎖定。
  • read(讀取):作用於主記憶體的變數,它將主記憶體變數的值傳輸到工作記憶體中,以便後續的load操作。
  • load(載入):作用於工作記憶體的變數,它將主記憶體read的變數的值放入到工作記憶體的變數中。
  • use(使用):作用於工作記憶體的變數,它將工作記憶體變數的值傳遞給Java虛擬機器的執行引擎,每當執行引擎遇到使用工作記憶體的變數的位元組碼指令時執行此操作。
  • assign(賦值):作用於工作記憶體的變數,它從執行引擎中接受的值賦值給工作記憶體的變數上,每當執行引擎遇到將值賦值給工作記憶體的變數的位元組碼指令時執行此操作。
  • store(儲存):作用於工作記憶體的變數,它將工作記憶體變數的值傳送給主記憶體中,以便後續的write操作。
  • write(寫入):作用於主記憶體的變數,它將工作記憶體store的變數的值放入到主記憶體的變數上。