Java中的JVM虛擬機內(nèi)存分配詳解
Java虛擬機內(nèi)存分配
對象分配的規(guī)則有哪些
- 對象主要分配在新生代的 Eden 區(qū)上
- 如果啟動了本地線程分配緩沖,將按線程優(yōu)先在 TLAB 上分配
- 少數(shù)情況下也可能會直接分配在老年代中
GC參數(shù)指定垃圾回收
-Xms20 M、-Xmx20 M、-Xmn1 0 M 這 3 個參數(shù)限制了 Java 堆大小為 20 MB,不可擴展,其中 10 MB 分配給新生代,剩下的 10 MB 分配給老年代。-Xx: SurvivorRatio= 8 決定了新生代中 Eden 區(qū)與兩個 Survivor 區(qū)的空間比例是 8:1
新生代與老年代
新生代 GC (Minor GC):指發(fā)生在新生代的垃圾收集動作,因為 Java 對象大多都具備朝生夕滅的特性,所以 Minor GC 非常頻繁,一般回收速度老年代 GC (Major GC/ Full GC):指發(fā)生在老年代的 GC,出現(xiàn)了 Major GC,經(jīng)常會伴隨至少一次的 Minor GC(但非絕對的,在 Parallel Scavenge 收集器的收集策略里就有直接進行 Major GC 的策略選擇過程)。Major GC 的速度一般會比 Minor GC 慢 10 倍以上。
大對象的分配和基本分配一樣嗎?
簡介:堆內(nèi)存JVM參數(shù)講解,大對象分配原則講解和代碼驗證
是什么?
- 所謂的大對象是指,需要大量連續(xù)內(nèi)存空間的 Java 對象,最典型的大對象就是那種很長的字符串以及數(shù)組
- 虛擬機提供了一個-XX: PretenureSizeThreshold 參數(shù),令大于這個設置值的對象直接在老年代分配。這樣做的目的是避免在 Eden 區(qū)及兩個 Survivor 區(qū)之間發(fā)生大量的內(nèi)存復制
實戰(zhàn)代碼演練大對象配置
- -verbose:gc -XX:+PrintGCDetails 開啟GC日志打印
- -Xms20 M 設置JVM初始內(nèi)存為20M
- -Xmx20 M 設置JVM最大內(nèi)存為20M
- -Xmn10 M 設置年輕代內(nèi)存大小為10M
-verbose:gc -XX:+PrintGCDetails -XX:+UseSerialGC -Xms20M -Xmx20M -Xmn10M -XX:PretenureSizeThreshold=3145728
package test; /** * @Author: ruan * Date: 2021/7/25 10:07 * @Description: 對象主要被分配在新生代中 * 但對于一些大對象則被直接分配在老年代中 */ public class TestMaxObject { public static void main(String[] args) { /** *設置新時代最大容量為3m時 * 創(chuàng)建10m的大對象這會直接被分配在老年代中 */ byte[] bytes = new byte[1024 * 1024 * 10]; } }
逃逸分析和棧上分配
簡介:堆內(nèi)存分配方式,分配規(guī)則講解
逃逸分析
逃逸分析的基本行為就是分析對象動態(tài)作用域:當一個對象在方法中被定義后,它可能被外部方法所引用,稱為方法逃逸。甚至還有可能被外部線程訪問到,譬如賦值給類變量或可以在其他線程中訪問的實例變量,稱為線程逃逸
棧上分配
棧上分配就是把方法中的變量和對象分配到棧上,方法執(zhí)行完后自動銷毀,而不需要垃圾回收的介入,從而提高系統(tǒng)性能
-XX:+DoEscapeAnalysis //開啟逃逸分析(jdk1.8默認開啟,其它版本未測試) -XX:-DoEscapeAnalysis //關(guān)閉逃逸分析
到此這篇關(guān)于Java中的JVM虛擬機內(nèi)存分配詳解的文章就介紹到這了,更多相關(guān)Java虛擬機內(nèi)存分配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Cloud?Gateway集成Sentinel流控詳情
這篇文章主要介紹了Spring?Cloud?Gateway集成Sentinel流控詳情,Sentinel支持對Spring?Cloud?Gateway、Zuul等主流的API?Gateway進行限流,需要的朋友可以參考一下2022-09-09SpringBoot獲取yml和properties配置文件的內(nèi)容
這篇文章主要為大家詳細介紹了SpringBoot獲取yml和properties配置文件的內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04