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?!

closed as off-topic by Ixrec, durron597, user22815, gnat, amon May 23 '15 at 10:30

This question appears to be off-topic. The users who voted to close gave these specific reasons:

  • "Questions seeking career or education advice are off topic here. They are only meaningful to the asker and do not generate lasting value for the broader community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Ixrec, durron597, amon
  • "Questions asking us to recommend a tool, library or favorite off-site resource are off-topic for Programmers as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it." – Community, gnat
If this question can be reworded to fit the rules in the help center, please edit the question.

  • 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. :)


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...)

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.


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.

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