- Leverage true parallel threads — JRuby has no GIL. Use `concurrent-ruby` for thread-safe collections.
- Avoid C extensions (native gems) — use pure Ruby alternatives or Java libraries via `java_import`.
- Access Java standard library directly: `java.util.HashMap`, `java.io.File`, `java.security.*`.
- Use `require 'java'` to enable Java interop in any Ruby file.
- Prefer `Concurrent::Map` over `Hash` for shared mutable state in multi-threaded code.
- Plan for slower startup (~1.4s vs ~48ms for MRI) — use persistent processes for web apps.
- Use `jruby-openssl` instead of the C-based OpenSSL binding.
- Leverage JVM garbage collection tuning (`-J-Xmx`, `-J-XX:+UseG1GC`) for long-running processes.
- Use `jruby --profile` for CPU/memory profiling with JVM tools.