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设置并行处理器,缩短收集时间
时间: 2024-10-24 19:07:03

jvm知识小结的相关文章

awk基础知识小结(1)

1.使用规则 awk 适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行需要特殊技巧程序设计. awk  的语法较为常见.它借鉴了某些语言的一些精华部分,如C 语言.python 和 bash. 第一个 awk 让我们继续,开始使用 awk,以了解其工作原理.在命令行中输入以下命令: $ awk '{ print }'  /etc/passwd 您将会见到 /etc/passwd 文件的内容出现在眼前.现在,解释 awk 做了些什么.调用 awk 时,我们指定  /etc/passwd

awk基础知识小结(2)

10.循环结构循环结构awk 的 while 循环结构,它等同于相应的 C 语言 while 循环.awk 还有 "do...while" 循环,它在代码块结尾处对条件求值,而不象标准 while 循环那样在开始处求值.它类似于其它语言中的 "repeat...until" 循环.示例:do...while 示例 {     count=1     do {    print "I get printed at least once no matter w

C/C++ 位域知识小结

C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存对齐全攻略–涉及位域的内存对齐原则 本文主要对位域相关知识进行了一下梳理,参考如下: C语言中的位域 史上最全的C位域总结2 C结构体之位域(位段) C/C++中以一定区域内的位(bit)为单位来表示的数据成为位域,位域必须指明具体的数目. 位域的作用主要是节省内存资源,使数据结构更紧凑. 1. 一

suid知识小结

1.1.1 suid知识小结:针对命令和二进制程序 1)用户或属主对应的前三位权限的x位上如果有s就表示suid权限.当x位上没有小写x执行权限的时候,suid的权限显示的就是大S. 2)suid作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等.(注意和su及sudo的区别),suid为某个命令设置特殊权限(使用者为所有人).通过给rm命令设置suid加深学生对suid的理解. 3)问题:希望oldboy

javascript之正则表达式基础知识小结

javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要用“\”来进行转移. 如果记不清楚那些标点符号需要转移,可以在使用标点符号时都使用反斜杠“\” 简单匹配 1.直接量 /javascript/ 匹配带有“javascript”的字符串 比如“javascript is an object-oriented scripting language” 2.[

Android app开发知识小结

Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,density是一个抽象的单位,density值表示每英寸有多少个显示点,与分辨率是两个概念QVGA屏density=120         QVGA(240*320)HVGA屏density=160         HVGA(320*480)WVGA屏density=240        WVGA(

关闭selinux知识小结

今天有人问我,哎,福星,关闭selinux这块我还有点蒙,能给我分析分析么? selinux是什么? 1.     我的简单理解:selinux是一套安全的机制,在学习环境下建议关闭,功能方面可以一些机制所替代.比如防火墙等系列安全措施 selinux一定要关闭么? 1.     没有基础又不愿意倘坑的小伙伴可以关闭,工作中环境大都不开启 2.     开启的坏处是使用中需要倘很多的坑,如果有面对困难的勇气,那就别管它 修改selinux运行状态的相关 setenforce  1 | 0    

Linq知识小结

Linq语法小结:有两种形式的语法可供我们在写Linq查询时使用,分别是“查询语法”.“方法语法”.1)先看个列子,有个直观认识     int[] arr = { 12, 2,45,34,23,18,4};     //查询语法形式(推荐使用这种).返回的是一个可枚举类型     IEnumerable<int> results = from temp in arr                                where temp > 20              

180531-Spring中JavaConfig知识小结

原文链接:Spring中JavaConfig知识小结/ Sring中JavaConfig使用姿势 去掉xml的配置方式,改成用Java来配置,最常见的就是将xml中的 bean定义, scanner包扫描,属性文件的配置信息读取等 I. 几个基本注解 1. Configuration注解 在javaConfig中注解@Configuration用来代替一个xml文件,可以简单的理解他们的作用是相等的,一般bean的定义也都是放在被这个注解修饰的类中 如一个基本的配置文件如下 @Configura