Sample

int-d8055429f29d-I04

Replace method, parameter, and local names with deterministic ProGuard-style short identifiers

Matched original source

Lines46

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Scalabrino0.8250–1; higher is more readable
Dorn0.2140–1; higher is more readable
Mi0.3720–1; higher is more readable
LLOC15Logical lines; fewer is more readable
DeepSeek V4 Pro10.670–20; mean of three runs
GPT-6.1 Sol150–20; mean of three runs
BTTF0.590–1; higher is more readable

Views

Source code

package io.netty.microbench.buffer; import io.netty.buffer.ByteBuf; import io.netty.buffer.UnpooledByteBufAllocator; import io.netty.buffer.UnpooledUnsafeDirectByteBuf; import io.netty.microbench.util.AbstractMicrobenchmark; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.TearDown; import java.nio.ByteBuffer; public class UnsafeByteBufBenchmark extends AbstractMicrobenchmark { private ByteBuf unsafeBuffer; private ByteBuffer byteBuffer; @Setup public void a() { unsafeBuffer = new UnpooledUnsafeDirectByteBuf(UnpooledByteBufAllocator.DEFAULT, 64, 64); byteBuffer = ByteBuffer.allocateDirect(64); } @TearDown public void b() { unsafeBuffer.release(); } @Benchmark public long c() { return unsafeBuffer.setLong(0, 1).getLong(0); } @Benchmark public long d() { return byteBuffer.putLong(0, 1).getLong(0); } @Benchmark public ByteBuf e() { return unsafeBuffer.setLong(0, 1); } @Benchmark public ByteBuffer f() { return byteBuffer.putLong(0, 1); } }

Loading feature diagnosis…

Source regions

Feature contributions

Feature contributions

FeatureValueContribution
(log-odds)
Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones.1323.931−43.69
Source linesThe number of non-empty source lines.46+18.4
Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value.4.758−7.137

Intercept 8.87 + feature contributions = -23.557 (log-odds).
Score = sigmoid(-23.557) = 0.

Score0.825

Feature contributions

FeatureValueContribution
(log-odds)
Indentation frequencyHow rapidly indentation changes from line to line.46+0.854
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.0−0.804
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.46−0.635
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.44−0.522
Identifier layout (horizontal)How rapidly the visual pattern of identifier characters changes from left to right. It measures spatial frequency, not the meaning of the names.96.894−0.439
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.45.857+0.231
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.102−0.054

Intercept 0.07 + feature contributions = -1.298 (log-odds).
Score = sigmoid(-1.298) = 0.214.

Score0.372
Score15
Run 1

The code follows a standard benchmark structure with clear setup, teardown, and benchmark methods, but its readability is severely impacted by non-descriptive method names (a, b, c, d, e, f). The class lacks any explanatory comments or Javadocs. The logic is linear and presentable, with low nesting and appropriate action granularity. However, ambiguous identifiers obscure intent, forcing the reader to infer purpose from implementation details. While concise, this brevity comes at the cost of clarity. The reading flow is acceptable due to the consistent method ordering but is undermined by the meaningless naming convention.

Run 2

The code has a clear package structure and follows a logical class organization, but readability is hindered by non-descriptive method names (a, b, c, d, e, f) that obscure intent. Nesting is minimal, and the overall flow is flat, which is positive. However, the setup and teardown methods lack meaningful names, making the benchmark purpose ambiguous without external documentation. Code length is concise, but this brevity comes at the cost of clarity. Action granularity is generally one action per line, which aids reading, but method chaining like `setLong(0, 1).getLong(0)` slightly reduces clarity. The reading flow is natural in terms of setup, benchmark, teardown, but the cryptic naming disrupts understanding. Overall, the code would be significantly more readable with descriptive method names matching their benchmark targets.

Run 3

The code has a clear overall structure with separate setup, teardown, and benchmark methods, and it avoids deep nesting. However, readability is significantly reduced by poor naming: method names a(), b(), c(), d(), e(), and f() give no indication of their purpose. The class name and field names are helpful, but the benchmark methods are ambiguous without reading their bodies. The code is concise and follows a logical order, but the lack of descriptive names forces the reader to inspect each method to understand what is being benchmarked. Action granularity is good (one primary operation per line), and the reading flow is natural, but the vague method names undermine clarity of intent. Overall, the code requires more effort than necessary to parse due to non-descriptive identifiers.

Run 1

Code Structure: Logically organized into fields, setup, teardown, and benchmark methods, with annotations clearly identifying roles. Nesting: Flat methods with no nested control flow make scanning easy. Clarity of intent: Types and annotations suggest a buffer-performance comparison, but single-letter method names obscure individual benchmark purposes; repeated numeric literals lack context. Code length: Compact and appropriately sized, without unnecessary boilerplate. Action granularity: Most lines perform one action, although chained write-and-read calls combine two operations in a single expression. Reading flow: Consistent formatting and paired benchmark methods support a natural progression, but descriptive method names and better import spacing would improve readability.

Run 2

Code Structure: Fields, setup, teardown, and benchmark methods are logically organized and clearly separated by annotations. Nesting: The code is flat, with no nested control flow. Clarity of intent: Buffer types and annotations reveal the benchmarking purpose, but method names a–f obscure each benchmark's specific operation; repeated numeric literals lack descriptive names. Code length: The implementation is concise, with little unnecessary code. Action granularity: Most lines perform one action, though c and d chain write and read operations on a single line. Reading flow: Setup precedes cleanup and benchmarks, and related buffer operations are paired consistently. However, opaque method names and ungrouped imports make scanning less informative.

Run 3

Code Structure: Fields, setup, teardown, and benchmark methods are logically organized and clearly separated by annotations. Nesting: No nested control flow; every method is flat and easy to scan. Clarity of intent: The class and field names communicate a buffer benchmark, but method names a–f obscure the specific operations and lifecycle roles. Unexplained literals also slightly reduce clarity. Code length: The code is concise, with minimal boilerplate and no unnecessary implementation detail. Action granularity: Most lines perform one action, although c() and d() chain write and read operations on a single line. Reading flow: Setup precedes teardown and benchmarks, creating a natural progression; consistent formatting helps, but meaningful method names and grouped imports would improve navigation.