原创 我看Java虛擬機(7)---解釋器和JIT編譯器

Java是被定爲爲解釋性語言,JIT編譯器並不是強制需要的,也並非所有的虛擬機都是用解釋器+編譯器的並存架構。但主流的商用虛擬機如Hotspot、J9等都採用這種並存的架構。 解釋器和編譯器比較 解釋器優點:省去編譯時間,啓動速度

原创 leetcode-Hamming Distance

漢明碼距離 The Hamming distance between two integers is the number of positions at which the corresponding bits are diff

原创 我看Java虛擬機(4)---Javac編譯器

編譯過程分爲三個部分: 解析與填充符號表 插入式註解處理器的註解處理過程 分析和字節碼的生成 解析與填充符號表 詞法語法分析,生成抽象語法樹(AST,Abstract Syntax Tree); 填充符號表 註解處理器 該

原创 我看Java虛擬機(3)---類文件結構

存儲兩種數據:無符號數和表。 魔數:4字節,識別文件,後綴是會被改變的,所以識別class文件是靠這四個字節。 版本號:2字節次版本號+2字節主版本號 常量池:2字節常量池中存放數據的個數len+len個常量順序放置;11種

原创 我看Java虛擬機(0)

學習了周志明老師的《深入理解Java虛擬機》,謹以此文章記錄下我的所學所思。 由於習慣於全局到局部,所以我先呈現的是對Java虛擬機總體的一個把握,然後在一步一步解剖每個部分,話不多說,進入正題。 總體分爲空間和時間方面的知識

原创 我看Java虛擬機(6)---虛擬機字節碼執行

棧幀是虛擬機棧中的棧元素,棧幀存儲方法的局部變量表,操作數棧,動態鏈接和方法返回地址信息,附加信息。 局部變量表: 局部變量表單位成爲變量槽(Slot),一個Slot存儲32位以內的數據類型,對於long和double,64位,可

原创 我看Java虛擬機(5)---虛擬機加載機制

經過上節的講解,我們已經知道了Java代碼——》字節碼的過程,產生了字節碼,下一步就是將字節碼讀入虛擬機,虛擬機將該部分分爲七個步驟: 加載->驗證->準備->解析->初始化->使用->卸載 我們主要研究前5步。 加載 讀入

原创 密碼學概論(1)

爲什麼要學習密碼學? 答:信息安全是密碼學的目標,密碼學是保障信息安全的核心技術,但不是唯一的手段。 信息安全的目標和攻擊手段對應關係? 機密性———-截取(被動攻擊,其他都是主動攻擊) 完整性———-篡改 認證性———-僞造

原创 我看Java虛擬機(2)---Java虛擬機內存區域詳解

虛擬機內存區域的組成 直接上圖: 程序計數器:對於Java方法,用來選取下一條要執行的字節碼;對於本地方法,值爲空。線程獨有 虛擬機棧:執行Java方法,每一層都是一個棧幀,棧幀包括局部變量表、操作數棧、動態鏈接和方法出口等

原创 我看Java虛擬機(1)---Java簡介(標配)和Java內存管理概述(空間)

先過下Java簡介,然後內存管理 Java簡介有一下幾點新認識: 學習Java虛擬機目標:認清技術本質,纔有資格去定義程序的質量 Java技術體系:JDK(Java程序設計語言,API,虛擬機),class文件格式,第三方類庫

原创 歐幾里得算法相關

歐幾里得算法 定理:兩個整數的最大公約數等於其中較小的那個數和兩數的相除餘數的最大公約數。最大公約數(greatest common divisor)縮寫爲gcd。 證明: a / b = k …… r 即證明gcd(a,b

原创 我看Java虛擬機(8)---高效併發

內存模型和線程 由於處理器的速度與存儲和通訊子系統之間的速度相差太大,所以出現了併發和緩存等技術,來減弱這種差距。 本節簡要介紹Java內存模型,volatile變量。 Java內存模型 每個線程都會保持一個工作內存,線程對於變

原创 密碼學(2)-古典密碼學

古典密碼學雖然現在已經不再使用,但其反映了密碼設計和破譯的基本思想,是學習密碼學的入口。 古典密碼學主要有兩種體制:置換密碼和代換密碼。 置換密碼 根據一定的規則重新排列明文,以便打破原有的結構特性。即改變字符的原始位置,但字符

原创 leetcode-3sum(N^2logN)

題目: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique tripl

原创 leetcode-Valid Parenthese

括號匹配 Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string i