哪种表示占用更多内存,哪一种是有效的

时间:2014-10-15 04:06:19

标签: java

我有一个问题。我必须处理IP地址和端口号。每个数据包都包含源和目标IP,源和目标端口。假设一个数据包是(1.2.3.4,5.6.7.8,22,8080)所以我可以将它们存储在两种不同的数据类型中。

 String packet ="1.2.3.4, 5.6.7.8,22, 8080";
 short[] packet={1,2,3,4,5,6,7,8,22, 8080}

哪一个会占用更多内存,哪一个更有效处理

2 个答案:

答案 0 :(得分:0)

short[]是10 * 2字节,加上对象开销。

String需要一个分隔符,因此至少有9 * 2 + 1个字符(如果每个数字都是一个数字)加上对象开销,在实际情况下总是会更长。

因此short[]内存较少,而且(我强烈怀疑)更容易处理。

答案 1 :(得分:0)

实际上,每个IP承载32位数据(4个8位值),每个端口承载16位数据。因此,您的总记录可以压缩为总共32 + 32 + 16 + 16 = 96位,或3个32位int原语。

您可以使用此问题的答案:Going from 127.0.0.1 to 2130706433, and back again将每个IP地址打包为一个int值。类似的技术也可以将两个端口号打包成一个int(因为端口号实际上高达16位值)。

通过这种“优化”,您可以将单个记录存储到3个int值中(您可以将其包装到类中并提供实用程序方法来获取每个数据)。