栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

测试工程师都能看懂的Jvm知识 中

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

测试工程师都能看懂的Jvm知识 中

你好 我是懂java的测试


前言

上篇文章只是介绍了一些jvm基础知识,反响还不错,本篇文章分享一些jvm稍微深入的东西。

还是老规矩,本文将以问答形式,由易到难,循序渐进讲述jvm相关的知识。不拽那些官方晦涩难懂的词语,只想用白话通俗的语言,力争让大家都能看懂jvm。

1、JVM中都有哪些常见的垃圾回收器? 主要分为以下几种: Serial 回收新时代的回收器,Serial它是一种单线程收集器,不仅仅意味着它只会使用一个CPU或者一条收集线程去完成垃圾收集工作,更重要的是其在进行垃圾收集的时候需要暂停其他线程。

优点:简单高效,拥有很高的单线程收集效率

缺点:收集过程需要暂停所有线程

算法:复制算法

适用范围:新生代

Serial old

Serial Old收集器是Serial收集器的老年代版本,也是一个单线程收集器,不同的是采用"标记-整理算法",运行过程和Serial收集器一样

ParNew

可以把这个收集器理解为Serial收集器的多线程版本。

优点:在多CPU时,比Serial效率高。

缺点:收集过程暂停所有应用程序线程,单CPU时比Serial效率差。

算法:复制算法

适用范围:新生代

CMS

CMS是老年代的回收器,和ParNew一样,多线程版本,使用的是标记清楚算法,

但是它有下面 几个明显的缺点:

对CPU资源敏感(会和服务抢资源)、无法处理浮动垃圾、它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生。

G1

G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机 器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.

2、"Stop the world"是什么玩意儿?

为了要让垃圾回收器专心致志的干工作,不能随便让我们写的Java系统继续对象了,所以此时JVM会在后台直接进入“Stop the World”状态。也就是说,他会直接停止我们写的Java系统的所有工作线程,让我们写的代码不再运行!

为什么这么玩?试想一下,别人刚通过“可达性算法”判断部分内存区域对象是可回收垃圾,这时候系统运行又创建了大量对象,别人又要重新判断哪些对象可回收,这还怎么进行垃圾回收?

3、Young Gc、Full Gc又是什么玩意? Young Gc就是发生在新时代的垃圾回收,有些资料说Minor Gc,其实就Young Gc,Major Gc就是发生在老年代的垃圾回收,又称OldGc,Full Gc是发生在新时代、老年代、永久代等区域的垃圾回收,full就是全部的意思。不管是Young Gc、Full Gc还是其他Gc,都会造成 Stop the World 现象,都会导致系统卡顿,只是每个Gc造成的卡顿时间不同。 4、Young Gc、Old Gc什么时候触发? Young Gc一般在新时代 Eden区满了之后就会采用复制算法,进行垃圾回收。 Old Gc一般发生的条件有以下几种:
  1. Young Gc后有一批对象回收不了,要进入老年代,但是老年代的内存空间放不下这么多对象,只能通过Old Gc来清理空间,来存放新时代过来的对象。

2)老年代空间使用率达到92%(可配置),也会触发Old Gc,

总之一句话,就是老年代没有足够的空间放置新对象了,所以得通过Old Gc 来回收对象。在很多 Jvm实现机制里,其实在上述条件达到以后,可能会触发FullGc,连同新时代、老年代、永久代一起给回收咯。

如果Full GC之后,老年代还是没有足够空间存放Minor GC过后的剩余存活对象,此时就会导致所谓的“OOM”内存溢出了。

5、自己动手模拟Young GC看看?

打开Idea 、新建一个类,输入以下代码

public class RocketMqTest {

    public static void main(String[] args) {
        //1m 1024*1024
        byte[] array = new byte[1024*1024];
        array=new byte[1024*1024];
        array=new byte[1024*1024];
        array=new byte[1024*1024];
        array = null;
        byte[] array1 = new byte[2*1024*1024];

    }

}

然后在截图所示区域

填写以下配置:

-XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760  -XX:NewSize=5242880  -XX:Ma
xNewSize=5242880 -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:gc.log

然后运行main 方法,会在项目中生成GC.log,如下所示

Java HotSpot(TM) 64-Bit Server VM (25.211-b12) for windows-amd64 JRE (1.
8.0_211-b12), built on Apr  1 2019 20:53:26 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 8133460k(1586644k free), swap 33299284k(15627288k free)
CommandLine flags: -XX:InitialHeapSize=10485760 -XX:MaxHeapSize=10485760 -XX:MaxNewSize=5242880 -XX:NewSize=5242880 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
0.804: [GC (Allocation Failure) [PSYoungGen: 3984K->504K(4608K)] 3984K->2094K(9728K), 0.0034707 secs] [Times: user=0.05 sys=0.00, real=0.00 secs] 
Heap
 PSYoungGen      total 4608K, used 3727K [0x00000000ffb00000, 0x0000000100000000, 0x0000000100000000)
  eden space 4096K, 78% used [0x00000000ffb00000,0x00000000ffe25c98,0x00000000fff00000)
  from space 512K, 98% used [0x00000000fff00000,0x00000000fff7e010,0x00000000fff80000)
  to   space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
 ParOldGen       total 5120K, used 3638K [0x00000000ff600000, 0x00000000ffb00000, 0x00000000ffb00000)
  object space 5120K, 71% used [0x00000000ff600000,0x00000000ff98db10,0x00000000ffb00000)
 Metaspace       used 3177K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 347K, capacity 388K, committed 512K, reserved 1048576K

是不是很懵逼?没关系下期文章我会着重介绍这些打印的日志,并且会详细分享Jvm调优方式。

新开了java测试开发交流群,喜欢的可加入,若失效,可加我微信lvceshikaifa,拉你进群。

关注公众号,测试干货及时送达

懂Java的测试

软件测试技术分享,包括功能、自动化、性能、测试开发等,简历指点、面试助攻等

17篇原创内容

公众号

懂Java的测试精品文章

  • 接口自动化相关面试题

  • 测试工程师都能看懂的Redis 上

  • 模拟面试之高级测试要具备的知识广度和深度

  • 测试工程师都能看懂的Jvm知识 上

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/821970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号