1.RMI中的远程接口(Remote Interface)扮演了什么样的角色?
远程接口用来标识哪些方法是可以被非本地虚拟机调用的接口。远程对象必须要直接或者间接实现远程接口。实现了远程接口的类应该声明被实现的远程接口,给每一个远程对象定义构造函数,给所有远程接口的方法提供实现。
2.java.rmi.Naming类扮演了什么角色?
用来存储和获取在远程对象注册表里面的远程对象的引用。Naming类的每一个方法接收一个URL格式的String对象作为它的参数。
3.RMI的绑定是什么意思?
绑定是为了查询找到远程对象而给远程对象关联或者是注册以后会用到的名称的过程。远程对象可以使用Naming类的bind()或者rebind()方法跟名称相关联。
4.Naming类的bind()和rebind()方法有什么区别?
bind()方法负责把指定名称绑定给远程对象,rebind()方法负责把指定名称重新绑定到一个新的远程对象。如果那个名称已经绑定过了,先前的绑定会被替换掉。
5.让RMI程序正确运行有哪些步骤?
1.编译所有的源文件
2.使用rmic生成stub
3.启动rmiregistry。
4.启动RMI服务器。
5.运行客户端程序。
6.RMI的stub扮演了什么样的角色?
扮演了远程对象的代表或者代理的角色
7.什么是分布式垃圾回收(DGC)?它是如何工作的?
RMI使用DGC来做自动垃圾回收。因为RMI包含了跨虚拟机的远程对象的引用,垃圾回收是很困难的。DGC使用引用计数算法来给远程对象提供自动内存管理。
8.RMI中使用RMI安全管理器的目的的是什么?
RMISecurityManager使用下载好的代码提供可被RMI应用程序使用的安全管理器。如果没有设置安全管理器,RMI的类加载器就不会从远程下载任何类。
9.解释下Marshaling和的marshaling。
当应用程序希望把内存对象跨网络传递到另一台主机或者是持久化到存储的时候,就必须要把对象在内存里面的表示转化成合适的格式。这个过程就叫做Marshaling,反之就是demarshaling。
10.解释下Seralization(序列化)和Deserialization(反序列化)。
Java提供了一种叫做对象序列化的机制,他把对象表示成一连串的字节,里面包含了对象的数据,对象的类型信息,对象内部数据的类型信息等等。因此,序列化可以看成是为了把对象存储在磁盘上或者是从磁盘读出来并重建对象而把对象扁平化的一种方式。反序列化就是把对象从扁平状态转化成活动对象的相反的步骤。
简言之,序列化就是把对象变为字节流,存储到磁盘或网络。反序列化就是序列化的反过程。