19-动态类装载-1

原创 2004年07月29日 16:20:00

第十九章 动态类装载

      

   部署一个分布式程序是比较困难的。每个运行部分程序的机器上都必须安装相应的部分程序。对一个本地网来说,只要多费一些时间到不是太难。但如果要部署到一个大范围的、经常需要更改的环境,那部署过程会变得十分的困难。

       内建于RMI的动态类装载技术,想要尝试着使这种部署变得简单一些。在本书中,我们讲述了建立一个鲁棒性强可扩展的分布式程序的绝大数基础知识。我们讲述了设计接口的原则;花费了很多时间讨论线程;测试一个分布式应用;甚至讨论了如何优化分布式垃圾收集。现在将对部署(二次部署)进行深层次的挖掘。

19.1、部署是很困难的

       假设我们将部署银行程序的最新版。我们需要做如下工作:

l         配置服务器

l         把存根类的类路径(以及其他相关的类,像套接字工厂和值对象)加到名字服务器的CLASSPATH中,这些可能会在名字服务器中实例化。

l         如果这已经不是第一次部署(相对于第一次部署),你需要重启名称服务,并重新注册所有的对象以除去名字服务JVM中已存在的对象。

l         在每一台客户机上安装并配置程序。这包括记录下目前不在用的机器(如目前没有装载或者机器拿去修理了),以便后来安装。

 

       比较一下小应用程序的部署过程:

l         配置服务器

l         编写包含APPLET标签的网页

 

       简言之,部署一个WEB程序无需修改客户端也无需修改名字服务。相反,当浏览器下载包含APPLET标签的WEB页面时,它同时也下载了所需的JAVA类文件用于运行小应用程序。这种部署方式不仅省时而且更不会出错。

       提示:对于以往情况,除了首次部署需要的时间和精力,你还需要考虑无法避免的部署错误。

 

------------多久你就需要再部署一次?--------------

有时,当我提到部署是如何如何的痛苦时,有人会说:“的确。但是多场时间你就需要重新部署?一年一次?”

这是个很好的问题。某些程序不需要经常部署。然而这个问题有点绕。为什么程序不经常部署的部分原因是因为部署太费时太难操作。如果能够使部署变得简单,程序将会更加频繁的更改和部署。

WEB程序就是个很好的例子。部署一个WEB程序,你只需在服务器上重新配置一下即可。而WEB程序是要经常部署的。

-------------------------------------------------

       然而,每次你需要修改或者重新部署程序时,这个问题会越来越突出。

       当然小应用程序有许多限制。因为每次运行时都需要下载字节码,所以它们必须尽量的小;因为浏览器可能使用老版的JVM,所以开发者不能使用最新的JAVA特征,像Swing GUI开发包。而且,因为浏览器有严格的安全要求,小应用程序打开套接字连接或者打开文件都是受限制的。

提示:这就是开发客户-服务器小应用程序的“即使浏览器已被很好的实现”缺陷。这个缺陷现在存在而且永远都存在,不管浏览器如何改进。除了这个缺陷之外,浏览器提供的JVM可能还是极其缓慢的、充满BUG的。

       好消息是RMI有一个有趣而且有用的技术,称为动态类装载,它尝试把这两个方式合在一起。它允许你建立独立的程序,至少部分独立,而且还有一个类似小应用程序的部署模式。就是说动态类装载允许RMI程序在运行时从http://或者ftp://动态装载类的字节代码,当需要这个类定义时。

浅谈Java类型装载、连接与初始化

类型装载、连接与初始化Java虚拟机通过装载、连接和初始化一个Java类型,使该类型可以被正在运行的Java程序所使用。其中装载就是把二进制形式的Java class文件读入Java虚拟机中去;连接把...
  • lincolnmi
  • lincolnmi
  • 2016年01月18日 17:21
  • 1120

Python模块的动态加载机制

Python在运行环境初始化中,就将sys module加载到了内存中, 实际上,Python是将一大批的module加载到了内存中。但是为了使local名字空间能够达到最干净的效果,Python并...
  • mogigo00
  • mogigo00
  • 2017年02月12日 09:31
  • 227

深入理解类加载机制

开始正文之前,我想先说一下写这些文章的目的和好处,主要是可以使自己对学习的东西做一个总结,有时候花费很长的时间学了一些东西,理顺了一些思路,可是过几天再回想这些东西的时候还会变得模糊,所有又要花费时间...
  • fgets
  • fgets
  • 2016年10月26日 14:42
  • 4386

Java类装载的过程及原理介绍

最近在研究osgi,在osgi里面里面有个很重要的东西,就是ClassLoader,所以,在网上搜集了一些资料,整理一下,   并加入了自己的一些理解;   (1)jvm的装载过程...
  • u014406621
  • u014406621
  • 2014年06月09日 14:00
  • 1072

Linux上C++类的动态加载

Linux上C++类的动态加载 摘要:本文是翻译文章,主要介绍了运行时重载C++类的技术,包括了Linux上的动态加载接口、C++类的动态加载技术点及实现、自动加载技术等。最后给出了两个应用案例...
  • zdy0_2004
  • zdy0_2004
  • 2015年04月27日 00:24
  • 1656

程序的编译、链接与装载

程序的编译、链接与装载 2014年09月22日 |  分类:基础理论 |  标签:程序, 编译, 装载, 链接 |  评论:2条评论 |  浏览:1,588次 《程序员的自我修...
  • haiross
  • haiross
  • 2015年07月22日 09:31
  • 1530

类的加载顺序

什么时候类加载 第一次需要使用类信息时加载。 类加载的原则:延迟加载,能不加载就不加载。 触发类加载的几种情况: (1)、调用静态成员时,会加载静态成员真正所在的类及其父类。 通过子类...
  • sunshenzhen2015
  • sunshenzhen2015
  • 2017年12月01日 17:13
  • 57

weblogic与Java类加载器原理试验解析

通过试验,得出一个结论,假设在Weblogic的Server/lib下有一个类,与应用的Webapp/WEB-INF/classes 下的类名相同,方法名也相同,仅有在后台打印出来的字符的稍许差别,...
  • u011742227
  • u011742227
  • 2015年01月07日 15:38
  • 617

Java虚拟机有两种类装载器

工作以来,代码越写越多,程序也越来越臃肿,效率越来越低,对于我这样一个追求完美的程序员来说,这是绝对不被允许的,于是除了不断优化程序结构外,内存优化和性能调优就成了我惯用的“伎俩”。   要对Jav...
  • u012402926
  • u012402926
  • 2016年03月07日 17:44
  • 296

Java中的ClassLoader 动态加载机制

前言: Android中的动态加载机制能更好的优化我们的应用,同时实现动态的更新,这就便于我们管理我们的应用,通过插件化来减轻我们的内存以及CPU消耗,在不发布新版本的情况下能更新某些模块。 当然...
  • qq_27540131
  • qq_27540131
  • 2016年07月03日 23:09
  • 4250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:19-动态类装载-1
举报原因:
原因补充:

(最多只允许输入30个字)