1. jvm基础

1. 类的加载过程

加载,验证,准备,解析,初始化,使用,销毁

2. 内存划分

  • 线程私有
    • 程序计数器 没有OOM
    • JAVA虚拟机栈
    • 本地方法栈
  • 线程共享
    • java堆
    • 方法区,包括:运行时常量池
  • 直接内存

3. 如何设置内存大小

-Xms:Java堆内存的大小

-Xmx:Java堆内存的最大大小

-Xmn:Java堆内存中的新生代大小,扣除新生代剩下的就是老年代的内存大小了

-XX:PermSize:永久代大小

-XX:MaxPermSize:永久代最大大小

-Xss:每个线程的栈内存大小

 

XX:SurvivorRatio=8 Eden和Survivor区的比例

-XX:MaxTenuringThreshold=5 对象多少岁进入老年代

-XX:PretenureSizeThreshold=1M 多大的对象直接进入老年代

 

-XX:+UseParNewGC 新生代使用ParNew垃圾回收器

-XX:+UseConcMarkSweepGC 老年代使用CMS垃圾回收器

 

-XX:CMSInitiatingOccupancyFaction 老年代占用多大比例会fullGc

-XX:CMSFullGCsBeforeCompaction=0 老年代多少fullGc后会进行碎片整理

 

具体计算:

如果机器内存为4G,jvm的内存大概是2G,

除了栈内存和方法去,堆内存大概能分1G,

老年代分几百兆,新生代就就只有几百兆了

 

每秒访问量 * 每次访问创建的对象大小 * (10~20)--- 100 * 1k * 10 = 1M

几百秒就会触发一次GC

 

 

4. 什么时候会触发老年代Gc

  1. 老年代可用内存小于新生代全部对象大小,没有开启空间担保参数,会直接触发fullGc,所以一般空间担保参数会打开
  2. 老年代可用内存小于每次新生代进入老年代的平均大小,会提前触发fullGc
  3. minorGc后存活对象大于survivor,会进入老年代,如果老年代空间不足,会触发fullGc
  4. -XX:CMSInitiatingOccupancyFaction参数设置老年代对象占用比例超过多少,会触发CMS

5. 对象是如何进入老年代的

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值