Transcript Performance Tuning Java*
New I/O (JSR 51)
Robert “Rock” Howard
Chief Technology Officer Tower Technology
New Features
• Scalable Network I/O • High Performance File I/O • Pluggable Characters Sets – Character conversion • Regular Expressions • Features considered but not included: – Formatting and scanning – Improved filesystem interface
New Abstractions
• Channels – Connections for I/O • Buffers – Containers for primitive data • Charsets (decoders, encoders) • Pattern Matchers • Selectors – Selectable channels
Channels
• Defined by interface classes – Reading, writing – Inherit both for bi-directional I/O • Asynchronous Closing and Interruption Defined methods are a grab bag of utilities for buffer manipulation.
Buffers
• Based on primitive types – For int, long, float, double, char, etc.
• On Heap or else managed directly (not GC’d) – Memory mapped files are allowed • Indexes are managed wrt. # of primitives – Big or little endian hidden in implementation – Nice set of operators for manipulating buffers (reading, writing, managing indices, etc.)
Random Notes: New I/O
• Buffer operations return the buffer so that they can be “chained”: – MyIntbuffer.clear().write(17); • Selector allows monitoring of many channels via a single thread • Old I/O unchanged and retained in entirety
Random Notes: JDK 1.4
• The thread stack size can be set via a new Thread constructor • JVMPI and JVMDI (profiling and debugging interfaces) are being replaced – See JSRs for debugging, profiling, monitoring • New “Assert” capability can be enabled – Usage: assert expression ; – Optional Usage: assert expression : error_message ; – Generates AssertionError if triggered – Make sure there are no side effects in assert expression!
Conclusion
The new I/O mechanism is sufficiently powerful and scalable that I expect all major commercial Java frameworks to be rewritten for them within 6 to 12 months.
The APIs are simple enough that you can pick them up in about one day of concentrated effort.