JVM Internals Series -Part 1
A lot of Java developers tend to be unaware about the basics of the internals of the JVM. This series aims to look at the internals of the JVM and explain in a simple way, what the Java Virtual Machine is and how the JVM functions
What is the Java Virtual Machine ?
When you talk of the JVM there are three aspects which we speak of
- Specification
- Concrete Implementation
- Runtime
The specification is a concept, Concrete implementations which exist on different platforms and are available from different vendors like IBM, Sun etc are either all software or a mix of hardware and software. A Runtime instance hosts a single running java application.
A runtime instance has one function and that is to run one java application. Whenever a java application runs, a runtime instance is born. Thus the number of runtime instances on a machine are equal to the number of applications which are running. The JVM starts with the invocation of a main() method which needs to be public, static, void and takes a String array as an argument. The main method thus serves as the initial thread for the running application. This can in turn spawn other threads. Inside the VM, threads come in two flavors, daemon and non-daemon. A daemon thread is a thread which is normally used by the VM itself, like the thread which runs the garbage collection. However an application can mark any thread it creates as a daemon. A java application continues to execute until there are any non-daemon threads alive(parallely the VM runtime instance continues to exist). When all non-daemon threads of an application exit, the virtual machine instance exits.
JVM Architecture
The VM needs memory to store a lot of information, like the bytecode, program arguments, objects which have been instantiated etc. Some of the information stored in the memory is shared across all application threads, while other information may be unique to individual threads.
Each instance of a JVM has one method area and a heap. These areas are shared by all threads running within the instance.
The information regarding the type is loaded from the class files when
the JVM loads a class file. This information is stored in the method
area. All the objects which are instantiated placed on the heap.
As each new thread is created, it is assigned its own pc
register(program counter) and java stack. If the thread is executing a
java method (not a native method), the counter in the pc register
points to the next instruction to execute. The java stack comprises of
frames. A frame consists of the state of one method invocation. When a
thread invokes a method, a new frame is pushed on the thread’s stack.
On completion of the method execution, the VM pops and discards the
frame. No other thread can access another threads pc register or java
stack.
This gives a brief overview of the java virtual machine’s architecture. In the next post,I will cover data types and the class loading subsystem.
From http://maneeshchaturvedi.wordpress.com
- Login or register to post comments
- 5734 reads
- Printer-friendly version
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)











Comments
yousuf_raza@hot... replied on Thu, 2009/07/09 - 12:56pm
Atleast have the decency to cite that you took this image from the Artima Book on JVM internals.
http://www.artima.com/insidejvm/ed2/jvm2.html
yousuf_raza@hot... replied on Thu, 2009/07/09 - 12:59pm
Maneesh Chaturvedi replied on Thu, 2009/07/09 - 11:45pm
in response to: yousuf_raza@hotmail.com
subhashish_dutta replied on Fri, 2009/07/10 - 2:19am
rsemburakkiannan replied on Fri, 2009/07/10 - 4:06pm
yousuf_raza@hot... replied on Fri, 2009/07/10 - 7:21pm
You have blatantly copied an image from the link I mentioned in my previous comment.
When borrowing any kind of content usually people cite the original source of the material.
Let me quote a sentence from the link: http://www.artima.com/insidejvm/ed2/jvm.html
"A runtime instance of the Java virtual machine has a clear mission in life: to run one Java application. When a Java application starts, a runtime instance is born. "
Now let me quote me what you've written:
"A runtime instance has one function and that is to run one java application. Whenever a java application runs, a runtime instance is born."
Similarly here is another quote from the same link (above)
"Inside the Java virtual machine, threads come in two flavors: daemon and non- daemon. A daemon thread is ordinarily a thread used by the virtual machine itself, such as a thread that performs garbage collection. The application, however, can mark any threads it creates as daemon threads ...... A Java application continues to execute (the virtual machine instance continues to live) as long as any non-daemon threads are still running. When all non-daemon threads of a Java application terminate, the virtual machine instance will exit."
and here is a quote from your article:
"Inside the VM, threads come in two flavors, daemon and non-daemon. A daemon thread is a thread which is normally used by the VM itself, like the thread which runs the garbage collection. However an application can mark any thread it creates as a daemon. A java application continues to execute until there are any non-daemon threads alive(parallely the VM runtime instance continues to exist). When all non-daemon threads of an application exit, the virtual machine instance exits."
To me this looks like all you've done is actually copied content from that site and edited. There are numerous examples like this in your article. If all you're doing is transferring information (which is surely a noble endeavor) then I have no objections to you writing a blog on this topic based on information found from varrious sources. However not only do you not cite any sources but you have copied from your original source and done minor edits on it and presented it as your own. That is what I am objecting to.Maneesh Chaturvedi replied on Tue, 2009/07/14 - 12:03am
in response to: yousuf_raza@hotmail.com
baludmr replied on Tue, 2009/07/14 - 12:11pm
hi, Maneesh why you remove JVM interneals series from your blog.It is so useful for people like me.
Plz continue your post's on JVM Internals.
thank U.
Maneesh Chaturvedi replied on Thu, 2009/07/16 - 11:30pm
in response to: baludmr
Susi Sorglos replied on Mon, 2009/07/20 - 3:19am