知其然、知其所以然!

内存分配与回收策略-深入理解垃圾回收器

学习垃圾回收的意义

Java与C++等语言最大的技术区别:自动化的垃圾回收机制(GC:Garbage Collection)

为什么要了解GC和内存分配策略

1、面试需要

2、GC对应用的性能是有影响的;

3、写代码有好处

栈:栈中的生命周期是跟随线程,所以一般不需要关注

堆:堆中的对象是垃圾回收的重点

方法区/元空间:这一块也会发生垃圾回收,不过这块的效率比较低,一般不是我们关注的重点

简化说明:谁需要GC?

       栈  =  不需要 ,凡是共享的对象

       堆:重点、方法区 / 元空间 (也有)

GC案例

自动回收机制也有失败的时候(Oom类)

-Xms  堆区内存初始内存分配的大小

-Xmx  堆区内存可被分配的最大上限

-XX:+PrintGCDetails  打印GC详情

-XX:+HeapDumpOnOutOfMemoryError

VM 参数:-Xms30m -Xmx30m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError

内存分配与回收策略-深入理解垃圾回收器

当堆内存空间溢出时输出堆的内存快照

内存分配与回收策略-深入理解垃圾回收器

新生代配置

新生代大小配置参数的优先级:

中间 -Xmn  限定大小

 

-XX:SurvivorRatio 

2个Survivor区和Eden区的比值

8 表示 两个Survivor : Eden = 2 : 8 ,每个Survivor占 1/10

可以修改为2

8 表示 两个Survivor : Eden = 2 : 2  ,各占一半

GC overhead limit exceeded 超过98%的时间用来做GC并且回收了不到2%的堆内存时会抛出此异常

1. 垃圾回收会占据资源

2. 回收效率过低也会有限制

为什么new出的对象不会被回收了,我们来看看GC是如何判断对象的存活

相关文章:

  • 2021-07-13
  • 2021-10-15
  • 2021-10-30
  • 2021-03-30
  • 2021-08-29
  • 2021-12-25
  • 2021-08-18
猜你喜欢
  • 2021-07-14
  • 2022-01-20
  • 2022-12-23
  • 2021-05-20
  • 2021-12-05
  • 2021-12-13
  • 2022-12-23
相关资源
相似解决方案