主頁 >  其他 > 簡述JVM(1)——類加載器和運行時資料區

簡述JVM(1)——類加載器和運行時資料區

2021-09-14 16:11:36 其他

大家好,我是KookNut39也是Tommy,在CSDN寫文,寫Java時候我是Tommy,分享一些自己認為在學習程序中比較重要的東西,致力于幫助初學者入門,希望可以幫助你進步,感興趣的歡迎關注博主,和博主一起學習Java知識,大家還可以去專欄查看之前的文章,希望未來能和大家共同探討技術,

文章目錄

    • JVM概述
    • JVM整體的四個部分
      • 1.1 類加載器
        • 1.1.1 類加載器程序
        • 1.1.2類加載器的分類
          • 1.1.2.1啟動類加載器(引導類加載器)
          • 1.1.2.2擴展類加載器
          • 1.1.2.3應用程式類加載器
        • 1.1.3 雙親委派機制
        • 1.1.4沙箱安全機制
        • 1.1.5 類的主動使用和被動使用
      • 1.2 運行時資料區
        • 1.2.1 程式計數器(Program Counter Register)
        • 1.2.2 Java 虛擬機堆疊(Java Virtual Machine Stacks)
          • 1.2.2.1 Java虛擬機堆疊概述
          • 1.2.2.2堆疊的運行原理
          • 1.2.2.3 堆疊幀的內部
            • 1.2.2.3.1區域變數表(Local Variables)
            • 1.2.2.3.2 運算元堆疊(Operand Stack)(或運算式堆疊)
            • 1.2.2.3.3 動態鏈接(Dynamic Linking) (或指向運行時常量池的方法參考)
            • 1.2.2.3.4 方法回傳地址(Return Address)(或方法正常退出或者例外退出的定義)
            • 1.2.2.3.5 一些附加資訊
        • 1.2.3 本地方法堆疊
        • 1.2.4 堆記憶體
        • 1.2.5方法區
    • 結語

了解JVM(Java虛擬機)首先我們必須了解VM(虛擬機)是什么,

所謂虛擬機(Virtual Machine),就是一臺虛擬的計算機,它是一款軟體,用來執行一系列虛擬計算機指令,大體上,虛擬機可以分為系統虛擬機和程式虛擬機,

我們經常見到的 VMware 就屬于系統虛擬機,它是完全對物理計算機的仿真,提供了一個可運行完整作業系統的軟體平臺,

程式虛擬機典型的代表就是 Java 虛擬機了,它專門為執行某個單個計算機程式而設計,在 Java 虛擬機中執行的指令我們稱為 Java 位元組碼指令,無論是系統虛擬機還是程式虛擬機,在上面運行的軟體都被限制于虛擬機提供的資源,Java 虛擬機是一種執行 Java 位元組碼檔案的虛擬計算機,它擁有獨立的運行機制,

Java 技術的核心就是 Java 虛擬機,因為所有的 Java 程式都運行在 Java 虛擬機內部,

JVM概述

JVM就是Java虛擬機,虛擬機就是一臺虛擬的計算機,是一款軟體,Java 虛擬機就是二進制位元組碼的運行環境,負責裝載位元組碼到其內部,解釋或編譯為對應平臺上的機器碼指令執行,每一條 Java 指令,Java 虛擬機中都有詳細定義,如怎么取運算元,怎么處理運算元,處理結果放在哪兒等,JVM是運行在作業系統上的,不與硬體直接互動,

JVM整體的四個部分

JVM整體組成可以分為4個部分:

  1. 類加載器(ClassLoader)
  2. 運行時資料區(Runtime Data Area)
  3. 執行引擎(Execution Engine)
  4. 本地方法介面(Native Interface)

程式在執行之前先要把 Java 代碼轉換成位元組碼(.class 檔案),JVM 首先需要把位元組碼通過一定的類加載器(Class Loader)把檔案加載到記憶體中運行時資料區(Runtime Data Area),而位元組碼檔案是 JVM 的一套指令集規范,并不能直接交給底層作業系統去執行,因此需要特定的命令決議器(執行引擎(Execution Engine)) 將位元組碼翻譯成底層系統指令再交由 CPU 去執行,而這個程序中需要呼叫其他語言的介面(本地方法介面(Native Interface)) 來實作,整個程式的功能,這就是這 4 個主要組成部分的職責與功能,

1.1 類加載器

Java編譯器會為虛擬機轉換源指令,虛擬機代碼存盤在以 .class 為擴展名的類檔案中,每個類檔案都包含某個類或者介面的定義和實作代碼,

? ——Java核心基礎(卷二)

1.1.1 類加載器程序

類加載器子系統負責從檔案系統或者網路中加載 class 檔案, class 檔案在檔案開頭有特定的檔案標識(位元組碼檔案都以 CA FE BA BE 標識開頭),classLoader 只負責 class 檔案的加載,至于它是否可以運行,則由執行引擎決定,加載的類資訊存放于一塊稱為方法區的記憶體空間,除了類的資訊外,方法區中還會存放運行時常量池資訊,可能還包括字串字面量和數字常量(這部分常量資訊是 class 檔案中常量池部分的記憶體映射),

類加載的程序

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-XZGhPUyU-1631455118241)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1631431133481.png)]

1.加載程序是把class檔案(位元組碼檔案)加載到記憶體中(I/O讀寫),類加載器把檔案加載到記憶體中,會為每個類創建一個Class類的物件,呼叫Class類中的方法獲取類的相關資訊,

2.驗證是檢驗加載的類是否有正確的內部結構并和其他類協調一致,

3.準備階段為類的靜態屬性分配記憶體,并設定默認初始值(不包含final修飾的static常量),也不會給實體變數初始化,

4.決議是將二進制資料中的符號參考替換成直接參考(符號參考是用一組符號描述所參考的目標;直接參考是指向目標的指標),

5.類初始化

? 5.1 什么時候初始化類

? 1 )創建類的實體,也就是 new 一個物件
? 2)訪問某個類或介面的靜態變數,或者對該靜態變數賦值
? 3)呼叫類的靜態方法
? 4)反射
? 5)初始化一個類的子類(會首先初始化子類的父類)

? 5.2 類的初始化順序:

? 父類static --> 子類static --> 父類構造方法 --> 子類構造方法

1.1.2類加載器的分類

1.1.2.1啟動類加載器(引導類加載器)

是由c/c++實作,用來加載Java的核心類別庫

1.1.2.2擴展類加載器

由Java實作,派生于 ClassLoader 類,上層類加載器是引導類加載器(啟動類加載器),加載底層類別庫

1.1.2.3應用程式類加載器

Java實作,派生于 ClassLoader 類,上層類加載器是擴展類加載器,加載自定義類,

1.1.3 雙親委派機制

加載類時,向上委派,交給最上層的加載器啟動類加載器加載核心類別庫,加載不到就用擴展類加載器加載底層類別庫,加載不到就用應用程式類加載器加載自定義類

雙親委派機制的優點

  1. 安全,可避免用戶自己撰寫的類動態替換 Java 的核心類(自定義的類名和Java核心類名相同)
  2. 避免全限定命名的類重復加載(使用了 findLoadClass()判斷當前類是否已加載)

1.1.4沙箱安全機制

作用是防止惡意代碼污染 Java 源代碼

如果一個類在引導類加載器那里就加載到了,先找到先使用,所以就使用引導類加載器里面的類,后面的一概不能使用,這就保證了不被惡意代碼污染,

1.1.5 類的主動使用和被動使用

JVM 規定,每個類或者介面被首次主動使用時才對其進行初始化,有主動使用,自然就有被動使用,
主動使用:

  1. 通過new關鍵字被導致類的初始化,這是大家經常使用的初始化一個類的方式,
    他肯定會導致類的加載并且初始化
  2. 訪問類的靜態變數,包括讀取和更新
  3. 訪問類的靜態方法
  4. 對某個類進行反射操作,會導致類的初始化
  5. 初始化子類會導致父類的的初始化
  6. 執行該類的 main 函式

被動使用:其實除了上面的幾種主動使用其余就是被動使用了

注意:主動使用和被動使用的區別在于類是否會被初始化.

  1. 參考該類的靜態常量,注意是常量,不會導致初始化,但是也有意外,這里的常量是指已經指定字面量的常量,對于那些需要一些計算才能得出結果的常量就會導致初始化,比如:
    public final static int number = 5 ; //不會導致類初始化,被動使用
    public final static int random = new Random().nextInt() ; //會導致類的初始化,主動使用
  2. 構造某個類的陣列時不會導致該類的初始化,比如:
    Student[] students = new Student[10] ;

1.2 運行時資料區

JVM 的運行時資料區,不同虛擬機實作可能略微有所不同,但都會遵從 Java 虛擬機規范,Java 8 虛擬機規范規定,Java 虛擬機所管理的記憶體將會包括程式計數器、Java虛擬機堆疊、本地方法堆疊、Java堆、方法區,

1.2.1 程式計數器(Program Counter Register)

JVM 中的程式計數暫存器中的 Register 命名源于CPU 的暫存器,暫存器存盤指令相關的現場資訊,這里,并非是廣義上所指的物理暫存器,或許將其翻譯為 PC 計數器(或指令計數器)會更加貼切(也稱為程式鉤子),JVM 中的PC 暫存器是對物理 PC 暫存器的一種抽象模擬,

  1. 它是一塊很小的記憶體空間,幾乎可以忽略不計,但是它是運行速度最快的存盤區域,
  2. 在 JVM 規范中,每個執行緒都有它自己的程式計數器,是執行緒私有的,生命周期與執行緒生命周期保持一致,
  3. 任何時間一個執行緒都只有一個方法在執行,也就是所謂的當前方法,程式計數器會存盤當前執行緒正在執行的Java方法的JVM指令地址,如果是在執行native方法,則是未指定值(undefined),
  4. 它是程式控制流的指示器,分支、回圈、跳轉、例外處理,執行緒恢復等基礎功能都需要依賴這個計數器來完成,
  5. 位元組碼解釋器作業時就是通過改變這個計數器的值來選取下一條需要執行的位元組碼指令,
  6. 它是唯一一個在Java虛擬機規范中沒有規定任何 OutOfMemoryError 情況的區域.

那么為什么使用程式計數器記錄當前執行緒的執行地址呢?我們都知道CPU需要不停的切換各個執行緒,這時候從其他執行緒切換到這個執行緒時,根據程式計數器就知道該從哪里開始執行了,JVM 的位元組碼解釋器就需要通過改變程式計數器的值來明確下一條應該執行什么樣的位元組碼指令,由于這個原因,必須為每個執行緒分配一個程式計數器,這樣各個執行緒就可以互不干擾,

1.2.2 Java 虛擬機堆疊(Java Virtual Machine Stacks)

首先我們需要學會區分堆疊和堆:

堆疊是運行時的單位,而堆時存盤的單位,

  1. 堆疊:解決程式的運行問題,即程式如何執行,或者說如何處理資料,
  2. 堆:解決的是資料存盤的問題,即資料怎么放,放在哪兒,
1.2.2.1 Java虛擬機堆疊概述

每個執行緒在創建時都會創建一個虛擬機堆疊,其內部保存一個個堆疊幀,對應著一次方法的呼叫,Java 虛擬機堆疊是執行緒私有的,生命周期和執行緒一致,堆疊中的資料都以堆疊幀為單位存盤,堆疊幀是一個記憶體區塊,是一個資料集,維系著方法執行程序中的各種資料資訊,

作用:主要負責Java程式的運行,保存方法內的區域變數,還有部分結果,還參與方法的呼叫和回傳,

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-6hPYfqf3-1631455118244)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1631450877953.png)]

堆疊是一種快速有效的分配存盤方式,訪問速度僅次于程式計數器,JVM 直接對 Java 堆疊的操作只有兩個:

  1. 呼叫方法,進堆疊,
  2. 執行結束后出堆疊,

注意:對于堆疊來說不存在垃圾回收問題,

1.2.2.2堆疊的運行原理
  1. JVM 直接對 Java 堆疊的操作只有兩個,就是對堆疊幀的壓堆疊和出堆疊,遵循”先進后出“后進先出的原則,
  2. 在一潭訓動的執行緒中,一個時間點上,只會有一個活動堆疊,即只有當前在執行的方法的堆疊幀(此時這個堆疊楨在堆疊頂)是有效地,這個堆疊幀被稱為當前堆疊(Current Frame),與當前堆疊幀對應的方法稱為當前方法(Current Method),定義這個方法的類稱為當前類(Current Class),
  3. 執行引擎運行的所有位元組碼指令只針對當前堆疊幀進行操作,
  4. 如果在該方法中呼叫了其他方法,對應的新的堆疊幀就會被創建出來,放在堆疊的頂端,成為新的當前堆疊幀,
  5. 不同執行緒中所包含的堆疊幀(方法)是不允許存在相互參考的,即不可能在一個堆疊中參考另一個執行緒的堆疊幀(方法),
  6. 如果當前方法呼叫了其他方法,方法回傳之際,當前堆疊幀會傳回此方法的執行結果給前一個堆疊幀,接著虛擬機會丟棄當前堆疊幀,使得前一個堆疊幀重新成為當前堆疊幀,Java 方法有兩種回傳的方式,一種是正常的函式回傳,使用 return 指令,另一種是拋出例外,不管哪種方式,都會導致堆疊幀被彈出.

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KE7YAljC-1631455118245)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1631451939150.png)]

1.2.2.3 堆疊幀的內部

每個堆疊幀中都有:區域變數表、運算元堆疊、動態鏈接、方法回傳地址、一下附加資訊,

1.2.2.3.1區域變數表(Local Variables)

區域變數表用于存放方法引數和方法內部定義的區域變數,

對于基本資料型別的變數,則直接存盤它的值,對于參考型別的變數,則存的是指向物件的參考,

1.2.2.3.2 運算元堆疊(Operand Stack)(或運算式堆疊)

程式中的所有計算程序都是在借助于運算元堆疊來完成的,

1.2.2.3.3 動態鏈接(Dynamic Linking) (或指向運行時常量池的方法參考)

因為在方法執行的程序中有可能需要用到類中的常量或方法,所以必須要有一個參考指向運行時常量池,

1.2.2.3.4 方法回傳地址(Return Address)(或方法正常退出或者例外退出的定義)

當一個方法執行完畢之后,要回傳之前呼叫它的地方,因此在堆疊幀中必須保存一個方法回傳地址,

1.2.2.3.5 一些附加資訊

例如和除錯相關的資訊,這部分資訊完全取決于不同的虛擬機實作,

1.2.3 本地方法堆疊

  1. Java 虛擬機堆疊管理 java 方法的呼叫,而本地方法堆疊用于管理本地方法的呼叫,

  2. 本地方法堆疊也是執行緒私有的.

  3. 允許被實作成固定或者是可動態擴展的記憶體大小,

記憶體溢位方面也是相同的,
如果執行緒請求分配的堆疊容量超過本地方法堆疊允許的最大容量,會拋出StackOverflowError,
如果本地方法可以動態擴展,并在擴展時無法申請到足夠的記憶體會拋出OutOfMemoryError,

  1. 本地方法是用 C 語言寫的.

1.2.4 堆記憶體

堆記憶體概述:

  1. 一個 JVM 實體只存在一個堆記憶體,堆也是 Java 記憶體管理的核心區域,
  2. Java 堆區在 JVM 啟動時的時候即被創建,其空間大小也就確定了,是 JVM 管理的最大一塊記憶體空間,
  3. 堆記憶體的大小是可以調節,一般情況可以將起始值和最大值設定為一致,這樣會減少垃圾回收之后堆記憶體重新分配大小的次數,提高效率,
  4. 《Java 虛擬機規范》規定,堆可以處于物理上不連續的記憶體空間中,但邏輯上它應該被視為連續的,
  5. 所有的執行緒共享 Java 堆,在這里還可以劃分執行緒私有的緩沖區,
  6. 《Java 虛擬機規范》中對 Java 堆的描述是:所有的物件實體都應當在運行時分配在堆上,
  7. 在方法結束后,堆中的物件不會馬上被移除,僅僅在垃圾收集的時候才會被移除,
  8. 堆是 GC(Garbage Collection,垃圾收集器)執行垃圾回收的重點區域,

我們在之后在細講堆記憶體的區域劃分及垃圾回識訓制

1.2.5方法區

方法區,是一個被執行緒共享的記憶體區域,其中主要存盤加載的類位元組碼、class/method/field 等元資料、static final 常量、static 變數、編譯器編譯后的代碼等資料,另外,方法區包含了一個特殊的區域“運行時常量池”,
Java 虛擬機規范中明確說明:”盡管所有的方法區在邏輯上是屬于堆的一部分,但對于HotSpotJVM 而言,方法區還有一個別名叫做 Non-Heap(非堆),目的就是要和堆分開,所以,方法區看做是一塊獨立于 Java 堆的記憶體空間,方法區在 JVM 啟動時被創建,并且它的實際的物理記憶體空間中和 Java 堆區一樣都可以是不連續的,
方法區的大小:跟堆空間一樣,可以選擇固定大小或者可擴展,
方法區的大小決定了系統可以保存多少個類,如果系統定義了太多的類,導致方法區溢位,虛擬機同樣會拋出記憶體溢位的錯誤 :java.lang.OutOfMemoryError:Metaspace,

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nuwBuYtn-1631455118248)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\1631455014428.png)]

結語

這次就先寫這些,文中如果存在不對的地方,歡迎各位讀者批評指正,我會在今后更新本地方法介面執行引擎垃圾回識訓制等相關內容,如果大家感興趣,可以關注博主,我們一起交流學習,

本次的分享到這里就結束了,碼字不易,如果喜歡,賞個點贊+評論+收藏🤞🤞🤞,感謝您的支持

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300080.html

標籤:其他

上一篇:在m1芯片的MacBook上centos8安裝parallels tool

下一篇:青龍依賴大全

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more