Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有效利用内存?带字符串的开关盒_Java_Android - Fatal编程技术网

Java 有效利用内存?带字符串的开关盒

Java 有效利用内存?带字符串的开关盒,java,android,Java,Android,我想知道在我的测试应用程序中保存一些资源和内存的最佳方法是什么。 我知道创建对象会消耗内存并减慢应用程序的速度,而在应用程序中,代码需要字符串值的开关大小写。那么,什么会更好呢?一个if-else语句,用于为所有字符串值分配一个整数标记并使用switch case,还是创建一个枚举数并直接使用switch 条目数=40-50。不用担心。新的Java7开关语句 在编译过程中,带有字符串大小写的开关被转换为两个开关。第一个将每个字符串映射到一个唯一的整数,该整数位于原始开关中的位置。这是通过首先打开

我想知道在我的测试应用程序中保存一些资源和内存的最佳方法是什么。 我知道创建对象会消耗内存并减慢应用程序的速度,而在应用程序中,代码需要字符串值的开关大小写。那么,什么会更好呢?一个if-else语句,用于为所有字符串值分配一个整数标记并使用switch case,还是创建一个枚举数并直接使用switch


条目数=40-50。

不用担心。新的Java7开关语句

在编译过程中,带有字符串大小写的开关被转换为两个开关。第一个将每个字符串映射到一个唯一的整数,该整数位于原始开关中的位置。这是通过首先打开标签的哈希代码来完成的。对应的情况是测试字符串相等性的if语句;如果散列上存在冲突,则测试是级联if-else-if。第二个开关反映原始源代码中的情况,但用相应的位置替换大小写标签。这两个步骤可以很容易地保持原始交换机的流量控制


坐下来,喝一口咖啡,让编译器+JVM为您完成所有繁重的工作。在这种情况下进行微优化可能会损害性能,而不是帮助性能。

不用担心。新的Java7开关语句

在编译过程中,带有字符串大小写的开关被转换为两个开关。第一个将每个字符串映射到一个唯一的整数,该整数位于原始开关中的位置。这是通过首先打开标签的哈希代码来完成的。对应的情况是测试字符串相等性的if语句;如果散列上存在冲突,则测试是级联if-else-if。第二个开关反映原始源代码中的情况,但用相应的位置替换大小写标签。这两个步骤可以很容易地保持原始交换机的流量控制

坐下来,喝一口咖啡,让编译器+JVM为您完成所有繁重的工作。在这种情况下进行微优化可能会损害性能而不是帮助

我知道创建对象会消耗内存并减慢应用程序的速度

这种概括是有问题的:

是的,创建对象会消耗内存和时间,但这并不一定会减慢应用程序的速度。这取决于创建对象的替代方案。很可能是另一种方法会让应用程序的运行速度更慢

即使假设createanobject版本比其他版本使用更多的资源,也很有可能差别不大

您在这里所做的似乎是过早的优化。我的建议是:

让JVM来处理优化,它可能会比你做得更好, 将任何手动优化留待以后进行,并且仅在应用程序的测量性能确实保证的情况下进行,并且 使用CPU或内存分析器来指导您的代码中哪些部分进行手动优化可能会获得良好的回报。 至于您的用例的细节,还不清楚什么是最有效的解决方案。这取决于字符串是如何形成的,switch语句中有多少分支,等等。如果不使用真实的输入数据分析应用程序,很难进行预测

您没有提到的第三个选项是使用枚举而不是字符串或int。这将比使用预填充的HashMap或其他方法实现字符串到int的映射更简洁

我知道创建对象会消耗内存并减慢应用程序的速度

这种概括是有问题的:

是的,创建对象会消耗内存和时间,但这并不一定会减慢应用程序的速度。这取决于创建对象的替代方案。很可能是另一种方法会让应用程序的运行速度更慢

即使假设createanobject版本比其他版本使用更多的资源,也很有可能差别不大

您在这里所做的似乎是过早的优化。我的建议是:

让JVM来处理优化,它可能会比你做得更好, 将任何手动优化留待以后进行,并且仅在应用程序的测量性能确实保证的情况下进行,并且 使用CPU或内存分析器来指导您的代码中哪些部分进行手动优化可能会获得良好的回报。 至于您的用例的细节,还不清楚什么是最有效的解决方案。这取决于字符串是如何形成的,switch语句中有多少分支,等等。如果不使用真实的输入数据分析应用程序,很难进行预测

你没有提到的第三个选择是
使用枚举而不是字符串或int。这比使用预先填充的HashMap或其他东西实现字符串到int的映射更简洁。

@GrahamBorland:我同意你的看法。我必须使用一个枚举器。@GrahamBorland:+1对于您的回答,android使用java 6当然这不应该是公认的答案,因为它不能解决/回答问题@Stephen C的回答至少是全面的。你们让我想了一下,google已经发布了一个使用Java7的新版本的ADT插件。现在回到Java6的悲惨现实。在@Stephen C回答这个问题之前,我已经接受了它。不管怎样,我的错@格雷厄姆伯兰:我同意你的看法。我必须使用一个枚举器。@GrahamBorland:+1对于您的回答,android使用java 6当然这不应该是公认的答案,因为它不能解决/回答问题@Stephen C的回答至少是全面的。你们让我想了一下,google已经发布了一个使用Java7的新版本的ADT插件。现在回到Java6的悲惨现实。在@Stephen C回答这个问题之前,我已经接受了它。不管怎样,我的错!对同一组字符串执行此查找的频率是多少?如果超过可能的4倍,那么方法是一个哈希表。不要沉迷于创建对象——处理大量对象的用户界面,所以这里再多一些也没什么大不了的。你多久会在同一组字符串上进行一次这种查找?如果超过可能的4倍,那么方法是一个哈希表。不要沉迷于创建对象-处理大量对象的UI,所以这里再多一些就没什么大不了的了。你能看看这个吗?我在最后一行提到了enum作为枚举器,分支的数量与条目的数量相同,我也提到了40-50。无论如何,谢谢你!你能看一下吗?我在最后一行提到了enum作为枚举器,分支的数量与条目的数量相同,我也提到了40-50。无论如何,谢谢你!