【java】JVM的GC

1.jvm运行时区域划分

线程私有

程序计数器:线程执行到那一行
虚拟机栈:java方法内存模型
本地方法栈:native方法内存模型
在Hotspot中JVM中本地方法和虚拟机栈合二为一

线程共享

堆:所有对象实例与数组对象
方法区:已加载的类信息、静态变量、常量
运行时常量池:方法区的一部分,字面量与符号引用
字面量:直接写出来的值 10、“abc” 10.1

2.GC相关:

如何判断对象是否存活

引用计数法:无法解决循环引用问题(我中有你,你中有我)
导致无用对象仍然判断存活而无法被回收

可达性分析算法:

哪些对象可以作为GC Roots:栈中引用的对象;类中静态变量、常量引用的对象

面试题JDK1.2关于引用的扩充
强引用:程序普遍存在的,类似于直接new称为强引用。只要对象被任意一个强引用指向,即便抛出OOM异常,也无法回收被强引用指向的对象。
软引用:描述有用但不必须对象,SoftReference类描述软引用。若对象只被软引用指向,当前内存够用时,不回收,当即将抛出OOM异常,一次性回收所有仅被软引用指向的对象
弱引用:WeakReference 仅被弱引用指向的对象,无论内存是否够用,当GC开始时,都会回收掉仅被软引用指向的对象
虚引用:PhantomReference
虚引用完全不对对象的生存周期产生任何影响,也无法通过虚引用取得一个对象实例。
当虚引用指向的对象被GC时,JVM会发回一个回收通知。

对象的自我拯救finalize JDK1.9 @Deprecated

-若对象所在的类覆写了finalize()
-该对象的finalize()未被JVM调用过,JVM会调用此对象的finalize()
-该对象的finalize()被JVM调用过,此对象被标记为不再存活,可以进行GC

-对象所在的类没有覆写finalize(),此对象直接标记为不再存活,可以进行GC
final、finally、finalize

垃圾回收算法

将堆空间分为新生代和老年代,默认对象在新生代中产生,新生代对象“朝生夕死”。新生代对象的存活率极低(<=2%)
Java采用分代回收算法,其中新生代采用复制算法,老年代采用标记算法-整理算法
-Xss 设置栈的大小
-Xms设置堆的最小值
-Xmx设置堆得到最大值
-Xmn设置新生代内存大小

新生代的复制算法执行步骤:

新生代的复制算法
新生代的GC比老年代的GC速度快上10倍,发生频率高的多
为什么老年代不采用复制算法?
因为老年代对象存活率极高,若采用复制算法,复制开销远高于新生代,不适合复制算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java垃圾回收(Garbage Collection, GC)是由Java虚拟机(JVM)自动执行的内存管理机制。配置Java GC的主要目的是调整内存管理和垃圾回收策略,以达到更好的性能和内存利用率。 以下是一些常见的Java GCJVM配置选项: 1. 选择垃圾回收器(GC algorithm):Java提供了多种垃圾回收算法,如Serial GC、Parallel GC、CMS GC、G1 GC等。可以通过设置`-XX:+UseSerialGC`、`-XX:+UseParallelGC`、`-XX:+UseConcMarkSweepGC`、`-XX:+UseG1GC`等选项来指定使用的垃圾回收器。 2. 设置新生代和老年代大小:Java堆内存被分为新生代(Young Generation)和老年代(Old Generation),可以通过`-Xmn`选项设置新生代大小,通过`-Xmx`和`-Xms`选项设置堆最大和初始大小。 3. 调整垃圾回收的停顿时间:默认情况下,JVM会尽量减少垃圾回收过程对应用程序的停顿时间,但可能会牺牲一些吞吐量。可以通过`-XX:MaxGCPauseMillis`选项设置最大停顿时间。 4. 设置垃圾回收相关参数:可以通过一些参数来调整垃圾回收的行为,如`-XX:MaxTenuringThreshold`设置对象进入老年代的年龄阈值,`-XX:SurvivorRatio`设置新生代中Eden区和Survivor区的大小比例等。 5. 监控和调优:可以使用JVM提供的工具(如jstat、jconsole、jvisualvm等)来监控垃圾回收情况和内存使用情况,从而进行优化和调整。 需要注意的是,不同的应用程序和场景可能需要不同的GCJVM配置,具体的配置需要根据实际情况进行调整和优化。此外,建议在进行GCJVM配置调整时,先进行性能测试和监控,以确保配置的改变能够带来预期的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值