日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java需要掌握的底层知识_java程序员需要知道的底层知识(一)

發布時間:2023/12/15 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java需要掌握的底层知识_java程序员需要知道的底层知识(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先給自己一個介紹,本人是一個蠢笨蠢笨的女程序員,由于有一天突然覺悟了,想在學習的過程中寫一些筆記,以前一直不敢開始這個事情,因為我害怕寫錯了,誤導了別人,現在還是害怕,如果真的誤導了同行,你們也輕點噴我 哈哈哈

接下來進入正題,今天來記錄一下我自己學到的東西,Java相關的硬件知識,說到這個我們先談談計算機的最重要的組成部分,跟我們寫程序聯系比較緊密的部分:

先來看看計算機的組成,如下圖:

一、cpu(計算機的重要組成部分)

cpu是計算機的核心組成部分,功能主要是解釋計算機指令以及處理計算機軟件中的數據,cpu中有一個重要的部件,就是時鐘發生器,他就像人的心臟,推動著cpu進行一步一步的計算,比如我計算3+2需要多少步驟,通過時鐘發生器不斷的通電斷電給cpu信號,推動cpu進行計算(比較粗略的理解)

PC:Program Counter 程序計數器(每個線程私有) 記錄當前指令的地址

Registers: 寄存器 暫時存儲cpu計算需要用到的數據

ALU:Arithmetic & Login Unit 邏輯運算單元

ALU邏輯運算單元,當一個線程獲得執行時間片開始執行,需要進行運算的時候,那么ALU從寄存器中取出某個線程的數據來進行運算,

此處有一個知識點,就是現在說的超線程,比如兩核四線程、四核八線程,是怎么實現的,比如原來的單核單線程,就是一個cpu的一個核里面只有一組PC(程序計數器)和Registers(寄存器),當一個線程獲得執行時間片時,需要將前一個線程的數據先保存起來,再將自己的數據放入PC和Registers,而超線程的實現,就是cpu的一個核里面有兩組PC和Registers,當其中的一個線程獲得執行的時間片之后,ALU可以直接去該線程對應的PC和Registers取得數據,節省線程切換的消耗,達到提升性能的目的,如下圖:

CU:Control Unit 控制單元(本人還沒理解透徹)

MMU:Memory Management Unit 內存管理單元(本人還沒理解透徹)

cache:緩存

cpu和內存的速度比大概是100:1,緩存就是為了解決cpu和內存的速度差異,緩存分為L1、L2、L3,cpu的每一個核都擁有獨立的L1、L2這兩級緩存,L3是所有核共享的,如下圖:

下面我們再介紹緩存行的概念,緩存行是cpu緩存系統中的基本單位,當cpu從內存當中讀取數據的時候,并不是你需要某個字節就只讀取某個字節,而是將你需要的字節所在的內存塊讀取到緩存行,因為根據一定的預測,可能需要的數據也不只是這一個字節,也許周圍的數據你也是需要的,這樣的讀取也可以提高效率

到這里,再記錄一個與緩存行有關的知識,MESI協議,緩存一致性協議是指一個緩存行,在不同的cpu中被修改之后,要保證數據一致,每個緩存行都有額外的兩個位來存儲緩存行的狀態(modified、exclusive、shared、invalid),當處于同一個緩存行的數據,在A(cpu的內核)處被修改,那么B處的緩存行將變成失效狀態,當B需要修改同一個緩存行的數據時,需要重新從內存中讀取數據再進行修改,緩存一致性協議有MSI,MESI(Intel)、synapse、Firely、Dragon等,不同品牌的cpu使用不同的緩存一致性協議

此處有一個問題叫偽共享,我們以Intel cpu舉例,當cpu的兩個核分別修改了同一個緩存行中的獨立變量時,實際上兩個變量是互不影響的,但是由于他們在一個緩存行中,當A修改了a,B中的緩存行就會變成失效狀態,這個時候如果B修改b,就必須要先提交A中的緩存行,然后B再去內存當中讀取這個緩存行進行修改,此操作應該是一個并行操作,但是由于緩存一致性,卻變成了串行,反而降低了效率

解決辦法是,緩存行對齊:對于一些特別敏感的數字,會存在線程高競爭的訪問,可以使用緩存行對齊的編程方式

JDK7中,很多采用long padding提高效率

JDK8,加入了@Contended注解

需要加上:JVM -XX:-RestrictContended

二、內存(計算機的重要組成部分)(下次研究哈哈哈哈)

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Java需要掌握的底层知识_java程序员需要知道的底层知识(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。