JVM和类加载机制-01[JVM底层架构和JVM调优]

JVM底层

  • Java虚拟机内存模型
    • JVM组成部分
      • 五大内存区域各自的作用
        • 虚拟机栈(线程栈)
          • 栈帧内存区域
        • 本地方法栈
        • 程序计数器
          • 为什么jvm要设计程序计数器?
        • 方法区
  • JVM优化-堆详解
    • JVM底层垃圾回收机制
    • jvm调优工具
      • jvisualvm.exe
      • Arthas工具使用

Java虚拟机内存模型

  • JVM跨平台原因
    就是在JVM层面对各个操作系统的指令做了不同处理
    在这里插入图片描述

JVM组成部分

在这里插入图片描述

五大内存区域各自的作用

虚拟机栈(线程栈)

每次运行的时候,都会给线程栈分配一部分内存,有多少个线程就分配多少个。来存放各自线程运行时的变量,说白了就是工作内存,工作内存哪里来的就是虚拟机栈中分配来的
在这里插入图片描述

栈帧内存区域

一个方法对应一个栈帧内存区域,
在这里插入图片描述
在这里插入图片描述

本地方法栈

方法执行到了本地方法,本地方法执行也需要内存空间,就从本地方法栈中分配一部分给本地方法。本地方法就是naitve修饰的方法(底层是C++)
在这里插入图片描述

程序计数器

某行程序在方法区中的内存地址
在这里插入图片描述

为什么jvm要设计程序计数器?

在这里插入图片描述
比如上面的程序,如果是多线程情况下,A线程执行到第4行的时候,被其他线程抢占资源,其他线程执行,其他线程完毕,A线程再回头执行,如果没有程序计数器,它就不知道它之前执行到第几行,就得重新执行,有了程序计数器,A线程一看,我之前执行到第4行,现在就从第4行开始再执行。

如果栈中存放的是变量是对象也就是引用类型的变量,那栈中存放的就是指向对象的指针,对象就存放在堆中,所有线程共享
在这里插入图片描述

方法区

存放常量+静态变量+类信息

方法区中存放的静态变量是引用类型的,那么方法区中存的即使静态引用变量的指针,对象还是存放到堆中。

在这里插入图片描述

JVM优化-堆详解

老年代占比2/3,年轻代占1/3。年轻代:8:1:1,年轻代又分为伊甸园区、s0、s1
在这里插入图片描述

JVM底层垃圾回收机制

在这里插入图片描述
新创建的对象都在新生代的伊甸园区,当伊甸园区满了后,字节码执行引擎就会开启垃圾收集线程,开始进行垃圾回收
常见的垃圾回收算法:

  • 引用计数法(已经淘汰了)
    在这里插入图片描述
  • 根可达性分析算法
    在这里插入图片描述垃圾收集线程根据根可达算法,找到垃圾后把非垃圾转移到survivor(幸存者)区域,而垃圾就被直接干掉了
    survivor区域的对象会在s0和s1之间反复挪动,一个minor gc挪动一次,当挪动15次也就是minor gc15次后,也叫分代年龄15次,还没有被干掉,就移动到老年代。
    在这里插入图片描述

jvm调优工具

jvisualvm.exe

调出jdk自带jvisualvm.exe工具进行查看
在这里插入图片描述

  • 测试代码
public class HeapTest {
    byte [] a=new byte[1024*100]; //100KB

    public static void main(String[] args) throws InterruptedException {
        ArrayList<HeapTest> heapTests=new ArrayList<>();
        while (true){
            heapTests.add(new HeapTest());
            TimeUnit.SECONDS.sleep(2);
        }
    }
}

执行本地方法就可以监视到
在这里插入图片描述

Arthas工具使用

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go Sync.Pool

sync 包提供了一个强大且可复用的实例池&#xff0c;以减少 GC 压力。在使用该包之前&#xff0c;我们需要在使用池之前和之后对应用程序进行基准测试。这非常重要&#xff0c;因为如果不了解它内部的工作原理&#xff0c;可能会影响性能。 池的限制 type Small struct {a in…

dhtmlx-gantt甘特图数据展示

官网文档&#xff1a;甘特图文档 实现效果&#xff1a; 首先需要下载 dhtmlx-gantt组件 npm i dhtmlx-gantt //我项目中使用的是"dhtmlx-gantt": "^8.0.6" 这个版本&#xff0c;不同的版本api或是文档中存在的方法稍有差异 界面引用 <template>&l…

iOS ------ 类 父类 元类的总结

一&#xff0c;类的定义 类在OC中其实是指向objc_class的结构体指针&#xff0c;结构体构造我 typedef struct objc_class *Class; struct objc_class { Class isa; Class super_class; const char *name; long version; long info; long instance_size; struct obj…

ElementUI el-select 组件动态设置disabled后,高度变更的问题解决办法

问题描述 Vue2 项目在使用 el-select 组件时&#xff0c;动态将disabled变更为了 true&#xff0c;元素的高度发生了变化。 问题原因 通过浏览器开发人员工具面板&#xff0c;发现&#xff0c;组件内的 input 元素被动态设置了height的样式&#xff1a; 在项目中检查后并…

基于STM32设计的超声波测距仪(微信小程序)(186)

基于STM32设计的超声波测距仪(微信小程序)(186) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择1.5 系统框架图…

<数据集>钢板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1986张 标注数量(xml文件个数)&#xff1a;1986 标注数量(txt文件个数)&#xff1a;1986 标注类别数&#xff1a;7 标注类别名称&#xff1a;[crescent gap, silk spot, water spot, weld line, oil spot, punchin…

人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程14-神经网络的优化与设计之拟合问题及优化与代码详解。在机器学习和深度学习领域&#xff0c;模型的训练目标是找到一组参数&#xff0c;使得模型能够从训练数据中学习到有用的模式&am…

mysql命令练习

创建数据表grade: CREATE TABLE grade( id INT NOT NULL&#xff0c; sex CHAR(1)&#xff0c; firstname VARCHAR(20) NOT NULL&#xff0c; lastname VARCHAR(20) NOT NULL&#xff0c; english FLOAT&#xff0c; math FLOAT, chinese FLOAT )&#xff1b; 向数据表grade中插…

基于springboot与vue的旅游推荐系统与门票售卖

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

图像边缘检测中Sobel算子的原理,并附OpenCV和Matlab的示例代码

Sobel算子是一种用于图像边缘检测的离散微分算子。它结合了图像的平滑处理和微分计算&#xff0c;旨在强调图像中强度变化显著的区域&#xff0c;即边缘。Sobel算子在图像处理中被广泛使用&#xff0c;特别是在计算机视觉和图像分析领域。 Sobel算子的原理 Sobel算子主要用于计…

zookeeper+kafka的消息队列

zookeeperKafka 两个都是消息队列的工具 消息队列 出现原因&#xff1a;生产者产生的消息与消费者处理消息的效率相差很大。为了避免出现数据丢失而设立的中间件。 在消息的生产者与消费之间设置一个系统&#xff0c;负责缓存生产者与消费者之间的消息的缓存。将消息排序。 优…

SpringMVC注解全解析:构建高效Web应用的终极指南 (上)

SpringMVC 是一个强大的 Web 框架&#xff0c;广泛应用于 Java Web 开发中。它通过注解简化了配置&#xff0c;增强了代码的可读性。本文将全面解析 SpringMVC 中常用的注解及其用法&#xff0c;帮助你构建高效的 Web 应用。 一. MVC介绍 MVC 是 Model View Controller 的缩写…

鸿蒙语言基础类库:【@system.bluetooth (蓝牙)】

蓝牙 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.bluetooth]。本模块首批接口从API version…

反序列化漏洞详细介绍

反序列化漏洞详细介绍: 反序列化漏洞是软件开发中一个严重的安全问题&#xff0c;尤其在使用网络通信和持久化数据的应用中更为常见。下面是对反序列化漏洞的详细介绍&#xff1a; 原理 序列化是将对象的状态信息转换为可以存储或传输的格式&#xff08;如字节流&#xff09…

【TAROT】韦特体系塔罗牌学习(2)——魔术师 THE MAGICIAN I

韦特体系塔罗牌学习&#xff08;2&#xff09;——魔术师 THE MAGICIAN I 目录 韦特体系塔罗牌学习&#xff08;2&#xff09;——魔术师 THE MAGICIAN I牌面分析1. 基础信息2. 图片元素 正位牌意1. 关键词/句2.爱情婚姻3. 学业事业4. 人际关系5. 其他象征意 逆位牌意1. 关键词…

python数据可视化(5)——绘制饼图

课程学习来源&#xff1a;b站up&#xff1a;【蚂蚁学python】 【课程链接&#xff1a;【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接&#xff1a;【链接】】 Python绘制饼图分析北京天气 饼图&#xff0c;是一个划分为几个扇形的圆形统计图表&#xff…

【网络世界】网络基础概念

目录 &#x1f308; 前言&#x1f308; &#x1f4c1; 什么是网络 &#x1f4c1; 协议 &#x1f4c2; 概念 &#x1f4c2; OSI参考模型 &#x1f4c2; TCP/IP模型 &#x1f4c2; TCP/IP 和 系统分层的关系 &#x1f4c1; 网络传输的基本流程 &#x1f4c2; MAC地址 &#…

文件上传接口

文章目录 开发前端接口 开发前端接口 首先这个前端的文件上传组件使用了,前端组件 首先这个接口不是一般的接口,这个接口可以提取出来,之后那里使用了,就直接放到哪里 所以这是一个万能文件上传接口 写完之后选择 头像组件 在图库中添加组件 写前端组件之后,写了前端的组件…

WPF实现一个带旋转动画的菜单栏

WPF实现一个带旋转动画的菜单栏 一、创建WPF项目及文件1、创建项目2、创建文件夹及文件3、添加引用 二、代码实现2.ControlAttachProperty类 一、创建WPF项目及文件 1、创建项目 打开VS2022,创建一个WPF项目&#xff0c;如下所示 2、创建文件夹及文件 创建资源文件夹&…

Go: IM系统技术架构梳理

概述 整个IM系统的一般架构如下 我们这张图展示了整个IM系统的一般架构可见分为四层那最上面这一层是前端&#xff0c;包括哪些东西呢&#xff1f; 它包括两部分&#xff0c;第一部分是跟用户直接交互的比如说各种IOS APP, 各种安卓 APP还有各种 web APP 在浏览器里面打开的以…