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

上篇文章代码实例详解如何自定义双亲委派,主要实现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.hqwc.cn/news/9722.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arcgis的属性显示bug

arcgis中,右键图层属性可以查看图层的属性信息,比如坐标系、波段数、行列数等。 但是今天实验的时候发现,这个属性中显示的波段最大最小值并非真值。 该图层实际范围为:30~711。 在arcgis属性中,显示范围为0~651。 在…

前端技术搭建五子棋游戏(内含源码)

The sand accumulates to form a pagoda ✨ 写在前面✨ 功能介绍✨ 页面搭建✨ 样式设置✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了拼图游戏,今天还是继续按照我们原定的节奏来带领大家完成一个五子棋游戏,功能也比较简单简单,也…

外包干了2个月,技术退步明显...

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

ESP32设备驱动-HTU31温湿度传感器驱动

HTU31温湿度传感器驱动 文章目录 HTU31温湿度传感器驱动1、HTU31介绍2、硬件准备3、软件准备4、驱动实现1、HTU31介绍 高性能 HTU31 湿度和温度组合传感器是市场上最小和最精确的湿度传感器之一。 HTU31 提供数字和模拟版本,即使在最恶劣的环境中也能提供快速响应时间、精确测…

spring.boot 随笔0 springFactoriesInstance入门

0. 其实也没有那么入门 明天还要上班,速度write,直接放一张多样性比较好的 spring.factories 文件(取自 spring-boot-2.3.4.RELEASE.jar) # PropertySource Loaders org.springframework.boot.env.PropertySourceLoader\ org.springframework.boot.env…

允许Traceroute探测漏洞和ICMP timestamp请求响应漏洞解决方法

目录 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 2、ICMP timestamp请求响应漏洞 服务器检测出了漏洞需要修改 1.允许Traceroute探测漏洞解决方法 详细描述 本插件使用Traceroute探测来获取扫描器与远程主机之间的路由信息。攻击者也可以利用这些信息来…

开源项目推荐 【SkyEyeSystem】

大家好,今天向大家推荐一个开源项目——SkyEyeSystem。 这是一个基于Spring Boot的全网热点爬虫项目,旨在提供全面而准确的全网热搜数据。 关于项目 SkyEyeSystem通过定时任务间隔10min爬取全网热搜数据。目前包括的平台有: 微博热搜B站热…

sklearn.model_selection模块介绍

数据集划分方法 train_test_split train_test_split(*arrays, test_sizeNone, train_sizeNone, random_stateNone, shuffleTrue, stratifyNone)参数包括: test_size:可选参数,表示测试集的大小。可以是一个表示比例的浮点数(例…

经典基于外观的SLAM框架-RTABMAP(RGBD视觉输入方案)

经典基于外观的SLAM框架-RTABMAP 文章目录 经典基于外观的SLAM框架-RTABMAP1. RTABMAP整体框架2.RTABMAP的内存管理机制3. 视觉里程计4. 局部地图5. 回环检测与图优化6. 代码工程实践 1. RTABMAP整体框架 RTABMAP是采用优化算法的方式求解SLAM问题的SLAM框架,本赛题…

C#异常总结

C#异常总结 定义Try语句异常类创建用户自定义异常搜索调用栈的示例异常抛出 定义 程序中的运行时错误,它违反一个系统约束或应用程序约束,或出现了在正常操作时未预料的情形。 Try语句 指明被异常保护的代码块,并提供代码以处理异常。try由…

【机器学习】支持向量机(下)

支持向量机(下) 目录 八、支持向量机的求解实例九、核函数1、核函数的引入2、核函数的示例 十、软间隔1、何为软间隔2、引入软间隔后的目标方程 十一、正则化十二、关于支持向量机的分类十三、数据标准化的影响【机器学习】支持向量机(上&…

Segment Anything:突破边界的图像分割新技术解析

Segment Anything论文地址:https://arxiv.org/pdf/2304.02643.pdf Segment Anything:突破边界的图像分割新技术解析 论文背景Segment Anything任务方法Segment Anything 模型架构图像编码器(Image Encoder)提示编码器(…