一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种服务实现方法、系统、电子设备及存储介质与流程

2022-06-30 01:50:11 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别涉及一种服务实现方法、系统、一种电子设备及一种存储介质。


背景技术:

2.对于ai(artificial intelligence,人工智能)场景的训练任务来说,硬件配置资源的重要性不言而喻,尤其是内存的重要性显得特别冲突,然而在服务中有很多不需要立即使用的资源,但是在系统启动时已经加载资源,并占用内存空间,这样会造成资源很大的浪费。如果不能正确使用系统中的配置以及系统启动的流程中所加载的软件,会影响用户的训练任务,甚至会影响正常的操作流程,造成系统不可用,给用户带来非常不好的体验。
3.因此,如何降低服务实现过程中对资源的占用是本领域技术人员目前需要解决的技术问题。


技术实现要素:

4.本技术的目的是提供一种服务实现方法、系统、一种存储介质及一种电子设备,能够降低服务实现过程中对资源的占用。
5.为解决上述技术问题,本技术提供一种服务实现方法,该服务实现方法包括:
6.获取人工智能业务中目标服务对应的代码文件;
7.对所述代码文件进行编译得到类文件;
8.基于反射机制动态加载所述类文件中的类,生成类对象;
9.在操作系统中执行所述类对象,以便实现所述人工智能业务的目标服务。
10.可选的,所述基于反射机制动态加载所述类文件中的类,生成类对象,包括:
11.通过类加载器将所述类文件加载至内存中,以通过所述类加载器基于反射机制动态加载所述类文件中的类,生成类对象。
12.可选的,所述通过所述类加载器基于反射机制动态加载所述类文件中的类,生成类对象,包括:
13.通过所述类加载器采用双亲委派机制基于反射机制动态加载所述类文件中的类,得到类对象。
14.可选的,所述基于反射机制动态加载所述类文件中的类,生成类对象,包括:
15.确定所述类文件中的类的加载路径,基于所述加载路径获取类型对象;
16.基于反射机制对所述类型对象进行实例化,以生成类对象。
17.可选的,所述基于反射机制对所述类型对象进行实例化,以生成类对象,包括:
18.通过所述类型对象获取对应的构造器对象,通过所述构造器对象的newinstance()方法实例化类对象,以生成类对象。
19.可选的,所述代码文件包括java代码文件,对所述代码文件进行编译得到类文件,包括:
20.利用java编译器对所述java代码文件进行编译得到类文件。
21.可选的,所述类文件中的类包括数据库驱动类。
22.本技术还提供了一种服务实现系统,该系统包括:
23.文件获取模块,用于获取人工智能业务中目标服务对应的代码文件;
24.编译模块,用于对所述代码文件进行编译得到类文件;
25.加载模块,用于基于反射机制动态加载所述类文件中的类,生成类对象;
26.执行模块,用于在操作系统中执行所述类对象,以便实现所述人工智能业务的目标服务。
27.本技术还提供了一种存储介质,其上存储有计算机程序,所述计算机程序执行时实现上述服务实现方法执行的步骤。
28.本技术还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时实现上述服务实现方法执行的步骤。
29.本技术提供了一种服务实现方法,包括:获取人工智能业务中目标服务对应的代码文件;对所述代码文件进行编译得到类文件;基于反射机制动态加载所述类文件中的类,生成类对象;在操作系统中执行所述类对象,以便实现所述人工智能业务的目标服务。
30.本技术获取人工智能业务中目标服务对应的代码文件,编译代码文件得到类文件,进而基于反射机制动态加载所述类文件中的类,生成类对象。反射机制动态加载类可以节省系统内存空间,因此本技术能够降低服务实现过程中对资源的占用。本技术同时还提供了一种服务实现系统、一种存储介质和一种电子设备,具有上述有益效果,在此不再赘述。
附图说明
31.为了更清楚地说明本技术实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
32.图1为本技术实施例所提供的一种服务实现方法的流程图;
33.图2为本技术实施例所提供的一种建立对象的区别示意图;
34.图3为本技术实施例所提供的一种java类加载的工作流程图;
35.图4为本技术实施例所提供的一种的层次关系和加载顺序示意图;
36.图5为本技术实施例所提供的一种类加载过程流程图;
37.图6为本技术实施例所提供的一种双亲委派模型示意图;
38.图7为本技术实施例所提供的一种服务实现系统的结构示意图。
具体实施方式
39.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
40.下面请参见图1,图1为本技术实施例所提供的一种服务实现方法的流程图。
41.具体步骤可以包括:
42.s101:获取人工智能业务中目标服务对应的代码文件;
43.其中,本实施例可以用于具备人工智能业务的电子设备,在人工智能业务被启动时可以获取人工智能业务中目标服务对应的代码文件,该代码文件可以为java文件。
44.s102:对所述代码文件进行编译得到类文件;
45.其中,本步骤可以使用编译器对代码文件进行编译得到类文件。当上述代码文件包括java代码文件时,可以利用java编译器对所述java代码文件进行编译得到类文件。上述类文件包括多个类,例如类文件中的类包括数据库驱动类。
46.s103:基于反射机制动态加载所述类文件中的类,生成类对象;
47.其中,反射机制可以在程序运行时动态加载类并获取类的详细信息,从而操作类的属性和方法。
48.基于反射机制动态加载所述类文件中的类生成类对象的过程具体包括:确定所述类文件中的类的加载路径,基于所述加载路径获取类型对象;基于反射机制对所述类型对象进行实例化,以生成类对象。需要说明的是,在本实施例中,在类文件的执行过程中基于反射机制动态加载需要的类,而并非在服务器启动后、在代码文件编译执行前加载所有的类,节省了服务器的内存空间,进而降低在人工智能业务的服务过程对资源的占用。
49.在具体实施中,可以通过类的不带参数的构造方法生成对象,一种可行的实施方式为:首先获取类型对象(class对象),然后通过该class对象的newinstance()方法生成类对象,另一种可行的实施方式为:首先获取类型对象(class对象),然后通过该类型对象的获取对应的构造器对象(constructor对象),再通过该构造器对象的newinstance()生成类对象,也即具体的,本实施例可以通过所述类型对象获取对应的构造器对象,通过所述构造器对象的newinstance()方法实例化类对象,以生成类对象。当然,还可以通过类的带参数的构造方法生成对象,传入字符串和整型。可以理解的是,调用构造方法生成对象的方法和调用一般方法类似,不同的是,从类型对象获取构造器对象时不需要指定。
50.s104:在操作系统中执行所述类对象,以便实现所述人工智能业务的目标服务。
51.其中,在得到类对象后可以将将类对象交给底层的操作系统去执行,以便实现人工智能业务中的目标服务。
52.本实施例获取人工智能业务中目标服务对应的代码文件,编译代码文件得到类文件,进而基于反射机制动态加载所述类文件中的类,生成类对象。反射机制动态加载类可以节省系统内存空间,因此本实施例能够降低服务实现过程中对资源的占用。
53.作为对于图1对应实施例的进一步介绍,s103中可以通过以下方式生成类对象:通过类加载器将所述类文件加载至内存中,以通过所述类加载器基于反射机制动态加载所述类文件中的类,生成类对象。具体的,通过所述类加载器基于反射机制动态加载所述类文件中的类生成类对象的过程包括:通过所述类加载器采用双亲委派机制基于反射机制动态加载所述类文件中的类,得到类对象。
54.下面通过在实际应用中的实施例说明上述实施例描述的流程。
55.实际应用中需要动态加载实现类,但动态加载实现类是无法事先写程序实现的,只能程序运行态动态加载类。鉴于此就需要想办法解决此问题,避免此问题的发生。本实施
例提供一种基于反射实现动态加载类的方案。
56.目前的市场上的还没有很好的实现方案,大多都是系统启动的时候,全部加载软件资源,占用内存空间,造成性能极其低下。以下从使用场景阐述在ai中的使用,在ai业务中,由于微服务是基于java语言实现的,所以经常会有很多java类的实例化,有些类在系统启动的时候就加载进来,此时可能就不需要。针对这些类的初始化,可以延迟加载,或者在使用的时候加载,否则将占用较多的jvm(java虚拟机)内存。动态加载实现类由需求决定的,在程序中无法事先加载实现类。传统的数据库驱动加载就是在使用的时候加载,而不是系统启动就加载。动态加载类的好处是不需要占用不必要的内存,其次是特别是程序运行态,动态找到需要的类,动态加载类,实现程序的更加灵活。
57.与传统的通过new函数的方式来获取对象的方式不同反射机制,反射机制会先拿到test(test是java类范例)的类对象,然后通过类对象获取“构造器对象”再通过构造器对象创建一个对象,具体步骤如下:
58.1、获取类对象class class=class.forname("包名.test");
59.2、获取对象test test=class.newinstance()。
60.以上提供了类对象为的构造方法是无参构造方法时的对象获取方法,当类对象的构造方法不是无参构造方法时,获取构造器对象的方法可以适应性调整。
61.请参见图2,图2为本技术实施例所提供的一种建立对象的区别示意图,在正常方式(即常规方式)中,可以引入需要的包类名称,通过new实例化取得实例化对象;在反射方式中,可以实例化对象,通过getclass()方法得到完整的包类名称。
62.java类的编译和加载流程如下:对java文件编译得到class文件,使用jvm的类加载器classloader加载class文件。请参见图3,图3为本技术实施例所提供的一种java类加载的工作流程图,java类加载包括编译过程、加载与执行过程、底层调用过程。在编译过程中java文件被java编译器编译为class文件;在加载与执行过程中class文件和java api class文件输入类加载器得到类对象,执行引擎将类对象交给操作系统;在底层调用过程中,操作系统执行类对象。由图3可知,java件先编译成class文件,然后被jvm加载,最后由jvm交给底层的操作系统去执行。java程序经过编译后形成*.class文件。通过类加载器将字节码(*.class)加载入jvm的内存中。jvm将类加载过程分成加载,连接,初始化三个阶段,其中连接阶段又可分为验证,准备,解析三个阶段。
63.jvm的类加载是通过classloader及其子类来完成的,类的层次关系和加载顺序如图4所示,图4为本技术实施例所提供的一种的层次关系和加载顺序示意图。jvm可以自底向上检查类是否已经加载,类加载器层次(classloader architecture)自底向上包括自定义类加载器custom classloader、应用程序类加载器app classloader、扩展类加载器extension classloader、启动类加载器bootstrap classloader。jvm还可以自顶向下尝试加载类,例如依次尝试load jre\lib\rt.jar或者-xbootclasspath选项指定的jar包,load jre\lib\ext*.jar或-djava.ext.dirs指定目录下的jar包,load classpath或-djava.class.path所制定的目录的类和jar包,通过java.lang.classloader的子类自定义加载class。请参见图5,图5为本技术实施例所提供的一种类加载过程流程图,具体包括:将java源文件(.java文件)编译为java字节码(.class文件)。上述java字节码可以存储于本地硬盘、网络或内存。对java字节码进行类加载得到class对象。类加载过程包括加载、验
证、准备和解析。将class对象实例化为实例对象,以便使用实例对象,最后卸载实例对象。如图5,jvm将类加载过程分成加载,连接,初始化三个阶段,其中连接阶段又可分为验证,准备,解析三个阶段。
64.请参见图6,图6为本技术实施例所提供的一种双亲委派模型示意图,某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务就成功返回;只有父类加载器无法完成此加载任务时再去加载。双亲委派模型包括用户类加载器user classloader、应用程序类加载器application classloader、扩展类加载器extension classloader、启动类加载器bootstrap classloader。通过使用双亲委派模型,java类随着类加载器一起具备了带有优先级的层次关系,保证java程序稳定运行。本实施例充分发挥技术优势,节省系统内存空间,增加灵活性,本实施例有效保障了服务的正常运行和使用,提高了用户的体验。
65.本实施例提供了一种基于反射实现动态加载类的方案,具体实施过程如下:
66.如果是静态加载类,在服务中的代码中指定代码的完整路径并加载,如下这里的参数是写死的,class.forname("要加载的完整路径");
67.例如:class class=class.forname("com.mysql.jdbc.driver");mysq是一种关系数据库。
68.如果是动态加载类,在服务中的代码中指定代码的完整路径并加载,如下:
69.这里的参数是个变量,可以根据业务动态变化。
70.class.forname("动态要加载的完整路径");
71.例如:
72.string str="com.mysql.jdbc.driver");
73.class class=class.forname(str);
74.以上是实例化class类,把加载的类实例化,如下:
75.test test=class.newinstance();
76.获得对象之后,就可以做业务操作了,类通过反射机制加载完毕,并可以正常使用。
77.本实施例是对ai资源管理平台的服务中的jvm内存使用做了充分的合理利用,并且增强了系统的灵活性,能按照业务需求动态加载和切换不同的类,充分发挥了技术优势,有利于提高服务的稳定性,从而保证了业务系统的正常使用。此种方案在ai训练平台中,性能发挥得淋漓尽致,提高了并发性能,保证了系统稳定性和可用性。同时也提高了ai资源管理平台的竞争力。本实施例能够节省jvm的内存空间,能够增强系统的灵活性,有利于系统的扩展,还能够提高系统的并发处理能力和吞吐量。
78.请参见图7,图7为本技术实施例所提供的一种服务实现系统的结构示意图,该系统可以包括:
79.文件获取模块701,用于获取人工智能业务中目标服务对应的代码文件;
80.编译模块702,用于对所述代码文件进行编译得到类文件;
81.加载模块703,用于基于反射机制动态加载所述类文件中的类,生成类对象;
82.执行模块704,用于在操作系统中执行所述类对象,以便实现所述人工智能业务的目标服务。
83.本实施例获取人工智能业务中目标服务对应的代码文件,编译代码文件得到类文件,进而基于反射机制动态加载所述类文件中的类,生成类对象。反射机制动态加载类可以节省系统内存空间,因此本实施例能够降低服务实现过程中对资源的占用。
84.进一步的,加载模块703用于通过类加载器将所述类文件加载至内存中,以通过所述类加载器基于反射机制动态加载所述类文件中的类,生成类对象。
85.进一步的,加载模块703通过所述类加载器基于反射机制动态加载所述类文件中的类,生成类对象的过程包括:通过所述类加载器采用双亲委派机制基于反射机制动态加载所述类文件中的类,得到类对象。
86.进一步的,加载模块703用于确定所述类文件中的类的加载路径,基于所述加载路径获取类型对象;还用于基于反射机制对所述类型对象进行实例化,以生成类对象。
87.进一步的,加载模块703基于反射机制对所述类型对象进行实例化,以生成类对象的过程包括:通过所述类型对象获取对应的构造器对象,通过所述构造器对象的newinstance()方法实例化类对象,以生成类对象。
88.进一步的,所述代码文件包括java代码文件,编译模块702用于利用java编译器对所述java代码文件进行编译得到类文件。
89.进一步的,所述类文件中的类包括数据库驱动类。
90.由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
91.本技术还提供了一种存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
92.本技术还提供了一种电子设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述电子设备还可以包括各种网络接口,电源等组件。
93.说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以对本技术进行若干改进和修饰,这些改进和修饰也落入本技术权利要求的保护范围内。
94.还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献