JVM笔记(垃圾回收器)

jvm内存模型:

栈区:存储对象地址

堆区:存储实际对象

本地方法栈:存储C++的方法的内存区

程序计数器: 当前程序执行的位置

方法区(元空间):static静态的变量,类加载器等

堆区和方法区是全局共享的。

清理垃圾的话,其实主要是将清理堆区的清理。GC会自动开辟一个线程,自动执行清理。

 

垃圾回收器算法:

常见的垃圾回收器

stop-the-world  (暂停整个程序,简称STW)

1、Serial (单线程工作的年轻代)  作用于年轻代   串行回收

在程序运行过程中,内存满了以后,触发GC, 先STW以后然后单线程一个个标记清除,程序继续运行

2、ps (多线程工作的年轻代)   作用于年轻代    并行回收   不可以配合CMS

在程序运行过程中,内存满了以后,触发GC, 先STW以后然后多线程一个个标记清除,程序继续运行

3、ParNew (多线程工作的新年轻代)   作用于年轻代  可以配合CMS的并行回收

4、SerialOld  (单线程工作的老年代)

5、ParallelOld  (多线程工作的老年代)

6、ConcurrentMarkSweep (运行时多线程的老年代,简称CMS)  老年代  并发的   垃圾回收和应用程序同时运行,不需要stop-the-word  

CMS为里程碑式的垃圾回收器。  这里出现难点,会出现浮动垃圾。如:垃圾处理过程中,已经标记为垃圾的内存。在程序运行过程中这块内存又使用了。

三色标记 ,做并发标记

在运行过程中,进行标记垃圾内存,标记完成以后。

也会发生STW,将已经标记为垃圾的内存,再次筛选标记。

然后程序继续运行,这时候将筛选完后的内存清理掉。然后开始第二轮标记。

7、G1  (分区回收)   逻辑分代,物理不分代    (三色标记+SATB)

8、ZGC    逻辑物理都不分代    ColoredPointers(颜色指针,着色指针)

9、Shenandoah  逻辑物理都不分代

10、Eplison  (如果确认你的程序不需要垃圾回收器,可使用)

调优主要调优1、2和4、5。           因为1.8默认的垃圾回收:PS+ParallelOld     

JVM调优

JVM运行命令参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

JVM参数分类

标准:-开头,所有的HotSpot都支持

非标准:-x开头

不稳定:-xx开头    常用:   -xx:+PrintFlagsFinal(设置值);  -xx:+PrintFlagslnitial(默认值) ;  -xx:+PrintCommandLineFlags(命令行参数)

垃圾回收器的发展路线,是随着内存越来越大的过程来演进

从分代算法演化到不分代算法

在分代算法中,对象创建分配过程图:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值