0% found this document useful (0 votes)
186 views

Effective Java Programming: Measurement As The Basis

Benchmarking involves measuring and comparing software performance using test cases. Microbenchmarks test specific parts of code, while macrobenchmarks test full use cases. Profiling identifies bottlenecks by measuring which parts of code consume the most resources like CPU and memory. Flat profiles can misidentify bottlenecks by only showing time spent in methods, without considering call frequency or time spent in called methods. Tools like jconsole and VisualVM help profile Java applications to find and address performance issues.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
186 views

Effective Java Programming: Measurement As The Basis

Benchmarking involves measuring and comparing software performance using test cases. Microbenchmarks test specific parts of code, while macrobenchmarks test full use cases. Profiling identifies bottlenecks by measuring which parts of code consume the most resources like CPU and memory. Flat profiles can misidentify bottlenecks by only showing time spent in methods, without considering call frequency or time spent in called methods. Tools like jconsole and VisualVM help profile Java applications to find and address performance issues.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 25

Effective Java

Programming
measurement as the basis

Structure
measurement as the basis

benchmarking
micro
macro
profiling
why you should do this?
profiling tools

Motto
"We should forget about small efficiencies,
say about 97% of the time: premature
optimization is the root of all evil."
Donald Knuth

The problem
Modern software is too complex
Even the wisest man is not suitable for
performance tuning
need for techniques and tools!
benchmarking
profiling

What is benchmarking?
it is a comparison of different solutions on
the basis of measurements (time, memory,
...)
different solutions, but giving the same
results
different data structures
different technologies (ORM, MVC)
various containers
the essence is to compare
single result does not say anything
results are useful when you can compare them

How to measure?
stopwatch
funny, but often appropriate
the most versatile technique
no interference with the code
does not require complicated tools
you do not always need the milliseconds
application start time
time to open a document
time scrolling through large tables
DB query execution time

How to measure?
measurements taken into account in the
code
calculation based on system time before and after

run
System.currentTimeMillis ()
precision in milliseconds (?)
interference with the code - can lead to failure
addition to each method is tedious
generic stopwatch class

Why build benchmarks?


ready made ones to compare the JRE
but they do not evaluate your program
you need to create a benchmark studying
your code
comparison of alternative solutions
performance profiling in your application
track performance and trends in the manufacturing
cycle

benchmark - code, environment, utility


allows for comparison of different solutions
repeatable test cases

Micro-benchmark
checks for a specific part of the system
often even a few lines of code, for example:
Draw a rectangle 100 000, read 10MB file from disk
Sorting an array of 100 000 elements, performance
of specific tasks

good
quick execution, focus on the problem
bad - does not represent the behavior of a
real application
JVM "warm up"
unrealistic interactions in the system

Macro-benchmark

"true" macro benchmark tests the system in


the form the user sees it
I would have to have the system ready...
how to simulate?

work on real data


run on the target platform
lean on use cases

you need to understand how users will work


with the system

interactions and the correct sequence of events

Benchmark analysis

results often vary considerably between


executions

background processes
network traffic
GC

perform many times and average the results


compare results of different solutions

min, max, average

What is profiling?

profiling is to identify components consuming


the most resources

RAM
CPU
network

identify system bottlenecks


there are special tools
allows to determine the most inefficient parts
of the system

Why profile?

you know which parts of the system have the


greatest impact on performance
you know what changes will bring the
greatest benefits
you avoid common mistakes

premature optimization
optimization of the bad parts of the system
too thorough optimization

Flat profiles problem

usually to specify bottlenecks for the first


time is quite simple
after eliminating more difficult to see others
common mistake is to rely solely on the time
spent in the method
it is also important:

how often the method is called


how much time is spent calling other methods

Flat profiles problem

Method

Time [ms]

Method

Total time [ms]

Time [ms]

m1

m1

30

m2

m2

24

m3

m3

10

m4

m4

Flat profiles problem

Having only the execution time you often


mistakenly refer to bottlenecks
what to do?

speed up frequently used methods


less invokes of slow methods

real life example - JTable in Swing

first optimization - leafs


Swing 1.1 - 2 times faster
lack of clear bottlenecks
JViewport problem when scrolling
problem was in JTable update
redesigned - 3 times faster

What do the tools give?

typically allow you to find:

what methods are most often called


most time consuming methods
which methods call most commonly used methods
methods consuming most memory

commercial tools have powerful GUI

different views
sophisticated statistics

Problems

Too less memory - 3 kinds of memory:

heap
for arrays and objects
error message: Java heap space
when: during class instantiation

non-heap
stack
for addresses, variables, class definitions and strings
error message: PermGen space
when: eg. loading class
native
managed by OS, used by native methods
error message: request <size> bytes for <reason>. Out of
swap space?
when: using native libraries

Problems

memory leaks

finalization

GC does not clean up objects that have incidental references


pointing to them
can lead to memeory leak
GC can work more often
potential memory leak
object overriding finalize will not be removed before calling this
method
it is uncertain when or whether the method will be called
in the end similar to memory leaks

deadlock

synchronization is faulty
2 or more threads are simultaneously waiting for monitor
release

Problems

looped threads

too many locks

thread has infinite loop


uses more and more CPU time
can crash whole application
synchronization blocks threads
frequent waiting for monitor can starve thread

application is too slow

identify bottlenecks
which methods cause most load?

Tools

jhat - Java Heap Analysis Tool

analyses heap dump


preview in browser
has its own query language OQL

jconsole - Java Monitoring and Management


Console

GUI for monitoring and managing Java applications


and JVM
works locally and remotely
shows memory, threads, classes, pending
finalizations

Tools

jstat - JVM Statistical Monitoring Tool

jmap - Memory Map

shows details about the stack


not supported

jstack - Stack Trace

shows performance statistics


not supported - can be removed in future versions

shows call stack for threads


useful when looking for deadlocks
not supported

java -Xhprof - Heap/CPU profiling tool

since early versions of Java


heap and CPU usage by methods

Tools

Java Visual Virtual Machine

bin\jvisualvm.exe
since Java 6 update 7
much better than jconsole
GUI
track many JVM at once
remote JVM tracking
profiling options

Profiling on Eclipse

basic tools are often "raw"


commercial - expensive
there are free plugins for Eclipse that provide
profilers with a convenient GUI

TPTP
profiles
Eclipse plugins
local Java applications
complex applications running on multiple
machines and different platforms

Conclusions

what is benchmarking?
what is a benchmark?
how differs macro from micro benchmark?
what is profiling?
what are the problems with flat profiles?

You might also like