原创 虛擬機字節碼執行引擎(筆記)

java虛擬機的執行引擎都是一致的:輸入字節碼文件,處理過程是字節碼解析的等效過程,輸出的是執行結果。 過程##### 運行時棧幀結構 棧幀(Stack Frame)是用於虛擬機進行方法調用和方法執行的數據結構,是虛擬機運行時數據區中

原创 java虛擬機類加載機制(筆記)

類加載機制:虛擬機把描敘類的數據從class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的java類型。 類加載的時機 類加載的生命週期包含:加載、驗證、準備、解析、初始化、使用、卸載。其中,驗證、

原创 jdk8:對內存溢出的思考

jvm內存溢出 JVM管理的幾個內存區域分爲: 方法區:用於存儲JAVA類信息、常量、靜態變量。這個區域也可以發生垃圾回收,比如當一些類不在被引用時JVM可以卸載這個類,不過這種回收動作很少發生。另外所有線程都共享方法區,因此線程對

原创 java枚舉類型(enum)

枚舉實現原理 package com.own.learn.jdk.enum1; public enum Day { MONDAY("monday"), TUESDAY("TUESDAY"), WEDNESDAY("WED

原创 volatile的底層實現原理

CPU的術語定義 volatile是輕量級的synchronized,比之執行成本更低,因爲它不會引起線程的上下文切換,它在多處理器開發中保證了共享變量的“可見性”,“可見性”的意思是當一個線程修改一個變量時,另外一個線程能讀到這

原创 jdk8:Aop的代理研究

Spring AOP兩種實現機制是什麼? 如果是有接口聲明的類進行AOP 時,spring調用的是java.lang.reflection.Proxy 類來做處理 如果是沒有接口聲明的類時, spring通過cglib包和內部類來實

原创 synchronized的使用以及原理

synchronized的三種應用方式 synchronized關鍵字最主要有以下幾種應用方式 java對象頭 在JVM中,對象在內存中的佈局分爲三塊區域:對象頭、實例數據和對齊填充。 實例變量:存放類的屬性數據信息,包括父類的屬

原创 jdk8:內存分配和回收策略

對象的內存分配,往大方向講,就是在堆上分配(但也可能經過JIT編譯後被拆散爲標量類型並間接地棧上分配),對象主要分配在新生代的Eden區上,如果啓動了本地線程分配緩衝,將按線程優先在TLAB上分配。少數情況下也可能會直接分配在老年代中,分

原创 Java泛型

特性 泛型只在編譯階段有效 public class GenericTest1 { public static void main(String[] args) { ArrayList<String> stri

原创 jdk8:jmap

jmap作用,獲取dump文件,查詢finalize執行隊列,java堆棧以及類加載器統計。 顯示堆棧信息 [@82995c215909 /opt/logs]$ jmap -heap 12527 Attaching to process

原创 jvm筆記

類的加載機制 類的加載 類的加載指的是將類的.class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法區內,然後在堆區創建一個java.lang.Class對象,用來封裝類在方法區內的數據結構。 類的生命週期 類的生命週期包括

原创 jdk8:垃圾收集器

垃圾收集器是垃圾回收算法(標記-清除算法、複製算法、標記-整理算法、火車算法)的具體實現,不同商家、不同版本的JVM所提供的垃圾收集器可能會有很在差別. 圖中展示了7種不同分代的收集器: Serial、ParNew、Parallel

原创 jdk8:VisualVM

VisualVM 是一款免費的,集成了多個 JDK 命令行工具的可視化工具,它能爲您提供強大的分析能力,對 Java 應用程序做性能分析和調優。這些功能包括生成和分析海量數據、跟蹤內存泄漏、監控垃圾回收器、執行內存和 CPU 分析。 內存

原创 jdk8:jinfo命令

jinfo 用法 ➜ ~ jinfo --help Usage: jinfo [option] <pid> (to connect to running process) jinfo [option] <

原创 jdk8下:jps命令

列出正在運行的虛擬機進程,並顯示虛擬機執行主類(main class, main()函數所在的類)名稱,以及這些進程的本地虛擬機Id(LVMID)。 使用方法:在當前命令行下打jps(jps存放在JAVA_HOME/bin/jps,使用時