原创 Maven如何設置JVM參數

    使用Maven突然出現了Java heap space,一般出現這個問題就是堆內存不夠了,這時候需要修改JVM參數,查看Maven的可執行文件。在${MAVEN_HOME}/bin目錄下,存在兩個文件,mvn和mvn.bat(mv

原创 getBoolean和parseBoolean的區別

    一直以爲getBoolean拿不到系統屬性就直接用的值,too young to simple,代碼如下:  getBoolean:如果系統屬性不存在name或者系統屬性name對應的值不爲true,則返回false,否則返回tr

原创 C語言內存對齊和結構補齊

首先我們先看看下面的C語言的結構體:[cpp] view plaincopytypedef struct MemAlign  {      int a;      char b[3];      int c;  }MemAlign;   

原创 Java線程狀態分析/線程狀態轉換圖

注:以下代碼講解基於JDK1.8.0_144一、線程狀態分類 線程一共有六種狀態,分別爲New、RUNNABLE、BLOCKED、WAITING、TIMED_WAITINGTERMINATED,同一時刻只有一種狀態,通過線程的getSta

原创 Java ServiceLoader使用和解析

一、使用場景一般使用接口的實現類都是靜態new一個實現類賦值給接口引用,如下:HelloService service = new HelloImpl();如果需要動態的獲取一個接口的實現類呢?全局掃描全部的Class,然後判斷是否實現了

原创 JDK源碼解析/深入理解Reference和ReferenceQueue

一、Reference簡介1.reference狀態Active:新創建的實例狀態,當被垃圾收集器回收時,如果實例註冊時候指定了隊列,則變成Pending狀態,否則變成Inactive狀態。Pending:pending-Referenc

原创 Java弱引用、軟引用、強引用、虛引用

一、 概念。        強引用 -> Object strong = new Object(); ,類似這種代碼,都是強引用,即使OutOfMemory,也不會被回收。通過設置strong = null,可以去除強引用。       

原创 如何逃脫垃圾回收

關於垃圾回收的觸發機制,參考MinorGC和FullGC觸發條件,本篇就是從其擴展而來。判斷一個對象是否存活,除了GC Roots引用之外,還有一個條件就是對象是否重寫了finalize方法,如果對象重寫了該方法,則會交給FQueue隊列

原创 Minor GC和Full GC觸發條件

一、Minor GC觸發條件     1、eden區滿時,觸發MinorGC。即申請一個對象時,發現eden區不夠用,則觸發一次MinorGC。      注:新生代分爲三個區域,eden space, from space, to sp

原创 文件權限問題彙總-使用Maven修改文件權限/Maven assembly配置解析

Maven主要使用assembly插件來修改文件權限,用的標籤爲<fileMode/>和<directoryMode/>,分別用來修改文件權限和目錄權限。注:assembly插件的版本需要注意,之前用的3.1.0的版本,<fileMode

原创 ln使用-linux下軟鏈接和硬鏈接(符號鏈接)區別

一、概念鏈接:一種對文件的引用,分爲硬鏈接和軟鏈接(符號鏈接)。索引節點(inode):在Linux系統中,內核爲每一個新創建的文件分配一個inode(索引結點),每個文件都有一個惟一的inode號,我們可以將inode簡單理解成一個指針

原创 對象內存直接在老年代分配

對象優先在新生代分配,但是有的情況對象直接在老年代分配,如下:1、分配的對象大小大於eden space。適合所有收集器。2、eden space剩餘空間不足分配,且需要分配對象內存大小不小於eden space總空間的一半,直接分配到老

原创 垃圾收集器類型簡單介紹

一、新生代收集器1. Serial收集器  單線程收集、暫停所有用戶線程,採用複製算法。單CPU環境效果最佳。建議Client模式下的虛擬機使用。2. ParNew收集器 多線程收集、暫停所有用戶線程,採用複製算法。使用-XX:+UseP

原创 TimeUnit使用和解析

一、TimeUnit.sleep1.1 使用睡眠一段時間,通常使用的是Thread.sleep方法,代碼如下:public static void testSleep() throws InterruptedException {

原创 Java獲取文件path—getPath、getAbsolutePath、getCanonicalPath區別

一、三者相同點1、路徑分隔符根據操作系統改變,Windows操作系統使用"\"分隔,Unix操作系統使用"/"分隔。2、路徑最後一個字符不爲分隔符。二、getAbsolutePath、getCanonicalPath相同點  相對路徑都會