jvm调优 总结 for面试

1.栈和堆
栈是运行时的单位,解决程序如何执行,代表处理逻辑
堆是存储单位,解决数据存储问题,代表数据
2.
分配内存按照8的整数倍
对象的引用:
强引用(声明对象时虚拟机生成的引用,不会被回收),
软引用(缓存,剩余内存不足时被回收)
弱引用(一定被回收)

4.垃圾回收算法
(1)引用计数:此对象有一个引用增加一个计数,删除一个引用减少一个计数。gc引用数是0的,循环引用问题无法处理
(2)标记-清楚MarkSweep:1.从引用根节点(栈)开始标记被引用的对象
形成一颗以java栈中引用所对应的对象为根节点的一颗对象树,栈中有多个引用会形成多个对象数
  2.遍历堆,清楚未标记的对象
要暂停整个应用,会产生内存碎片
(3)复制:内存被划分为2个相等的区域,每次用其中的1个
遍历当前正在用的区域,把里面使用中的复制到另一块,然后清理这一块
不会有碎片但是要2倍内存


(4) 标记-整理MarkCompact:1.从根节点标记被引用对象
2.遍历堆,清楚未标记,把存活对象压缩到一起
避免了碎片,也不需要2倍空间


5.

增量收集:实时垃圾回收,应用进行的同时进行垃圾回收

  分代收集:基于对象的生命周期,对象分为年轻代,年老代tenured space,持久代,不同生命周期的对象使用不同的算法,提高回收效率
            生命周期比较长的:session对象,线程   生命周期短的:程序运行过程中的临时变量
不区分时每次回收都是回收整个堆内存,花费时间长,每次回收回收遍历所有,生命周期长的实际上这种遍历是无效果的
年轻代young:
伊甸园Eden*1 幸存区Survivor*2(2+)
scavenge gc: 新对象生成在伊甸园申请空间失败时触发。  伊甸园区gc会比较频繁,需要速度快,效率高的算法

年老代tenured:
对象在年轻代经历N次GC后任然存活,会被放到年老代,一般存放生命周期比较长的对象
持久代perm:
存放静态文件,对垃圾回收无显著影响

full gc:清理整个堆   年老代/持久代被写满/system.gc()被调用

6.收集器
(1)串行收集器Serial Collector
单线程  适合单处理器机器  适合小数据量情况  效率高    
-xx:+useSerialGC
(2)并行收集器Paraller collector
    多线程处理垃圾回收工作,速度快,效率高
对年轻代进行并行垃圾回收,减少垃圾回收需要的时间
-xx:+useParallelGC
-xx:parallelGCThreads=<N>设置并行垃圾回收的线程数
-xx:macGCPauseMills=<N>垃圾回收最长暂停时间
-xx:gcTimeRatio=<N>  1/n+1  吞吐量  垃圾回收时间和费垃圾回收时间的比值
也可以对年老代进行并行收集
(1)(2)要暂停整个运行环境,只有垃圾回收程序运行,系统在垃圾回收时会有明显的暂停,堆越大停的时间越长
垃圾回收过程中应用响应时间可能加长
适合多Cpu对应用响应无要求的大中型应用
(3)并发收集器
应用不停止,垃圾回收只暂停很少的时间。   适合响应时间要求高的中大规模应用
CMS(并发标记清理收集器,Concurrent Mark Sweep)
主要用在老年代,在应用不停止的情况下使用独立的垃圾回收线程,短暂的停顿
-xx:+useConMarkSweepGc
浮动垃圾:应用运行同时回收垃圾,垃圾回收进行完成时会产生垃圾,在下个垃圾回收周期才可以回收。
并发模式失败concurrent mode failure:并发模式在应用运行时进行垃圾的回收,要保证堆在垃圾回收这段时间有足够的时间供程序使用
垃圾回收还没完成,堆就满了,会发生并发模式失败,整个应用会暂停。

        -xx:cmsInitiatingOccupancyFraction=<N>指定还有多少剩余堆时开始执行并发收集

7.堆大小设置
   限制因素:操作系统32/64   系统可用虚拟内存    系统可用物理内存
   java -xmx3550m  jvm最大可用内存3550m
           -xms3550m  jvm初始内存,避免每次gc后jvm重新分配内存
   -xmn2g      年轻代大小  2g   持久代固定64m  增大年轻代会减少年老代 sun推荐为整堆得3/8
   -xss128k   每个线程的堆栈大小  jdk5以后是1m
   -xx:newRation=4  年轻代和老年代比例为1:4
   -xx:survivorRation=4 两个幸存区和伊甸园的比例2:4
   -xx:maxRermSize=16 持久代大小为16M
   -xx:maxTenuringThreshold=0 从年轻代进入老年代的门槛,设置为0,年轻代的对象不经过幸存区直接进到老年区
设置为一个较大的值就是要在幸存区进行多次复制,增加对象在年轻代的存活时间增加年轻代被回收的概率


8.jdk5以后会根据当前系统配置判断使用哪种收集器,以前是串行想用其他的要加入配置

并行:



并发:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值