It'd also be interesting to see comparisons to the Java and .NET runtimes on AWS Lambda.
A previous job I worked at ran Java on AWS Lambda. We ran our busiest Java lambda in a docker layer as our whole build system was designed around docker and from a compute performance point of view it was just as fast.
The main issues were:
* Longer init times for the JRE (including before the JIT kicks in). Our metrics had a noticeable performance hit that lined up to the startup of freshly initialized lambdas. It was still well within a tolerable range for us, though.
* Garbage collection almost never ran cleanly due the code suspension between invocations, which means we had to allocate more memory than we really needed.
The native AWS Lambda Java's 'snap start' would have helped, but the startup times were just not a big deal for our use case - we didn't bother with provisioning lambdas either. Despite the added memory costs, it was also still cheap enough that it was not really worth us investigating Java's parallel GC.
So as always, what language one should use depends on your use case. If you have an app that's sensitive to "random" delays, then you probably want something with less startup overhead.
It's a convenience VS security argument, though the documentation could be better (including via AWS recommended settings if it sees you using S3).