jvm底层

逐步细化 

静态链接:静态方法(符号引用)替换为内存指针或者句柄直接引用)

动态链接:程序期间将符号引用替换为直接引用

对象头:

指针压缩:

  -XX:+UseCompressedOops 开启指针压缩

    减少内存消耗;大指针在主内存 缓存间移动数据,占用带宽大 GC压力大

    jvm通过对对象指针存入堆内存时进行压缩编码32位,取到cpu寄存器 解码方式优化35位 

    堆内存大于32g,压缩指针失效,强制使用64位对java对象寻址

       小于4g 不需要启动指针压缩 直接去除高32位地址,使用低虚拟空间

Launcher

 单例 

内存分配

逃逸分析:

   在方法被定义后可能被外部方法引用

     不会逃逸的对象可在栈上分配内存,方法结束时跟随栈内存一起被回收掉

     默认开启- XX:DoEscapeAnalysis  7默认开启

 标量替换:不会逃逸 且对象可进一步分解,jvm不会创建该对象,分解若干成员变量

   -XX:EliminateAllocations

标量与聚合量:标量不能分解掉量,基本数据类型 reference类型

   聚合量:可分解掉量,对象

 堆分配:

内存模型

栈帧内存空间:独立

参数:

-Xms    -Xmx   -Xmn 

-XX:MaxMetaspaceSize元空间max值,默认 -1 不限制

-Xss 栈大小默认1m,值越小栈帧越小,512k,jvm开启线程越多

-XX:MetaspaceSize 元空间初始大小 字节为单位 21M ,到达触发full gc,收集器对该值调整,释放了大量空间则调低,释放很少空间 不超max提高该值

双亲委派:父加载器

类型

引导类加载器:jre的lib核心类

扩展类加载器:ext

应用程序加载器:appClassLoader ,classpath,target包

自定义加载器:

过程

 appClassLoader   urlClassLoader   loadClass(全类名)

findLoadedClass已经加载的类c

    parent.loadClass(name,resolve:false);加锁 sync ;

    父的loadClass (extClassLoader循环调super)

findBootstrapClassOrNull引导类加载器 

   已经加载的类去

findClass(); 可打破双亲委派,跳过super

  urlClassLoader: path 类路径

  ucp.getResource加载类

  defineClass

打破

tomcat

web容器,不同应用程序可能会依赖同一三分库的不同版本;

commonLoader:基本类加载器,class可被tomcat本身及wabapp访问

 sharedLoader:各webapp共享类加载器, 加载路径中class对于所有webapp可见,对tomcat容器不可见

catalinaLoader:tomcat容器私有类加载器,加载路径中class对webapp不可见

webappClassLoader:各webapp私有类加载器,加载路径中的class文件对当前webapp见,每个war有自己的webappClassLoader,互相隔离,不同war包应用引入不同spring版本

原因

沙箱安全机制:自己写的类不会被加载,防止核心api库被随意篡改

避免类重复加载:父已经被加载类该类,没必要再加载一次

全盘委托:

    当一个classload装载一个类时,除非显示使用另一个classloader,该类所依赖及引用的类也由这个classloader载入

自定义类加载器

 继承java.lang.ClassLoader类


public class FindClassLoader {static class MyClassLoader extends ClassLoader{private String classPath;public MyClassLoader(String classPath){this.classPath =classPath;}private byte[] loadByte(String name) throws Exception{name = name.replaceAll("\\.","/");FileInputStream fis = new FileInputStream(classPath+"/"+name+".class");int len = fis.available();byte[] data = new byte[len];fis.read(data);fis.close();return data;}protected Class<?> findClass(String name) throws ClassNotFoundException{try {byte[] data = loadByte(name);//字节数组转class对象,字节数组是class文件读取后最终的字节数组return defineClass(name,data,0,data.length);}catch (Exception e){e.printStackTrace();throw new ClassNotFoundException();}}}public static void main(String[] args) throws Exception{//初始化自定义类加载器 先初始化父类classloader;会把自定义类加载器的父加载器=appClassLoaderMyClassLoader classLoader = new MyClassLoader("读取哪个路径");Class clazz = classLoader.loadClass("类全路径");Object obj = clazz.newInstance();Method method=clazz.getDeclaredMethod("哪个方法",null);method.invoke(obj,null);System.out.println(clazz.getClassLoader().getClass().getName());}}

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

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

相关文章

6.3 BP神经网络

在多层感知器被引入的同时&#xff0c;也引入了一个新的问题&#xff1a;由于隐藏层的预期输出并没有在训练样例中给出&#xff0c;隐藏层结点的误差无法像单层感知器那样直接计算得到。 为了解决这个问题&#xff0c;反向传播&#xff08;BP&#xff09;算法被引入&#xff0…

centos glibc 升级导致系统崩溃

centos 7.9默认的glibc为2.17&#xff0c;因为要安装一些软件&#xff0c;需要升级到glibc 2.18&#xff0c;而从源码进行编译和安装&#xff0c;安装失败&#xff0c;导致系统崩溃。 系统崩溃首先想到的是利用启动盘进行救援&#xff0c;而利用centos 7.9的启动盘始终无法挂载…

【PHP + 代码审计】数组排序算法

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

利用K8S Statefulset搭建Etcd集群 - PVC存储

概述 在测试过程中发现&#xff0c;直接使用本地存储&#xff0c;当节点机器损坏了&#xff0c;对应机器的etcd数据也丢失了&#xff0c;故而做了利用K8S PV&#xff0c;PVC以及NFS来存储数据的尝试&#xff0c;经过一番折腾&#xff0c;测试成功&#xff0c;博文记录&#xf…

银行监管报送系统介绍(五):金融统计数据大集中自动化报送系统——PBOC Report

人民银行金融统计数据大集中自动化报送系统&#xff08;简称PBOC Report&#xff09;&#xff0c;是基于现代计算机网络技术应用基础上&#xff0c;由人行总行设置金融统计数据服务器&#xff0c;建立的一个全国统一的金融统计数据库。 人行针对各银行存贷款、中间业务、网点人…

【几何】平面方程

文章目录 平面方程一般式截距式点法式法线式 平面方程 平面方程是用一个方程来表示平面&#xff0c;平面上的所有点代入方程&#xff0c;方程都成立。因为用法的不同&#xff0c;平面方程一般有四种表现形式。 一般式 设 n ⃗ ( A , B , C ) \vec n(A,B,C) n (A,B,C) 为平…

信号处理--基于FBCSP滤波方法的运动想象分类

目录 理论 工具 方法 代码获取 理论 通用空间模式 (CSP) 算法可以用来有效构建最佳空间滤波器区分&#xff0c;然后实现运动想象的数据中的脑电信号的区分。然而&#xff0c;空间滤波器性能的好坏主要取决于其工作频带。如果脑电信号没有经过滤波或者滤波的频带范围不合适…

Django 铺垫

【一】基础知识点 【1】web框架的本质 Web框架本质上可以看成是一个功能强大的socket服务端用户的浏览器可以看成是拥有可视化界面的socket客服端两种通过网络请求实现数据交互 【2】浏览器发送请求 &#xff08;1&#xff09;HTTP协议 HTTP协议是超文本传输协议&#xff…

【云开发笔记No.15】持续改进与反馈

一、引言 在产品研发过程中&#xff0c;反馈机制是确保项目顺利进行并最终达到预期目标的关键环节。它不仅能够及时发现和纠正开发过程中的问题&#xff0c;还能促进团队成员之间的有效沟通&#xff0c;提高开发效率。持续改进作为现代研发管理的重要理念&#xff0c;与反馈机…

RabbitMQ的事务机制

想要保证发送者一定能把消息发送给RabbitMQ&#xff0c;一种是通过Confirm机制&#xff0c;另一种就是通过事务机制。 RabbitMQ的事务机制&#xff0c;允许生产者将一组操作打包成一个原子事务单元&#xff0c;要么全部执行成功&#xff0c;要么全部失败。事务提供了一种确保消…

wireshark下载

一、官网下载 www.wireshark.org 二、各版本链接 链接&#xff1a;Index of /download/

FPGA使用XADC测量外部模拟输入电压

一、XADC简介 1.1、特性 Xilinx系列的FPGA中都包含了一个内置的XADC&#xff0c;我们可以通过这个XADC进行一些精度不高的外部模拟信号采样以及FPGA片内传感器信号采集。XADC的分辨率为12位&#xff0c;采样率为1MSPS。 1.2、结构框图 两片XADC&#xff0c;ADC A可用于片内…

SpringJPA 做分页条件查询

前言: 相信小伙伴们的项目很多都用到SpringJPA框架的吧,对于单表的增删改查利用jpa是很方便的,但是对于条件查询并且分页 是不是很多小伙伴不经常写到. 今天我整理了一下在这里分享一下. 话不多说直接上代码: Controller: RestController public class ProductInstanceContr…

12 React 组件通信 兄弟组件之间通信

12 React 组件通信 兄弟组件之间通信 在React中实现兄弟组件通信相对于父子组件通信来说稍微复杂一些&#xff0c;因为React本身是基于单向数据流的&#xff0c;兄弟组件之间并没有直接的通信途径。不过可以通过以下几种方式实现兄弟组件通信&#xff1a; 通过共同的父组件传递…

Apache HTTP服务器(Linux离线编译安装)

Apache HTTP服务器&#xff08;Linux离线编译安装&#xff09; Apache是普通服务器&#xff0c;本身只支持html即普通网页。可以通过插件支持PHP,还可以与Tomcat连通(单向Apache连接Tomcat,就是说通过Apache可以访问Tomcat资源。反之不然)。 Apache和Tomcat都可以做为独立的w…

8个常见的数据可视化错误以及如何避免它们

在当今以数据驱动为主导的世界里&#xff0c;清晰且具有洞察力的数据可视化至关重要。然而&#xff0c;在创建数据可视化时很容易犯错误&#xff0c;这可能导致对数据的错误解读。本文将探讨一些常见的糟糕数据可视化示例&#xff0c;并提供如何避免这些错误的建议。 本文总结了…

Javascript由浅到深

关注我&#xff0c;持续分享逻辑思维&管理思维&#xff1b; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导&#xff1b; 有意找工作的同学&#xff0c;请参考博主的原创&#xff1a;《面试官心得--面试前应该如何准备》&#xff0c;《面试官心得--面试时如何进行自…

蓝桥杯day11刷题日记

P8615 [蓝桥杯 2014 国 C] 拼接平方数 思路&#xff1a;先把数据范围内的平方数打上标记&#xff0c;然后就是遍历这个区间&#xff0c;转成字符串&#xff08;好拆数据&#xff09;&#xff0c;用substr拆开数据&#xff0c;再强转成整数类型&#xff0c;最后查看拆开的数据是…

【WPF应用13】WPF基本控件-DockPanel布局详解与示例

引言 WPF (Windows Presentation Foundation) 是微软 .NET 框架的一个组成部分&#xff0c;它用于构建桌面应用程序的用户界面。在 WPF 中&#xff0c;控件是构建用户界面的基本元素&#xff0c;而布局控件则负责安排其他控件的位置和大小。DockPanel 是 WPF 中的一个布局控件&…

如何使用PHP和RabbitMQ实现消息队列?

前言 今天我们来做个小试验&#xff0c;用PHP和RabbitMQ实现消息队列功能。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 如何使用docker部署php服务_php如何使用docker发布-CSDN博客 一、安装RabbitMQ 1、创建相关目录&#xff0c;执行如下命令。…