原创 漢字佔用字節

漢字佔用字節 從一行代碼顯示說起 # fo.write("學習派森筆記\n") str = fo.read(9) 讀取的字符是: 學習派 str = fo.read(10) 讀取的字符是: 學習派� str = fo.read(1

原创 Maven中測試插件(surefire)的相關配置及常用方法

1. 在Maven中配置測試插件surefire <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-s

原创 jvm 從GC日誌分析堆內存

  在前面的文章中,我們只設置了整個堆的內存大小。但是我們知道,堆又分爲了新生代,年老代。他們之間的內存怎麼分配呢?新生代又分爲Eden和Survivor,他們的比例大小能改變嗎?其實這些都是可控的,以前沒有講到是因爲就算講了也只是講講而

原创 jvm收集器

年輕代收集器 STW即GC時候的停頓時間,他會暫停我們程序中的所有線程。如果STW所用的時間長而且次數多的話,那麼我們整個系統穩定性以及可用性將大大降低。   因此我們在必要的時候需要對虛擬機進行調優,調優的主要目標之一就是降低STW的時

原创 jvm 階段回顧

  內存基本分爲JAVA棧、本地方法棧、堆和方法區。   首先棧存放的是基本類型變量,局部變量,和對象的引用,他在內存中是一塊連續的區域,有大小限制,是由系統自動分配的,因此它的讀寫速度比較快,而且會自動釋放掉爲該變量所分配的內存空間;

原创 jvm JAVA 類加載機制

  從本篇博文開始,我們就進入虛擬機類加載機制的學習了。那麼什麼是類加載呢?當我們寫完一個Java類的時候,並不是直接就可以運行的,它還要編譯成.class(字節碼)文件,再由虛擬機解釋給當前的操作系統去執行。這些過程都是我們看不見的,我

原创 git 遠程管理

開篇就提到過,Git是一個分佈式版本管理系統。但是到現在爲止,我們所有的演練都是在本地Git倉庫。如果想與他人合作,還需要一個遠程的 Git 倉庫。儘管技術上可以從個人的倉庫裏推送和拉取修改內容,但我們不鼓勵這樣做,因爲一不留心就很容易弄

原创 Java進階(一)Java內存解析

棧、堆、常量池等雖同屬Java內存分配時操作的區域,但其適用範圍和功用卻大不相同。本文將深入Java核心,簡單講解Java內存分配方面的知識。 首先我們先來講解一下內存中的各個區域。 stack(棧) 存放基本類型的數據和對象的引用,

原创 maven 版本控制

現在所說的maven版本不同於SVN的版本控制 之前我們說過Maven的版本分爲快照和穩定版本,快照版本使用在開發的過程中,方便於團隊內部交流學習。而所說的穩定版本,理想狀態下是項目到了某個比較穩定的狀態,這個穩定包含了源代碼和構建都要穩

原创 JAVA 類加載器

  今天我們將類加載機制5個階段中的第一個階段,加載,又叫做裝載。爲了便於閱讀,以下都叫做裝載。   裝載的第一步就是要獲得二進制的字節流,它可以從讀.class文件獲得,也可以從網絡中接收別人發送的字節流。反正只要符合虛擬機規定的字節

原创 jvm 內存分配與回收策略

虛擬機中的堆,他是整個內存模型中佔用最大的一部分,而且不是連續的。當有需要分配內存的時候,一般有兩個方法分配,指針碰撞和空閒列表。該部分的內存回收是由虛擬機的垃圾收集器GC進行管理的。   剛剛粗略的回憶了上一博文所講的內容,而這一章我

原创 jvm JAVA GC之標記

  堆分爲年輕代和年老代。永久代是非堆內存,它又叫做方法區(一般的說法),主要存儲已被加載的類信息、常量、靜態變量。而該區域在java8已被刪除,取而代之的是元空間,我會在後面的章節細講。 什麼是標記?怎麼標記?   第一個問題相信大家都

原创 jvm 利用MAT排查堆溢出

如何設置以及當發生堆溢出的時候怎麼排查問題。先看一小段代碼:   代碼中使用了一個無限循環來爲list添加對象,如果採用默認的堆大小的話可能要等待好久才能出現堆溢出的錯誤,因此我們要將其設置小一點:   -Xms10m -Xmx10m

原创 jvm 棧和堆

  若想使自己編寫的Java程序高效運行,以及進行正確、高效的異常診斷,JVM是不得不談的一個話題。本”JVM進階“專欄大部分內容均來源於經典書籍《深入理解Java虛擬機》。    棧   下面言歸正傳,本文重點從虛擬機內存模型(運行

原创 git 輔助命令

熟悉了Git的基本操作之後,再來研究一下Git爲我們提供的基礎設施服務。正如一個程序員,只會寫代碼是遠遠不夠的,還得知道怎麼吃飯,怎麼睡覺,怎麼談戀愛,怎麼耍流氓……會了這些才能寫出更好的代碼,這就是所謂的“基礎設施服務”或者“外圍服務”