日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM 内存区域大小参数设置

發(fā)布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM 内存区域大小参数设置 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

需要提前了解的知識點:
1. JVM內存模型
2. JVM垃圾回收算法

下圖是JVM內存區(qū)域劃分的邏輯圖

從圖中我們大概了解JVM相關的內存區(qū)域。

JVM內存包括區(qū)域

  • Heap(堆區(qū))

    • New Generation(新生代)
      • Eden
      • Survivor From
      • Survivor To
    • Old Generation(老年代)
  • 方法區(qū)

    • Permanent Generation(持久代)
  • Stack(棧區(qū))
  • Metaspace(元空間)
  • Direct ByteBuffer(直接內存)
  • 下面我們就通過一些JVM啟動參數(shù)來配置以上內存空間

    Heap(堆)內存大小設置

    -Xms512m

    設置JVM堆初始內存為512M

    -Xmx1g

    設置JVM堆最大可用內存為1G

    New Generation(新生代)內存大小設置

    -Xmn256m

    設置JVM的新生代內存大小(-Xmn 是將NewSize與MaxNewSize設為一致。256m),同下面兩個參數(shù)
    -XX:NewSize=256m
    -XX:MaxNewSize=256m

    還可以通過新生代和老年代內存的比值來設置新生代大小
    -XX:NewRatio=3

    設置新生代(包括Eden和兩個Survivor區(qū))與老年代的比值(除去持久代)。設置為3,則新生代與老年代所占比值為1:3,新生代占整個堆棧的1/4

    Survivor內存大小設置

    -XX:SurvivorRatio=8

    設置為8,則兩個Survivor區(qū)與一個Eden區(qū)的比值為2:8,一個Survivor區(qū)占整個新生代的1/10

    Eden內存大小設置

    新生代減去2*Survivor的內存大小就是Eden的大小。

    Old Generation(老年的)的內存大小設置

    堆內存減去新生代內存
    如上面設置的參數(shù)舉例如下:
    老年代初始內存為:512M-256M=256M
    老年代最大內存為:1G-256M=768M

    Stack(棧)內存大小設置

    -Xss1m
    每個線程都會產生一個棧。在相同物理內存下,減小這個值能生成更多的線程。如果這個值太小會影響方法調用的深度。

    Permanent Generation(持久代)內存大小設置

    方法區(qū)內存分配(JDK8以前的版本使用,JDK8以后沒有持久代了,使用的MetaSpace)
    -XX: PermSize=128m 設置持久代初始內存大小128M
    -XX:MaxPermSize=512m 設置持久代最大內存大小512M

    Metaspace(元空間)內存大小設置

    元空間(Metaspace)(JDK8)
    -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m(JDK8),JDK8的持久代幾乎可用完機器的所有內存,同樣設一個128M的初始值,512M的最大值保護一下。

  • 默認情況下,類元數(shù)據(jù)分配受到可用的本機內存容量的限制(容量依然取決于你使用32位JVM還是64位操作系統(tǒng)的虛擬內存的可用性)。
  • 一個新的參數(shù) (MaxMetaspaceSize)可以使用。允許你來限制用于類元數(shù)據(jù)的本地內存。如果沒有特別指定,元空間將會根據(jù)應用程序在運行時的需求動態(tài)設置大小。
  • Direct ByteBuffer(直接內存)內存大小設置

    -XX:MaxDirectMemorySize

    此參數(shù)的含義是當Direct ByteBuffer分配的堆外內存到達指定大小后,即觸發(fā)Full GC。注意該值是有上限的,默認是64M,最大為sun.misc.VM.maxDirectMemory(),在程序中中可以獲得-XX:MaxDirectMemorySize的設置的值。
    使用NIO可以api可以使用直接內存。

    設置新生代代對象進入老年代的年齡

    -XX:MaxTenuringThreshold=15

    設置垃圾最大年齡。如果設置為0的話,則新生代對象不經過Survivor區(qū),直接進入老年代。對于老年代比較多的應用,可以提高效率。如果將此值設置為一個較大值,則新生代對象會在Survivor區(qū)進行多次復制,這樣可以增加對象再新生代的存活時間,增加在新生代即被回收的概論。

    他最大值為15歲,因為對象頭中用了4位進行存儲垃圾年齡 【1111(二進制)=15(十進制)】。

    不常用的參數(shù):

    -XX:MaxHeapFreeRatio=70

    GC后java堆中空閑量占的最大比例,大于該值,則堆內存會減少

    -XX:MinHeapFreeRatio=40

    GC后java堆中空閑量占的最小比例,小于該值,則堆內存會增加

    -XX:PretenureSizeThreshold=1024

    (單位字節(jié))對象大小大于1024字節(jié)的直接在老年代分配對象

    -XX:TLABWasteTargetPercent =1

    TLAB占eden區(qū)的百分比 默認1%

    本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
    點擊這里快速進入簡書

    GIT地址:http://git.oschina.net/brucekankan/
    點擊這里快速進入GIT

    總結

    以上是生活随笔為你收集整理的JVM 内存区域大小参数设置的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。