# JVM (Spring Boot / Scala / Kotlin) ## Startup delay Spring Boot loads the full application context before accepting HTTP. Cold starts typically take 60–120 seconds depending on the number of beans and auto-configuration classes. ```yaml livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 120 periodSeconds: 30 failureThreshold: 6 readinessProbe: httpGet: path: /actuator/health port: 8080 initialDelaySeconds: 90 periodSeconds: 15 failureThreshold: 3 ``` If the app exposes a Spring Actuator health endpoint, prefer it for readiness over the root path. ## Heap limit Set `-Xmx` to keep the heap within the container memory limit. The JVM does not automatically respect cgroup limits on older JDK versions. ```yaml env: - name: JAVA_OPTS value: "-Xmx512m -Xms256m" resources: limits: memory: 768Mi requests: memory: 512Mi ``` Keep `-Xmx` 25–33% below the container limit to leave room for off-heap memory (metaspace, direct buffers, GC overhead). ## Resources 512Mi–1Gi request is typical. JVM startup can spike higher — use `requests` to reserve and `limits` to cap.