原创 程序運行的基石——運行時棧楨結構

在《深入理解JVM內存模型(運行時數據區域)》中詳細介紹了JVM內存模型,並在介紹虛擬機棧時明確說明了棧楨是方法執行時非常重要的基礎數據結構,但並沒有詳細說明,本篇文章便來深入探討這程序運行的基石——棧楨。 Java虛擬機以【方法

原创 深入理解虛擬機執行子系統——你真的瞭解類加載過程嗎?

一提到類加載機制,現在的人大部分都能回答雙親委派模型、加載的大致過程。是的,大部分人知道的東西一定不是錯的,但知識和財富一樣,唯有少部分才能真正掌握。 開始閱讀之前,先統一以下約定: 1.類型:包含了類和接口; 2.Class文件

原创 深入理解虛擬機執行子系統——Class文件的結構

再談無關性 Java語言誕生時所喊的口號是“一次編寫,到處運行”(Write Onece,Run Anywhere),足以看見當時的開發者們對衝破平臺限制的渴望。Java虛擬機屏蔽了各個平臺的差異,使得這個口號成爲現實。從Java

原创 深入理解Java垃圾回收——垃圾收集器

《深入理解Java垃圾回收——虛擬機高效回收的背後》講述了垃圾回收的理論思想,本篇文章來深入瞭解垃圾回收的實踐:垃圾收集器。 在講解垃圾收集器之前必要要統一幾點認知: 1.用戶線程:執行應用程序的用戶線程。 2.垃圾回收線程:虛擬

原创 深入理解Java垃圾回收——虛擬機高效回收的背後

在《深入理解垃圾回收——對象已死?》中,我們知道了對象如何判定爲死亡,這一章節,我們來深入剖析一下虛擬機垃圾回收子系統的背後的思想和衍生的收集算法。 從如何判定對象消亡的角度來看,垃圾收集算法可以劃分爲:“引用計數式垃圾收集”和“

原创 深入理解Java中的對象

對象的創建 Java是一門面向對象的編程語言,在Java應用程序中,每時每刻都有新的對象被創建出來。在語言層面上,創建一個對象僅僅是一個new關鍵字而已(clone、反序列化不在討論範圍內)。但是在虛擬機層面,創建對象的過程是一幕

原创 深入解析synchronized關鍵字

文章目錄一.synchronized關鍵字的作用二.synchronized的用法靜態方法上普通方法上對象鎖類鎖三.synchronized原理解析對象在內存中的佈局Mark Word揭開Monitor的神祕面紗實戰 一.sync

原创 AbstractQueuedSynchronizer(AQS)-源碼深度解析

文章目錄一. AQS是什麼AQS內部結構Node內部類ConditionObject內部類局部變量 head 和 tail局部變量 state二. 如何使用AQS三. AQS源碼解析acquire() 源碼分析release()源

原创 你好,反射

一. 什麼是反射? Java反射機制是指在程序運行狀態下: 對於任何一個類,都可以獲取到這個類的屬性或方法; 對於任何一個對象, 都可以調用這個對象的任意屬性或方法.   二. 反射原理 任何一個類都會被編譯成 .class 文件, .c

原创 排序算法2 — 冒泡排序

原理:在給定的數組中,將當前的元素與後一個元素做對比,如果大於則交換位置。當本輪循環結束後,最大的數就像冒泡一樣,在數組的最後位置了。緊接着進入下一輪循環。 動畫演示: 在這裏,我們 隨機生成一個隨機數組長度爲100000的數組,範圍[

原创 最實用的Eclipse常用設置

Eclipse 常用設置,你只需要花個10分鐘跟着操作一遍,多練習,可以讓你在開發過程中熟練使用Eclipse,提高開發效率。   查詢 查詢一個類的繼承關係:選中類名,F4 查詢當前方法在哪裏被調用:選中當前方法名,ctrl+shift

原创 排序算法3 — 選擇排序

原理:在數組中,選出區間[i,n)的最小值,然後與i位置的值進行比較,如果i的值比最小值還小,那麼久交換他們的位置。 動畫演示: 請查看鏈接 代碼演示:數組長度爲100000,數組範圍[10,10000],源代碼如下: package

原创 排序算法4 — 插入排序

原理:在給定數組中,在(0,i]區間,比較arr[j]與arr[j-1],如果小於,則交換位置,並結束當前循環,進入下一次循環;否則繼續向前循環。 動畫演示: 戳這裏 代碼演示:取長度爲100000,範圍爲[10,10000]的數組:

原创 排序算法 — SortBase類

準確的說,SortBase類是一個排序輔助類。 在進行排序算法的演示過程當中,將需要用的公共方法(生成隨機數組、驗證是否排序、測試排序性能等)抽取出來,最大程度上,實現代碼的複用。 直接貼代碼: package com.loveyou.