Jvm系列:问君能有几多愁,系统宕机重启流
上回说到《不识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 即可获取以上相关视频。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
1.20 广州见!第二期 Kubernetes and Cloud Native Meetup 报名中
这一次, Kubernetes & Cloud Native Meetup 将在 1 月 20 日来到广州。我们邀请到了多位阿里技术童鞋,还有视源股份(CVTE)重磅运维专家,为您带来 Kubernetes 及 Cloud Native 技术在阿里以及传统行业龙头里的实践与落地经验。 时间地点 时间:2019-1-20 周日 13:00 - 18:00地点:广州市天河区平云路163号平云广场B塔15F 分享议程 分享一:《UC 基于 Kubernetes 混合云的选型和架构》 讲师姓名:张瑜标讲师简介:阿里巴巴技术专家,前京东 Hadoop 负责人,Hadoop 代码贡献者。目前在 UC 基础架构和中间件组,负责 UC 基于 Kubernetes 自研的 PaaS 平台整体稳定性,,主要专注于 Service Discovery
- 下一篇
阿里云中间件是什么?
很多人搞不懂中间件是什么。 中间件是一种处于操作系统(底层)和应用之间的软件或者组件,起到让应用在操作系统上可以正常运行的作用,向apache,iis,sqlserver等。 阿里云的中间件包括:MQ Topic、性能测试PTS、前端监控、MQ API、、MNS、微消息队列 for IoT、Kafka 公网实例、EDAS、性能测试 PTS、应用监控等。 阿里云正在做中间件的活动:https://promotion.aliyun.com/ntms/act/aliwareydssale.html有兴趣的可以去看看。 阿里云的中间件包括: MQ Topic:消息队列(Message Queue,简称 MQ)是构建分布式互联网应用的基础设施,通过 MQ 实现的松耦合架构设计可以提高系统可用性以及可扩展性,是适用于现代应用的最佳设计方案。MQ 产品生态丰富,多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖金融保险、(新)零售、物联网、移动互联网、传媒泛娱乐、教育、物流、能源、交通、等行业。 性能测试PTS:性能测试PTS(Performance Testing Service...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果