KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
The Situation: I'm optimizing a pure-java implementation of the LZF compression algorithm, which involves a lot of byte[] access and basic int mathematics for hashing and comparison. Performance really matters, because the goal of the compression is to reduce I/O requirements. I am not posting code because it isn't cleaned up yet, and may be restructured heavily. The Questions: How can I write my code to allow it to JIT-compile to a form using faster SSE operations? How can I structure it so the compiler can easily eliminate array bounds checks? Are there any broad references about the relative speed of specific math operations (how many increments/decrements does it take to equal a normal add/subtract, how fast is shift-or vs. an array access)? How can I work on optimizing branching -- is it better to have numerous conditional statements with short bodies, or a few long ones, or short ones with nested conditions? With current 1.6 JVM, how many elements must be copied before System.arraycopy beats a copying loop? What I've already done: Before I get attacked for premature optimization: the basic algorithm is already excellent, but the Java implementation is less than 2/3 the speed of equivalent C. I've already replaced copying loops with System.arraycopy, worked on optimizing loops and eliminated un-needed operations. I make heavy use of bit twiddling and packing bytes into ints for performance, as well as shifting & masking. For legal reasons, I can't look at implementations in similar libraries, and existing libraries have too restrictive license terms to use. Requirements for a GOOD (accepted) answer: Unacceptable answers: "this is faster" without an explanation of how much AND why, OR hasn't been tested with a JIT compiler. Borderline answers: have not been tested with anyth
Tags (comma-separated)
Save Edits
Cancel