While application gets complex and start serving concurrent users, there is always need to make maximum use of available hardware and ensure every request is served within reasonable time. While its possible to increase heap size (using Xmx, Xms options), the option is discouraged as it ends up introducing unnecessary GC pauses in JVM and instead of improving application performance it will lead to serious bottlenecks. The other option would be distribute the user requests over cluster of servers and thereby ensuring the load is evenly distributed against many servers. The option will also enable maximum availability of application and will serve more requests than bombarding one server. Also the underlying OS places constraints on the resources consumed by an individual process and hence it is always recommended to distribute the job across multiple processes.