agentsclimarketplace

Java perf check

Skill ducpm2303/claude-java-plugins/plugins/java-quality/skills/java-perf-check

Java developer toolkit for Claude Code — skills, agents, hooks, and coding standards for Java 8+ projects

Install
npx -y skills add ducpm2303/claude-java-plugins --skill java-perf-check

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 17 stars17 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Quick Java performance scan flagging N+1 queries, memory issues, threading problems, and algorithmic hotspots. Use when user asks to "check performance", "performance scan", "any N+1 queries", "performance issues", "is this efficient", or "slow code".

SKILL.md

3.0 KB, 655 tokens by cl100k_base, as published. Nobody here has run it

/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 / forEach loop
  • @OneToMany or @ManyToMany without fetch = FetchType.LAZY
  • Accessing a lazy collection outside a transaction context (LazyInitializationException risk)

Unbounded Data

  • findAll() / repository.findAll() with no Pageable parameter
  • Loading an entire entity when only a few fields are needed (suggest projections)

String and Memory

  • String concatenation with + inside a loop
  • DateTimeFormatter, Pattern, ObjectMapper instantiated inside a method body (should be static final)
  • new BigDecimal(double) — imprecise; use BigDecimal.valueOf(double)

Collections

  • LinkedList used as a general-purpose list (cache-unfriendly; use ArrayList)
  • ArrayList or HashMap created without an initial capacity when size is known
  • contains() on a List in a loop — O(n²); use a HashSet for O(1) lookup

Threading

  • synchronized on an entire method — flag if the critical section is small
  • new Thread(...) created directly — recommend ExecutorService or @Async
  • Shared HashMap — recommend ConcurrentHashMap
  • Java 21+: synchronized inside virtual-thread code — pinning risk; recommend ReentrantLock

Transaction Scope

  • @Transactional without readOnly = true on read-only service methods
  • HTTP calls, file I/O, or Thread.sleep() inside a @Transactional method

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-reviewer agent
  • 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

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.