在Android应用程序的汇编语言上编写代码

时间:2014-01-29 13:37:14

标签: java android assembly

我有一个非常大的String列表...(ArraList myList),我想非常快速地从这个列表中删除重复的项目..我将项目复制到HashMap中,这是我找到的最好的算法,但它是不够快...  我发现了一些东西,比如使用本地语言编写代码并在android应用程序中实现它,我们可以使用本机语言从列表中删除重复,是否有任何由汇编语言编写的函数可以比java更快地执行此操作?

如果没有,是否有一个函数可以比java更快地比较两个字符串?

3 个答案:

答案 0 :(得分:1)

要回答这个问题,可以使用NDK在C for Android中进行编程。而且,由于从C到汇编程序的方式相当短,所以在Assembler中也是可能的。虽然Java性能目前相当不错,但声称没有任何语言能够更快地检查数组中的重复数据,这对我来说有点过高估计。

然而,在语言之间切换是复杂的,并且对于任务如此微不足道,您只需访问JNI级别的数组就可能会失去性能。

重新考虑算法可能更合理。例如:

  • 如果您只需要遍历列表但必须对其进行排序,请使用LinkedHashSet。这样可以防止重复项目开始。
  • 如果你有很多重复项,删除操作可能太昂贵,因为阵列的大部分可能会移动很多次。尝试将要删除的项目设置为null,然后从头开始重新创建数组,跳过空值。

答案 1 :(得分:0)

  

是否有汇编语言编写的函数可以比java更快地执行此操作?

这样的功能是否已经存在?我不知道......如果有的话,我不知道怎么会找到它。

你能写一个这样的功能吗?也许......在理论上。

  • 假设有一个功能可以在理论上尽可能快地执行此任务(在某些情况下)。

  • 无论编写函数的语言是什么,都应该可以找出函数编译器(或汇编)的机器代码。

  • 完成后,您可以将该机器代码转换为汇编程序...提供汇编语言功能,以最高性能执行任务。

  • 既然这样的汇编程序可以存在(理论上),那么一个足够聪明/熟练/耐心的人可以(理论上)从头开始编写它!

但问题是你需要成为一个非常好的汇编程序员(对所涉及的算法有很好的理解)才能解决这个问题。而踢球者不能保证现有的Java实现(使用优秀的JIT编译器编译时)不会那么快。

我在这里感到悲观的原因是在HLL(如Java)中实现高效的哈希表对大多数人来说已经足够了。在汇编语言中实现相同的思考将会变得更难。 (那是修辞。你不能真正量化那样的难度......)


  

如果没有,是否有一个函数可以比java更快地比较两个字符串?

我不知道这会有多大帮助。如果您正确使用HashSet,那么字符串比较不应该是您的问题的性能瓶颈。即使你的重复比例很高,也不行。

答案 2 :(得分:0)

您获取并存储字符串列表的位置?可能正在使用SQLite或类似CQEngine之类的东西存储和管理数据会更好吗?