Jvm内存模型剖析优化-JVM(四)

news2024/11/17 8:30:52

上篇文章代码实例详解如何自定义双亲委派,主要实现ClassLoader,有两个方法,一个直接loadClass用父类的,如果想在破坏,则需要重写loadClass,一个findClass必须要重新,因为父类是空的,也是用defindClass的方法,传入加载类的二进制数据和大小。

自定义双亲委派-JVM(三)

  • tomcat如何加载包

Tomcat会部署多个不同的应用程序,而不同的应用程序应该加载自己的war包,不能和双亲委派一样,这样就会导致不同应用程序没有隔离性,于是tomcat的核心打破双亲委派。

 

我们上篇文章的代码其实已经实现了tomcat设计,tomcat会优先加载自定义的类库,而核心类库和tomcat自己的类库肯定不同的程序加载同一个,继续向上双亲委派。

于是我们在main方法再加几行代码,于是就可以看到两个相同的名称但是都可以加载成功并且打印出来。为什么jsp不需要重启tomcat也可以生效呢,jsp就是一个sevlet类,会生成自己的加载器。

  • Jvm内存模型

Java堆、方法区(元空间)、栈(线程)、本地方法栈、程序计数器。

 

栈这块放的是局部变量,官网叫虚拟机栈,又叫线程栈,当程序在修改数据的时候,并不是直接修改这个数据,而是java虚拟机会建立一个局部内存,放当前线程修改的值。

 

找到我们之前使用的类,用命令进行反汇编

Javap -c Main230629.class > Main230629.txt

针对我们jvm执行的是.classe二进制文件,其实执行的就是我们如图的txt里面的代码。

线程栈有哪些空间呢?

局部变量表操作数栈动态链接方法出口

那这些值是什么意思呢?

iconst_1:将int类型常量1压入 操作数栈

istore_1:将int类型的值存入 局部变量

...

前面四行代码对应的就是java赋值操作

Int a = 1  和 int b =2

iload_1:从局部变量1 装载int类型的值

Iadd:执行int类型加法

istore_3:给局部变量3分配 内存空间

iload_3:从局部变量3 装载int类型值

Ireturm:把值返回到主线程

程序计数器也是每个线程独有的内存空间,看图里每行都有一个数字,这个数字就是这行代码对应的位置,就是程序计数器的值。

方法区(元空间)放的是:常量+静态变量+类的信息,而内存地址放在堆。

每个线程都独有:本地方法栈,栈和程序计数器。不会共享

方法区和堆则是共享的。

堆无非就是年轻代和老年代。正常年轻代占三分之一,老年代占三分之二。Eden和survivor区,Eden占十分之八,s0和s1分别占十分之一。

正常情况对象都在Eden区。

第一次gc:

现在有一个系统,不断产生对象都放在Eden,这时候放满就会有YongGc,也就是minor GC,后台有现场进行minorGc。

第二次gc:

当找到非垃圾对象,这时候不会gc,则会赋值到survivor区域的s0。剩下在Eden区域的垃圾对象,直接干掉。

这时候这两个对象经过minorGc分代年龄加1,并且放入s0。

第三次gc:

这时候会把s0和Eden的对相亲全部干掉,如果这时候还有非垃圾对象存在,这时候会赋值到S1里,并且分代年龄+1。(会在s0和s1挪来挪去)

当这个对象分代年龄随着增加到了15的时候,于是到了来年代。

(老年代会有什么数据,静态变量,静态对象,缓存,缓存对象,spring容器里的对象)

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

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

相关文章

SpringBoot3之GraalVM之Linux详细安装及使用教程

Linux安装底层工具相关依赖 yum install -y gcc glibc-devel zlib-devel安装GraalVM JDK 《GraalVM官网下载》 找到最近的GraalVM Community Edition X.X.X点击Assets(因为我的是SpringBoot3项目,起始JDK就要求17,所以我下载17)下…

青少年机器人技术一级核心知识点:机械结构及模型(一)

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

vim背景颜色设置

cd ~进入个人家目录下,vim .vimrc进入vimrc文件: 在主题设置部分对颜色背景进行设置,onedark表示黑色背景,default表示白色背景,按需设置即可!

网络知识点-链路聚合

链路聚合(英语:Link Aggregation)是一个计算机网络术语,指将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出/入流量吞吐量在各成员端口的负荷分担,交换机根据用户配置的端口负荷分担策略决定…

【数据结构】算法的时间和空间复杂度

目录 1.什么是算法? 1.1算法的复杂度 2.算法的时间复杂度 2.1 时间复杂度的概念 计算Func1中count语句总共执行了多少次 2.2 大O的渐进表示法 2.3常见时间复杂度计算举例 实例1:执行2N10次 实例2:执行MN次 实例3:执行了100000000次 实例4:计算strchr的时…

java jwt生成token并在网关设置全局过滤器进行token的校验并在给请求头设置参数及在微服务中解析参数

1、首先引入jjwt的依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>2、编写生成token的工具类 package com.jjw.result.util;import com.jjw.res…

软考高级系统架构设计师(九) 作文模板-论设计模式及其应用(未完待续)

目录 掌握的知识点 创建型 结构型 行为型 掌握的知识点 设计模式分为哪3类 每一类包含哪些具体的设计模式 创建型 创建型模式是对对象实例化过程的抽象&#xff0c;他通过抽象类所定义的接口&#xff0c;封装了系统中对象如何创建、组合等信息。 创建型模式主要用于创建对…

【物联网】微信小程序接入阿里云物联网平台

微信小程序接入阿里云物联网平台 一 阿里云平台端 1.登录阿里云 阿里云物联网平台 点击进入公共实例&#xff0c;之前没有的点进去申请 2.点击产品&#xff0c;创建产品 3.产品名称自定义&#xff0c;按项目选择类型&#xff0c;节点类型选择之恋设备&#xff0c;联网方式W…

Linux下安装Redis的详细安装步骤

一.Redis安装 1.下载linux压缩包 【redis-5.0.5.tar.gz】 2.通过FlashFXP把压缩包传送到服务器 3.解压缩 tar -zxvf redis-5.0.5.tar.gz4.进入redis-5.0.5可以看到redis的配置文件redis.conf 5.基本的环境安装 使用gcc -v 命令查看gcc版本已经是4.8.5了&#xff0c;于是就…

ubuntu系统突然失去网络问题

修复ubuntu系统网络问题 1. 服务不存在&#xff1f;2. 修改配置&#xff0c;自动启动网络 每天都在用的ubuntu系统突然ssh连接不上&#xff0c;进系统ifconfig也不显示ip。当然也ping不通任何网页。 1. 服务不存在&#xff1f; 初步怀疑网络服务被关闭了&#xff0c;需要修改配…

【C6】数据类型/移植/对齐,内核中断,通过IO内存访问外设,PCI

文章目录 1.内核基础数据类型/移植性/数据对齐&#xff1a;页大小为PAGE_SIZE&#xff0c;不要假设4K&#xff0c;保证可移植性1.1 kdatasize.c&#xff1a;不同的架构&#xff08;x86_64,arm&#xff09;&#xff0c;基础类型大小可能不同&#xff0c;主要区别在long和指针1.2…

chatgpt赋能python:用Python访问数据库的SEO文章

用Python访问数据库的SEO文章 在当今互联网飞速发展的时代&#xff0c;数据处理和数据库技术的重要性不言而喻。在这些应用中&#xff0c;Python是使用最广泛和最受欢迎的编程语言之一。Python的简单和易学性使其成为理想的选项&#xff0c;可以通过Python来访问各种类型的数据…

荣耀90推出最新MagicOS7.1更新,增加控制中心功能

荣耀 90 系列机型推出了最新的 Magic OS 7.1更新&#xff0c;版本号为7.1.0.137 (C00E130R2P2)。该更新主要增加了控制中心功能&#xff0c;并对部分场景拍摄效果进行了优化。此外&#xff0c;该更新还提升了系统与部分三方应用的兼容性&#xff0c;以提高系统性能和稳定性。 …

选择最适合您自动化系统的控制方式

自动化系统可采用多种不同的控制方式&#xff0c;其中硬件控制和PLC&#xff08;可编程逻辑控制器&#xff09;是常见的选择。 刚好&#xff0c;我这里有上位机入门&#xff0c;学习线路图&#xff0c;各种项目&#xff0c;需要留个6。 硬件控制通常指使用专用硬件电路实现控…

C++3(sizeof和逗号运算符,类型转换)

1.sizeof的用法 逗号运算符 口诀&#xff1a;从左到右算&#xff0c;返回最右边的值 类型转换 如何实现的隐式类型转换&#xff1f; 先算右边的&#xff0c;右边的3&#xff08;int&#xff09;先提升为double &#xff0c;然后算得&#xff08;7.541&#xff08;double&#…

CMU 15-445 -- 关系型数据库重点概念回顾 - 01

CMU 15-445 -- 关系型数据库重点概念回顾 - 01 引言Relational Data ModelDBMS数据模型Relational ModelRelation & TuplePrimary KeysForeign Keys Data Manipulation Languages (DML)Relational Algebra Advanced SQLSQL 的历史SQLAggregatesGroup ByHavingOutput Redire…

内存屏障类型表

load store 啥意思 内存屏障类型表 StoreLoad Barriers是一个“全能型”的屏障&#xff0c;它同时具有其他3个屏障的效果。现代的多处理器大多支持该屏障&#xff08;其他类型的屏障不一定被所有处理器支持&#xff09;。执行该屏障开销会很昂贵&#xff0c;因为当前处理器通常…

在文件每行开头或结尾插入指定字符

1、在文件每行插入指定字符 sed -i "s/^/curl /g" missing.txt效果 2、在每行末尾插入指定字符 sed -i "s/$/结束 /g" missing.txt

leetcode1856. 子数组最小乘积的最大值(单调栈-java)

子数组最小乘积的最大值 leetcode1856.子数组最小乘积的最大值题目描述解题思路代码演示&#xff1a; 经典算法集锦 leetcode1856.子数组最小乘积的最大值 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/maximum-subarr…

【网络安全】初探SQL注入漏洞

如何利用SQL注入漏洞获取用户密码 前言1. 设计思路2. 设计目的 一、网站快速搭建1. 登录页2. 注册页3. 数据库连接页4. 首页&#xff08;登录后跳转到此处&#xff09;5. session页6. 注销页7. 查询页8. 数据库 二、SQL注入实例&#xff08;小试牛刀&#xff09;1. 猜测漏洞逻辑…