zoukankan      html  css  js  c++  java
  • 【深入理解JAVA虚拟机】第三部分.虚拟机执行子系统.4.类加载及执行子系统的案例与实战

    1、概述

    Class文件格式与执行引擎这部分中 :

      用户不能控制的:Class文件以何种格式存储,类型何时加载、 如何连接,以及虚拟机如何执行字节码指令等都是由虚拟机直接控制的行为

      用户能控制的:字节码生成类加载器

    2、Tomcat:正统的类加载器架构

    还是双亲委托模型,继承关系如下图:

     

    灰色背景的3个类加载器是JDK默认提供的类加载器 。

    CommonClassLoaderCatalinaClassLoaderSharedClassLoaderWebappClassLoader则是Tomcat自己定义的类加载器,它们分别加载/common/*/server/*/shared/*/WebApp/WEB-INF/*中的Java类库。

    3、OSGi:灵活的类加载器架构

    OSGi[1]Open Service Gateway Initiative)是OSGi联盟(OSGi Alliance)制定的一个基于Java语言的动态模块化规范

    核心思想就是可以动态设置类加载器。详略

    4、字节码生成技术与动态代理的实现

    主要讲动态代理,没看太明白。暂略。

    5、Retrotranslator:跨越JDK版本

    用来兼容jdk版本,可以让新版本写的代码,跑在老版本的jvm环境里。

    原理是做语法回退,把新的语法回退到老的版本上。

    所以对虚拟机的升级部分没有办法。

    彩蛋:枚举仅仅是一个继承于java.lang.Enum、 自动生成了values()和valueOf()方法的普通Java类而已。

     

    6、实战:自己动手实现远程执行功能

    目标是:有一个web页面,可以远程对服务器上的代码执行一段在web上写的代码。不需要重启。

    总共只写了250行代码(不含客户端侧),这个就很厉害了。

    原理:

    1、如何编译:  在客户端或服务端编译均可以,不是难事,只要调用java命令即可。

    2、如何执行:用类加载器加载这个类,生成一个class对象,然后反射调用方法。

    3、如何获取执行结果:在执行的类中把对System.out的符号引用替换为我们准备的PrintStream的符号引用,即修改加载后的Class对象字节码。  

    实现略。

  • 相关阅读:
    Websphere 系列的https证书的配置说明
    Linux下运行windows程序
    Linux常见命令(三)
    使用Java语言开发微信公众平台(八)——自定义菜单功能
    Linux常见命令(二)
    微信小程序,前端大梦想(八)
    微信小程序,前端大梦想(七)
    使用Java语言开发微信公众平台(七)——音乐消息的回复
    微信小程序,前端大梦想(六)
    微信小程序,前端大梦想(五)
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/10365301.html
Copyright © 2011-2022 走看看