JVM暂时待修改

JVM三大性能调优参数:-Xms –Xmx –Xss

-Xms –Xmx是对堆的性能调优参数,一般两个设置是一样的,如果不一样,当Heap不够用,会发生内存抖动。一般都调大这两个参数,并且两个大小一样。
-Xss是对每一个线程栈的性能调优参数,影响堆栈调用的深度

JVM GC时候基于的内存结构

年轻代(Eden区 From区 To区就是幸存者区),老年代和永久带
JVM暂时待修改

新生成的对象首先会进去年轻代的Eden区,如果对象太大直接进入老年代。进行GC之前对象是存在Eden和From区的。GC后会把一些对象存入To区。如果经过多次GC一直存在To区,就会把他把对象移到年老代。
因为老年代和永久带发生的是Full GC,经过年轻代的这一系列操作,可以减少Full GC带来的影响

如果Young Generation大小分配不合理或空间比较小,这个时候导致对象很容易进入Old Generation中,而Old
Generation中回收具体对象的时候速度是远远低于Young Generation回收速度。

因此实际分配要考虑年老代和新生代的比例,考虑Eden和survives的比例

Permanent Generation中发生GC的时候也对性能影响非常大,也是Full GC

三种基本的GC算法基石

  • 标记/清除算法

内存中的对象构成一棵树,当有效的内存被耗尽的时候,程序就会停止,做两件事,第一:标记,标记从树根可达的对象(途中水红色),第二:清除(清楚不可达的对象)。标记清除的时候有停止程序运行,如果不停止,此时如果存在新产生的对象,这个对象是树根可达的,但是没有被标记(标记已经完成了),会清除掉。

缺点:递归效率低性能低;释放空间不连续容易导致内存碎片;会停止整个程序运行;

  • 复制算法

把内存分成两块区域:空闲区域和活动区域,第一还是标记(标记谁是可达的对象),标记之后把可达的对象复制到空闲区,将空闲区变成活动区,同时把以前活动区对象1,4清除掉,变成空闲区。

速度快但耗费空间,假定活动区域全部是活动对象,这个时候进行交换的时候就相当于多占用了一倍空间,但是没啥用。

  • 标记整理算法

平衡点

标记谁是活跃对象,整理,会把内存对象整理成一课树一个连续的空间

不同代采用的算法

  • 1 分代GC在新生代的算法:采用了GC的复制算法,速度快,因为新生代一般是新对象,都是瞬态的用了可能很快被释放的对象。

  • 2 分代GC在年老代的算法: 标记/整理算法,GC后会执行压缩,整理到一个连续的空间,这样就维护着下一次分配对象的指针,下一次对象分配就可以采用碰撞指针技术,将新对象分配在第一个空闲的区域。

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

相关文章:

  • 2022-01-22
  • 2022-01-19
  • 2021-05-28
  • 2021-12-13
  • 2021-08-09
  • 2021-11-25
  • 2021-07-14
  • 2021-07-30
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2021-05-10
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案