我在 Ubuntu 10.10 32 位上使用 eclipse,当我编译一个巨大的 android 项目时,它变得越来越慢,我有 4GB 的内存(只使用了 25%),但它变得越来越慢,当我进一步观察时,eclipse 只使用一个 CPU 并在其上产生 100% 的负载,而其他 CPU 的负载只有 20%,这是 eclipse 的问题还是 Ubuntu 的问题
答案1
Eclipse 及其使用的 Java 开发工具包与您的开发几乎无关,使用标准 SDK 可以开发 Android 应用程序。
为了澄清这一点,你可以考虑 3 个重要事实:
- 你可以从源代码构建一个完整的 Android 应用程序,而无需使用 Eclipse
- Eclipse 只是 Android SDK 的一个 IDE,一组可以加速你的工作流程的图形元素,仅此而已
- Eclipse 使用 JDK 环境,而 Android SDK 则不使用(A. SDK 除了使用 SDK 本身之外不采用任何其他东西),它们只是使用不同的环境来运行和构建应用程序,因此说“Eclipse 在编译大型 Android 项目时不使用双核”这样的话只是误导。
我认为此时应该清楚的事实是,您的应用程序实际上是由 SDK 本身编译的,而您强调的坏事通常被称为好事。
多线程应用程序,以及一般的应用程序(我现在所说的“应用程序”是指 SDK,而不是您的应用程序)支持将其执行拆分为多个作业,这带来了一个大问题:良好而有效的调试阶段。假设您正在编译拆分为 4 个线程的某个程序,在编译器崩溃的瞬间,问题是:这 4 个程序中哪一个是坏人?全部?只有 1 个?2 个?3 个?
考虑到 Android SDK 的典型用途并不主要基于多线程设计(我的意思是,在最坏的情况下,开发人员可以等待 1 或 2 分钟,什么都不会改变,而在多线程环境中进行一些并发调试要复杂得多,可能需要数周时间才能取得任何结果),采用多线程设计很容易带来更多的弊端而不是优点,尤其是在编译和调试阶段。
最后考虑到开发者的受众,Android 的目标,Android 应用程序的真正含义,这种软件设计可能是最合适和最有效的,并且我不会认为缺少多线程编译是一件坏事。
答案2
多核 CPU
由于功率限制,CPU 趋向于多核,而不仅仅是提高 CPU 频率。Eclipse 可让开发人员编写多线程程序,以充分利用日益增加的多核。此外,Eclipse 本身也可尽可能地进行优化,以在多核上运行。
Eclipse 本身并不支持多线程,这意味着无论您有多少个 CPU/CPU 核心,Eclipse 都只能在其中一个核心中运行。
而且,编译器使用多个 CPU/CPU 核心的能力取决于您使用哪种语言来开发 Android 项目。
即使您使用的 IDE 没有利用多个 CPU/CPU 核心,某些编译器也能够在编译期间使用多个 CPU/CPU 核心。
自内核 2.0 版以来,Linux 内核就支持在一个系统中使用多个 CPU/核心,从而允许您的程序利用这一点,但是程序本身必须支持多个 CPU/核心。
有关 Symmetric 多处理工作原理的更多信息,请参见这里。
简而言之:Ubuntu 支持 SMP,因为当前内核版本小于 2.0(如您所知,也是 9.10),但 eclipse 缺乏使用多个 CPU/核心的能力。此外,即使 eclipse 支持 SMP,它(在项目构建期间)也取决于您用于项目的语言和编译器。
无论您使用什么编译器(包括 Android SDK 中的编译器),这都是正确的。
答案3
假设您使用 make 作为项目构建器,并且您的依赖项已正确写入,则最好的方法可能是使用并行 make。我思考eclipse 有一个复选框,但如果没有,只需添加-j2
到构建器参数(其中“2”是同时运行的作业数 - 试验一下,看看哪个最适合你)。