JVM 总结

判断对象是否存活:
      1 引用计数算法          给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1 ;当引用失效就减1;任何时刻计数器为0的对象就是不可能再被使用的
       2 可达性分析算法  GC roots

Java引用 : 强引用 软引用 弱引用 虚引用


回收方法区
        在大量使用反射,动态代理,CGLib等ByteCode框架,动态生成JSP以及OSGi这类频繁自定义ClassLoader的场景都需要虚拟机具备类卸载的功能,以保证永久代不会溢出

垃圾收集算法:

  标记-清楚算法
        复制算法(新生代)
        标记整理算法(老年代)
        分代收集算法

复制 算法
 将内存分为两个区域,一个区域作为工作区域,另一个备用,工作区域内存耗尽,将此区域存活的对象复制到备用区域区域,清理此区域的所有内存,然后备用区域与工作区域角色互换,如此重复。
 缺点:无法完全使用分配的内存。


标记清理算法, 
 将内存中的对象进行标记,然后将标记为死亡的对象一次性清理。
 缺点:会产生内存碎片,在下次分配大对象是,可能出发fullgc。


标记整理算法。
 将内存中的对象进行标记,将存活的对象移动到内存顶端,之后,清理其他内存。


新生代收集器:


Serial收集器。一个单线程收集器。用于虚拟机的新生代,采用的是复制算法,但执行过程中,需要暂停所有用户线程,产生JVM停顿。 虚拟机client模式下的默认收集器,应对小内存,单cpu时,性能良好。
ParNew收集器。 Serial收集器的多线程版本,在单cpu情况下,性能比Serial差,在多核系统中,性能表现良好,-XX:+UseParallelGC 指定使用ParNew收集器,-XX:ParallelGCThreads=xx,指定线程数量,默认与cpu相当。
Parallel Scavenge收集器,一个自适应的收集器,能根据参数设置,动态的调整新身代,老年代的大小,收集算法仍然采用复制算法,但其主要关注点在于吞吐量,即关注于JVM GC的时间与整个系统的运行时间比较。
-XX:MaxGCPauseMillis 参数设定 JVM GC的停顿时间,时间为ms,jvm会尽量在此时间内完成gc。
-XX:GCTimeRatio 参数设定JVM ,设定垃圾收集时间占运行时间的比率,默认为1%


老年代收集器:
Serial old收集器,serial收集器的老年代版本,采用标记整理算法实现,执行过程中,仍然需要暂停用户线程。
Parallel Old收集器,parallel scavenge收集器的老年代版本,采用多线程+标记整理算法实现。与parallel scavenge一起何用,能有效提高吞吐量。
CMS收集器,并行收集算法,减少JVM停顿的时间。采用标记-清理算法实现。
   缺点:因为标记清理算法的实现,会导致更多的full gc ; 占用cpu资源,在cpu较少的情况下(cpu<4)会增加cpu的负担; 如果CMS在收集过程中,用户线程仍然在运行,因此需要要预留足够的内存给用户线程运行,如果预留内存不足,会导致full gc,将会起用serial old收集器,引起更大的停顿。

JVM参数:
-XX:UseSerialGC 默认client模式使用,用户单cpu场景,使用Serial +Serial old的GC收集器组合。
-XX:UseParNewGC 使用ParNew+Serial old的收集器组合。
-XX:ConcMarkSweepGC 使用ParNew+CMS+Serial old的收集器组合。
-XX:UseParallelGC Server模式的默认设置,使用 Parallel Scavenge+serial old 收集组合
-XX:UseParallelOldGC 使用 Paralel scavenge+Parallel old收集起起组合 ,最减少CPU停顿时间的组合


内存分配:

Java中变量分为静态变量,实例变量,临时变量。那么各种变量具体保存在JVM中的何处呢?

1 静态变量:位于方法区。

2 实例变量:作为对象的一部分,保存在堆中。

3 临时变量:保存于栈中,栈随线程的创建而被分配。

注:常量:位于常量池,而常量池位于方法区,若JVM采用的是分代垃圾回收,则方法区就是Perm区(永久存储区)。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值