当前位置: 首页 > news >正文

4.JVM八股

JVM空间划分

线程共享和线程私有

1.7:
线程共享:
堆、方法区

线程私有:
虚拟机栈、本地方法栈、程序计数器

本地内存

1.8:
线程共享:

线程私有:
老三样

本地内存,元空间

程序计数器

虚拟机栈

由一个个栈帧组成

每一个栈帧中包含了:

  • 局部变量表
  • 方法返回地址

每调用一次函数,就会有对应的一个栈帧入栈。

本地方法栈

同虚拟机栈,只不过存的是native方法

native本地方法,就是指非java语言实现的,而是更底层的用C实现的

用来存放对象的
新生代、老年代、永久代(元空间)
字符串常量池

方法区

是一个抽象的概念
具体实现由:永久代、元空间实现
用来存放类信息的地方、以及运行时常量池

直接内存

独立于JVM之外的,只受操作系统影响的内存

垃圾回收原理

  • 先执行young GC(一般使用 标记复制法)
  • 然后执行full GC(标记清除、或者标记整理)

对象创建过程

  1. 类加载检查
  2. 分配内存
    1. CAS失败重试
    2. TLAB空间预留
  3. 初始化0值
  4. 设置对象头
  5. 初始化init

对象的内存布局

  1. 对象头
    1. 类指针
    2. GC年龄
    3. Mark word锁信息
  2. 实例数据
  3. 对其填充

对象的访问定位

两种:
句柄
直接指针

GC原理

垃圾回收的基本原理

  • 优先在新生代分配,回收Minor GC
  • 当老年代满了的时候,会触发full gc
  • 什么情况下新生代对象加入老年代:年龄够了,大文件直接进入

对象死亡的判断方法

引用计数法,一般不用,有循环依赖问题

可达性分析法:
初次标记GC ROOT,
并发标记之后的,
最后STW重新。

GC root有哪些?
虚拟机站、本地方法栈、方法区的常量引用的对象

常量的GC规则

常量本质上是一种弱引用,
当不再有虚拟机栈的变量引用它时,下一次GC就会回收。

类信息的回收原则

也是一种弱引用,它的引用前提比较多

  1. 没有实例了
  2. 没有类加载器了
  3. 没有相关类的引用了

垃圾收集算法

年轻代的复制标记算法为什么是8 :1 :1?

分代的3种垃圾收集

1、Serial + SerialOld

单线程,STW

2、Parallel Scavenge + Parallel Old

多线程并行,STW

默认1.8

3、ParNew + CMS

1、CMS的特点:第一个并发的垃圾收集器
2、原理:可达性分析+ 三色标记
3、过程:3此标记,1次并发整理
4、解决漏标:使用增量更新
5、缺点:浮动垃圾+标记清除碎片太多

分区收集器

4、G1

1、第一个分区收集器,1.9开始默认、分区,可以设置最大停顿时间,
2、原理:3个回收过程
young GC、Mix GC、full GC

3、过程:3次标记+1次筛选清理(用优先队列维护需要先被清理的内容)(STW)

4、解决漏标:STAB(需要额外的RSET,记录当前的Reign被哪些别的Reign给引用过)

5、采用标记整理、标记复制

5、ZGC收集器

颜色指针+读屏障

类文件结构

类文件以.class存在在方法区(元空间)

总体构成:略

类加载过程

1、加载

  1. 类加载器读取字节码
  2. 生成class类,作为访问方法区中类文件结构的入口

2、连接
2-1、验证
主要是验证字节码,保证字节码符合JVM规范

2-2、准备
分配内存,初始化零值

2-3、解析
把符号引用转为直接引用
符号引用是指类、方法、等符号指向内存地址,是间接的。
直接引用是指,使用内存地址偏移量指向具体的内容,保证了快速访问。

3、初始化
就是执行构造方法
当实例化时才执行

注意:
按需加载、按需连接。

类加载器

介绍

1、读取解析字节码中的内容,
2、生成class对象存入方法区。

注意:
是按需加载
且加载有持久性

内置的3种类加载器

1、BootStrap ClassLoader
long包下的、Object的。。。

2、Extension ClassLoader
JDBC等

3、App ClassLoader
用户自定义的类

如何自定义类加载器

1、定义类加载器,继承ClassLoader、重写findClass或者loadClass方法,更具全类名找到字节码,然后创建class对象到方法区。

2、使用时

  1. new 类加载器
  2. 使用loadClass加载
  3. 使用得到的class对象,newInstance、getMethod、invoke创建实例、使用实例方法。

findClass和loadClass的区别?

  • loadClass:先去父类中使用loadClass加载,如果没法加载,才会使用自己的loadClass的加载逻辑。
  • findClass:不去父类中加载,直接在本层加载

loadClass遵循双亲委派机制,findClass不遵循

双亲委派机制

当一个类加载器要加载一个字节码时,首先不是自己加载,而是使用上层的类加载器加载,如果上层无法加载才使用本层加载。

  • 自底向上询问
  • 自顶向下加载

双亲委派模型的好处

  • 保证类不会被重复加载(假设不同的类加载器加载同一个类,那么最后都会变成同一个类加载器加载类)
  • 保证核心API不被篡改(核心的类,比如long下的类,最终都只会被bootstrapClassloader加载)

JVM调优

监控内存情况

1、优先可视化:
使用Jconsole

2、其次使用命令行:
Jstat、Jinfo

JVM调优参数设置

1、
分配堆内存

分配栈内存

分配元空间内存

分配新生代、老年代内存

2、
调整对象年龄阈值(什么时候适合缩短?)

默认多大对象直接进入老年区

3、设置垃圾收集器

4、G1的最大停顿时间

-Xms
-Xmx

-Xss

-XX:MetaSpace

-XX:newSize

-XX:MaxTenuringThreshold

调优思路

就是尽可能把该进入老年代的提前进入老年代,不该进入老年代的在新生代就GC掉

相关文章:

4.JVM八股

JVM空间划分 线程共享和线程私有 1.7: 线程共享: 堆、方法区 线程私有: 虚拟机栈、本地方法栈、程序计数器 本地内存 1.8: 线程共享: 堆 线程私有: 老三样 本地内存,元空间 程序计数器 …...

内网渗透系列-mimikatz的使用以及后门植入

内网渗透系列-mimikatz的使用以及后门植入 文章目录 内网渗透系列-mimikatz的使用以及后门植入前言mimikatz的使用后门植入 msf永久后门植入 (1)Meterpreter后门:Metsvc(2)Meterpreter后门:Persistence NC后…...

5G网络开通与调测ipv4

要求如下: 1. 勘站规划 1. 【重】首先观察NR频点,完成设备选型 2645--选择N41 3455--选择N78 4725--选择N79 设备选型如下:观察AAU的通道数,最大发射功率;选择N41的选型频段也要选41 2. …...

Spark开窗函数之ROW

Spark 1.5.x版本以后,在Spark SQL和DataFrame中引入了开窗函数,其中比较常用的开窗函数就是row_number 该函数的作用是根据表中字段进行分组,然后根据表中的字段排序;其实就是根据其排序顺序,给组中的每条记录添 加一个序号;且每组的序号都是从1开始,可利用它的这个特性进行分组…...

双向链表的实现(详解)

目录 前言初始化双向链表的结构为双向链表的节点开辟空间头插尾插打印链表尾删头删查找指定位置之后的插入删除pos节点销毁双向链表 前言 链表的分类: 带头 不带头 单向 双向 循环 不循环 一共有 (2 * 2 * 2) 种链表 带头指的是:带有哨兵位节点 哨兵位&a…...

SpringBoot项目中如何使用校验工具

用到hutool提供的校验方法与java提供的校验方法 1. 声明数据 String str "123" String regex "^123456$" Boolean is1_6 mismatch(str, regex);2. 定义校验方法 // 校验是否不符合正则格式 private static boolean mismatch(String str, String rege…...

AI预测小分子与蛋白的相关特征: MegaMolBART, MoFlow,ESM-1, ESM-2

1、小分子:MegaMolBART, MoFlow 1)MegaMolBART https://github.com/NVIDIA/MegaMolBART 基于 SMILES 的小分子药物发现与化学信息学深度学习模型。 2)MoFlow https://github.com/calvin-zcx/moflow 用flow流方式分子生成 2、蛋白质:ESM-1, ESM-2 https://github.com/fa…...

基于深度学习的花卉检测系统(含PyQt界面)

基于深度学习的花卉检测系统(含PyQt界面) 前言一、数据集1.1 数据集介绍1.2 数据预处理 二、模型搭建三、训练与测试3.1 模型训练3.2 模型测试 四、PyQt界面实现参考资料 前言 本项目是基于swin_transformer深度学习网络模型的花卉检测系统,…...

深度学习图像处理基础工具——opencv 实战信用卡数字识别

任务 信用卡数字识别 穿插之前学的知识点 形态学操作 模板匹配 等 总体流程与方法 1.有一个模板 2 用轮廓检测把模板中数字拿出来 外接矩形(模板和输入图像的大小要一致 )3 一系列预处理操作 问题的解决思路 1.分析准备:准备模板&#…...

【HBase】HBase高性能架构:如何保证大规模数据的高可用性

HBase高性能原理 HBase 能够提供高性能的数据处理能力,主要得益于其设计和架构的几个关键方面。这些设计特点使得 HBase 特别适合于大规模、分布式的环境中进行高效的数据读写操作。以下是 HBase 高性能的主要原因: 1. 基于列的存储 HBase 是一个列式…...

JAVA基础两个项目案例代码

1.JAVA使用ArrayList上架菜品案例 视频参考链接 创建一个Food.java类 package org.example;// 菜品类 public class Food {private String name; // 菜品名private double price; // 价格private String desc; // 菜品描述public Food() {}public Food(String name, Double …...

asp.net core 网页接入微信扫码登录

创建微信开放平台账号&#xff0c;然后创建网页应用 获取appid和appsecret 前端使用的vue&#xff0c;安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…...

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼 用过在注册表里新建的方法&#xff0c;结果弄完没有出现小鹤双拼方案&#xff0c;想到了自己写reg表 目录 1. 新建一个txt文件 2. 把.txt的后缀名改成.reg&#xff0c;双击运行 3. 在设置中找到微软输入法-常规 1. 新建一个…...

如何解决微信小程序无法使用css3过度属性transition

由于微信小程序不支持CSS3过度属性transition,所以我们需要利用微信小程序api进行画面过度的展示 首先是官方示例: wxml: <view animation="{{animationData}}" style="background:red;height:100rpx;width:100rpx"></view> js: Page(…...

【软件设计师知识点】九、网络与信息安全基础知识

文章目录 计算机网络的概念网络分类网络拓扑结构网络体系结构ISO/OSI 7层参考模型TCP/IP 4层模型TCP/IP 协议族应用层协议传输层协议网络层协议IP 地址IPV4 数据报IP 地址分类子网划分子网掩码IPv6地址...

广东省道路货物运输资格证照片回执可手机线上办理

广东省道路运输资格证是从事道路运输业务、危险品道路运输人员的必要证件&#xff0c;而在办理该证件的过程中&#xff0c;驾驶员照片回执是一项必不可少的材料。随着科技的发展和移动互联网的普及&#xff0c;现在办理驾驶员照片回执已经不再需要亲自前往照相馆&#xff0c;而…...

【微信小程序——案例——本地生活(列表页面)】

案例——本地生活&#xff08;列表页面&#xff09; 九宫格中实现导航跳转——以汽车服务为案例&#xff08;之后可以全部实现页面跳转——现在先实现一个&#xff09; 在app.json中添加新页面 修改之前的九宫格view改为navitage 效果图&#xff1a; 动态设置标题内容—…...

【设计模式】SOLID设计原则

1、什么是SOLID设计原则 SOLID 是面向对象设计中的五个基本设计原则的首字母缩写&#xff0c;它们是&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle&#xff0c;SRP&#xff09;&#xff1a; 类应该只有一个单一的职责&#xff0c;即一个类应该有且只…...

基于java+springboot+vue实现的智能停车计费系统(文末源码+Lw+ppt)23-30

摘 要 随着人们生活水平的高速发展&#xff0c;智能停车计费信息管理方面在近年来呈直线上升&#xff0c;人们也了解到智能停车计费的实用性&#xff0c;因此智能停车计费的管理也逐年递增&#xff0c;智能停车计费信息的增加加大了在管理上的工作难度。为了能更好的维护智能…...

IntelliJ IDEA 2022.3.2 解决decompiled.class file bytecode version:52.0(java 8)

1 背景 使用idea 打开一个Kotlin语言编写的demo项目&#xff0c;该项目使用gradle构建。其gradle文件如下&#xff1a; plugins {id javaid org.jetbrains.kotlin.jvm version 1.8.20 } group me.administrator version 1.0-SNAPSHOTrepositories {mavenCentral()jcenter()…...

C++11 设计模式1. 模板方法(Template Method)模式学习。UML图

一 什么是 "模板方法&#xff08;Template Method&#xff09;模式" 在固定步骤确定的情况下&#xff0c;通过多态机制在多个子类中对每个步骤的细节进行差异化实现&#xff0c;这就是模板方法模式能够达到的效果。 模板方法模式属于&#xff1a;行为型模式。 二 &…...

HarmonyOS实战开发-自定义分享

介绍 自定义分享主要是发送方将文本&#xff0c;链接&#xff0c;图片三种类型分享给三方应用,同时能够在三方应用中展示。本示例使用数据请求 实现网络资源的获取&#xff0c;使用屏幕截屏 实现屏幕的截取&#xff0c;使用文件管理 实现对文件&#xff0c;文件目录的管理&…...

Spring源码刨析之配置文件的解析和bean的创建以及生命周期

public void test1(){XmlBeanFactory xmlBeanFactory new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));user u xmlBeanFactory.getBean("user",org.xhpcd.user.class);// System.out.println(u.getStu());}先介绍一个类XmlBeanFac…...

如何使用 Grafana 监控文件系统状态

当 JuiceFS 文件系统部署完成并投入生产环境&#xff0c;接下来就需要着手解决一个非常重要的问题 —— 如何实时监控它的运行状态&#xff1f;毕竟&#xff0c;它可能正在为关键的业务应用或容器工作负载提供持久化存储支持&#xff0c;任何小小的故障或性能下降都可能造成不利…...

智能革命:未来人工智能创业的天地

智能革命&#xff1a;未来人工智能创业的天地 一、引言 在这个数字化迅速变革的时代&#xff0c;人工智能(AI)已经从一个边缘科学发展成为推动未来经济和社会发展的关键动力。这一技术领域的飞速进步&#xff0c;不仅影响着科技行业的每一个角落&#xff0c;更是为创业者提供了…...

4月14日总结

java学习 一.多线程 简介&#xff1a;多线程是计算机科学中的一个重要概念&#xff0c;它允许程序同时执行多个任务或操作。在单个程序内部&#xff0c;多线程使得代码可以并行执行&#xff0c;从而提高程序的性能和响应速度。 这里先来介绍一下创建多线程的几种方法。 1.扩展…...

kafka---broker相关配置

一、Broker 相关配置 1、一般配置 broker.id 当前kafka服务的sid(server id)&#xff0c;在kafka集群中&#xff0c;该值是唯一的&#xff08;unique&#xff09;&#xff0c;如果未设置此值&#xff0c;kafka会自动生成一个int值&#xff1b;为了防止自动生成的值与用户设置…...

【Golang学习笔记】从零开始搭建一个Web框架(二)

文章目录 模块化路由前缀树路由 前情提示&#xff1a; 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;一&#xff09;-CSDN博客 模块化路由 路由在kilon.go文件中导致路由和引擎交织在一起&#xff0c;如果要实现路由功能的拓展增强&#xff0c;那将会非常麻烦&…...

高精度地图导航论文汇总

文章目录 2021基于车载激光点云的高精地图矢量化成图[J] 2022基于高精度地图的智能车辆路径规划与跟踪控制研究[M] 2023一种无人驾驶融合决策方案的设计与实现[M] 2021 基于车载激光点云的高精地图矢量化成图[J] 摘要&#xff1a; 针对车载激光点云中对各特征物提取结果后矢量…...

【域适应】基于域分离网络的MNIST数据10分类典型方法实现

关于 大规模数据收集和注释的成本通常使得将机器学习算法应用于新任务或数据集变得异常昂贵。规避这一成本的一种方法是在合成数据上训练模型&#xff0c;其中自动提供注释。尽管它们很有吸引力&#xff0c;但此类模型通常无法从合成图像推广到真实图像&#xff0c;因此需要域…...

如何提高网站的点击量/百度网盘提取码入口

CRF(conditional random field algorithm) 求解用到的知识点是 viterbi lr( logistics regression) 1、基本公式 和是特征函数&#xff0c;转移特征函数&#xff0c;状态特征函数&#xff0c;和是对应的权值&#xff0c;是规范因子&#xff0c;求和是在所有可能的输出序列上进…...

梅州网站建设公司/成都seo经理

今天&#xff0c;我们分享一份来自华为王发平的PPT——《加速5G车联网技术演进&#xff0c;建立汽车移动互联网新引擎》。一&#xff0e;车联网应用的发展进程和演进方向二&#xff0e;拥抱5G&#xff0c;汽车成为移动互联网的新引擎三&#xff0e;华为全栈车联云服务&#xff…...

网站怎么做边框/sem营销

编者按&#xff1a;Quora 上有网友提问&#xff1a;自学机器学习技术&#xff0c;你有哪些建议&#xff1f;&#xff08;What are your recommendations for self-studying machine learning&#xff09;&#xff0c;Yann LeCun 在该提问下做了解答。本文由雷锋网(公众号&#…...

wordpress商业主题分享/武汉关键词seo排名

主要内容 线程概念 创建线程的两个方法 实现runnable()接口 重写Thread类中方法 两种方法的区别创建线程与方法调用区别 停止线程的两个方法 interrupt()强制打断 引入变量boolean flag 控制Thread类常用方法 sleep() interrupt() join() yield() setPriority(int newPriority)…...

学做饼干网站/搭建一个网站需要什么

搭配使用 dao层配置文件(applicationContext-dao.xml): https://blog.csdn.net/a755199443/article/details/90272909 事务管理配置文件(applicationContext-trans.xml): https://blog.csdn.net/a755199443/article/details/90273049 service层配置文件用于扫描service层的Se…...

互联网方案设计/广州seo网站推广平台

您所在位置&#xff1a;网站首页 > 海量文档&nbsp>&nbsp高等教育&nbsp>&nbsp实验设计混沌摆实验讲义.doc10页本文档一共被下载&#xff1a;次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性&#xff0c;不预览、不…...