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

一种内存回收方法、装置、电子设备及存储介质与流程

2022-02-21 10:45:34 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,特别是涉及一种内存回收方法、装置、电子设备及存储介质。


背景技术:

2.堆内内存是指把java(一种面向对象的计算机语言)程序中的对象分配在jvm(java virtual machine,java虚拟机)的堆以内的内存,堆内内存由jvm的垃圾回收线程管理。堆外内存是指把java程序中的对象分配在jvm的堆以外的内存,堆外内存由操作系统管理。java程序在运行时,可能需要将一些较大的数据存储至堆外内存,可以通过堆内内存中的directbytebuffer(直接内存缓冲器)对象引用较大的堆外内存,用于存储数据。
3.为了提高内存利用率,针对堆内内存中的每一内存块,当该内存块的占用率达到预设阈值时,触发jvm的垃圾回收线程。针对该内存块中的每一directbytebuffer对象,当通过垃圾回收线程确定不存在从gc root(自动内存管理)对象至该directbytebuffer对象的引用链时,表示不存在其他对象使用该directbytebuffer对象引用的堆外内存中的数据,则对该directbytebuffer对象占用的堆内内存进行回收,并触发该directbytebuffer对象对应的run方法,以对该directbytebuffer对象引用的堆外内存进行回收。后续,其他对象可以使用已经回收的堆外内存。
4.然而,如果堆内内存中的一个内存块的占用率未达到预设阈值时,即使不存在从gc root对象至该directbytebuffer对象的引用链,也不会触发垃圾回收线程对该内存块中的directbytebuffer对象占用的堆内内存进行回收,则不会触发directbytebuffer对象的run方法,导致该内存块中的directbytebuffer对象引用的堆外内存无法被回收。也就是说,即使directbytebuffer对象引用的堆外内存中存储了无用数据,其他对象也无法使用该堆外内存,导致堆外内存资源浪费,堆外内存的利用率较低。


技术实现要素:

5.本发明实施例的目的在于提供一种内存回收方法、装置、电子设备及存储介质,以在一定程度上避免堆外内存资源浪费,提高堆外内存的利用率。具体技术方案如下:
6.第一方面,为了达到上述目的,本发明实施例提供了一种内存回收方法,所述方法包括:
7.针对每一directbytebuffer对象,通过该directbytebuffer对象对应的计数器,记录该directbytebuffer对象的标记数值;其中,所述标记数值表示当前针对该directbytebuffer对象的有效引用的数目;
8.判断该directbytebuffer对象当前的标记数值是否为零;
9.如果该directbytebuffer对象当前的标记数值为零,对该directbytebuffer对象引用的堆外内存进行回收。
10.可选的,所述通过该directbytebuffer对象对应的计数器,记录该
directbytebuffer对象的标记数值,包括:
11.当检测到该directbytebuffer对象被新的对象引用时,将该directbytebuffer对象对应的计数器记录的标记数值加一;
12.确定当前引用该directbytebuffer对象的其他对象,作为目标对象;
13.针对每一目标对象,当该目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一。
14.可选的,在所述针对每一目标对象,当该目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一之前,所述方法还包括:
15.针对每一目标对象,当该目标对象引用该directbytebuffer对象的方法执行结束时,确定该目标对象对该directbytebuffer对象的引用失效。
16.可选的,所述判断该directbytebuffer对象当前的标记数值是否为零,包括:
17.当达到预设周期时,判断该directbytebuffer对象当前的标记数值是否为零;
18.或者,
19.当该directbytebuffer对象的标记数值减小时,判断该directbytebuffer对象减小后的标记数值是否为零。
20.可选的,在所述对该directbytebuffer对象引用的堆外内存进行回收之前,所述方法还包括:
21.将该directbytebuffer对象占用的堆内内存标记为可用状态;
22.所述对该directbytebuffer对象引用的堆外内存进行回收,包括:
23.调用该directbytebuffer对象对应的run方法,以将该directbytebuffer对象引用的堆外内存标记为可用状态。
24.第二方面,为了达到上述目的,本发明实施例提供了一种内存回收装置,所述装置包括:
25.记录模块,用于针对每一directbytebuffer对象,通过该directbytebuffer对象对应的计数器,记录该directbytebuffer对象的标记数值;其中,所述标记数值表示当前针对该directbytebuffer对象的有效引用的数目;
26.判断模块,用于判断该directbytebuffer对象当前的标记数值是否为零;
27.第一回收模块,用于如果该directbytebuffer对象当前的标记数值为零,对该directbytebuffer对象引用的堆外内存进行回收。
28.可选的,所述记录模块,具体用于当检测到该directbytebuffer对象被新的对象引用时,将该directbytebuffer对象对应的计数器记录的标记数值加一;
29.确定当前引用该directbytebuffer对象的其他对象,作为目标对象;
30.针对每一目标对象,当该目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一。
31.可选的,所述记录模块,还用于在执行所述针对每一目标对象,当该目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一之前,执行针对每一目标对象,当该目标对象引用该directbytebuffer对象的方法执行结束时,确定该目标对象对该directbytebuffer对象的引用失效。
32.可选的,所述判断模块,具体用于当达到预设周期时,判断该directbytebuffer对象当前的标记数值是否为零;
33.或者,
34.当该directbytebuffer对象的标记数值减小时,判断该directbytebuffer对象减小后的标记数值是否为零。
35.可选的,所述装置还包括:
36.第二回收模块,用于在所述第一回收模块执行对该directbytebuffer对象引用的堆外内存进行回收之前,执行将该directbytebuffer对象占用的堆内内存标记为可用状态;
37.所述第一回收模块,具体用于调用该directbytebuffer对象对应的run方法,以将该directbytebuffer对象引用的堆外内存标记为可用状态。
38.本发明实施例还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
39.存储器,用于存放计算机程序;
40.处理器,用于执行存储器上所存放的程序时,实现上述任一所述的内存回收方法步骤。
41.本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的内存回收方法步骤。
42.本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的内存回收方法。
43.本发明实施例提供的一种内存回收方法,可以针对每一directbytebuffer对象,通过该directbytebuffer对象对应的计数器,记录该directbytebuffer对象的标记数值;其中,标记数值表示当前针对该directbytebuffer对象的有效引用的数目;判断该directbytebuffer对象当前的标记数值是否为零;如果该directbytebuffer对象当前的标记数值为零,对该directbytebuffer对象引用的堆外内存进行回收。
44.基于上述处理,一个directbytebuffer对象的标记数值表示当前针对该directbytebuffer对象的有效引用的数目。如果directbytebuffer对象的标记数值为零,表明不存在针对directbytebuffer对象的有效引用,也就是不存在其他对象使用directbytebuffer对象引用的堆外内存中的数据,表明directbytebuffer对象引用的堆外内存中的数据为无用数据,则直接对directbytebuffer对象引用的堆外内存进行回收。相对于现有技术中,只有在directbytebuffer对象所在的内存块的占用率达到预设阈值,且不存在从gc root对象至directbytebuffer对象的引用链时,才对directbytebuffer对象引用的堆外内存进行回收,可以及时回收directbytebuffer对象引用的堆外内存,可以在一定程度上避免堆外内存资源浪费,提高堆外内存的利用率。
45.当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
46.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的实施例。
47.图1为本发明实施例提供的一种内存回收方法的流程图;
48.图2为本发明实施例提供的另一种内存回收方法的流程图;
49.图3为本发明实施例提供的另一种内存回收方法的流程图;
50.图4为本发明实施例提供的另一种内存回收方法的流程图;
51.图5为本发明实施例提供的一种内存回收装置的结构图;
52.图6为本发明实施例提供的一种电子设备的结构图。
具体实施方式
53.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本技术所获得的所有其他实施例,都属于本发明保护的范围。
54.参见图1,图1为本发明实施例提供的一种内存回收方法的流程图,该方法可以包括以下步骤:
55.s101:针对每一directbytebuffer对象,通过该directbytebuffer对象对应的计数器,记录该directbytebuffer对象的标记数值。
56.其中,标记数值表示当前针对该directbytebuffer对象的有效引用的数目。
57.s102:判断该directbytebuffer对象当前的标记数值是否为零。
58.s103:如果该directbytebuffer对象当前的标记数值为零,对该directbytebuffer对象引用的堆外内存进行回收。
59.基于本发明实施例提供的内存回收方法,一个directbytebuffer对象的标记数值表示当前针对该directbytebuffer对象的有效引用的数目。如果directbytebuffer对象的标记数值为零,表明不存在针对directbytebuffer对象的有效引用,也就是不存在其他对象使用directbytebuffer对象引用的堆外内存中的数据,表明directbytebuffer对象引用的堆外内存中的数据为无用数据,则直接对directbytebuffer对象引用的堆外内存进行回收。相对于现有技术中,只有在directbytebuffer对象所在的内存块的占用率达到预设阈值,且不存在从gc root对象至directbytebuffer对象的引用链时,才对directbytebuffer对象引用的堆外内存进行回收,可以及时回收directbytebuffer对象引用的堆外内存,可以在一定程度上避免堆外内存资源浪费,提高堆外内存的利用率。
60.本发明实施例提供的内存回收方法可以应用于电子设备,电子设备可以为终端(例如,电脑、手机等)或者服务器。电子设备中运行有java程序。
61.针对步骤s101,directbytebuffer对象是java程序中用于实现堆外内存的directbytebuffer类的实例,通过directbytebuffer对象可以实现堆外内存的创建、使用和回收。一个directbytebuffer对象在堆内内存中所占用的内存区域较小,且引用的堆外
内存区域较大。
62.为了提高内存利用率,针对每一个directbytebuffer对象,可以为该directbytebuffer对象添加计数器,并通过该directbytebuffer对象对应的计数器,记录该directbytebuffer对象的标记数值。
63.在java程序执行的过程中,directbytebuffer对象的赋值可能会发生改变,相应的,directbytebuffer对象与其他对象的引用关系也会发生改变,也就是说directbytebuffer对象的标记数值会发生改变。因此,电子设备可以根据当前directbytebuffer对象与其他对象的引用关系,更新directbytebuffer对象的标记数值。每一directbytebuffer对象对应一个计数器,该directbytebuffer对象计数器用于记录该directbytebuffer对象的标记数值。
64.在本发明的一个实施例中,在图1的基础上,参见图2,步骤s101可以包括以下步骤:
65.s1011:针对每一directbytebuffer对象,当检测到该directbytebuffer对象被新的对象引用时,将该directbytebuffer对象对应的计数器记录的标记数值加一。
66.s1012:确定当前引用该directbytebuffer对象的其他对象,作为目标对象。
67.s1013:针对每一目标对象,当该目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一。
68.一种实现方式中,如果一个对象引用一个directbytebuffer对象的方法,表示该对象引用该directbytebuffer对象。相应的,当检测到该directbytebuffer对象被新的对象引用时,电子设备可以将该directbytebuffer对象对应的计数器记录的标记数值加一。
69.电子设备可以确定当前引用该directbytebuffer对象的其他对象(即目标对象),当任意一个目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一。
70.在本发明的一个实施例中,针对每一directbytebuffer对象,电子设备还可以确定目标对象对该directbytebuffer对象的引用是否失效。相应的,在图2的基础上,参见图3,在步骤s1013之前,该方法还可以包括以下步骤:
71.s1014:针对每一目标对象,当该目标对象引用该directbytebuffer对象的方法执行结束时,确定该目标对象对该directbytebuffer对象的引用失效。
72.另外,针对每一directbytebuffer对象,如果引用该directbytebuffer对象的一个目标对象失效时(例如,该目标对象被回收),则电子设备可以确定该目标对象对该directbytebuffer对象的引用失效。
73.针对步骤s102和步骤s103,针对每一directbytebuffer对象,电子设备可以判断该directbytebuffer对象当前的标记数值是否为零,也就是判断当前是否存在针对该directbytebuffer对象的有效引用。
74.一种实现方式中,当达到预设周期时,判断该directbytebuffer对象当前的标记数值是否为零。
75.每一次判断directbytebuffer对象当前的标记数值是否为零,均需要消耗电子设备的系统资源,如果在每一次将directbytebuffer对象对应的计数器记录的标记数值减一时,判断directbytebuffer对象减小后的标记数值是否为零,会消耗电子设备较多的系统
资源。
76.为了节省电子设备的系统资源,针对每一directbytebuffer对象,电子设备可以在达到预设周期时,判断该directbytebuffer对象当前的标记数值是否为零。
77.另一种实现方式中,当该directbytebuffer对象的标记数值减小时,判断该directbytebuffer对象减小后的标记数值是否为零。
78.针对每一directbytebuffer对象,将该directbytebuffer对象对应的计数器记录的标记数值减一时,该directbytebuffer对象的标记数值可能为零。电子设备可以在每一次将该directbytebuffer对象对应的计数器记录的标记数值减一时,判断该directbytebuffer对象减小后的标记数值是否为零。后续,可以在该directbytebuffer对象减小后的标记数值为零时,对该directbytebuffer对象引用的堆外内存进行回收,可以及时对堆外内存进行回收,提高内存回收的效率。
79.如果该directbytebuffer对象的标记数值为零,表明当前不存在针对该directbytebuffer对象的有效引用,也就是不存在其他对象使用该directbytebuffer对象引用的堆外内存中的数据。因此,该directbytebuffer对象引用的堆外内存中的数据为无用数据,则可以对该directbytebuffer对象引用的堆外内存进行回收。后续,其他对象可以使用已经回收的该directbytebuffer对象引用的堆外内存。
80.一种实现方式中,在确定该directbytebuffer对象的标记数值为零时,表明当前不存在针对该directbytebuffer对象的有效引用,电子设备可以清除该directbytebuffer对象引用的堆外内存中的数据,以回收该directbytebuffer对象引用的堆外内存。
81.另一种实现方式中,为了节省电子设备的系统资源,在图1的基础上,参见图4,步骤s103可以包括以下步骤:
82.s1031:如果该directbytebuffer对象当前的标记数值为零,将该directbytebuffer对象占用的堆内内存标记为可用状态。
83.s1032:调用该directbytebuffer对象对应的run方法,以将该directbytebuffer对象引用的堆外内存标记为可用状态。
84.针对每一directbytebuffer对象,在确定该directbytebuffer对象的标记数值为零时,表明当前不存在针对该directbytebuffer对象的有效引用,电子设备可以将该directbytebuffer对象占用的堆内内存标记为可用状态。
85.相应的,在将该directbytebuffer对象占用的堆内内存标记为可用状态时,通过java中的runnable(java中用于实现多线程的类)接口,触发该directbytebuffer对象对应的run方法,run方法是基于runnable接口定义的,一个directbytebuffer对象的run方法中记录了用于将该directbytebuffer对象引用的堆外内存标记为可用状态的程序。触发一个directbytebuffer对象对应的run方法,也就是执行该directbytebuffer对象的run方法中记录的程序,以将该directbytebuffer对象引用的堆外内存标记为可用状态。后续,当其他对象使用该堆外内存时可以直接将需要存储的数据覆盖该堆外内存中原有的数据。
86.基于上述处理,可以直接将该directbytebuffer对象引用的堆外内存标记为可用状态,而不用清除该directbytebuffer对象引用的堆外内存中的数据,可以节省电子设备的系统资源。
87.另外,如果该directbytebuffer对象的标记数值不为零,表明当前存在针对该
directbytebuffer对象的有效引用,存在其他对象使用该directbytebuffer对象引用的堆外内存中的数据,则电子设备可以不做处理。
88.在本发明的一个实施例中,针对每一directbytebuffer对象,可以通过该directbytebuffer对象的unsafe.allocatememory(size)方法向电子设备申请堆外内存,size表示该directbytebuffer对象申请的堆外内存的大小(可以称为目标大小)。
89.电子设备可以从当前可用的堆外内存中,确定目标大小的堆外内存,并将确定出的堆外内存的地址,写入该directbytebuffer对象的unsafe.allocatememory(size)方法。
90.与图1的方法实施例相对应,参见图5,图5为本发明实施例提供的一种内存回收装置的结构图,所述装置包括:
91.记录模块501,用于针对每一directbytebuffer对象,通过该directbytebuffer对象对应的计数器,记录该directbytebuffer对象的标记数值;其中,所述标记数值表示当前针对该directbytebuffer对象的有效引用的数目;
92.判断模块502,用于判断该directbytebuffer对象当前的标记数值是否为零;
93.第一回收模块503,用于如果该directbytebuffer对象当前的标记数值为零,对该directbytebuffer对象引用的堆外内存进行回收。
94.可选的,所述记录模块501,具体用于当检测到该directbytebuffer对象被新的对象引用时,将该directbytebuffer对象对应的计数器记录的标记数值加一;
95.确定当前引用该directbytebuffer对象的其他对象,作为目标对象;
96.针对每一目标对象,当该目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一。
97.可选的,所述记录模块501,还用于在执行所述针对每一目标对象,当该目标对象对该directbytebuffer对象的引用失效时,将该directbytebuffer对象对应的计数器记录的标记数值减一之前,执行针对每一目标对象,当该目标对象引用该directbytebuffer对象的方法执行结束时,确定该目标对象对该directbytebuffer对象的引用失效。
98.可选的,所述判断模块502,具体用于当达到预设周期时,判断该directbytebuffer对象当前的标记数值是否为零;
99.或者,
100.当该directbytebuffer对象的标记数值减小时,判断该directbytebuffer对象减小后的标记数值是否为零。
101.可选的,所述装置还包括:
102.第二回收模块,用于在所述第一回收模块503执行对该directbytebuffer对象引用的堆外内存进行回收之前,执行将该directbytebuffer对象占用的堆内内存标记为可用状态;
103.所述第一回收模块503,具体用于调用该directbytebuffer对象对应的run方法,以将该directbytebuffer对象引用的堆外内存标记为可用状态。
104.基于本发明实施例提供的内存回收装置,一个directbytebuffer对象的标记数值表示当前针对该directbytebuffer对象的有效引用的数目。如果directbytebuffer对象的标记数值为零,表明不存在针对directbytebuffer对象的有效引用,也就是不存在其他对象使用directbytebuffer对象引用的堆外内存中的数据,表明directbytebuffer对象引用
的堆外内存中的数据为无用数据,则直接对directbytebuffer对象引用的堆外内存进行回收。相对于现有技术中,只有在directbytebuffer对象所在的内存块的占用率达到预设阈值,且不存在从gcroot对象至directbytebuffer对象的引用链时,才对directbytebuffer对象引用的堆外内存进行回收,可以及时回收directbytebuffer对象引用的堆外内存,可以在一定程度上避免堆外内存资源浪费,提高堆外内存的利用率。
105.本发明实施例还提供了一种电子设备,如图6所示,包括处理器601、通信接口602、存储器603和通信总线604,其中,处理器601,通信接口602,存储器603通过通信总线604完成相互间的通信,
106.存储器603,用于存放计算机程序;
107.处理器601,用于执行存储器603上所存放的程序时,实现如下步骤:
108.针对每一directbytebuffer对象,通过该directbytebuffer对象对应的计数器,记录该directbytebuffer对象的标记数值;其中,所述标记数值表示当前针对该directbytebuffer对象的有效引用的数目;
109.判断该directbytebuffer对象当前的标记数值是否为零;
110.如果该directbytebuffer对象当前的标记数值为零,对该directbytebuffer对象引用的堆外内存进行回收。
111.上述电子设备提到的通信总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
112.通信接口用于上述电子设备与其他设备之间的通信。
113.存储器可以包括随机存取存储器(random access memory,ram),也可以包括非易失性存储器(non-volatile memory,nvm),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
114.上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
115.在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一内存回收方法的步骤。
116.在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一内存回收方法。
117.在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质
中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solid state disk(ssd))等。
118.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
119.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质和计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
120.以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
再多了解一些

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

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

相关文献