QuickPerf is a testing library for Java to quickly evaluate and improve some performance-related properties
📙 Documentation
Annotations
Frameworks and Test Frameworks
Frequently Asked Questions
Usage
JVM annotations
@MeasureHeapAllocation
@HeapSize(value = 1, unit = AllocationUnit.GIGA_BYTE)
@Test
public void execute_batch() {
...
}SQL annotations
@ExpectSelect(1)
@Test
public void should_find_all_players() {
...
}[PERF] You may think that <1> select statement was sent to the database
But there are in fact <10>...
💣 You may have even more select statements with production data.
Be careful with the cost of JDBC roundtrips: https://blog.jooq.org/2017/12/18/the-cost-of-jdbc-server-roundtrips/
Auto-detection of Hibernate and Spring Data JPA:
💡 Perhaps you are facing an N+1 select issue
* With Hibernate, you may fix it by using JOIN FETCH
or LEFT JOIN FETCH
or FetchType.LAZY
or ...
* With Spring Data JPA, you may fix it by adding @EntityGraph(attributePaths = { "..." })
on repository method: https://docs.spring.io/spring-data/jpa/docs/current/reference/ht
Talks and videos
English
French
Something to ask us?
Do you prefer to use a Github issue to ask a question? Create a question issue
Show your support
Please if this project helped you!
Contributing
You are very welcome to contribute to QuickPerf! You can contribute in many ways. Some relatively easy things can be done. Other issues are more challenging. Each contribution is appreciated. Read our contributing guide to learn more.
Contributors
Many thanks to all our contributors!
emoji keySponsors
Many thanks Zenika for sponsoring this project!

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.
