2. JVM内存模型

news2024/11/29 22:32:09

1. JVM虚拟机内存模型图解

在这里插入图片描述

  • JAVA虚拟机主要由这三部分组成类装载子系统,字节码执行引擎,运行时数据区
  • 上一节我们不是学了类的加载吗,那些类加载器许多都是C++帮我们做的,那么我们这个类装载子系统就是帮我们把类放入运行时数据区的(这里也就是上一节的一些程序代码)
  • 放入到内存中之后,也就是运行时数据区
  • 最后再通过字节码执行引擎来执行内存区里面的代码,也就是解析.class文件

2. 运行时数据区解释

2.1 栈

  • 栈:(可以称为线程栈),当我们开启线程之后,就会在虚拟机栈中分配一小块的空间,用来存放局部变量等等,
  • 在一个Jvm里面我们写的一个方法对应一块栈帧内存区域,
  • 这里我的个人理解栈和栈帧是有区别的,当开启一个main线程的时候会在栈里面分配一块区域,这个区域就是mian这个线程用的,如果说启动了别的线程那么同样也会在栈里面分批一个其他的内存区域
  • 然后在这个区域里面每调用一个方法,那么就在这个区域里面开辟一个栈帧,相当于对着区域做了分割,这个方法的局部变量等等就放在这里面,
  • 因为我们的方法里面定义的变量等等之类的,应该放在一个栈帧里面,而不是随意的放在mian线程开辟的内存空间的任意区域
    在这里插入图片描述
    而且这是个栈由于他的特性,先进后出,这个也符合我们的代码运行逻辑
  • 栈帧除了放局部变量还放了操作数栈,动态链接方法出口等等

这个是上一张图main方法里面的栈帧存放数据模型

在这里插入图片描述
这里有一个查看指令
javap -c .\PartOrderController.class > partOrder.txt

操作数栈就是需要进行临时的一块空间,也就是计算,然后把计算出来的数据放入到局部变量表中
动态链接就是把符号引用替换为直接引用
如果我们在栈里面new了一个对象,那么我们的栈帧里面的局部变量表是不是会存放一个new出来对象的局部变量,但是我们的对象一般是放在堆里面的,那么栈帧的局部变量表存放的就是这个对象的堆里面的地址

在这里插入图片描述

2.2 方法区

  • 运行时常量池主要放在方法区
  • 说简单点就是常量+静态变量+类信息
  • 如果在加载的时候new了一个对象,并且是静态变量,那么同样方法区里面存储的也是堆的指针地址

2.3 本地方法栈

  • 主要是为了调用一些C++代码

2.4 堆

  • 堆的组成
    在这里插入图片描述
    堆分为年轻代和老年代
    年轻代默认站堆得三分之一
    老年代默认站堆得三分之二
    当然这个配比是可以调的
    年轻代又分为Eden区和seurivior区域,然后这个的比例是 8:1:1

3. Java自带的工具Jvisualvm

在这里插入图片描述
minor gc 回收年轻代
full gc 回收年轻代,老年代,元空间

在发生垃圾回收机制的时候会发生stop the world也就STW 停止掉用户线程
JVM调优主要就是就是减少full jc次数

4 jvm内存参数模型

在这里插入图片描述
在这里插入图片描述
-Xss是每一个线程栈的内存空间
-Xss设置的越小,每个线程栈里面能分配的栈帧就越少,但是对JVM整体来说能开启的线程就越多

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]Python计算机毕业设计SSM浪漫烘焙屋(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

原创|一个统计查询模块基于设计模式的抽象设计

文章目录一、需求背景二、详细设计UML设计包设计三、程序设计1、VideoAdStatCaliberEnum2、LiveDashboardBusiness3、StatHandleDispatcher4、StatCaliberEnum5、StatContext5、AbstractStatHandler6、LoggerService7、AbstractVideoAdStatHandler1、VideoAdStatContext2、Vide…

cpu设计和实现(协处理器cp0)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 除了通用计算器负责控制和计算之外,cpu如果需要正常有序地运行,还需要一定地协处理器来帮助完成对应地工作。在mips下面&am…

Vue实现流程图,借鉴vue-tree-color 实现流程框架技术

Vue实现流程图,借鉴vue-tree-color 实现流程框架技术 文章目录Vue实现流程图,借鉴vue-tree-color 实现流程框架技术借鉴鸣谢演示效果引入依赖添加全局组件的二次封装步骤1 创建组件目录Vuenode.jstree.less使用组件引入使用数据结构案例借鉴鸣谢 实现组…

[附源码]Python计算机毕业设计Django的桌游信息管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

元宇宙产业委调研行杭州站 | 联合西溪谷管委会共商元宇宙赋能实体经济

11月29日下午,由杭州西溪谷建设发展管理委员会和中国移动通信联合会元宇宙产业工作委员会共同举办的“元宇宙赋能实体经济企业家沙龙暨元宇宙产业委调研行杭州站”在西溪谷杭州蚂蚁链产业创新中心召开。20余家元宇宙和区块链企业到场,西溪谷管委会党委书…

pytorch复习笔记--loss.backward()、optimizer.step()和optimizer.zero_grad()的用法

目录 1--loss.backward()的用法 2--optimizer.step()的用法 3--optimizer.zero_grad()的用法 4--举例说明 5--参考 1--loss.backward()的用法 作用:将损失loss向输入测进行反向传播;这一步会计算所有变量x的梯度值 ,并将其累积为 进行备…

迎合国家新政策,共享购联合共享经济,三方互利,消费增值

共享单车打通出行“最后一公里”,共享充电宝让人们出门在外免于“电量烦恼”,共享办公降低办公成本……共享经济已深入到人们日常生活。近日,国家信息中心发布的《中国共享经济发展报告(2022)》显示,2021年…

EMR-Jindo Spark 核心引擎优化

Jindo-Spark 是阿里云智能E-MapReduce 团队在开源的Apache Spark 基础上自主研发的分布式云原生 OLAP 引擎,已经在近千E-MapReduce 客户中大规模部署使用。Jindo Spark 在开源版本基础上做了大量优化和扩展,深度集成和连接了众多阿里云基础服务。凭借该引…

工作流-流程实例【ProcessInstance】与执行实例【Execution】

一、ProcessInstance与Execution的区别 这是一个Activiti的难点,能够懂得这个,工作流也就入门大半了。 下面,我就细致的讲解一下他们的区别。 (1)首先,我们来看一张我总结的图片(这个图片中两条…

Flink-处理函数以及TopN运用案例

7 处理函数 7.1 概述 更底层的操作,直接对流进行操作,直接调用处理函数 7.2 基本处理函数ProcessFunction 分析 ProcessFunction的来源 处理函数继承了AbstractRichFunction富函数抽象类,因此就具有访问状态(state)和其他运行时环境 例…

Day39——Dp专题

文章目录01背包二维数组一维数组6.整数拆分7.不同的二叉搜索01背包 01背包:每一个物品只能选一次,选或者不选 状态标识:f[i][j]:所有只考虑前i个物品,且总体积不超j的所有选法的集合 属性:Max 状态计算&a…

链表之反转链表

文章目录链表之反转链表题目描述解题思路代码实现链表之反转链表 力扣链接 题目描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: ​ 输入: 1->2->3->4->5->NULL ​ 输出: 5->4-&…

如何设计高性能架构

高性能复杂度模型 高性能复杂度分析和设计 单机 集群 任务分配 将任务分配给多个服务器执行 复杂度分析 增加“任务分配器”节点,可以是独立的服务器,也可以是SDK任务分配器需要管理所有的服务器,可以通过配置文件,也可以通过…

RK3588移植-opencv交叉编译aarch64

文章参考:https://blog.csdn.net/KayChanGEEK/article/details/80365320 文章目录概括准备资源交叉编译OPENCV修改CMakelist文件将lib库复制到/lib目录注意:本文中的所有配置相关路径都与当前安装的路径有关,需要根据自己的环境进行自行修改&…

『Java课设』JavaSwing+MySQL实现学生成绩管理系统

👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟 🏡个人主页:starry陆离 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 『Java课设』JavaSwingMySQL实现学生成绩管理系统前言1.开…

SparkMlib 之随机森林及其案例

文章目录什么是随机森林?随机森林的优缺点随机森林示例——鸢尾花分类什么是随机森林? 随机森林算法是机器学习、计算机视觉等领域内应用极为广泛的一个算法,它不仅可以用来做分类,也可用来做回归即预测,随机森林机由…

RabbitMQ之可靠性分析

在使用任何消息中间件的过程中,难免会出现消息丢失等异常情况,这个时候就需要有一个良好的机制来跟踪记录消息的过程(轨迹溯源),帮助我们排查问题。在RabbitMQ 中可以使用Firehose 功能来实现消息追踪,Fire…

艾美捷MTT细胞增殖检测试剂盒结果示例引用文献

艾美捷MTT细胞增殖检测试剂盒测定原理: 该试剂盒提供了比色形式测量和监测细胞增殖,含有足够的试剂用于评估在96孔板中进行960次测定或在24孔板中进行192次测定。细胞可以被镀,然后用影响增殖的化合物或药剂。然后用增殖试剂检测细胞&#x…

3.矩阵计算及导数基础

1. 梯度 将导数拓展到向量。 1. 标量对向量求导 x是列向量,y是标量,求导之后变成了行向量 ps: x1^2 2x2^2 这个函数可以画成等高线,对于(x1,x2)这个点,可以做等高线的切线,再做出…