jvm对于类实例的区分 基于完全限定名+classLoader

不同的classLoader可以加载同一class,生成不同实例, 但是这两个class实例生成的对象不能强转

spring boot jar中的lib包如何完全使用自定义的classLoader加载?

==>  在main函数入口, 默认使用的是appClassLoader,    如果不做特殊处理, /Boot/lib下的类也是这个类加载器加载

在启动入口,将AppClassLoader替换成自定义的classLoader要做的事情有:

取出main方法所在的类,原始的参数,原始的classPath, lib jar列表

由自定义classLoader 重新加载main class, 并通过反射invoke main() args , 在子线程中重新启动   (自定义的classLoader 放入Thread.currentThread.setClassLoader(),   子线程会继承父类的classLoader   )

要设置已启动标志位 , 防止main() 方法重新运行后死循环加载 【main方法会运行两次】

重新加载所有应用中的lib jar (需要把自定义classLoader传进去), 调用父classLoader重新加载agent nativeLib

已加载的class做缓存共享加速

自定义classLoader思考的更多相关文章

  1. java自定义classloader引发的思考

    引用 java类的热替换 classloader机制 如下图所示,java的classloader是双亲委派机制.会首先从父classloader加载指定的class,如果加载不到才会从子classl ...

  2. 使用自定义 classloader 的正确姿势

    详细的原理就不多说了,网上一大把, 但是, 看了很多很多, 即使看了jdk 源码, 说了罗里吧嗦, 还是不很明白: 到底如何正确自定义ClassLoader, 需要注意什么 ExtClassLoade ...

  3. Java Se:自定义ClassLoader

    JVM是如何知道java.lang包中的类的?JVM又是如何知道我们应用中的类的?我们的应用中明明是有某个类, 但是JVM却抛出ClassNotFoundException,这是为什么?XxxImpl ...

  4. JAVA 利用JNI加密class文件/自定义ClassLoader 类

    利用 JNI 对bytecode 加密.不影响java程序员的正常开发.09年的时候写的,现在拿出来晒晒————————————————————————————混淆才是王道,如果混淆再加密就更酷了.. ...

  5. 图解classloader加载class的流程及自定义ClassLoader

    图解classloader加载class的流程及自定义ClassLoader 博客分类: JVM JavaJVM虚拟机EXTSUN /** *  转载请注明作者longdick    http://l ...

  6. 解决自定义classloader后无法使用maven install

    @上篇博客中探讨了web项目利用自定义classloader进行解密,利用的是编译后的文件直接运行程序一切正常 今天博主在探讨加密后进行混淆时,打包程序报程序包org.apache.catalina. ...

  7. 自定义ClassLoader

    自定义classloader MapleClassLoader package com.maple; import java.io.*; public class MapleClassLoader e ...

  8. 自定义ClassLoader加载class文件

    package com.yd.wmsc.util; public class Test { public void say(){ System.out.println("Say Hello& ...

  9. classloader加载class的流程及自定义ClassLoader

    java应用环境中不同的class分别由不同的ClassLoader负责加载.一个jvm中默认的classloader有Bootstrap ClassLoader.Extension ClassLoa ...

随机推荐

  1. 第2章 构建springboot工程 2-1 构建SpringBoot第一个demo

    以后的趋势肯定是以一个微服务为主导的, Spring-Boot的指导 Maven整个环境构建之前的整个项目其实是一个很普通的J2SE项目,它构建完之后会进行重构,重构为Maven的一个项目路径.可以看 ...

  2. c#日期与字符串间的转换(转)

    1.日期转字符串(转载) 在编程中经常要用到将日期变量转换为字符串的情况,而且不同的时候希望转换成不同格式的字符串 下面是一些常用的转换及转换结果: (查看格式说明) 以日期为例: 2009-09-0 ...

  3. Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境

    Windows系统 为 Visual Studio软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Visual Studio 软件:Visual Studio 20 ...

  4. 算法Sedgewick第四版-第1章基础-020一按优先级计算表达式的值

    /****************************************************************************** * Compilation: javac ...

  5. R: 控制流: if & for & while

    ################################################### 问题:if 判断   18.4.29 if 的应用与??...... 解决方案: # if(){ ...

  6. Luogu 3979 遥远的国度

    树剖已经是人尽皆知的sb题了吗…… 很早以前就想填掉这坑了…… 考虑到树链唯一,进行操作并不会对换根产生影响,那么我们的换根操作只要记下root在哪里就好了 询问的时候分类讨论: 1:root ==  ...

  7. 使用Spring加载properties配置文件.md

    背景 类似于datasource.properties之类的配置文件,最初通过Java的Properties类进行处理.这种方式有许多弊端,如每次都需要读取配置文件:若将Properties作为成员变 ...

  8. TCP/IP与套接字

    以前我们讲过进程间通信,通过进程间通信可以实现同一台计算机上不同的进程之间通信. 通过网络编程可以实现在网络中的各个计算机之间的通信. 进程能够使用套接字实现和其他进程或者其他计算机通信. 同样的套接 ...

  9. vue 项目接口管理

    在vue开发中,会涉及到很多接口的处理,当项目足够大时,就需要定义规范统一的接口,如何定义呢? 方法可能不只一种,本文使用axios+async/await进行接口的统一管理. 本文使用vue-cli ...

  10. Django之博客系统:自定义认证

    前面我们在登录的时候,是通过输入用户名和密码来进行认证 user=authenticate(username=cd['username'],password=cd['password']) 这个是通过 ...