YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Chinese, Simplified subtitles

← 03-13 Container_Performance

03-13 Container_Performance

Get Embed Code
13 Languages

Showing Revision 7 created 02/12/2016 by sp8.

  1. 前面我们讲过,

  2. 一些类型的硬件可能会造成程序执行速度较慢。
  3. 还记得那个浮点分支问题吗?
  4. 对于今天的硬件来说,这已经不是问题。
  5. 但是有一些问题还是需要引起注意。
  6. 比如说,你所使用的编程语言的基本元素的效率
  7. 以排序等基本算法为例,
  8. 现在,有很多的排序算法。
  9. 对于不同的情况,它们各有优劣。
  10. 例如, 当元素数量少于一千
    或在大型已排序列表中寻找一个对象时,
  11. 快速排序法通常比起泡排序法更快。
  12. 一般情况下,最好的方法是二分查找算法。
  13. 但是,当在未排数组中寻找对象时情况变得完全不同,
  14. 不同于比较每一个对象以查找你想要的值。
  15. 你可以使用一个哈希函数来立即找到它。
  16. 这是现代计算机科学和数据结构方面的基本知识。
  17. 幸运的是,现代编程语言像Java等,
  18. 为你提供这些容器和算法,
  19. 因此你不再需要自己反复地编写Murmur3哈希函数
    和快速排序算法.
  20. 但是你需要知道另外一些事情,
  21. 在我多年的编程生涯中,
  22. 一个经常会影响项目性能的问题
  23. 是由于这些语言提供的容器对象的性能所引起的。
  24. 这听起来不可思议,是吧。
  25. Java提供一个失量类的实现。
  26. 你可以任意推入、弹出、添加和取消对象。
  27. 为了获得这种灵活性,
    它在内部使用链式列表结构。
  28. 这种结构具有一系列独特的性能特性,
  29. 在你操作这种列表时,它的速度超级快。
  30. 但是,当你在其他位置进行插入或删除时,
  31. 它会消耗大量的时间。
  32. 我要说的是,
  33. 底层系统提供这些的容器并不会考虑,
  34. 你的程序将会如何实际使用它们。
  35. James Sutherland发表了一系列的基准测试报告。
  36. 阐述Java Framework提供的特定数据结构的性能。
  37. 他认为,我们需要注意性能与功能之间的一些差异。
  38. 例如,他发现Hashtable比HashMap大约快22%,
  39. 具体视你如何使用这些容器而有所不同。
  40. 我们需要思考的是,
  41. 你是否曾经分析过你在代码中使用的容器类。
  42. 你是否坚信,
  43. 你在代码中使用的容器的实际运行速度绝对是最快的。
  44. 是的,这就我在考虑的事情。
  45. 一个好消息是,
  46. 你可以使用Android 中的剖析MPI来剖析这些容器的性能。
  47. 让我们来看Chris的代码是否经得起我们的检验。