美文网首页Java学习笔记Spring-Boot
Jvm系列:问君能有几多愁,系统宕机重启流

Jvm系列:问君能有几多愁,系统宕机重启流

作者: d2890c1dd688 | 来源:发表于2019-01-11 21:55 被阅读5次

    上回说到《不识Jvm真面目,只缘身在增删查改中》

    讲述了一些有关于Jvm,线程,栈的有关技术知识,还有两个关于JVM的面试题:

    JVM什么情况下会发生栈内存溢出?

    JVM中一次完整的GC流程是怎样的?

    GC——垃圾回收完整意味着有多种情况

    今天就接着将视频内容介绍完

    可达性分析算法——GC Roots

    判断对象的存活

    在Java, 可作为GC Roots的对象包括:

    虚拟机栈(本地变量表)中引用的对象.

    方法区: 类静态属性引用的对象;

    方法区: 常量引用的对象;

    JVM中的堆

    1.Java堆是垃圾回收器管理的主要区域

    2.基于分代的方式

    (1)新生代

    Eden空间

    From Survivor空间

    To Survivor空间

    (2)老年代

    3.Java堆的大小参数设置

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

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

    新生代为什么分三个区?

    新生代垃圾回收算法——复制算法

    该算法的核心是将可用内存按容量划分为大小相等的两块, 每次只用其中一块, 当这一块的内存用完, 就将还存活的对象复制到另外一块上面, 然后把已使用过的内存空间一次清理掉.

    优点

    不必考虑内存碎片问题。

    效率高。

    缺点

    可用容量减少为原来的一半,太浪费了。

    最优设置

    90%的对象都是朝生夕死的,所以使用10%的空间用作交换区,因为交换区必须有等量的两个,所以采用复制算法的新生代中的三个区采用8:1:1的默认分配比例。

    新生代对象的分配和回收

    对象分配

    基本上新的对象优先在Eden区分配。

    当Eden区没有足够空间时,会发起一次Minor GC。

    Minor GC回收新生代采用复制回收算法的改进版本

    From和To的两个交换区,这两个区只有一个区有数据

    采用8:1:1的默认分配比例

    (参数配置:-XX:SurvivorRatio )Eden区与Survivor区的大小比值。默认是8

    思考:如果new对象过大?

    老年代对象的分配和回收

    老年代的对象一般情况下来自新生代

    (1)长期存活对象进入老年代

    年龄阈(yu)值:每个对象定义了年龄(Age)计数器, 经过一次Minor GC(在交换区)后年龄加1。

    对象年龄达到15次后将会晋升到老年代,老年代空间不够时进行Full GC。

    参数(-XX:MaxTenuringThreshold, 默认15)。

    (2)大对象直接进入老年代

    超过Eden剩余空间

    超过一个参数值(-XX:PretenureSizeThreshold =XX, 无默认值)

    (3)对象提前晋升(组团)

    动态年龄判定:如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代, 而无须等到晋升年龄.

    JVM中一次完整的GC流程是怎样的?

    从上两节总结出的一个面试题

    对象的正常流程

    Eden -> Survivor区 -> 老年代

    新生代 Minor GC

    老年代 Full GC

    总结

    内存区域不够用了,就会引发GC

    作为架构师该怎么做:Minor GC避免不了,Full GC尽量避免

    处理方式:保存堆栈快照日志、分析内存泄露、调整内存设置控制垃圾回收频率,选择适合的垃圾回收器

    这篇关于jvm视频的简述就到这里结束了,当然仅仅看这里的图文,有些人可能摸不着头脑,我这边为大家准备了完整的视频。有需要的朋友可以关注我一下,欢迎加入我的合作群:805685193  即可获取原视频。

    还有一些Java架构视频讲解,需要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和BATJ面试题及答案的,都是免费分享的。

    关注我,欢迎加入我的合作群:805685193  即可获取以上相关视频。

    另外,如果想提升自己的技术,这一点是远远不够的。我这里还是把之前那位大佬分享给我的Java架构思维路线知识点分享给大家。

    1、高性能架构

    性能优化如何理解

    JVM调优

    JAVA程序性能优化

    Tomcat

    Mysql

    2、开源框架解析

    1.spring概述

    2.Spring 容器

    3.Spring AOP

    4.Spring MVC

    5.Spring 5新特性

    6.Mybatis

    3、微服务架构

    SpringBoot

    SpringCloud

    Docker虚拟化技术

    Dubbo应用及源码解读

    4、架构筑基

    分布式环境指挥官Zookeeper

    分布式消息通讯 异步与MQ

    分布式缓存 NoSql

    数据存储

    高并发分流技术Nginx

    分布式文件存储fastdfs

    5、团队协作开发

    Git

    Maven

    Jenkins

    Sonar

    6、B2C商城项目实战

    7、设计模式

    如果需要以上高清的技术图的话可以关注一下我,欢迎加入我的合作群:805685193 即可获取,以上知识点这边都有相应的视频讲解,同样可以免费获取。

    需要获取Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术视频教程资料,架构思维导图,和BATJ面试题及答案的,都是免费分享的。

    关注我,欢迎加入我的合作群:805685193 即可获取以上相关视频。

    相关文章

      网友评论

        本文标题:Jvm系列:问君能有几多愁,系统宕机重启流

        本文链接:https://www.haomeiwen.com/subject/jomfdqtx.html