所以假设我有一个包含大量ints和double的程序。如果我知道这个数字合适的话,是否值得把我的整数改为字节或短号?
我知道java没有无符号类型,但是如果我知道数字只为正数,我还能做什么吗?
我所说的高效主要是指处理。我假设,如果所有变量都是一半大小,垃圾收集器会快得多,计算也可能会快一些。(我想既然我在android上工作,我也需要担心一下ram。)
当我开始一个新项目的时候,值得从一开始就做吗?(我的意思是,我认为每一点都会有所帮助,但话说回来,如果是这样,为什么似乎没有人这样做。)
我认为它应该更快更有效,这是错的吗?我不想在一个庞大的程序中修改所有的东西,发现我浪费了我的时间。
是的,你错了。在大多数情况下,就所使用的空间而言,它几乎没有什么不同。
这是不值得尝试优化这个...除非你有明确的证据表明优化是需要的。如果您确实需要优化对象字段的内存使用,那么您可能需要采取其他(更有效的)措施。
查看@Meriton答案中的基准测试结果,似乎使用short
和byte
而不是int
会导致乘法性能下降。实际上,如果孤立地考虑这些操作,惩罚是很大的。(你不应该孤立地考虑它们……但这是另一个话题。)
我认为解释是JIT可能在每种情况下都使用32bit multiply指令进行乘法。但是在byte
和short
的情况下,它会执行额外的指令,在每次循环迭代中将中间的32位值转换为byte
或short
。(理论上,这个转换可以在循环结束时完成一次...但是我怀疑优化器是否能够解决这个问题。)
无论如何,这确实指出了切换到short
和byte
作为优化的另一个问题。它可能会使性能变差...在一个算术和计算密集型的算法中。
问题内容: 除了在流中使用(byte [])之外,我并没有真正看到byte和short使用太多。另一方面,我看到长期使用的实际值是| 100 |。和字节会更合适。这是由于内存相对便宜的特性造成的,还是开发人员不必担心的仅仅是细节? 问题答案: 当为内存或磁盘空间不足的嵌入式设备进行编程时,将使用它们。如家电等电子设备。 字节还用于底层Web编程中,您可以在其中使用标头等将请求发送到Web服务器。
示例:类中的字段使用。 如果差异太小,那么为什么这些数据类型(、)会存在呢?
问题内容: 我的印象是main方法必须具有“ public static void main(String [] args){}”形式,您不能传递int []参数。 但是,在Windows命令行中,当运行以下.class文件时,它接受int和string作为参数。 例如,使用此命令将给出输出“ stringers”:“ java IntArgsTest stringers” 我的问题是,为什么?为
问题内容: 我正在将一些Java代码转换为C#,并发现了一些标记为“ break”的语句(例如) C#是否存在等效项(当前读数不建议使用),如果没有,则除了(例如)具有布尔标志以指示是否在每个循环结束时中断以外,没有任何转换(例如) 我对C#为什么没有这个很感兴趣,因为它似乎并不十分邪恶。 问题答案: 您可以使用直接跳转到标签。 在类似C的语言中,通常可以更轻松地打破嵌套循环,而不是跟踪布尔变量并
问题内容: py2exe是否有替代品? 问题答案: cx_Freeze是跨平台的,并且具有相同的功能,或者您可以使用py2app,它仅在Mac上有效。
问题内容: 一直有人告诉我,永远不要用或类型来代表金钱,这一次我向您提出一个问题:为什么? 我敢肯定有一个很好的理由,我根本不知道这是什么。 问题答案: 因为浮点数和双精度数不能准确代表我们用于货币的基数10的倍数。这个问题不仅仅针对Java,而且还针对任何使用base 2浮点类型的编程语言。 在基数10中,您可以将10.25编写为1025 * 10 -2(整数乘以10的幂)。IEEE-754浮点