技术新讯 > 计算推算,计数设备的制造及其应用技术 > java对象的内存计算方法、装置及电子设备与流程  >  正文

java对象的内存计算方法、装置及电子设备与流程

  • 国知局
  • 2024-07-31 22:55:09

本技术涉及计算机,具体而言,涉及一种java对象的内存计算方法、装置及电子设备。

背景技术:

1、随着计算机网络技术的高速发展,人们对计算机内存性能的要求越来越高,由于计算机中所有程序的运行都在内存中进行,因此内存性能对计算机是否能够稳定运行有着至关重要的影响。在开发和使用安全分析产品时,为了能更好的使用计算和存储资源、设计优化良好的产品,需要监控产品和程序的运行状态、资源使用情况。在产品和程序的许多监控指标中,对内存的使用量是一项十分重要的监控参数,通过该参数可以了解程序是否以设计的规格正确的使用内存资源。

2、随着大数据类安全分析产品的兴起和发展,java作为大数据分析领域的重要开发语言,也大量的用于各类安全分析程序的开发中。相比传统c、c++等静态语言,java作为动态语言在内存管理方面采用了一套完全不同的方案,这导致程序很难准确的了解自身内存的占用,目前只能从外部通过操作系统相关参数来计算程序整体的内存占用量,这对程序的内存监控带来了很大的困难。

技术实现思路

1、本技术实施例的目的在于提供一种java对象的内存计算方法、装置及电子设备,用以改善现有的方式只能计算程序整体的内存占用量,无法准确知晓程序内部各个java对象的内存占用量的问题。

2、第一方面,本技术实施例提供了一种java对象的内存计算方法,所述方法包括:

3、获取待计算java对象;

4、根据所述待计算java对象的数据类型,确定对应的目标内存计算方法;

5、采用所述目标内存计算方法获取所述待计算java对象占用的内存。

6、在上述实现过程中,通过根据待计算java对象的数据类型,确定对应的目标内存计算方法,然后采用目标内存计算方法获取待计算java对象占用的内存,如此本方案可根据java对象的数据类型来选择不同的内存计算方法实现内存的计算,可对java对象占用的内存进行更准确的计算,进而可实现对程序内部的java对象的内存占用量实现更细粒度的检测,有利于程序准确地了解自身内存的占用。

7、可选地,所述根据所述待计算java对象的数据类型,确定对应的目标内存计算方法,包括:

8、若所述待计算java对象的数据类型为数组类型,则确定对应的目标内存计算方法为数组内存计算方法。

9、在上述实现过程中,对于数组类型,采用对应的数组内存计算方法来计算内存,可实现内存的准确计算。

10、可选地,所述采用所述目标内存计算方法获取所述待计算java对象占用的内存,包括:

11、根据所述待计算java对象的数组元素类型确定数组对象数据占用内存;

12、获取所述待计算java对象的数组对象头占用内存和对齐填充占用内存;

13、根据所述数组对象头占用内存、所述数组对象数据占用内存和所述对齐填充占用内存,确定所述待计算java对象占用的内存。

14、在上述实现过程中,根据数组元素类型来确定数组对象数据占用内存,如此可根据不同数组元素类型来获得更准确的数组对象数据占用内存,进而获得更准确的java对象占用的内存。

15、可选地,所述根据所述待计算java对象的数组元素类型确定数组对象数据占用内存,包括:

16、获取所述待计算java对象的数组元素个数;

17、若所述待计算java对象的数组元素类型为基础数据类型,则获取对应的基础数据类型的基础数据类型字节大小;

18、将所述数组元素个数与所述基础数据类型字节大小的乘积作为所述数组对象数据占用内存;

19、若所述待计算java对象的数组元素类型为非基础数据类型,则获取所述待计算java对象的对象引用占用字节大小;

20、将所述数组元素个数与所述对象引用占用字节大小的乘积作为所述数组对象数据占用内存。

21、在上述实现过程中,针对数组元素类型为基础数据类型还是非基础数据类型,选择不同的内存计算方法来获取数组对象数据占用内存,可提高内存计算的准确性。

22、可选地,所述根据所述待计算java对象的数据类型,确定对应的目标内存计算方法,包括:

23、若所述待计算java对象的数据类型为非数组类型,则确定对应的目标内存计算方法为非数组内存计算方法。对于非数组类型,采用对应的非数组内存计算方法来计算内存,可实现内存的准确计算。

24、可选地,所述采用所述目标内存计算方法获取所述待计算java对象占用的内存,包括:

25、获取所述待计算java对象的类大小描述符,所述类大小描述符用于存储类实例对象基础内存和类引用类型字段列表;

26、遍历所述类引用类型字段列表中的每个字段;

27、从所述待计算java对象中获取对应的每个字段的字段值;

28、根据所述类实例对象基础内存和所述字段值,确定所述待计算java对象占用的内存。

29、在上述实现过程中,通过类大小描述符来存储类实例对象基础内存和类引用类型字段列表,这样可以准确且细粒度地计算java对象的内存占用。

30、可选地,所述获取所述待计算java对象的类大小描述符,包括:

31、以所述待计算java对象为键在全局类大小描述符表中查询该待计算java对象对应的类大小描述符,所述全局类大小描述符表中存储有多个基础java对象对应的类大小描述符;

32、若在所述全局类大小描述符表中查询不到,则在局部类大小描述符表中查询该待计算java对象对应的类大小描述符,所述局部类大小描述符表中存储有其他java对象对应的类大小描述符;

33、若在所述局部类大小描述符表中查询不到,则构建该待计算java对象对应的类大小描述符。

34、在上述实现过程中,通过设置全局类大小描述符,用于存储一些基础java对象的类大小描述符,这样先在全局类大小描述符中查找类大小描述符,可提高类大小描述符的获取效率。

35、可选地,所述构建该待计算java对象对应的类大小描述符,包括:

36、遍历所述待计算java对象中的所有字段,判断各个字段是否为静态字段;

37、若不是静态字段,则判断字段是否为基础数据类型;

38、若是基础数据类型,则获取基础数据类型对应的基础数据类型字节大小,以及根据所述基础数据类型字节大小和对象头占用内存确定所述类实例对象基础内存;

39、若不是基础数据类型,则根据对象头占用内存和对象引用占用字节大小确定所述类实例对象基础内存,并将该字段加入到所述类引用类型字段列表中。

40、在上述实现过程中,根据字段类型来获取对应的类实例对象基础内存,可实现内存的细粒度计算。

41、可选地,所述获取所述待计算java对象的类大小描述符之前,还包括:

42、判断所述待计算java对象的数据类型是否为非数组类型中的枚举类型;

43、若不是,则执行步骤:获取所述待计算java对象的类大小描述符。

44、在上述实现过程中,针对枚举类型可特殊处理,而无需重复一遍内存计算流程,可提高内存计算效率。

45、可选地,所述获取待计算java对象之后,所述根据所述待计算java对象的数据类型,确定对应的目标内存计算方法之前,还包括:

46、判断所述待计算java对象是否实现了内存计算接口;

47、若是,则调用所述内存计算接口获取所述待计算java对象占用的内存;

48、若否,则执行步骤:根据所述待计算java对象的数据类型,确定对应的目标内存计算方法。

49、在上述实现过程中,对于实现了内存计算接口的java对象,可直接通过内存计算接口来获取内存,可提高内存计算效率。

50、可选地,所述获取待计算java对象,包括:

51、从待计算对象栈中依次获取待计算java对象,所述待计算对象栈中存储有多个待计算java对象,所述多个待计算java对象是指java程序所包含的java对象。

52、在上述实现过程中,通过将java程序的java对象加入到待计算对象栈中,对象栈具有先进后出的特点,这样可以对于嵌套的java对象的内存实现准确计算。

53、第二方面,本技术实施例提供了一种java对象的内存计算装置,所述装置包括:

54、对象获取模块,用于获取待计算java对象;

55、方法确定模块,用于根据所述待计算java对象的数据类型,确定对应的目标内存计算方法;

56、内存计算模块,用于采用所述目标内存计算方法获取所述待计算java对象占用的内存。

57、第三方面,本技术实施例提供一种电子设备,包括处理器以及存储器,所述存储器存储有计算机可读取指令,当所述计算机可读取指令由所述处理器执行时,运行如上述第一方面提供的所述方法中的步骤。

58、第四方面,本技术实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时运行如上述第一方面提供的所述方法中的步骤。

59、第五方面,本技术实施例提供一种计算机程序产品,包括计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行如上述第一方面提供的方法中的步骤。

60、本技术的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本技术实施例了解。本技术的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

本文地址:https://www.jishuxx.com/zhuanli/20240730/195311.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。