1)-xmn: 新生代記憶體上限值
2)-xms: 整個堆區初始記憶體分配的大小
3)-xmx: 堆區記憶體的最大分配大小
4)-xx:survivorratio: 決定eden與乙個survivor大小之比
5)-xx:pretenuresizethreshold: 大物件直接放入老年代,避免在eden區和兩個survivor區進行大量記憶體複製
6)-xx:maxtenuringthreshold: 物件進入老年代的歲數,預設為15
當物件無法放入survivor空間,物件將被直接放入老年代。
在發生minor gc 之前,虛擬機會檢查老年代最大可用連續空間是否大於新生代所有物件大小之和,如果成立,則minor gc是安全的。否則,將檢查是否設定允許擔保失敗,允許的話,檢查可用空間是否大於歷次晉公升到老年代的物件的平均大小,如果大於,將進行minor gc,否則,或者不允許擔保失敗,將進行一次full gc。
每經過一次minor gc,物件年齡將增加1歲,當超過xx:maxtenuringthreshold時,進入老年代。
且根據動態年齡判定機制,survivor空間中相同年齡的物件總大小達到survivor空間的一半時,所有歲數大於等於該年齡的物件將直接進入老年代。
jvm例項物件分配規則
1 物件優先分配在eden區,如果eden區沒有足夠的空間時,虛擬機器執行一次minor gc。2 大物件直接進入老年代 大物件是指需要大量連續記憶體空間的物件 這樣做的目的是避免在eden區和兩個 survivor區之間發生大量的記憶體拷貝 新生代採用複製演算法收集記憶體 3 長期存活的物件進入老...
jvm 物件記憶體分配方式總結
通常來說關於jvm對於物件的記憶體分配,只要到堆內分配一般就over了,但是在很多人的部落格或者帖子中又說了一些其他的分配,比如棧內分配等等,搞的自己有點眼暈,索性就將jvm記憶體分配的方式統統查了一遍,然後總體上給縷一下。一來是方便自己,權當讀書筆記,二來希望有人能一起討論下。jvm在記憶體區域中...
JVM記憶體分配
堆區 儲存的全部是物件,每個物件都包含乙個與之對應的class的資訊。class的目的是得到操作指令 vm只有乙個堆區 heap 被所有執行緒共享,堆中不存放基本型別和物件引用,只存放物件本身 棧區 每個執行緒包含乙個棧區,棧中只儲存基礎資料型別的物件和自定義物件的引用 不是物件 物件都存放在堆區中...