JVM has default memory usage limits and sophisticated GC algorithms, which may cause the JVM process to allocate more memory than actually needed for the application's data. In most traditional Java's use cases (long running, memory intensive apps and servers) this is beneficial, but if you know the upper bound on the total size of the data to be smaller than the default limit (which varies by the environment), it's easy to restrict it further with a couple of program parameters. For example, after some tuning I commonly run a full-fledged Java-based BitTorrent client with under 64 MB of RAM in total. You can definitely run a Jetty web server with Hello world page with 32 MB RAM or less.