堆1111111111111111

1)一个java进程对应这个一个JVM实例,Runtime,就对应着一个运行时数据区,一个进程中的多个线程,共享同一份堆空间和方法区,而栈和程序计数器使每一个线程私有的

2)通过-Xms10m -Xmx10m是初始堆空间和最大堆空间

3)堆空间在物理上可以不连续,逻辑上是连续的,而栈只存在入栈和出栈,不会有垃圾回收

4)堆上面有着各个线程的缓冲区,每一个线程都有着自己的小空间,这个小空间就是TLB,这个时候并发性会更好;

5)不是没有引用执行对象,对象就立即回收,只有说堆中快满了不足了,才会执行GC垃圾回收,不是栈中的引用弹出栈,对象就立即被回收了,否则GC的频率过高,就会影响用户线程的执行,如果一直进行垃圾回收,就会影响用户线程的执行,所以应该将堆空间的区域设置的大一些合理的分配,减少GC,让用户线程执行时间长一些,提升吞吐量,频繁的GC会影响性能,都是Throwable的子类,error不可控,exception一般需要手动去捕获,比如说javaheapspace

6)-Xms10m -Xmx10m -XX:+PrintGCDetails

查看堆占用的情况:

 

伊甸园区:幸存者1区:幸存者2区=8:1:1

默认新生代和老年代的占比是2:1

新生代:伊甸园区+幸存者1区+幸存者2区

yonggc/minor GC:触发条件时伊甸园区满了幸存者区满了不会触发yonggc,但是yongGC回收的过程中会顺便带上回收幸存者区伊甸园区满了之后再来对象,这个时候再次进行垃圾回收,会产生STW,需要进行判断各个对象是否是垃圾,不是垃圾的移动到幸存者1区或者是幸存者2区,放在空的区,空的幸存者区是to(从伊甸园区的对象首先放到幸存者1区),不空的是from;

1)如果幸存者0区或者是幸存者1区放不下伊甸区的对象,直接将对象放到老年代

如果说伊甸园区和幸存区的比例比较大的话,幸存者1区和幸存者2区所占的空间比较小,理想情况下所有的伊甸区中的垃圾对象都被回收了,很少的对象存活到幸村区,但是一般情况下,幸村区的对象比较少,如果再向伊甸园区放对象,很容易导致伊甸园区对象放在幸存区,幸村区容易存不下,于是直接给放到old区,会导致minorGC失去意义,因为正常进行yongGC的时候幸存者1区和幸存者2区也会进行垃圾回收,而现在有些对象没有达到阈值15就直接到达老年代了,minorGC意义不大况且尽量说先把对象在新生代回收,分代意义更小

2)如果伊甸园区比较小,yonggc会频繁触发,会影响用户进程,影响STW的时间

MarkWord里面存放对象的GC年龄只有4位,所以最大也只是15

图解对象分配的过程 - 掘金 (juejin.cn)

JVM调优:GC回收能够少一些,GC扫描的过程中会出现STW,用户线程终止

从频率上看大部分情况下都是回收的是新生代,伊甸园区满的时候才会触发youngGC,只有触发yongGC,才会顺便回收幸存者1区或者是幸存者2区

比如说有一个房间很多垃圾,GC标记过程中用户要STW

分代垃圾回收机制——老年代收集 - 掘金 (juejin.cn)

分代垃圾回收机制——老年代收集 - 掘金 (juejin.cn)

1)system.gc:

2)老年代空间不足:

TLAB

进行minorGC的时候要将新生代的对象往老年代里面进行存放,先看看老年代的最大可用连续空间是否大于新生代所有对象的总空间,如果比他大那么,说明这里面最坏的情况就是新生代的对象没有一个是垃圾,老年代肯定都是可以放得下

如果小于,说明此时minorGC不安全,那么继续判断这个参数,如果这个参数是true,那么会进行继续检查老年代最大可用连续空间是否大于历次劲升到老年代的对象的平均大小

这个参数永远是true

老年代GC垃圾回收慢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频编解码(七)之FOURCC和YUV关系简介

FOURCC是4字节代码,是一个codec中对压缩格式、颜色、像素格式等的标识。按一个字节8bit,FOURCC通常占4字节32bit。 FOURCC is short for “four character code” - an identifier for a video codec, compression format, color or pixel format used i…

JavaScript Web APIs第四天笔记

Web APIs - 第4天 进一步学习 DOM 相关知识,实现可交互的网页特效 能够插入、删除和替换元素节点能够依据元素节点关系查找节点 日期对象 掌握 Date 日期对象的使用,动态获取当前计算机的时间。 ECMAScript 中内置了获取系统时间的对象 Date&#xff…

Arcgis实现Tiff合并

Arcgis实现Tiff合并 现有四幅Tiff影像 打开数据管理工具 输入使用这四幅影像 下面这个就是建立数据库,这个不对 点击确定 合成完毕

HDMI 基于 4 层 PCB 的布线指南

HDMI 基于 4 层 PCB 的布线指南 简介 HDMI 规范文件里面规定其差分线阻抗要求控制在 100Ω 15%,其中 Rev.1.3a 里面规定相对放宽了一些,容忍阻抗失控在 100Ω 25%范围内,不要超过 250ps。 通常,在 PCB 设计时,注意控…

【Unity3D编辑器开发】Unity3D中制作一个可以随时查看键盘对应KeyCode值面板,方便开发

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中,会遇到要使用监控键盘输入的KeyCode值来执…

从零开始探索C语言(十一)----共用体和位域

文章目录 1. 共用体1.1 定义共用体1.2 访问共用体成员 2. 位域2.1 位域声明2.2 位域的定义和位域变量的说明2.3 位域的使用2.4 位域小结 1. 共用体 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体&#…

微信小程序 movable-view 控制长按才触发拖动 轻轻滑动页面正常滚动效果

今天写 movable-areamovable-view遇到了个头疼的问题 那就是 movable-view 监听了用户拖拽自己 但 我们小程序 上下滚动页面靠的也是拖拽 也就是说 如果放在这里 用户拖动 movable-view部分 就会永远触发不了滚动 那么 我们先可以 加一个 bindlongpress"longpressHandler…

数据结构—顺序表

目录 1.线性表 2.顺序表概念 3.实现顺序表 (1)声明结构体 (2)初始化 (3)打印数据 (4) 销毁 (5)尾插&头插 尾插 判断是否扩容 头插 (6)尾删&头删 尾删 头删 (7)指定位置插入元素 (8)删除指定位置元素 (9)查找指定元素位置 (10)修改指定位置元素 完整版…

【21】c++设计模式——>装饰模式

装饰模式的定义 装饰模式也可以称为封装模式,所谓的封装就是在原有行为之上进行扩展,并不会改变该行为; 例如网络通信: 在进行网络通信的时候,数据是基于IOS七层或四层网络模型(某些层合并之后就是四层模型…

Mongodb----部署副本集 实现读写分离

使用软件: xshell7 vmware16 centos8 nosql booster 1 部署副本集 推荐方案: 为了降低资源分配,这里仅使用一台服务器,但是分配3个端口(27017、27018、27019)来分别实现 主节点、副本节点…

35道Rust面试题

这套Rust面试题包括了填空题、判断题、连线题和编码题等题型。 选择题 1 ,下面哪个是打印变量language的正确方法? A,println("{}", language); B,println(language); C,println!("{}", langu…

接口自动化测试 —— 协议、请求流程

一、架构 CRM客户关系管理系统 SAAS Software As A Service 软件即服务 PAAS Platform AS A Service 平台即服务 快速交付→ 快:自己去干、有结果、事事有回音、持续改进 单体架构——》垂直架构——》面向服务架构——》微服务架构(分布式&#xf…