JVM

一、JVM内存区域划分

jvm区域总体分两类

heap区

  Eden Space(伊甸园)、Survivor Space(幸存者区)、Tenured Gen(老年代-养老区)

非heap区

  Code Cache(代码缓存区)、Perm Gen(永久代)、Jvm Stack(java虚拟机栈)、Local Method Statck(本地方法栈)

 

Sun JVM的内存管理采用分代的策略

  年轻代(Young Gen):年轻代主要存放新创建的对象

    年轻代分成1个Eden Space和2个Suvivor Space

  年老代(Tenured Gen):年老代主要存放JVM认为生命周期比较长的对象

  持久代(Perm Gen):持久代主要存放类定义、字节码和常量等很少会变更的信息

 

 

JVM -XX:NewRatio、-XX:SurvivorRatio参数含义

堆大小 = 年轻代 + 老年代

JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小

Runtime.maxMemory() = OldGen + NewGen - Survivor

-xx:NewRatio:

  年轻代(eden+2*survivor)和年老代(不含永久区)的比值

  4 表示 年轻代 :年老代=1 :4,即新生代占堆的1/5

-xx:SurvivorRatio

  设置两个Survivor区和eden的比

      8表示 两个Survivor:eden = 2:8,即一个Survivor占年轻代的1/10

 

 

/opt/taobao/java/bin/java -server

-Xms4g  最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你 

-Xmx4g 是最大堆的大小

-Xmn2g 设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小,正常情况下,Runtime.maxMemory() = OldGen + NewGen - Survivor

-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
-XX:MaxDirectMemorySize=1g
-XX:SurvivorRatio=10
-XX:+UseConcMarkSweepGC
-XX:CMSMaxAbortablePrecleanTime=5000
-XX:+CMSClassUnloadingEnabled
-XX:CMSInitiatingOccupancyFraction=80
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+ExplicitGCInvokesConcurrent
-Dsun.rmi.dgc.server.gcInterval=2592000000
-Dsun.rmi.dgc.client.gcInterval=2592000000
-XX:ParallelGCThreads=2
-Xloggc:/home/admin/logs/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/admin/logs/java.hprof
-Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=10000
-Dsun.net.client.defaultReadTimeout=30000
-DJM.LOG.PATH=/home/admin/logs
-DJM.SNAPSHOT.PATH=/home/admin/snapshots
-Dfile.encoding=UTF-8
-Dhsf.publish.delayed=true
-Dproject.name=ssp-wiki
-Dpandora.boot.wait=true
-Dlog4j.defaultInitOverride=true
-Dserver.port=7001
-Dmanagement.port=7002
-Dmanagement.server.port=7002
-javaagent:/home/staragent/plugins/codecoverage/local_data/cc-agent.jar=output=tcpserver,address=127.0.0.1,port=47653
-Dpandora.location=/home/admin/ssp-wiki/target/taobao-hsf.sar
-classpath /home/admin/ssp-wiki/target/ssp-wiki
-Dapp.location=/home/admin/ssp-wiki/target/ssp-wiki
-Djava.endorsed.dirs=
-Djava.io.tmpdir=/home/admin/ssp-wiki/.default/temp com.taobao.pandora.boot.loader.SarLauncher

 

 

 

新生代存储段生命周期短的实例对象,老年代存储生命周期较长的实例对象。YGC又称为Minor GC。我们当前使用的JVM设置的都是CMS垃圾策略,这里采用的标记-复制-清除算法。新生代的垃圾回收为YGC的管理范围.老年代Perm的垃圾回收为FGC的管辖范围。
各个区所占用内存多少有JVM参数来指定:

-Xmx2g   堆所占最大内存2g
-Xms2g    堆最小内存2g
-Xmn1024m  新生代( new 区)1024M
-XX:PermSize=128m  perm区128M
-XX:SurvivorRatio= 5  新生代中eden:Survivor1= 5 : 1 并且Survivor1:Survivor2= 1 ,此值默认为 8 (这里有IBM调研报告,Java程序在运行过程中 80 %的对象实例是朝生夕死的)
-XX:MaxTenuringThreshold= 15  对象晋升老年代年龄条件 15 次(默认值 15 )
-XX:+UseCMSCompactAtFullCollection  jvm在FullGC之后整理内存空间清除碎片
-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled  -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -

 

jmap 能查看jvm内存中,对象占用内存的情况,还提供非常方便的命令将jvm的内存信息导出的文件。

 

format=b是通过二进制的意思,-dump:format=b,file=heap.bin意思是:把内存结构全部dump到二进制文件heap.bin中。

执行命令:jhat -J-Xmx512m heap.bin   ,(ha指IBM的HeapAnalyzer)

转载于:https://www.cnblogs.com/netuml/articles/10496870.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值