一种类加载器之间的对象通信方法、装置以及设备制造方法及图纸

技术编号:38503165 阅读:15 留言:0更新日期:2023-08-19 16:51
本说明书实施例公开了一种类加载器之间的对象通信方法、装置以及设备。方案包括:确定处于第一类加载器的原始对象;根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;若是,则为所述原始对象针对第二类加载器发起对象通信,获取对应于所述原始对象的通信处理器,使用所获取的通信处理器处理所述原始对象,得到处于所述第二类加载器的结果对象;其中,所述通信处理器包括以下至少一种:针对指定的数据类型设置的加速器、用于操作所述第一类加载器的内存与所述第二类加载器的内存之间的指向关系的内存指针操作器。指针操作器。指针操作器。

【技术实现步骤摘要】
一种类加载器之间的对象通信方法、装置以及设备


[0001]本说明书涉及数据通信
,尤其涉及一种类加载器之间的对象通信方法、装置以及设备。

技术介绍

[0002]在Java的类隔离架构中,不同模块之间是类加载器(classloader)隔离的,即使在同一Java虚拟机(JavaVirtualMachine,JVM)下,不同类加载器之间的对象也无法正常完成数据交换,而模块与模块之间的通信又不可避免,采用远程调用或序列化方式,则会面临性能损耗过大,在某些追求性能场景中无法落地的情况。
[0003]以序列化方式为例,其原理在于:不同类加载器之间的对象通信,可以看成两个应用的通信,先将对象序列化为字节传输给目标类加载器,在目标类加载器接收后,再将字节反序列化为对象。但是,序列化方式的缺点在于:速度慢,同一进程下的性能损耗等同于不同应用之间的性能损耗。
[0004]基于此,需要性能更好的类加载器之间的对象通信方案。

技术实现思路

[0005]本说明书一个或多个实施例提供一种类加载器之间的对象通信方法、装置、设备以及存储介质,用以解决如下技术问题:需要性能更好的类加载器之间的对象通信方案。
[0006]为解决上述技术问题,本说明书一个或多个实施例是这样实现的:
[0007]本说明书一个或多个实施例提供的一种类加载器之间的对象通信方法,包括:
[0008]确定处于第一类加载器的原始对象;
[0009]根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;
[0010]若是,则为所述原始对象针对第二类加载器发起对象通信,获取对应于所述原始对象的通信处理器,使用所获取的通信处理器处理所述原始对象,得到处于所述第二类加载器的结果对象;
[0011]其中,所述通信处理器包括以下至少一种:针对指定的数据类型设置的加速器、用于操作所述第一类加载器的内存与所述第二类加载器的内存之间的指向关系的内存指针操作器。
[0012]本说明书一个或多个实施例提供的一种类加载器之间的对象通信装置,包括:
[0013]原始对象确定模块,确定处于第一类加载器的原始对象;
[0014]通信准入判断模块,根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;
[0015]对象通信处理模块,若是,则为所述原始对象针对第二类加载器发起对象通信,获取对应于所述原始对象的通信处理器,使用所获取的通信处理器处理所述原始对象,得到处于所述第二类加载器的结果对象;
[0016]其中,所述通信处理器包括以下至少一种:针对指定的数据类型设置的加速器、用于操作所述第一类加载器的内存与所述第二类加载器的内存之间的指向关系的内存指针操作器。
[0017]本说明书一个或多个实施例提供的一种类加载器之间的对象通信设备,包括:
[0018]至少一个处理器;以及,
[0019]与所述至少一个处理器通信连接的存储器;其中,
[0020]所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
[0021]确定处于第一类加载器的原始对象;
[0022]根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;
[0023]若是,则为所述原始对象针对第二类加载器发起对象通信,获取对应于所述原始对象的通信处理器,使用所获取的通信处理器处理所述原始对象,得到处于所述第二类加载器的结果对象;
[0024]其中,所述通信处理器包括以下至少一种:针对指定的数据类型设置的加速器、用于操作所述第一类加载器的内存与所述第二类加载器的内存之间的指向关系的内存指针操作器。
[0025]本说明书一个或多个实施例提供的一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:
[0026]确定处于第一类加载器的原始对象;
[0027]根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;
[0028]若是,则为所述原始对象针对第二类加载器发起对象通信,获取对应于所述原始对象的通信处理器,使用所获取的通信处理器处理所述原始对象,得到处于所述第二类加载器的结果对象;
[0029]其中,所述通信处理器包括以下至少一种:针对指定的数据类型设置的加速器、用于操作所述第一类加载器的内存与所述第二类加载器的内存之间的指向关系的内存指针操作器。
[0030]本说明书一个或多个实施例采用的上述至少一个技术方案能够达到以下有益效果:提供了基于原始对象的类型的通信准入判断能力,能够将一些不适合进行对象通信的原始对象尽快筛选出来通过其他效率更高的手段处理,而对于适合进行对象通信的原始对象,则通过内存指针操作器和/或为针对一些常见数据类型设置的加速器进行处理,避免了使用序列化方式或反射方式,从而实现了性能更好的类加载器之间的对象通信,有助于高效地将对象从其当前所处的类加载器传输到另一个类加载器。
附图说明
[0031]为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的
前提下,还可以根据这些附图获得其他的附图。
[0032]图1为本说明书一个或多个实施例提供的一种类加载器之间的对象通信方法的流程示意图;
[0033]图2为本说明书一个或多个实施例提供的对象通信主流程示意图;
[0034]图3为本说明书一个或多个实施例提供的一种对象通信系统的架构示意图;
[0035]图4为本说明书一个或多个实施例提供的一种加速器的工作原理示意图;
[0036]图5为本说明书一个或多个实施例提供的一种内存指针操作器的工作原理示意图;
[0037]图6为本说明书一个或多个实施例提供的一种类加载器之间的对象通信装置的结构示意图;
[0038]图7为本说明书一个或多个实施例提供的一种类加载器之间的对象通信设备的结构示意图。
具体实施方式
[0039]本说明书实施例提供一种类加载器之间的对象通信方法、装置、设备以及存储介质。
[0040]为了使本
的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0041]除了
技术介绍
中提到的序列化方式以外,还有采用基于反射的对象通信方式。对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种类加载器之间的对象通信方法,包括:确定处于第一类加载器的原始对象;根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;若是,则为所述原始对象针对第二类加载器发起对象通信,获取对应于所述原始对象的通信处理器,使用所获取的通信处理器处理所述原始对象,得到处于所述第二类加载器的结果对象;其中,所述通信处理器包括以下至少一种:针对指定的数据类型设置的加速器、用于操作所述第一类加载器的内存与所述第二类加载器的内存之间的指向关系的内存指针操作器。2.如权利要求1所述的方法,所述根据所述原始对象的类型,进行通信准入判断,具体包括:判断所述原始对象是否属于值传递类型,或者是否属于更改值将导致自适应扩充资源的指定类型;若是,则确定不允许对所述原始对象中的对应字段进行对象通信。3.如权利要求2所述的方法,所述指定类型包括以下至少一种:更改值将导致自适应地在常量池新开辟空间的String类型、更改值将导致自适应地创建新的对象的包装对象、BigDecimal、BigInteger。4.如权利要求1所述的方法,所述根据所述原始对象的类型,进行通信准入判断,具体包括:判断所述原始对象是否属于不便于分析内容的指定类型;所述指定类型包括以下至少一种:匿名内部类、lambda、代理类。5.如权利要求1所述的方法,所述获取对应于所述原始对象的通信处理器,使用所获取的通信处理器处理所述原始对象,具体包括:对于属于所述指定的数据类型的所述原始对象,获取对应于所述指定的数据类型的所述加速器,使用所获取的加速器处理所述原始对象;而对于所述加速器无法处理的原始对象,获取对应的所述内存指针操作器,使用所获取的内存指针操作器处理所述原始对象。6.如权利要求5所述的方法,所述指定的数据类型包括以下至少一种:Class、Array、Enum、EnumSet、EnumMap、Collection、Map、BitSet、Date、StringBuffer、StringBuilder、timeUnit。7.如权利要求1所述的方法,若所述所获取的通信处理器为所述加速器,则所述使用所获取的通信处理器处理所述原始对象,具体包括:使用所获取的通信处理器,在所述第二类加载器新建HashMap的实例;遍历所述原始对象的HashMap元素集,将相应的HashMap元素填充到新建的所述实例中,而不对所述原始对象的HashMap属性集进行多次遍历拷贝。8.如权利要求1所述的方法,若所述所获取的通信处理器为所述加速器,则所述使用所获取的通信处理器处理所述原始对象,具体包括:获取所述第二类加载器所能够加载的类,作为目标类;
获取所述目标类所包含的各字段,根据所述各字段对所述原始对象的内容进行重新封装,得到代理对象;通过所述第二类加载器加载所述代理对象。9.如权利要求1所述的方法,若所述所获取的通信处理器为所述内存指针操作器,则所述使用所获取的通信处理器处理所述原始对象,具体包括:根据所述原始对象所属的类,为所述第二类加载器新开堆内存空间,作为第二堆内存空间;在所述第一类加载器的堆内存中,确定所述原始对象所在的堆内存空间,作为第一堆内存空间;通过所述内存指针操作器,使用unsafe类控制内存指针从所述第一堆内存空间指向所述第二堆内存空间,通过所述内存指针,将所述原始对象中的内容拷贝至所述第二堆内存空间中。10.如权利要求1~9任一项所述的方法,所述第一类加载器和所述第二类加载器是不同的类加载器。11.一种类加载器之间的对象通信装置,包括:原始对象确定模块,确定处于第一类加载器的原始对象;通信准入判断模块,根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;对象通信处理模块,若是,则为所述原始对象针对第二类加载器发起对象通信,获...

【专利技术属性】
技术研发人员:周明新尚进郑波刘晶陈泰燃吕冰洁方媛徐帅
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1