
棧溢出,就是當遞歸調用的時候沒有臨界退出條件批量導入大量資料或者dom4j解析大的xml檔案的時候會出堆溢出,通過分段批量送出以及sax代替dom4jjava虛拟機有一個堆,堆是運作時資料區域所有的類和數組的記憶體都是從堆裡配置設定的堆是在java虛拟機啟動的時候建立的,兩種記憶體:堆和棧,堆是java開發人員使用的棧是jvm自己使用的,記憶體結構分為:堆(邏輯上連續的,實體上不是連續的,存的是類執行個體,和數組),虛拟機棧(基本的資料類型,引用對象),本地方法棧(jvm棧是為java方法的執行提供服務,而本地方法棧是為虛拟機為本地方法提供服務的),方法區(持久代)(加載了類的基本資訊,常量池的屬于方法區的一部分,string就是存在常量池中),電腦(就是來選取要執行下一條位元組碼的指令)gc垃圾回收機制,動态配置設定記憶體的大小,依靠垃圾回收機制來完成對配置設定記憶體空間的回收,進而避免了記憶體溢出的問題,降低了程式員工作的複雜度,采用了分代回收算法,jvm将記憶體分為年輕代和年老代,年輕代就是對象剛建立不久,生命周期也很短,而年老代對象建立的比較久了而且生命周期也很長,對于年輕代 頻繁 采用複制算法 而年老代比較少采用tracing算法jvm的記憶體大小和作業系統有關,一般來說是32位處理器記憶體為2個g,64為的處理器就不會有有限制了作業系統會給一個限制一般是2GB-3GB(一般來說Windows系統下為1.5G-2G,Linux系統下為2G-3G)java的監視和管理控制台:是我們在運作的時候監視各種jvm資源統計資訊,使用與檢測死鎖,記憶體遺漏,可以連接配接到一個本地或遠端的jvm可以用來監視線程的狀态,記憶體的使用情況,垃圾收集等等等jvm的調優:開啟server模式,增堆的大小,以及持久代的大小,提高程式的運作效率,設定初堆大小和最大堆的大小都為一樣的值,避免了堆增長帶來額外的壓力,持久代也是一樣jvm中類的生命周期:加載、連接配接、初始化,使用,解除安裝連接配接(校驗,準備,解析)在伺服器啟動的時候報記憶體溢出是因為方法區太小,也就相當于持久代的記憶體太小。通過-XX:PermSize以及-XX:MaxPermSize來指定其大小,可以解決這個問題。引導類加載器:rt.Jar包擴充類加載器:jre目錄有一個ext下面的lib目錄系統類加載器:classPath的裡面的東西自定義類加載器:加載自定義類。
Jvm優化JVM 優化主要是解決java的 GC (垃圾回收)問題。
JVM 的使用過程中各代有,年輕帶主要存放,新建立對象。年老代,年老代存放從年輕代存活的對象。Perm(持久代)用于存放靜态檔案,如今Java類、方法等。一般持久代可以設定大一點。
GC優化的目的有兩個:
1、将轉移到老年代的對象數量降低到最小;
2、減少full GC的執行時間;
為了達到上面的目的,一般地,你需要做的事情有:
1、減少使用全局變量和大對象;
2、調整新生代的大小到最合适;
3、設定老年代的大小為最合适;
4、選擇合适的GC收集器;
【垃圾回收(GC收集器):串行收集器、并行收集器、并發收集器。
串行處理器:
--适用情況:資料量比較小(100M左右);單處理器下并且對響應時間無要求的應用。
--缺點:隻能用于小型應用
并行處理器:
--适用情況:“對吞吐量有高要求”,多CPU、對應用響應時間無要求的中、大型應用。舉例:背景處理、科學計算。(例如 ERP 銀行系統)
--缺點:應用響應時間可能較長
并發處理器:
--适用情況:“對響應時間有高要求”,多CPU、對應用響應時間有較高要求的中、大型應用。舉例:Web伺服器/應用伺服器、電信交換、內建開發環境。(例如網際網路網站)】
5、設定jvm堆大小,32bit1.5-2G,64bit 可以超過 2G ,新版的JDK 每個線程的堆大小在1M改變這個線程所占用的堆大小,可以生成更多的線程,一般項目裡線程數不能超過5000個。