建设网站那家公司好/做关键词排名好的公司
这里写目录标题
- JVM的组成部分
- 1.类装载子系统
- 1.1一个类加载到JVM的过程
- 1.2类加载机制
- 1.3为什么设计双亲委派机制
- 1.4怎么打破双亲委派机制
- 2.运行时数据区
- 2.1线程私有及共享
- 2.2JVM内存区结构
- 2.3JVM参数设置经验
- 3.Java对象的生命周期
- 3.1.对象的创建
- 3.2.对象大小的计算(64位)
- 3.3.对象在内存上的分配
- 3.4.对象的回收
- 4.垃圾收集器和收集算法
- 4.1分代收集理论:
- 4.2垃圾收集算法:
- 4.3 Serial:(需要STW)
- 4.4 Serial Old:
- 4.5 Paralle:(需要STW)
- 4.6 Paralle Old:
- 4.7ParNew:
- 4.8 CMS:
- 4.9 垃圾收集算法底层实现:
- 4.10 记忆集和卡表:
- 4.11 G1垃圾收集器:
- 4.12 ZGC:
- 4.13 如何选择垃圾收集器?
JVM的组成部分
- 类装载子系统:将磁盘文件加载到运行时数据区的方法区
- 运行时数据区:常说的JVM内存区
- 执行引擎:将字节码翻译成底层指令交给CPU执行
- 本地库接口:执行引擎需要借助本地库接口实现将指令交给CPU执行
1.类装载子系统
1.1一个类加载到JVM的过程
加载:将磁盘上的字节码文件通过IO读入方法区
验证:验证字节码格式正确性
准备:类的静态变量赋值默认值,分配内存
解析:符号引用替换为直接引用(静态方法执行内存所在的指针)
初始化:对类的静态变量赋值指定值,执行静态代码块
1.2类加载机制
双亲委派机制:类加载时先判断自己有没有加载过,如果没有加载就委派父类执行同样的过程,如果父类没有加载不到在执行自行加载
类加载器:
- 引导类加载器
- 扩展类加载器
- app类加载器
类加载器定义:在Java代码的Lancher类中构建了扩展类加载器和app类加载,父子关系也是在这里构建,引导类加载器在C中构建的,所以在Java中体现就是null
1.3为什么设计双亲委派机制
沙箱安全机制:jdk中的类不能被程序员修改
避免类的重复加载:一个类只会被一个加载器加载一次
1.4怎么打破双亲委派机制
重新类加载方法,判断如果是自定义类,就指定自定义类加载器加载,如果不是就使用原来的机制。
2.运行时数据区
2.1线程私有及共享
私有:栈、本地方法栈、程序计数器
共享:堆、方法区
2.2JVM内存区结构
程序计数器:记录着当前线程的程序执行位置
本地方法栈:虚拟机调用native方法
栈:局部变量表(存局部变量)、操作数栈(供变量计算)、动态链接(将方法指向内存中真正的方法指针)、方法出口
堆:几乎所有的对象都在这里分配
方法区:用于存储加载后的类信息、常量、静态变量、编译后的代码
2.3JVM参数设置经验
线程栈:-Xss 每个线程栈的大小,这个参数越小,那么一个线程运行的方法就越少,而虚拟机内部运行的线程数变多
堆:尽量指定堆的大小参数一致避免扩容;分析对象在内存中的分布尽量让对象在年轻代被回收减少full gc次数。
(方法区)元空间:元空间默认为21m,元空间满了之后会触发full gc,所以尽量设置值
3.Java对象的生命周期
3.1.对象的创建
- 类加载检查:当遇到new关键字时,先判断常量池中能否找到类的符号引用
- 分配内存:对象所需的内存,在类加载后就能确定。直接为对象分配确定大小的内存
- 初始化零值:程序能访问的数据,设置对应字段的零值
- 设置对象头:对象头包含:Mark word,Klass pointer(对象执行类元信息的指针)
- 执行Init方法:按照程序员的意愿进行属性的赋值,和执行构造方法
3.2.对象大小的计算(64位)
对象头 :
- (header)Markword:8字节
- Klass pointer:开启指针压缩(默认开启)4字节
对象数据:
- 基本数据类型:占数据类型大小
- 对象、字符串(引用指针):开启指针压缩 4字节
- 数组:数组长度 4 字节(只要是数组,不区分数组的类型)
对象填充:
- 保证对象大小是8的倍数,不够时填充
3.3.对象在内存上的分配
对象在栈上分配:栈上分配依赖与逃逸分析和标量替换。
- 逃逸分析:分析对象作用域,是否只在本地方法使用,无外部引用
- 标量替换:栈上没有大块连续的内存,所以JVM不会直接创建对象,而是将成员变量分解为被方法使用的变量,存在栈帧寄存器
对象在堆上分配:
- Eden区:正常对象放在Eden区
- 老年代:对象满足一定条件会分配到老年代
大对象:超过JVM设置的大对象参数值
长期存活对象:经过多次minorGC后存活的对象
对象动态年龄判断:一批对象的总大小超过survivor区域内存大小的50%。那最大年龄的一批对象进入老年代。
老年代空间分配担保:老年代的可用空间小于年轻代所有对象之和
3.4.对象的回收
1.回收那些对象?
- 引用计数法:对象存在引用,计数+1,引用消失计数减1,不能判断互相引用
- 可达性分析算法:从GCRoots节点向下搜索引用的对象,未被标记到的是垃圾对象
2.GC Roots对象:本地方法栈变量、静态变量(局部变量和全局变量即类中定义的变量)
3.常见的引用类型: - 强引用:普通变量引用
- 弱引用:弱引用类型对象包裹
- 软引用:软引用对象包裹
- 虚引用:最弱的引用关系
4.垃圾收集器和收集算法
4.1分代收集理论:
- 根据年龄带不同,选择不同的垃圾收集算法
4.2垃圾收集算法:
- 标记复制:将存活的对象复制到另一个区域(适合年轻代S0,S1)
- 标记清楚:标记垃圾对象清除(或者反过来)会产生内存碎片
- 标记整理:同标记清楚,只是垃圾对象清除后会整理内存空间(适合来年代)
4.3 Serial:(需要STW)
单线程收集器,进行垃圾收集工作时需要暂停其它所有工作线程
4.4 Serial Old:
和Serial收集器一样,一个用于年轻代,一个用于老年代
4.5 Paralle:(需要STW)
多线程收集器,进行垃圾收集工作时由多个线程进行
4.6 Paralle Old:
和Paralle收集器一样,但是Paralle用于年轻代,Paralle Old用于老年代
4.7ParNew:
多线程收集器,和Paralle相同,但是ParNew可以和CMS收集器配合使用
4.8 CMS:
第一次基本上实现了用户线程和垃圾收集线程同时工作
工作过程:
- 初始标记:通过GCRoots查找引用对象,速度很快。需要STW
- 并发标记:通过GCRoots直接引用对象查找其它的引用,可以和用户线程同时运行
- 重新标记:重新标记是为了修正并发标记阶段用户线程导致的对象变动,主要用到了三色标记
- 并发清理:用户线程和垃圾收集线程同时运行,回收垃圾对象
- 并发重置:重置本次GC过程中标记的对象
4.9 垃圾收集算法底层实现:
三色标记:
- 黑色:对象存活,且所有关系都已经扫描
- 灰色:至少有一个引用对象未扫描
- 白色:分析开始阶段都是白色,如果分析结束对象仍然是白色,代表对象是垃圾对象
漏标对象处理: - 增量更新:当一个黑色对象插入新的引用指向一个白色对象时,先将引用记录保存。等并发标记结束后,重新扫描。
- 原始快照(SATB):当一个灰色对象删除一个指向白色对象时,将要删除的引用记录下来
增量跟新和原始快照中记录的引用,通过写屏障实现
写屏障:在赋值前(赋值对象引用,或赋值引用null)后,加入一些处理
4.10 记忆集和卡表:
当涉及跨代对象引用会收时,不直接扫描跨代区域,而是引入卡表。将存在跨代指针的对象所在卡页(卡表中的元素)表示为1,表示该元素变脏,GC时只收集卡表变脏的元素加入GCRoots中
4.11 G1垃圾收集器:
概念: 面向服务器的垃圾收集器,主要针对多核大容量内存的机器
区域划分: G1保留了年轻代和来年代的概念,但是没有物理上的隔阂。针对于大对象存放,G1增加了Humongous区专门放大对象。G1收集器将堆划分为大小相等的独立区域Region,Region默认大小是堆内存的1/2048,可以使用参数指定。
垃圾收集分类:
- Young GC: 不同于其它收集器,在Eden区满了就做Young GC,而不是先判断当前Eden区满了后所做GC花费的时间,如果还不够设置的停顿时间,设置更多的Region为Eden区,直到下次满了之后时间也符合。
- Mixed GC:老年代的堆占有率达到参数设置时触发,回收所有的Young和部分Old以及大对象区,G1垃圾收集器优先做Mixed GC在回收对象时采用复制方法,如果剩余的Region不足以复制,就会产生Full GC.
- Full GC:停止程序采用单线程标记、清理、压缩
G1调优关键参数:调节-XX:MaxGCPauseMills GC停顿时间设置
4.12 ZGC:
特点:基于内存布局,暂停时不设置分代
区域划分:
- 小型Region:固定2M,用于放置小于256k的小对象
- 中型Region:固定32M
- 大型Region:容量不固定,可以动态变化
4.13 如何选择垃圾收集器?
总结:.如果内存小于100M使用Serial,如果内存小于4G可以使用paralle,内存介于4-8G可以用ParNew+CMS
8G以上可以用G1,几百G以上用ZGC
相关文章:

JVM整体分析篇
这里写目录标题JVM的组成部分1.类装载子系统1.1一个类加载到JVM的过程1.2类加载机制1.3为什么设计双亲委派机制1.4怎么打破双亲委派机制2.运行时数据区2.1线程私有及共享2.2JVM内存区结构2.3JVM参数设置经验3.Java对象的生命周期3.1.对象的创建3.2.对象大小的计算(6…...

【Python入门第十七天】Python While 循环
Python 循环 Python 有两个原始的循环命令: while 循环for 循环 while 循环 如果使用 while 循环,只要条件为真,我们就可以执行一组语句。 实例 只要 i 小于 7,打印 i: i 1 while i < 7:print(i)i 1运行实…...

怎样激发读者好奇心?短视频营销之场景化
目录 激发读者好奇心?四个小技巧帮你搞定 1.省略法 2.欲言又止法: 3.问句法:就是用疑问的形式引起别人的好奇。 4.反差法 选择合适的主题。 利用场景化效果 使用滤镜。 如何提高用户的留存率。 1、设置一个有趣的话题。 2、用好道具。 3、多用竖屏。 什…...

【LeetCode】剑指 Offer 14- II. 剪绳子 II p96 -- Java Version
题目链接:https://leetcode.cn/problems/jian-sheng-zi-ii-lcof/ 1. 题目介绍(14- II. 剪绳子 II) 给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1)&…...

【红黑树】红黑树插入操作相关的细节和疑难拆解分析
本文就红黑树的插入操作进行细致到每一个小步骤的解析。1,成员变量本红黑树使用了三叉链结构,使用的时候尤其要记得处理指向父亲的指针。为何在节点的构造函数中,默认节点的颜色为红色?因为考虑到红黑树的性质(对于每个…...

字符串匹配--strstr函数的模拟实现思路和代码
一,strstr函数 原型: const char * strstr ( const char * str1, const char * str2 );char * strstr ( char * str1, const char * str2 ); strstr是一个字符串匹配函数,在str1中去寻找str2,如果找到,返回str2在…...

【ArcGIS Pro二次开发】(7):地图(Map)的基本操作
地图是ArcGIS Pro中的基础起点,也是大多数工程的基础。主要用于显示表示空间数据的图层。 一、地图(Map)的基本操作示例 1、获取当前地图 var map MapView.Active.Map; 2、获取一级图层 var lys map.Layers; 用于获取地图中的单一图层,以及图层组…...

python 自动化测试 pytest 的使用
pytest 是一款以python为开发语言的第三方测试,主要特点如下: 比自带的 unittest 更简洁高效,兼容 unittest框架 支持参数化 可以更精确的控制要测试的测试用例 丰富的插件,已有300多个各种各样的插件,也可自定义扩…...

闭包(回顾)
概念作用保护作用保存作用优缺点命名空间 概念 闭包(closure)指有权访问另一个函数作用域中变量的函数 — Javacript高级程序设计 p309 简单理解,一个作用域可以访问另一个函数内部的私有变量 // 其中 test就是一个闭包 function fn(){var num 10function test …...

利用好这两个方法,服务型企业缺成本票不再难解决!
现代服务业属于人才密集型和技术型类别,其中囊括了不少技术,知识,智力服务等产业:信息技术,文化创意,营销策划,广告设计,以及咨询,商务和法律服务。 在金税三期完善之前…...

前端面试编程题(异步调度,Promise实现、占用空间大小、渲染虚拟节点、实现for of)
目录 异步调度问题 题目一 答案 题目二 答案 递归输出 题目一 答案 Promise相关 题目一 答案 占用空间大小 题目一 答案 渲染虚拟节点 题目一 答案 实现for of 题目一 答案 异步调度问题 题目一 1.实现一个带并发限制的异步调度Scheduler,保证同…...

复旦团队发布国内首个模型MOSS 类ChatGPT
复旦团队发布国内首个模型MOSS 类ChatGPT 首先看到这个标题,还有这个名字,我是正经(zhen jing)的 (bu shi 流浪地球?550W?不了解的可以把550W倒过来写,就懂了 看到新闻里的一些图…...

5.35 综合案例2.0 -称重数据上传云端
综合案例2.0 - 称重数据上传云端案例说明连线功能实现1.阿里云平台连接代码应用开发3.1新建‘普通项目’3.2关联产品和设备3.3新建‘移动应用’3.4添加组件3.5配置组件信息3.6保存预览案例说明 使用hx711串口模块称重,结合IOT studio制作手机APP远程控制并采集物体重量。 hx7…...

如何让人机对话更自然?
来源:投稿 作者:顾相欢 编辑:学姐 AAAI-2022|定制对话的人设和知识背景 原文标题: Call for Customized Conversation: Customized Conversation Grounding Persona and Knowledge 原文链接: https://arxiv.org/ab…...

Python每日一练(20230224)
目录 1. 列表奇偶拆分 ★ 2. 二叉树的后序遍历 ★★ 3. 接雨水 ★★★ 附录 二叉树 特点 性质 特殊二叉树 满二叉树 完全二叉树 完全二叉树性质 二叉树的遍历 1. 列表奇偶拆分 【问题描述】 输入一个列表,包含若干个整数(允许为空ÿ…...

【Linux】-- Shell的运行原理、Linux当中的权限
目录 Shell的运行原理 Linux权限的概念 su命令 权限 文件访问权限的相关设置方法 chmod指令 chown指令 chgrp指令 sudo命令 文件的常见问题 umask 粘滞位 关于权限的总结 Shell的运行原理 Shell运行原理 —— 外壳程序。 Linux严格意义上说的是一个操作系统&…...

MOS管选型参数:VGS(th)
MOS管选型参数:VGS(th) VGS(th):开启电压(阀值电压)。当外加栅极控制电压 VGS 超过 VGS(th) 时,漏区和源区的表面反型层形成了连接的沟道。应用中,常将漏极短…...

二.线性表之顺序表
文章目录前言一.顺序表的概念及结构二.顺序表的接口实现1.顺序表的动态存储2.顺序表的初始化3.顺序表尾插#封装:扩容函数4.顺序表尾删5.顺序表头插6.顺序表头删7.顺序表查找8.顺序表在pos位置插入x9.顺序表删除pos位置的值10.顺序表销毁11.顺序表打印三.源1.Seqlist…...

ElasticSearch - SpringBoot整合ElasticSearch实现文档的增删改
文章目录1. ElasticSearch和kibana的安装和配置2. SpringBoot 项目环境搭建3. 创建索引4. 索引文档5. 更新文档6. 删除文档https://www.elastic.co/guide/en/elasticsearch/reference/current/search-your-data.htmlhttps://www.elastic.co/guide/cn/elasticsearch/guide/curre…...

JavaScript 库
文章目录JavaScript 库JavaScript 框架(库)jQueryPrototypeMooTools其他框架CDN -内容分发网络引用 jQuery使用框架JavaScript 库 JavaScript 库 - jQuery、Prototype、MooTools。 JavaScript 框架(库) JavaScript 高级程序设计…...

云解析DNS为什么要配置默认线路?
传统解析技术不会判断访客IP,而是会随机选择一个IP返回给访问者,这样就有可能造成移动用户访问电信服务器IP,北京用户访问深圳服务器IP这种跨域跨网访问的情况,产生非常大的延迟,带来很不好的访问体验。 而云解析DNS会…...

Linux命令之awk
awk是一个有强大的文本格式化能力的linux命令,早期是在Unix上实现的,linux后来也可以使用了,我们在Linux上使用的awk是gawk(GNU awk的意思) 语法 awk [option] 模式{动作} file option表示awk的可选参数,可…...

实战-缓存数据一致+binlog初始+cannel监听+数据迁移,数据一致性架构设计
前言 一. 解决缓存不命中(高并发操作击穿打挂DB的风险) 当并发量打的时候,当我们的缓存过期时,就算到数据库的比例偏小的时候,我们的请求时比较大的。那也会存在数据库崩掉的情况。解决方案想法如下(总体…...

nginx配置中proxy_pass反向代理502的bug
记录一个坑人的bug, 我今天在一台新的liunx上运行nginx来进行反向代理时候,发现怎么测都是502 我把配置全部删了从头开始配置,发现80端口正常,80端口index.html正常,反向代理转向http://127.0.0.1/也正常,…...

JavaScript 两种方案打开文件对话框
JavaScript 两种方案打开文件对话框 文章目录JavaScript 两种方案打开文件对话框一、文件对话框二、传统方案表单元素🌈三、文件系统访问API💦四、更进一步使用六、代码仓库🌐七、参考资料💘七、推荐博文🍗一、文件对话…...

Pycharm远程服务器常见问题
2023年02月23日 问题描述:Pycharm远程服务器跑代码时,不小心把Pycharm关掉了,但服务器代码还在运行? 解决办法:kill进程 先用watch -n 0.5 nvidia_smi查看进程,然后kill -9 <进程> 1、nvidia-smi…...

内容团队如何快速出稿
对于内容团队而言,每个内容选题就相当于一个小项目,它们并非简单的线性工作流,相反其复杂程度不亚于一个小型工厂。一个内容选题会涉及内容形式,选题类型等多个变量,这些变量因素组合起来就是十几种不同类型的工作流。…...

es-08索引的批量操作
索引的批量操作 批量查询和批量增删改 批量查询 GET /_mget#批量查询 GET product/_search GET /_mget {"docs": [{"_index": "product","_id": 2},{"_index": "product","_id": 3}] }GET product/_mge…...

诈金花的概率
游戏使用一副除去大小王的扑克牌,共4个花色52张牌。 1、豹子(AAA最大,222最小)。2、同花顺(AKQ最大,A23最小)。3、同花(AKQ最大,352最小)。4、顺子ÿ…...

ESP32设备驱动-MLX90393磁场传感器驱动
MLX90393磁场传感器驱动 文章目录 MLX90393磁场传感器驱动1、MLX90393介绍2、硬件准备3、软件准备4、驱动实现1、MLX90393介绍 MLX90393 磁场传感器可以在运行时重新编程为不同的模式和不同的设置。 该传感器使用 Melexis 专有的 Triaxis 技术提供与沿 XYZ 轴感应的磁通密度成…...