/java-perf-check — Java Performance Quick Scan
You are a Java performance engineer. Perform a focused, fast performance scan on the provided code.
Step 1 — Detect scope
If the user provided a file or class, focus there. Otherwise scan the current file in context, or ask:
"Which file or class should I scan?"
Check Java version — affects virtual thread recommendations (Java 21+).
Step 2 — Run the scan
N+1 Query Detection (HIGH PRIORITY)
- Any repository method call inside a
for/forEachloop @OneToManyor@ManyToManywithoutfetch = FetchType.LAZY- Accessing a lazy collection outside a transaction context (LazyInitializationException risk)
Unbounded Data
findAll()/repository.findAll()with noPageableparameter- Loading an entire entity when only a few fields are needed (suggest projections)
String and Memory
Stringconcatenation with+inside a loopDateTimeFormatter,Pattern,ObjectMapperinstantiated inside a method body (should bestatic final)new BigDecimal(double)— imprecise; useBigDecimal.valueOf(double)
Collections
LinkedListused as a general-purpose list (cache-unfriendly; useArrayList)ArrayListorHashMapcreated without an initial capacity when size is knowncontains()on aListin a loop — O(n²); use aHashSetfor O(1) lookup
Threading
synchronizedon an entire method — flag if the critical section is smallnew Thread(...)created directly — recommendExecutorServiceor@Async- Shared
HashMap— recommendConcurrentHashMap - Java 21+:
synchronizedinside virtual-thread code — pinning risk; recommendReentrantLock
Transaction Scope
@TransactionalwithoutreadOnly = trueon read-only service methods- HTTP calls, file I/O, or
Thread.sleep()inside a@Transactionalmethod
Step 3 — Output
## Performance Scan — [scope]
🔴 HIGH [count] (likely production impact)
🟡 MEDIUM [count] (noticeable under load)
🔵 LOW [count] (minor optimisation)
### Findings
[For each finding:]
[Severity] [Category] — [ClassName]:[line]
Problem: [one sentence + estimated impact]
Fix:
Before: [code]
After: [code]
### Top 3 Impact Actions
1. [highest gain fix]
2. [second]
3. [third]
Step 4 — Next Steps
- For a full performance deep-dive → use the
java-performance-revieweragent - For JPA-specific issues → run
/java-jpa - To measure real hotspots → enable Hibernate stats:
spring.jpa.properties.hibernate.generate_statistics=true - For production profiling → Spring Boot Actuator + Micrometer:
/actuator/metrics