jvm知识小结

heap

  1. java的内存区称作堆(heap),用来保存类和对象
  2. heap被分为为3个称作域(generation)的主要部分,对应于对象不同的生存期
  3. 这三个generation分别为:新域(young generation),旧域(tenured generation),永久域(perm generation)
  4. 标记为virtual的部分被保留,在必要时才实际分配出去
  5. young generation由eden和两个救助空间survivor(from救助空间和to救助空间)组成
  6. eden用于生成新的对象,eden被充满时,收集器停止执行应用程序,将所有可到达的对象复制到当前的from救助空间
  7. 当from救助空间被充满时,收集器把可到达对象复制到当前的to救助空间
  8. 维持活动的对象将在救治空间中不断被复制,直到获得使用期转入旧域
  9. 需要survivor的原因:有一部分中长寿命的对象,复制小部分对象比压缩旧域廉价
  10. perm generation保存那些在jvm整个生存期都生存的对象,因此该generation不需要被垃圾回收器清空
  11. 在perm generation中一般存储类和方法对象,就配置而言不认为是heap的一部分

垃圾回收机制(GC)

  1. GC是jvm用于释放那些不再使用的对象的内存所占的内存的程序与算法
  2. 不是所有的jvm都有GC
  3. 为了标志对象是否被引用,有两种方法:引用计数、对象引用遍历
  4. 早期jvm多使用引用计数:当应用程序引用某一个对象时,增加引用数,当引用超出范围时,减少引用数。当某对象的引用数为0时,便进行垃圾回收
  5. 现在jvm多使用对象引用遍历:将对象引用关系构建成树,从一组根对象开始,递归对象进行marking,确定reachable对象,如果不是reachable对象,那这个对象就是要被回收的
  6. 删除不可到达对象时,有些jvm仅仅是删除没有标记的对象,并释放内存,这叫(sweeping)。但这会使内存分为好多小段,它们不足以生成新的对象。
  7. 因此,许多jvm会重新组织内存中的对象,并进行压缩(compact),形成可利用空间
  8. 为了内存空间的重新组织,jvm需要停止其它活动
  9. 有7种垃圾回收器,sun公司的jvm使用的是分代收集器
  10. 默认状态下,jvm在新域中使用复制收集器,对旧域使用标记-压缩-清除收集器

jvm配置

  • 通常说的栈,是新域和旧域的和,可配置两个属性(s代表start,x代表max)

    java -Xms128m
    java -Xmx128m
    通常这两个相等,避免动态增加内存
    
  • 设置新域大小(n代表new)

    java -Xmn128m(新域的初始值和最大值都为128m)
    java -XX:NewSize 64m -XX:MaxNewSize=64m
    java -XX:NewRatio=3(新域与旧域比例3:1)
    可用-XX:TargetSurvivorRatio控制救助空间比例。默认是50(50%),如救助空间是1m,那可用就是500k
    若要禁止救助空间复制,对象从eden直接扩展到tenured generation,可把MaxTenureingThreshold设置成0
    java -Xmn64m -XXSurvivorRadio=2(新域64m,eden32m,survivor各16m)
    
  • 设置永久域大小

    java -XX:MaxPerSize=64m
    java -xx:PerSize=64m(初始化永久域大小,默认是4m)
    

性能调优

  • 注意使用对象的缓存,而不是建立新对象
  • 一次完全的垃圾回收不应超过3-5秒,如果垃圾回收耗时太多,请减小heap
  • 一般来说,使用物理内存的80%作为heap大小
  • jvm虚拟机默认heap是64m
  • java.lang.outOfMemoryError:java heap spacejvm中如果98%的时间是用于GC或者可用的heap不足2%抛出此异常
  • 一般jvm的heap不超过物理内存的80%,Xms和Xmx设置为相同,Xmn为Xmx的四分之一
  • -XX:+UseParNewGc设置并行处理器,缩短收集时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值