Нет, я не думаю, что существует какой-либо общепринятый способ определения минимальных требований, не связанных с тестированием на каком-либо определенном контрольном оборудовании.
Возможно, вам удастся найти некоторые ограничения с помощью виртуальных машин - проще изменить параметры какой-либо виртуальной машины, чем модифицировать аппаратное обеспечение. Но есть артефакты, создаваемые взаимодействием между хостом и виртуальной машиной, которые могут влиять на ваши результаты.
Трудно также определить критерии «приемлемого исполнения» в целом, не зная о случаях использования.
Многие программы будут использовать больше ресурсов, если они доступны, но также могут ладить с меньшими затратами.
Например, рассмотрите программу, использующую пул потоков с размером a в зависимости от количества ядер процессора. При работе на процессоре с большим количеством ядер больше работы можно выполнять параллельно, но в то же время накладные расходы из-за создания потоков, синхронизации и агрегации результатов увеличивается. Эффекты нелинейны по числу процессоров и сильно зависят от реальной программы и данных. Точно так же эффекты уменьшения доступного диапазона памяти от потенциального выброса OutOfMemory-Errors для некоторых входов (но, возможно, не для других) к простому запуску GC несколько чаще (и эффекты , что зависят от стратегии GC, от заметного зависает лишь немного больше загрузки процессора).
Все, что даже не предполагает, что программы обычно не живут изолированно - они запускаются в операционной системе параллельно с другими задачами, которые также потребляют ресурсы.
Это один JVM, который выполняет несколько задач или несколько разных JVM? Они работают без остановок, или они запускаются ОС (например, cron) и перестают работать, когда закончены? – Thierry
В этом конкретном случае у меня есть программа с серверной задачей на одном JVM, и она должна работать постоянно, но на самом деле я ищу какое-то общее решение, даже не только для Java-программ. – Marcon