JVM(五):JVM模型与GC
- 确定垃圾
 
- 引用计数(存在循环引用问题)
 - 根可达算法
 

- 常见的垃圾回收算法
 
- 标记清除算法-位置不连续,产生碎片
 

- 拷贝算法- 没有碎片,浪费空间
 

- 标记压缩-没有碎片,效率偏低(多线程需要进行线程同步,单线程效率本来就低)
 

- JVM内存分代模型(用于分代垃圾回收算法)
 
- 部分垃圾回收器使用的模型
 - 新生代+老年代+永久代(1.7)/元数据区(1.8)Metaspace
 
- 永久代 元数据- Class
 - 永久代必须指定大小限制,元数据区可以设置,也可以不设置,无上限(受限与物理内存)
 - 字符串常量 1.7在永久代,1.8在堆
 - MethodArea(方法区)逻辑概念-指的是永久代或元数据
 
c. 新生代 = Eden + 2个suvivor区
- YGC回收之后,大多数对象会被回收,活着的进入s0
 - 再次YGC,活着的对象eden + s0 ->s1
 - 再次YGC,eden+s1->s0
 - 年龄足够->老年代
 - s区装不下->老年代
 
d. 老年代
- 顽固分子
 - 老年代满了FGC
 
e. GC Tuning(Generation)
- 尽量减少FGC
 - MinorGC = YGC
 - MajorGC = FGC
 

- 常见的垃圾回收器
 

- Serial-年轻代 串行回收
 

b. PS-年轻代 并行回收

c. ParNew-年轻代 配合CMS的并行回收(PS和CMS不能配合使用,为了配合CMS,产生了ParNew)

d. SerialOld
e. ParallelOld
f. ConcurrentMarkSweep 老年代,垃圾回收和引用程序同时进行,降低STW的时间(200ms)

j. G1(10ms)
h. ZGC(1ms) PK C++
i. Shenandoah
g. Eplison
1.8默认的垃圾回收器: PS+ParallelOld
- JVM调优
 
- JVM命令行参数参考: 命令行
 - 常用:
 
- -XX:+PrintFlagsFinal (打印所有最终生效值)
 - -XX:+PrintFlagsInitial (打印默认值)
 - -XX:+PrintCommandLineFlags (启动时的命令行参数)
 
- JVM参数分类
 
- 标准:-开头,所有的HotSpot都支持
 - 非标准: -X开头,特定版本HotSpot支持特定命令
 - 不稳定: -XX开头,下个版本可能取消
 
JVM(五):JVM模型与GC的更多相关文章
- JVM虚拟机内存模型以及GC机制
		
JAVA堆的描述如下: 内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } } JVM内存模型中分两大块,一块是 NEW Ge ...
 - 深入理解JVM(五)JVM优化策略
		
5.2一些案例: 1.高性能硬件部署策略: (1)背景:某公司升级了硬件(CPU升级为4核,内存增加为16G),发现不定期出现网页失去响应. (2)原因:①内存增加之后,项目中有在内存中处理文件的大对 ...
 - 一 JVM垃圾回收模型
		
一 JVM垃圾回收模型 一. GC算法 1.1 标记-清除算法(Mark-Sweep) 算法分为"标记"和"清除"两个阶段首先标记出所有需要回收的对象,然后回收 ...
 - 关于JVM内存模型,GC策略以及类加载器的思考
		
JVM内存模型 Sun在2006年将Oracle JDK开源最终形成了Open JDK项目,两者在绝大部分的代码上都保持一致.JVM的内存模型是围绕着原子性(操作有且仅有一个结果).可见性(racin ...
 - 【转】JDK5.0中JVM堆模型、GC垃圾收集详细解析
		
基本概念 堆/Heap JVM管理的内存叫堆:在32Bit操作系统上有4G的限制,一般来说Windows下为2G,而Linux下为3G:64Bit的就没有这个限制.JVM初始分配的内存由-Xms指定, ...
 - JVM内存模型及GC回收算法
		
该篇博客主要对JVM内存模型以及GC回收算法以自己的理解和认识做以记录. 内存模型 GC垃圾回收 1.内存模型 从上图可以看出,JVM分为 方法区,虚拟机栈,本地方法栈,堆,计数器 5个区域.其中最为 ...
 - JVM 内存分配模型概念和java中各种对象的存储
		
JVM 内存分配模型概念 --在工作中可能用到的机会不多,有个概念的了解 --此文是转载某位读者,应该是在阅读了<深入理解Java虚拟机JVM高级特性与最佳实践> 一书后,总结所得.写的不 ...
 - JVM初探 -JVM内存模型
		
JVM初探 -JVM内存模型 标签 : JVM JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时 ...
 - JVM内存区域模型
		
一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆” ,"perm", 它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共 ...
 - JVM系列五:JVM监测&工具
		
JVM系列五:JVM监测&工具[整理中] http://www.cnblogs.com/redcreen/archive/2011/05/09/2040977.html 前几篇篇文章介绍了介 ...
 
随机推荐
- PyTorch ResNet 使用与源码解析
			
本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson8/resnet_inference.py 这篇文章首先会简 ...
 - 十分钟快速入门 Python
			
本文以 Eric Matthes 的<Python编程:从入门到实践>为基础,以有一定其他语言经验的程序员视角,对书中内容提炼总结,化繁为简,将这本书的精髓融合成一篇10分钟能读完的文章. ...
 - 求学生单科流水表中单科最近/最新的考试成绩表的新增可行性方案 使用Oracle提供的分析函数rank
			
在 https://www.cnblogs.com/xiandedanteng/p/12327809.html 一文中,提到了三种求学生单科最新成绩的SQL可行性方案,这里还有另一种实现,那就是利用分 ...
 - Lambda表达式看这篇基本就够用了
			
本文讯] 2020.05.08 polo 写博不易,尊重知识! Lambda 是java8 引入的一个新特性,闭包,又叫函数式接口,下面介绍下,常用的lambda表达式方式: 所谓的将函数作为一 ...
 - Django 页面之间传递MySql数据表(Django八)
			
之前实现了页面传递多个参数,但没有实现页面间传递一整个数据表 session传递几个参数:https://blog.csdn.net/qq_38175040/article/details/10496 ...
 - linux下ftp如何使用
			
linux下ftp可以上传.下载文件 centos7环境: 1.检查是否安装过ftp服务 rpm -qa|grep vsftpd 如果没有输出则表示没有安装过 安装ftp yum -y install ...
 - Centos7,PHP7安装swoole
			
Swoole详细介绍及如何使用,这里暂时不做说明,可以参考一下文档:https://wiki.swoole.com/ 源码编译安装 下载地址如下: https://github.com/swoole/ ...
 - [LeetCode]72. 编辑距离(DP)
			
题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1 ...
 - python的多行注释
			
单行注释# 多行注释""
 - jquery学习:
			
1.什么是jQuery jquery 全称 javaScript Query.是js的一个框架.本质上仍然是js. 2.jQuery的特点 支持各种主流的浏览器. 使用特别简单 拥有便捷的插件扩展机制 ...