Java is for many years one of the most popular programming languages, but it used to have hard times in the Serverless community. Java is known for its high cold start times and high memory footprint, comparing to other programming languages like Node.js and Python. In this talk I'll look at the general best practices and techniques we can use to decrease memory consumption and cold start times for Java Serverless applications on AWS Lambda including GraalVM (Native Image) and AWS own offering SnapStart based on Firecracker microVM snapshot and restore and CRaC (Coordinated Restore at Checkpoint) runtime hooks. I'll also provide Lambda functions performance (cold and warm start times) benchmarking for:
-Deployment package sizes
-Lambda memory settings
-Java compilation options
-Managing Lambda dependencies with Lambda layers
-Choice of garbage collection algorithm
-Choice of hardware architecture x86 vs arm64
-HTTP (a)synchronous clients