有没有一种简单、便宜(不需要在多个硬件配置上测试程序)且无痛苦的方法来定义运行自己程序所需的硬件要求(如CPU、RAM内存等)?应该怎么做?我编写了一个相当耗资源的Java程序,不知道如何定义足够流畅地运行此应用程序的硬件规格。
不,我认为没有任何一种通用方法可以确定最低要求,而不涉及在某些指定的参考硬件上进行测试。您可能可以通过使用某种虚拟机来找到一些限制 - 修改某些VM的参数比修改硬件更容易。但是主机和VM之间的交互会产生影响你的结果的制品。此外,在不了解许多用例的情况下,很难普遍定义“可接受性能”的标准。许多程序将使用更多资源(如果可用),但也可以使用更少的资源。例如,考虑使用基于CPU核心数的大小的线程池的程序。在使用更多内核的CPU上运行时,可以并行处理更多工作,但同时由于线程创建、同步和聚合结果的开销增加,产生的开销也会增加。这些效果在CPU数量方面是非线性的,并且很大程度上取决于实际的程序和数据。同样,减少可用内存的影响范围从可能为某些输入引发OutOfMemory-Errors(但对于其他输入可能不是如此)到只是更频繁地运行GC(而这的影响取决于GC策略,范围从可见的冻结到稍微多一点的CPU负载)。所有这些都没有考虑到程序通常不会孤立地存在 - 它们在与其他消耗资源的任务并行运行的操作系统上运行。