原创 虛擬機字節碼執行引擎 —— 方法調用

本文部分摘自《深入理解 Java 虛擬機第三版》 概述 方法調用並不等同於方法中的代碼被執行,方法調用階段唯一的任務就是確定被調用方法的版本(即調用哪一個方法)。之前講過,一切方法調用在 Class 文件裏面都是以符號引用的形式存儲

原创 虛擬機字節碼執行引擎 —— 運行時棧幀

本文部分摘自《深入理解 Java 虛擬機》 執行引擎 執行引擎是 Java 虛擬機核心的組成部分之一,作用就是用來執行字節碼。在 Java 虛擬機規範中執行引擎只是一個概念模型,不同的虛擬機可以有不同的實現,通常會有解釋執行(通過編

原创 賬戶合併

題目概述 給定一個列表 accounts,每個元素 accounts[i] 是一個字符串列表,其中第一個元素 accounts[i][0] 是 名稱 (name),其餘元素是 emails,表示該賬戶的郵箱地址。 現在,我們想合併這些賬

原创 JVM 字節碼指令

本文部分摘自《深入理解 Java 虛擬機》 簡介 Java 虛擬機的指令由操作碼 + 操作數組成,其中操作碼是代表某種特定操作含義的數字,長度爲一個字節,而操作數就是此操作所需的一個或多個參數。由於 Java 虛擬機採用面向操作數棧

原创 Class 類文件結構

本文部分摘自《深入理解 Java 虛擬機第三版》 概述 我們知道,Java 具有跨平臺性,其實現基礎就是虛擬機和字節碼存儲格式。Java 虛擬機不與 Java 語言綁定,只與 Class 文件所關聯。Java 虛擬機作爲一個通用的、

原创 JVM 常用命令行工具

本文部分摘自《深入理解 Java 虛擬機第三版》 基礎故障處理工具 Java 開發人員肯定都知道 JDK 的 bin 目錄下有許多小工具,這些小工具除了用於編譯和運行 Java 程序外,打包、部署、簽名、調試、監控、運維等各種場景都

原创 二叉搜索樹的第 k 個結點

給定一棵二叉搜索樹,請找出其中的第 k 小的結點 解題思路 根據二叉搜索樹的性質,按照中序遍歷的順序打印出來正好就是排序好的順序,所以,按照中序遍歷順序找到第 k個結點就是結果 在遍歷過程中,如果發現有符合條件的結點,則直接遞歸向上

原创 JVM HotSpot 可達性分析算法實現細節

本文部分摘自《深入理解 Java 虛擬機第三版》 根節點枚舉 在之前關於可達性分析算法的介紹中我們講過,我們需要先找出可固定作爲 GC Roots 的節點,然後沿着引用鏈去尋找那些無用的垃圾對象。GC Roots 節點一般在全局性引

原创 JVM 經典垃圾收集器 —— CMS 收集器

本文部分摘自《深入理解 Java 虛擬機第三版》 概述 CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間爲目標的收集器。由於大部分 Java 應用主要集中在互聯網網站以及基於瀏覽器的 B/S 系

原创 Java 面向對象概述

本文部分摘自 On Java 8 面向對象編程 在提及面向對象時,不得不提到另一個概念:抽象。編程的最終目的是爲了解決某個問題,問題的複雜度直接取決於抽象的類型和質量。早期的彙編語言通過對底層機器作輕微抽象,到後來的 C 語言又是對

原创 JVM 經典垃圾收集器

本文部分摘自《深入理解 Java 虛擬機第三版》 概述 如果說收集算法是內存回收的方法論,那麼垃圾收集器就是內存回收的實踐者。Java 虛擬機規範中對垃圾收集器的實現做出規定,因此不同的廠商、不同版本的虛擬機所包含的垃圾收集器各有不

原创 Salesforce 系列(一):雲服務和 Salesforce 理念簡介

本系列文章系筆者在 Salesforce 開發過程中的些許總結與心得,旨在記錄自己的成長,以及爲對 Salesforce 感興趣的小夥伴提供一些幫助,如有疏漏,還望多多包涵 ~ 雲服務 雲服務,也稱雲計算服務,是一種根據需求,通過網

原创 Java 虛擬機垃圾收集機制詳解

本文摘自深入理解 Java 虛擬機第三版 垃圾收集發生的區域 之前我們介紹過 Java 內存運行時區域的各個部分,其中程序計數器、虛擬機棧、本地方法棧三個區域隨線程共存亡。棧中的每一個棧幀分配多少內存基本上在類結構確定下來時就已知,

原创 JVM 堆中對象分配、佈局和訪問

本文摘自深入理解 Java 虛擬機第三版 對象的創建 Java 是一門面向對象的語言,Java 程序運行過程中無時無刻都有對象被創建出來。從語言層面看,創建對象只是一個 new 關鍵字而已,而在虛擬機中,對象(僅限於普通 Java

原创 Java 虛擬機運行時數據區詳解

本文摘自深入理解 Java 虛擬機第三版 概述 Java 虛擬機在執行 Java 程序的過程中會把它所管理的內存劃分爲若干個不同的數據區域,這些區域有各自的用途,以及創建和銷燬的時間,有的區域隨着虛擬機進程的啓動而一直存在,有的區域