Book a scoping call
Java performance engineering

Performance Engineering Services for Java Systems Under Load

When a Java system answers slowly, cannot take more traffic or costs too much to run, we measure where the time goes before changing anything. A measurement iteration of one to two weeks comes first, and every change it points to is tested on the same load harness.

Discuss your requirementsSee how it works

Measured results from systems we built and tuned

60%
lower response time on a hotel metasearch engine300 million queries a day · 80% lower infrastructure costHotel search case study
65%
less flight schedule calculation timeFramework proof of concept · identical production inputFlight schedule case study
1,000,000,000
financial transactions in under an hourFastPost accounting platform · developed for LegerityFastPost case study
Measurement
Usually 1 to 2 weeks, before any implementation is agreed.
Implementation
Usually 4 to 8 weeks after measurement, subject to scope.
Commercial model
Implementation billed time and materials with a ballpark estimate, against agreed SLO targets.
Acceptance
Results tested against the workload and criteria in the proposal.
Where we look

Where Java bottlenecks usually are

From a ledger clearing a billion transactions in under an hour to a search engine serving 300 million queries a day, we know where Java systems slow down.

  • Data access and caching

    Query cost, database round trips and cache behavior. An in-memory data grid comes into the discussion only when the workload and the consistency requirements justify one.

  • JVM and resource use

    Allocation, garbage collection, CPU and memory under real load, with thread pools, connection pools and runtime settings checked against what the system actually does.

  • Concurrency and scaling

    Contention, queues and serial stages that cap throughput. We look at partitioning and failure behavior before anyone adds nodes.

  • Streaming and integrations

    Delays across Kafka pipelines, external calls and integration flows: where backpressure, repeated work or a slow dependency reaches the user.

Technology

Data grids, Kafka and the tools we measure with

  • Hazelcast and Apache Ignite

    Distributed caching and compute next to the data, when a database round trip is the bottleneck; Ignite when the workload needs SQL over the grid. Cluster design (partitioning, backup counts, failure behavior) decides most of the result.

    What is Hazelcast used for

  • Oracle Coherence

    For companies already on Oracle: cache topologies and near-cache strategies tuned to the access pattern, and upgrades tested for serialization changes before they reach production.

    Our technology stack

  • Apache Kafka

    Where the bottleneck is between services: partitioning, consumer parallelism and backpressure, with ordering and replay kept intact.

    Kafka partitions and consumer lag

  • Profilers and load harnesses

    Java profilers to find where the time goes, JMeter or a custom harness to reproduce the load, and the same harness run before and after every change, then handed to you.

    Guide to Java profilers

  • The features implemented have received overwhelmingly positive feedback from end-users. Stratoflow has an incredible technical expertise and a high degree of flexibility when it comes to changing project requirements.
    Adam HillChief Technology Officer, Legerity
Measurement and delivery

How a performance project runs

We measure first and change only what the numbers point to, with the same load test run before and after every change.

  1. Establish the baseline

    Agree the workload, the test environment and the metrics to track: response-time percentiles, throughput, resource use or cost. Then profile and trace the application with representative data.

  2. Agree the changes

    Rank the findings and propose a scope that can be delivered. Performance objectives, acceptance conditions, dependencies and the implementation ballpark are written down before any change.

  3. Implement and compare

    Changes in weekly iterations, with the agreed tests rerun after each one. Functional correctness is checked alongside speed, and tradeoffs are reviewed with your team every week.

  4. Hand over the evidence

    You receive the code changes, the test harness, the results and operating notes. Remaining bottlenecks are recorded, with a plan for deployment and monitoring.

Commercial terms

Choose how far we go: measurement first, implementation if you want it

The measurement phase ends with the findings and recommended next steps, including cases where the proposed target requires a larger architectural change. Implementation is a separate decision.

The implementation proposal defines the agreed scope, ballpark estimate and schedule, and the phase is billed time and materials. We agree how changes to the workload, environment or scope affect the acceptance criteria before additional work starts.

You receive the measurements and implementation findings even when a target is not met. A demonstrated result in a test environment is accompanied by a rollout plan and production monitoring requirements.

Practical questions

Questions about performance work

Do you need access to production?

Not always. Existing telemetry and a representative test environment may be enough to start. We agree access, data handling and any production measurements with your team; load tests need an approved environment and operating limits.

Can you guarantee a particular improvement?

A target needs a baseline and a feasible implementation plan. Measurement establishes what is likely to be achievable. The proposal records the target, test conditions and commercial consequences if it is not met.

Will a Java upgrade or data grid solve the problem?

It depends on what the measurements show. A query fix, an allocation change or a simpler cache may be enough. Runtime upgrades and distributed technologies are weighed against the workload, support requirements and operating cost.

How long does the work take?

Plan for a 1 to 2 week measurement phase followed by a scoped implementation, usually 4 to 8 weeks. Access, test data, external dependencies and release windows affect the schedule.

What happens after delivery?

Your team receives the changes, test harness and operational notes. If ongoing maintenance or incident response is needed, we can agree a separate managed support engagement.

Is this Java performance tuning or something bigger?

Usually it starts as Java performance tuning: JVM tuning of garbage collection and heap, thread and connection pools, query plans. Tuning alone rarely closes the gap. In high performance Java the larger gains come from where the data lives, how work is partitioned and what crosses the network, so we measure first and change what the measurements point to.

What is software performance engineering?

Setting performance targets, measuring a system against them, and changing the design or the code until it meets them, with the measurement kept in place afterwards. On this service the systems are Java applications, and the load harness we build stays with your team, so the next release is measured the same way.

Further reading

Performance guides from our engineers

All articles

Next step

Start with the performance problem you can observe

Bring the symptoms and any measurements you already have, such as response-time percentiles or the cloud bill. On the call we agree what the measurement iteration should cover.

Book a scoping callRead the hotel metasearch case study