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;会把自定义类加载器的父加载器=appClassLoader
        MyClassLoader 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.mfbz.cn/a/485044.html

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

相关文章

栅格地图路径规划:基于霸王龙优化算法(Tyrannosaurus optimization,TROA)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

Wireshark TS | DNS 案例分析之外的思考

前言 承接之前一篇《Packet Challenge 之 DNS 案例分析》&#xff0c;在数据包跟踪文件 dnsing.pcapng 中&#xff0c;关于第 4 题&#xff08;What is the largest DNS response time seen in this trace file? &#xff09;的分析过程中曾经碰到一个小问题&#xff0c;主要…

[BT]BUUCTF刷题第6天(3.24)

第6天 Web [极客大挑战 2019]PHP Payload&#xff1a; O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}这道题考点是网站源码备份文件泄露和PHP反序列化&#xff0c;有篇介…

【WEEK4】 【DAY5】AJAX - Part Two【English Version】

2024.3.22 Friday Following the previous article 【WEEK4】 【DAY4】AJAX - Part One【English Version】 Contents 8.4. Ajax Asynchronous Data Loading8.4.1. Create User.java8.4.2. Add lombok and jackson support in pom.xml8.4.3. Change Tomcat Settings8.4.4. Mo…

HTML5和CSS3新特性

Html新增属性 1.新增语义化标签 <header>&#xff1a;头部标签 <nav>&#xff1a;导航标签 <article>&#xff1a;内容标签 <section>&#xff1a;定义文档某个区域 <aside>&#xff1a;侧边栏标签 <footer>&#xff1a;尾部标签 2.…

【深度学习】pytorch,MNIST手写数字分类

efficientnet_b0的迁移学习 import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transforms from torchvision.datasets import MNIST from torch.utils.data import DataLoader from torchvision import models import matplo…

C语言——sizeof与strlen的对比

一.sizeof 我们在学习操作符的时候&#xff0c;就了解到了sizeof操作符&#xff0c;它的作用是求参数所占内存空间的大小&#xff0c;单位是字节。如果参数是一个类型&#xff0c;那就返回参数所占的字节数。 #include <stdio.h>int main() {int a 10;size_t b sizeo…

【机器学习300问】48、如何绘制ROC曲线?

ROC曲线&#xff08;受试者工作特征曲线&#xff09;是一种用于可视化评估二分类模型性能的指标。特别是在不同阈值情况下模型对正类和负类的区分能力。那么“阈值”到底是个什么呢&#xff1f;ROC曲线中的每一个点到底是什么意思&#xff1f; 一、ROC曲线的绘制【理论】 二分…

LeetCode Python - 72. 编辑距离

目录 题目描述解法运行结果 题目描述 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 “h…

Linux的介绍以及其发展历史

文章目录 前言一、技术是推动社会发展的基本动力1.人为什么能成为万物之长呢&#xff1f;2.人为什么要发明工具&#xff0c;进行进化呢&#xff1f;3.人是如何发明工具的&#xff1f;4.为什么要有不同的岗位和行业&#xff1f; 二、计算机(操作系统)发展的基本脉络1.第一台计算…

Google ScreenAI代表了一款先进的视觉语言模型,专为用户界面(UI)和视觉情境下的语言理解而设计

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

二次开发Flink-coGroup算子支持迟到数据通过测输出流提取

1.背景 coGroup算子开窗到时间关闭之后&#xff0c;迟到数据无法通过测输出流提取&#xff0c;intervalJoin算子提供了api&#xff0c;因为join算子底层就是coGroup算子&#xff0c;所以Join算子也不行。 flink版本 v1.17.1 2.coGroup算子源码分析 2.1完成的coGroup算子调用流…

QT(C++)-error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”

1、项目场景&#xff1a; 在VS中采用QT&#xff08;C&#xff09;调试时&#xff0c;出现error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”错误 2、解决方案&#xff1a; 在“解决方案资源管理器”中选中出现此类BUG的项目&#xff0c;右键-…

jenkins介绍,帮助你从安装到使用jenkins

Jenkins 概述 官网地址&#xff1a;https://www.jenkins.io/zh/ 什么是 Jenkins Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。它提供了一个易于使用的图形化界面&#xff0c;可以通过配置简单的任务来实现自动化构…

javaSSM游泳馆日常管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM游泳馆日常管理系统是一套完善的完整企业内部系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;MAVEN方式加载&#xff0c;系统具有完整的源代码和…

Vue 3 里的 onMounted 怎么用?

疑问 最近&#xff0c;一直在学习 Vue 3&#xff0c;此前我不懂前端&#xff0c;也没写过 Vue 2&#xff0c;所以是从 0 开始学习 Vue 3 的。很多对普通人不是疑问的&#xff0c;在我这里也会不太清楚。 我在写项目的时候&#xff0c;常见的一种场景是这样的&#xff1a;页面…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

基于SSM非遗视域下喀什旅游网站

ssm非遗视域下喀什旅游网站的设计与实现 摘要 我们的生活水平正在不断的提高&#xff0c;然而提高的一个重要的侧面表现就是更加注重我们的娱乐生活。旅行是我们都喜欢的一种娱乐方式&#xff0c;各式各样的旅行经历给我们带来的喜悦也是大不相同的。带来快乐的同时也因为其复…

IntelliJ IDE 插件开发 | (七)PSI 入门及实战(实现 MyBatis 插件的跳转功能)

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…

MongoDB高可用架构涉及常用功能整理

MongoDB高可用架构涉及常用功能整理 1. mongo架构和相关组件1.1. Master-Slave主从模式1.2. Replica Set 副本集模式1.3. Sharding 分片模式 2. Sharding 分片模式2.1. Hashed Sharding方式2.2. Range Sharding方式 3. 事务性4. 疑问和思考4.1. 怎么保证数据的高可靠&#xff1…