原创 內存分配與回收策略

整理自《深入理解 Java 虛擬機》。 目錄1. 對象優先在Eden分配2. 大對象直接進入老年代3. 長期存活的對象將進入老年代4. 動態對象年齡判定5. 空間分配擔保 對象的內存分配,大方向上講,就是在堆上分配,對象主要分配在

原创 Java 內存區域與內存溢出

整理自《深入理解 Java 虛擬機》。 目錄Java 內存區域1. 程序計數器2. 虛擬機棧3. 本地方法棧4. 堆5. 方法區內存溢出1. 堆溢出2. 虛擬機棧和本地方法棧溢出3. 方法區和運行時常量池溢出4. 本機直接內存溢出

原创 對象的分配、佈局、訪問過程

整理自《深入理解 Java 虛擬機》。 目錄1. 對象的創建2. 對象的內存佈局3. 對象的訪問定位 1. 對象的創建 虛擬機遇到一條 new 指令時,將執行以下過程: 檢查這個指令的參數是否能在常量池中定位到一個類的符號引用,

原创 操作系統之調度算法

目錄1. 比較調度算法的準則2. 調度算法2.1 先來先服務算法(FCFS)2.2 短進程優先算法(SPN)2.3 最高響應比優先算法2.4 最短剩餘時間優先算法(SRT)2.5 時間片輪轉算法2.6 優先級調度算法2.7 多級隊

原创 操作系統之進程與線程

目錄1. 進程2. 線程3. 進程和線程的關係 1. 進程 概念:進程是指一個具有一定獨立功能的程序在一個數據集合上的一次動態執行過程,進程是資源分配的基本單位。 組成:包含了正在運行的一個程序的所有狀態信息。 特點: 動態性:

原创 操作系統特徵、內核態與用戶態

目錄1. 操作系統的特徵2. 內核態與用戶態3. 中斷、異常和系統調用 1. 操作系統的特徵 併發:宏觀上計算機系統在一段時間內能同時存在多個運行的程序,需要OS管理和調度。 共享:共享是指系統中的資源可以被多個併發進程共同使用

原创 操作系統之死鎖

目錄1. 產生死鎖的必要條件2. 處理方法 1. 產生死鎖的必要條件 互斥:任何時刻只能有一個進程使用一個資源實例。 持有並等待:進程保持至少一個資源,並正在等待獲取其他進程持有的資源。 非搶佔:資源只能在進程使用後自願釋放。

原创 操作系統之進程同步

目錄1. 同步2. 臨界區3. 信號量(semaphore)3.1 信號量實現互斥訪問3.2 信號量實現同步等待3.3 信號量實現生產者消費者問題4. 管程5. 經典同步問題之哲學家就餐問題6. 讀者-寫者問題 1. 同步 協調多

原创 Java 網絡通信模型 BIO、NIO、AIO

目錄1. BIO2. NIO3. AIO 參照 UNIX 五大 I/O 模型來理解。 本文整理自以下文章: https://blog.csdn.net/ty497122758/article/details/78979302 ht

原创 操作系統之 UNIX I/O 模型

目錄1. 基本概念2. 五大 I/O 模型2.1 阻塞 I/O2.2 非阻塞 I/O 模型2.3 I/O 複用模型2.4 信號驅動式 I/O 模型2.5 異步 I/O 模型3. 5大 I/O 模型比較 1. 基本概念 同步:所謂

原创 操作系統之內存管理

目錄1. 功能2. 管理方式2.1 重定位2.2 分段2.3 分頁2.4 段頁式2.5 虛擬存儲2.5.1 基本特徵2.5.2 缺頁異常(中斷)的處理流程2.5.3 頁面置換算法2.5.3.1 局部頁面置換算法1. 最優算法(OP

原创 操作系統之進程間通信

目錄1. 信號2. 管道3. 消息隊列4. 共享內存5. 套接字 1. 信號 進程間的軟件中斷通知和處理機制。 信號的接收處理: 捕獲:執行進程指定的信號處理函數被調用。 忽略:執行進程指定的缺省處理。 屏蔽:禁止進程接收和處理

原创 浮點型商業運算中丟失精度問題

計算機用二進制存儲數據,用有限位去近似表示一個浮點數會產生精度問題。爲了能精確的表示、計算浮點數,Java提供了BigDecimal類。 注意,在創建 BigDecimal 對象時,一定要使用String對象作爲構造器參數,而不是

原创 泛型

1. 類型擦除 虛擬機中沒有泛型,只有普通的類和方法。定義一個泛型類型,會進行類型擦除,如: public class Pair<T> { private T first; private T second;

原创 String、StringBuilder、StringBuffer 的區別

String 對象是不可變對象(顯然線程安全),String 對象一旦創建之後就不可更改了。Java 中對 String 對象進行的操作實際上是一個不斷創建新的對象並且將舊的對象回收的一個過程,所以執行速度很慢。 StringBu