Skip to content

Releases: reactor/BlockHound

1.0.0.RC1

02 Sep 14:38
312fc5f
Compare
Choose a tag to compare
1.0.0.RC1 Pre-release
Pre-release

What's Changed

This this is the first release candidate and it focuses on the performance.

Previous versions were using a native agent (in C++).
But it was problematic due to the complexity of the build plus the performance overhead of the native switch.

This release includes a major rewrite that removes the native code and now only uses the bytecode instrumentation to achieve the same result.

Not only it helped us to reduce the complexity of the project (both build-wise and code-wise, making it easier for potential contributors to submit their changes), but the performance was improved significantly!

Before:

Benchmark                                                 Mode  Cnt  Score   Error  Units
BlockHoundBenchmark.baselineBlockingCallInBlockingThread  avgt    9  0,520 ± 0,028  us/op
BlockHoundBenchmark.measureBlockingCallInBlockingThread   avgt    9  0,853 ± 0,040  us/op
BlockHoundBenchmark.measureAllowedBlockingCall            avgt    9  3,039 ± 0,145  us/op

After:

Benchmark                                                 Mode  Cnt  Score   Error  Units
BlockHoundBenchmark.measureBlockingCallInBlockingThread   avgt    9  0,528 ± 0,025  us/op
BlockHoundBenchmark.measureAllowedBlockingCall            avgt    9  0,538 ± 0,037  us/op

If a blocking call in non-non-blocking thread was previously having an overhead of ~0,320us/op, it is now close to 0,010us/op, which is already a great improvement!

But, there was a case where the implementation detail of BlockHound was adding even more overhead - allowed blocked calls (logging, class loading, etc etc).
And, if before it was ~2,500us/op, it went down to ~0,020us/op 🎉

🚀 Features / Enhancements

  • Replace native agent with ThreadLocal-based API (#46) @bsideup
  • Use ThreadLocal instead of the tags to store the non-blocking marker (#45) @bsideup
  • Add JMH microbenchmarks (#35) @szpak

1.0.0.M5

29 Jul 09:40
88b1e94
Compare
Choose a tag to compare
1.0.0.M5 Pre-release
Pre-release

What's Changed

🐛 Bug Fixes

1.0.0.M4

10 Jun 17:36
6766234
Compare
Choose a tag to compare
1.0.0.M4 Pre-release
Pre-release

What's Changed

🚀 Features / Enhancements

  • Whitelist ConcurrentHashMap#initTable (#34) @bsideup
  • Return "is blocking" by default if no frames are matched (#32) @bsideup
  • Declare an Java9 JPMS Automatic-Module-Name for agent and junit (#31) @simonbasle

📖 Documentation

  • Fix link to supported_testing_frameworks.md from quick_start.md (#30) @philsttr

1.0.0.M3

05 May 09:25
6046ba6
Compare
Choose a tag to compare
1.0.0.M3 Pre-release
Pre-release

What's Changed

🚀 Features / Enhancements

  • release memory allocated by JVMTI/JNI. (#27) @bsideup
  • Skip ReactorIntegration on Reactor 3.3.x since it got a built-in one (#29) @bsideup

📖 Documentation

  • Improve wording in Testing Framwork Support (#20) @sbrannen
  • Improve wording in overview page (#19) @sbrannen
  • Add a section to the docs about the testing frameworks (#18) @bsideup

1.0.0.M2

25 Mar 14:00
1a1880a
Compare
Choose a tag to compare
1.0.0.M2 Pre-release
Pre-release

What's Changed

  • Replace javassist instrumentation with ASM (#12) @bsideup

🚀 Features / Enhancements

  • Integrate with JUnit Platform (#13) @bsideup

    ⚠️ Gradle users are advised to add testCompile 'org.junit.platform:junit-platform-launcher' due to a bug in Gradle

  • Statically link Windows mingw binaries (#16, #17) @jrehwaldt

🐛 Bug Fixes

1.0.0.M1

22 Feb 13:04
09f6d4b
Compare
Choose a tag to compare
1.0.0.M1 Pre-release
Pre-release
Publish sources & javadoc