0

Possible Duplicate:
Is there a canonical book for learning Java as an experienced developer?

Let me elaborate a little:

I used to be a C/C++ programmer where I used data structure concept like trees, queues stack etc and tried to optimize as much as possible, minimum no. of loops, variables and tried to make it efficient. It's been a couple of years that I started writing java codes, but it is simply not that efficient in terms of performance, memory intensive etc.

To the point:

I want to enter programming challenges using java so I need to improve my approach at things I program. So please suggest me some books that can help me learn to program better and have a chance in solving challenges in programming.

0

4 Answers 4

8

Java is somewhat more distant from the actual machine than C++ due to the JVM design. The general suggestion is to write very clean code so the JVM has the best possible conditions to compile it into machine code and know the various runtime implementations to choose the most appropriate at hand.

That said, the currently mostly recommended book to go from that is "Effective Java" by Joshua Bloch. See http://en.wikipedia.org/wiki/Joshua_Bloch for ISBN numbers and links. Highly recommended.

2
  • + 1 for Effective Java
    – artjom
    Mar 23, 2012 at 8:57
  • 1
    @Ravn Andersen: looks nice thanks. Hopefully this book will be easier to start with. Then I can move along with books mentioned by Mako & gnat.
    – AabinGunz
    Mar 23, 2012 at 10:06
7

I think Effective Java (already mentioned) makes a pretty good start.

For more comprehensive references list, my favorite is one at Angelika Langer Links - Java Performance:

Books

"Java Platform Performance: Strategies and Tactics" by Steve Wilson & Jeff Kesselman
The book and related resources are available online at http://java.sun.com/docs/books/performance/ .

"Inside the Virtual Machine" by Bill Venners
Sample chapters of the book are available online at http://artima.com/insidejvm/ed2/index.html .

"Performant Java programmieren" by Hendrik Schreiber
Additional information (errata, links, downloads) can be found at http://www.tagtraum.com/performance/ .

"Garbage Collection" by Richard Jones & Rafael Lins An excellent book on garbage collection algorithms in general; more information at http://www.cs.kent.ac.uk/people/staff/rej/gc.html .

Links & Resources

Sun Microsystems A collection of links and resources at Sun Microsystems can be found at http://java.sun.com/docs/performance/ .

Jack Shirazi Further resources for Java performance tuning including a list of tools can be found at http://www.javaperformancetuning.com/resources.shtml .

Articles, Papers & Specifications

JSR-163: Java Platform Profiling Architecture
The profiling architecture as designed for release in J2SE 5.0. The specification group's page can be found at http://jcp.org/en/jsr/detail?id=163 .

WHITE PAPER: J2SE 5.0 Performance White Paper
The paper gives an overview of the performance and scalability improvements made in the J2SE 5.0 release along with various benchmarks to demonstrate the impact of these improvements. It has numerous links to further resources. http://java.sun.com/performance/reference/whitepapers/5.0_performance.html

For deeper drilling into Java performance topics, articles by Brian Goetz in Java theory and practice and Threading Lightly series are hard to beat:

3
  • Great load of information. Thanks. I must start with Effective Java and then move along with your suggestions.
    – AabinGunz
    Mar 23, 2012 at 10:08
  • 1
    Just for the record. Java is memory hungry and if the operating system starts to swap the Java program performance goes down quickly regardless of any performance trick inside the JVM.
    – user1249
    Mar 23, 2012 at 10:30
  • @ThorbjørnRavnAndersen agree, this is worth keeping in mind
    – gnat
    Mar 23, 2012 at 12:17
2

Thorbjørn Ravn Andersen answered this really well, I'll put in a slightly different slant.

+1 - The JIT (Just In Time) compiler is generally very aggressive in its runtime optimisations and it learns as it goes. Keeping your methods to ~<35 byte codes for example will ensure that they get inlined and there are many other tricks as well. Also see Charlie Hunt's recent book on Java performance

1
  • @Martin: Nice information.. i'd like to know about such tips in java. Thanks
    – AabinGunz
    Mar 23, 2012 at 10:07
1

Considering the fact that you were a C/C++ programmer that appears to understand how to do things efficiently, you can really just do the same things you did when programming in C/C++ to optimize Java code.

A great all around resource for data structures and algorithms, however, is Introduction to Algorithms (CLRS). All of the code snippets are java-style syntax

2
  • Thanks, also it's been quite some time doing things efficiently in C/C++, so I might need to brush up lot, but that would be in Java
    – AabinGunz
    Mar 23, 2012 at 8:39
  • 3
    Performant Java also means playing along with the JVM, so it's not just like C++. In C++, you can optimize for the particularities of the bare metal; in Java, you need to optimize for the JVM. Particularly memory allocation behaves differently (bare-metal malloc() vs. JVM garbage-collected allocation), and you need to adapt to that.
    – tdammers
    Mar 23, 2012 at 9:47

Not the answer you're looking for? Browse other questions tagged or ask your own question.