当前位置: 首页 > 面试题库 >

Java BigDecimal内存使用情况?

弓俊晖
2023-03-14
问题内容

是否有一个准则来估计a消耗的内存量BigDecimal

寻找类似于这些准则的估计String内存使用情况的东西。


问题答案:

如果您查看源代码中的字段,则BigDecimal有:

BigDecimal:
  long intCompact +8 bytes
  int precision +4 bytes
  int scale +4 bytes
  String stringCache +?
  BigInteger intVal +?

BigInteger:
  int bitCount +4 bytes
  int bitLength +4 bytes
  int firstNonzeroIntNum +4 bytes
  int lowestSetBit +4 bytes
  int signum +4 bytes
  int[] mag +?

的评论stringCache

用于存储规范的字符串表示形式(如果已计算)。

假设您不调用.toString(),它将保留为零字节。因此BigDecimal是(8 + 4 + 4)= 16个字节+ BigInteger

BigInteger本身是4 + 4 + 4 + 4 + 4 = 20字节+ mag

20 +
16总共提供了36个字节加上大小,该大小始终是表示完整整数所需的最小位数。对于数字n,它将需要一些log2(n)位,可以将其转换为整数。您应该使用关于:

36 + Ceiling(log2(n)/8.0) bytes

(请注意,这不像您的示例字符串链接那样包含任何其他对象描述符开销,但是它应该给您一个很好的总体思路。)



 类似资料:
  • 问题内容: 有什么工具可以知道我的Java应用程序已使用了多少个本机内存?我的应用程序内存不足:当前设置是:-Xmx900m 计算机,Windows 2003 Server 32位,RAM 4GB。 还在Windows上将boot.ini更改为/ 3GB,会有什么不同吗?如果设置为Xmx900m,则可以为此进程分配多少最大本机内存?是1100m吗? 问题答案: (就我而言,我使用的是Java 8)

  • 问题内容: 我目前正在测试将密钥插入数据库Redis(在本地)中。我有超过500万个密钥,而且我只有4GB的RAM,所以一时我达到了RAM的容量并交换了数据(并且我的PC掉了)。 我的问题是:如何在具有Redis数据库的计算机上监视内存使用情况,并以此方式发出警报,不再在Redis数据库中插入某些密钥? 谢谢。 问题答案: 关于内存使用情况,建议您查看redis.io 常见问题解答以及有关将red

  • 问题内容: 我写了一个程序,可以总结如下: 实际代码(尤其是)要复杂得多。仅使用将其当作参数的这些值(意味着它不引用) 基本上,它将巨大的数据集加载到内存中并进行处理。输出的写操作委托给一个子进程(它实际上写到多个文件中,这需要很多时间)。因此,每次处理一个数据项时,它都会通过res_queue发送到子流程,然后该子流程根据需要将结果写入文件中。 子流程不需要访问,读取或修改以任何方式加载的数据。

  • 问题内容: 我知道Valgrind,但它只是检测内存管理问题。我要搜索的是一个概述的工具,程序的哪些部分确实消耗了多少内存。带有树形图的图形表示(就像KCachegrind对Callgrind所做的那样)会很酷。 我在Linux机器上工作,所以Windows工具对我没有太大帮助。 问题答案: 使用massif,这是Valgrind工具的一部分。massif- visualizer 可以帮助您绘制数

  • 我正在评估Flink是否支持流媒体窗口以生成可能的警报。我关心的是内存使用情况,如果有人能帮我,我将不胜感激。 例如,该应用程序将在给定的滚动窗口(例如5分钟)内消耗流中潜在的大量数据。在评估时,如果例如有一百万个文档符合标准,它们会全部加载到内存中吗? 一般流程为: <代码>制作人- 此外,如果有一些清晰的文档描述了在这些情况下如何处理内存,那么我可能忽略了有人可能会指出这一点,这将很有帮助。

  • vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可实时动态监视操作系统的虚拟内存、进程、CPU活动。 10.1. vmstat的语法   vmstat [-V] [-n] [delay [count]] - -V表示打印出版本信息;- -n表示在周期性循环输出时,输出的头部信息仅显示一次;- delay是两次输出之间的延迟时间;- count是指按照这个时