【技术实现步骤摘要】
一种类加载器之间的对象通信方法、装置以及设备
[0001]本说明书涉及数据通信
,尤其涉及一种类加载器之间的对象通信方法、装置以及设备。
技术介绍
[0002]在Java的类隔离架构中,不同模块之间是类加载器(classloader)隔离的,即使在同一Java虚拟机(JavaVirtualMachine,JVM)下,不同类加载器之间的对象也无法正常完成数据交换,而模块与模块之间的通信又不可避免,采用远程调用或序列化方式,则会面临性能损耗过大,在某些追求性能场景中无法落地的情况。
[0003]以序列化方式为例,其原理在于:不同类加载器之间的对象通信,可以看成两个应用的通信,先将对象序列化为字节传输给目标类加载器,在目标类加载器接收后,再将字节反序列化为对象。但是,序列化方式的缺点在于:速度慢,同一进程下的性能损耗等同于不同应用之间的性能损耗。
[0004]基于此,需要性能更好的类加载器之间的对象通信方案。
技术实现思路
[0005]本说明书一个或多个实施例提供一种类加载器之间的对象通信方法、装置、设备以及存储介质,用以解决如下技术问题:需要性能更好的类加载器之间的对象通信方案。
[0006]为解决上述技术问题,本说明书一个或多个实施例是这样实现的:
[0007]本说明书一个或多个实施例提供的一种类加载器之间的对象通信方法,包括:
[0008]确定处于第一类加载器的原始对象;
[0009]根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始 ...
【技术保护点】
【技术特征摘要】
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.一种类加载器之间的对象通信装置,包括:原始对象确定模块,确定处于第一类加载器的原始对象;通信准入判断模块,根据所述原始对象的类型,进行通信准入判断,以确定是否允许所述原始对象进行对象通信;对象通信处理模块,若是,则为所述原始对象针对第二类加载器发起对象通信,获...
【专利技术属性】
技术研发人员:周明新,尚进,郑波,刘晶,陈泰燃,吕冰洁,方媛,徐帅,
申请(专利权)人:支付宝杭州信息技术有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。