I did not study CS nor IT. I just became a developer, now working with Java. Actually, since I now work with a big company writing high-scalable web applications, I think I need to be better with details.

I have no understanding of what happens underneath of Java. Java Performance, Server-Side Java might be the buzz words?!! I am very poor with those more of low-level details but I do not know where to look honestly.

I started looking for some keywords in Amazon, ended up reading books like "pragmatic programmer", "clean code", "code complete" which IMO they are not what I am looking for.

Could you please give me some learning resources (books, articles, blog posts, online trainings) for this matter? I also read this post as well: Approaching Java/JVM internals But I think I need a pre-step before jumping into the OpenJDK, right?!

  • 1
    "Pragmatic Programmer", "Clean Code", and "Code Complete" are all books you (and all devs, IMO) should read, but you're right in that they don't deal with details about Java or the JVM. – Mike Partridge Nov 29 '12 at 16:14
  • 1
    Have a look at the Java language and VM specs. There's also the source code of OpenJDK to wander around. – James Nov 29 '12 at 16:15

What you want to learn involves studying CS. You technically could learn about what the JVM is doing under the covers, but without some Compsci it will all be just a jumble.

The book I had in college for this topic was Programming Language Pragmatics, IIRC. It had a good overview of parsing, semantic analysis, and such but was still fairly gentle. The dragon book is also a classic on the subject, but will be less gentle in its approach.

It sounds to me, though, that you have reached the stage in your craft that you are looking into the realm of computer science, which is a big milestone. Go ahead, jump in, and enjoy the ride. :)

| improve this answer | |

Some of the answers suggest a bottom up approach (learn CS or some close equivalent).

You could spend a year plus learning CS and still not have an answer to “what happens underneath of Java”?

Whilst I am of a CS background, I had similar questions about .NET. These are the things I have done to bring my knowledge of .NET up to scratch.

  1. Implement my own basic class. Simple use case, implemented a LinkedList for IEnumerable<T>, Iterable<T>.
  2. Compare my implementation with Microsoft's/Oracle. You'll find a lot of things they take into consideration that you did not.
  3. Read about the topic. For e.g. if you're implementing your own Map / IDictionary<TKey, TValue>, what is the best bucket size? Why should the bucket size be a prime number? What's a good HashCode() fuction implementation? When do you resize the bucket?
  4. Performance, compare your implementation and the native implementation. It will likely lead you down the route of bounds checking, Closable / IDisposable, garbage collection & its generations.
  5. "Academic" papers, once you've exhausted the above, you can learn a lot more detail from academic papers. E.g. dated Paper on IO in Windows & .NET, or Patterns of Parallel Programming.
  6. There is bound to be some decent interview questions you've come across, try implementing an answer and look for the most efficient one. They'll generally test your knowledge (depth and breadth) as a good measure of progress.

Implementing a collection is just an example. Could easily be an algorithm (BinarySearch) or an IO library.

To address the absence of Computer Science, I've stuck "Computer Science Moudles" in google, loads of good hits

In no particular order, aim to cover java classes that touch on these topics,

  1. Abstract Data Structures
  2. Algorithms
  3. Software Engineering (design patterns), interesting to see how they're used in a good open source project for e.g.
  4. Human Computer Interaction
  5. Operating System (think the java side of processor / memory / IO, threads / GC etc...)
| improve this answer | |

If you have a lot of time, learn C then read the textbook for a Computer Architecture class.

If that level of commitment is too big, read a book on Java performance tuning. A good book will describe why a given parameter has a given effect, how objects are layed out in memory, how a generational garbage collector works, etc.

| improve this answer | |

You can also join the Adopt OpenJDK programme that's run by Java User Groups around the world to help people ease into the world of OpenJDK. See http://adoptopenjdk.java.net for details.

| improve this answer | |

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