{"id":75709,"date":"2018-04-12T19:00:47","date_gmt":"2018-04-12T16:00:47","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=75709"},"modified":"2018-04-18T15:49:26","modified_gmt":"2018-04-18T12:49:26","slug":"jvm-architecture-jvm-class-loader-and-runtime-data-areas","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html","title":{"rendered":"JVM Architecture: JVM Class loader and Runtime Data Areas"},"content":{"rendered":"<p>Hello readers! In the <a href=\"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-overview-of-jvm-and-jvm-architecture.html\" target=\"_blank\" rel=\"noopener\">previous<\/a> article of JVM series, developers learned about the <span style=\"text-decoration: underline;\">Java Virtual Machine (JVM)<\/span> and it\u2019s architecture. This tutorial will help developers to correctly answer the questions on below topics:<\/p>\n<ul>\n<li><code>ClassLoader<\/code> Subsystem<\/li>\n<li>Runtime Data Areas<\/li>\n<\/ul>\n<h2>1. Introduction<\/h2>\n<p>Before moving further let\u2019s take a look at the Java Virtual Machine and its basic characteristics.<\/p>\n<h3>1.1 What is Java Virtual Machine (JVM)?<\/h3>\n<p>Java Virtual Machine (JVM) is an abstract virtual machine that resides on your computer and provides a runtime environment for the Java bytecode to get executed. JVM is available for many hardware and software platforms but few Java developers know that the <strong>Java Runtime Environment<\/strong> (JRE) is the implementation of the <strong>Java Virtual Machine<\/strong> (JVM). JVM analyze the bytecode, interprets it, and execute the same bytecode to display the output.<\/p>\n<p>The basic function of JVM is to execute the compiled <code>.class<\/code> files (i.e. the bytecode) and generate an output. Do <em>note<\/em>, each operating system has a different JVM, but the generated bytecode output is the same across all operating systems. This means that the bytecode generated on Windows OS can also run on Linux OS and vice-versa, thus making Java as a platform independent language.<\/p>\n<p><figure id=\"attachment_75710\" aria-describedby=\"caption-attachment-75710\" style=\"width: 820px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_1.jpg\"><img decoding=\"async\" class=\"wp-image-75710\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_1.jpg\" alt=\"Fig. 1: An overview of Java Virtual Machine\" width=\"820\" height=\"200\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_1.jpg 829w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_1-300x73.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_1-768x187.jpg 768w\" sizes=\"(max-width: 820px) 100vw, 820px\" \/><\/a><figcaption id=\"caption-attachment-75710\" class=\"wp-caption-text\">Fig. 1: An overview of Java Virtual Machine<\/figcaption><\/figure><\/p>\n<h4>1.1.1 What JVM does?<\/h4>\n<p>Java Virtual machine performs the following operations:<\/p>\n<ul>\n<li>Loading of the required <code>.class<\/code> and jar files<\/li>\n<li>Assigning references and verification of the code<\/li>\n<li>Execution of the code<\/li>\n<li>Provides a runtime environment for the Java bytecode<\/li>\n<\/ul>\n<h4>1.1.2 JVM Internal Architecture<\/h4>\n<p>The following diagram shows the key internal components of Java Virtual Machine that conforms to the JVM specification.<\/p>\n<p><figure id=\"attachment_75711\" aria-describedby=\"caption-attachment-75711\" style=\"width: 806px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_2.jpg\"><img decoding=\"async\" class=\"wp-image-75711 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_2.jpg\" alt=\"Fig. 2: Java Virtual Machine architecture\" width=\"806\" height=\"383\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_2.jpg 806w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_2-300x143.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_2-768x365.jpg 768w\" sizes=\"(max-width: 806px) 100vw, 806px\" \/><\/a><figcaption id=\"caption-attachment-75711\" class=\"wp-caption-text\">Fig. 2: Java Virtual Machine architecture<\/figcaption><\/figure><\/p>\n<p>The classloader and runtime data areas components that are shown in Fig. 2 are each explained below.<\/p>\n<h3>1.2 ClassLoader Subsystem<\/h3>\n<p>The classloader subsystem is an essential core of the Java Virtual machine and is used for loading\/reading the <code>.class<\/code> files and saving the bytecode in the JVM method area. This subsystem handles the dynamic class loading functionality and performs three major functions i.e.:<\/p>\n<ul>\n<li><strong>Loading<\/strong>: This component handles the loading of the <code>.class<\/code> files from the hardware system into the JVM memory and stores the binary data (such as fully qualified class-name, immediate parent class-name, information about methods, variables, constructors etc.) in the method areas. For every loaded <code>.class<\/code> file, JVM immediately creates an object on the heap memory of type <code>java.lang.class<\/code>. Do <em>remember<\/em>, even though the developers call a class multiple time, only <em>one<\/em> class object will be created. There are three main types of classloaders:\n<ul>\n<li><strong>Bootstrap or Primordial ClassLoader<\/strong>: This classloader is responsible for loading the internal core java classes present in the <code>rt.jar<\/code> and other classes present in the <code>java.lang.*<\/code> package. It is by-default available with every JVM and is written in native C\/C++ languages. This classloader has no parents and if developers call the <code>String.class.getClassLoader()<\/code>, it will return <code>null<\/code> and any code based on that will throw the <code>NullPointerException<\/code> in Java<\/li>\n<li><strong>Extension ClassLoader<\/strong>: This classloader is the child class of Primordial classloader and is responsible for loading the classes from the extension classpath (i.e. <code>jdk\\jre\\lib\\ext<\/code>). It is written in Java language and the corresponding <code>.class<\/code> file is <code>sun.misc.Launcher$ExtClassLoder.class<\/code><\/li>\n<li><strong>Application or System ClassLoader<\/strong>: This classloader is the child class of Extension classloader and is responsible for loading the classes from the system classpath. It internally uses the &#8216;<code>CLASSPATH<\/code>&#8216; environment variable and is written in Java language. System classloader in JVM is implemented by <code>sun.misc.Launcher$AppClassLoader.class<\/code><\/li>\n<\/ul>\n<\/li>\n<li><strong>Linking<\/strong>: This component performs the linking of a class or an interface. As this component involves the allocation of new data structures, it may throw the <code>OutOfMemoryError<\/code> and performs the three important activities:\n<ul>\n<li><strong>Verification<\/strong>: It is a process of checking the binary representation of a class and validating whether the generated <code>.class<\/code> file is valid or not. This process is performed by the <em>Bytecode verifier<\/em> and if the generated <code>.class<\/code> file is <span style=\"text-decoration: underline;\">not<\/span> valid, a <code>VerifyError<\/code> is thrown<\/li>\n<li><strong>Preparation<\/strong>: It is a process of assigning the memory for the class level or interface level static variables and assigns the default values<\/li>\n<li><strong>Resolution<\/strong>: It is a process of changing the symbolic references with the original memory references from the method area<\/li>\n<\/ul>\n<\/li>\n<li><strong>Initialization<\/strong>: This component performs the final phase of the class loading where all the static variables are assigned the original values and the static blocks are executed from the parent to the child class. This process requires careful synchronization as JVM is multithreaded and some threads may try to initialize the same class or interface at the same time.<\/li>\n<\/ul>\n<p><figure id=\"attachment_75712\" aria-describedby=\"caption-attachment-75712\" style=\"width: 776px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_3.jpg\"><img decoding=\"async\" class=\"wp-image-75712 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_3.jpg\" alt=\"Fig. 3: An overview of ClassLoader Subsystem\" width=\"776\" height=\"394\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_3.jpg 776w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_3-300x152.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_3-768x390.jpg 768w\" sizes=\"(max-width: 776px) 100vw, 776px\" \/><\/a><figcaption id=\"caption-attachment-75712\" class=\"wp-caption-text\">Fig. 3: An overview of ClassLoader Subsystem<\/figcaption><\/figure><div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<h4>1.2.1 How ClassLoader works in Java?<\/h4>\n<p>Classloader in Java works in three principles i.e. <em>Delegation<\/em>, <em>Visibility<\/em>, and <em>Uniqueness<\/em>.<\/p>\n<p><figure id=\"attachment_75713\" aria-describedby=\"caption-attachment-75713\" style=\"width: 820px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_4.jpg\"><img decoding=\"async\" class=\"wp-image-75713\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_4.jpg\" alt=\"Fig. 4: Classloading mechanism in Java\" width=\"820\" height=\"381\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_4.jpg 849w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_4-300x139.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_4-768x356.jpg 768w\" sizes=\"(max-width: 820px) 100vw, 820px\" \/><\/a><figcaption id=\"caption-attachment-75713\" class=\"wp-caption-text\">Fig. 4: Classloading mechanism in Java<\/figcaption><\/figure><\/p>\n<ul>\n<li><strong>Delegation<\/strong>: According to this:\n<ul>\n<li>Whenever the virtual machine come across a class, the JVM will check whether the specified <code>.class<\/code> file is loaded or not<\/li>\n<li>If the <code>.class<\/code> file is already loaded in the method area, then JVM will consider that class. If <em>not<\/em>, JVM requests the classloader subsystem to load that specific class<\/li>\n<li>The classloader system passes the request to the Application classloader which in turn delegates this request to the Extension classloader. The Extension classloader will again delegate this request to the Primordial classloader<\/li>\n<li>The primordial classloader will search this class in the bootstrap classpath (i.e. <code>jdk\\jre\\lib\\rt.jar<\/code>). If found, the corresponding <code>.class<\/code> file is loaded<\/li>\n<li>If not, the primordial classloader delegates the request to the extension classloader. This will search the class in the <code>jdk\\jre\\lib\\ext<\/code> path. If found, the corresponding <code>.class<\/code> file is loaded<\/li>\n<li>If not, the extension classloader delegates the request to the application classloader and will search the class in the application\u2019s classpath. If found, it is loaded otherwise developers will get a <code>ClassNotFoundException<\/code> at runtime<\/li>\n<\/ul>\n<\/li>\n<li><strong>Visibility<\/strong>: According to this:\n<ul>\n<li>Application classloader has a visibility to see the classes loaded by the parent classloaders but vice-versa is not true i.e. If a class is loaded by the system classloader and later again trying to explicitly load the same class using the extension classloader will throw a <code>ClassNotFoundException<\/code> at runtime. For instance:\n<pre class=\"brush:java;wrap-lines:false;\">\/\/ Printing the classloader of this class.\r\nSystem.out.println(\"Test.getClass().getClassLoader()?= \" + Test.class.getClassLoader());\r\n\t\t\t\r\n\/\/ Trying to explicitly load the class again using the extension classloader.\r\nClass.forName(\"com.jcg.classloading.test.Test\", true,  Test.class.getClassLoader().getParent());\r\n<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Uniqueness<\/strong>: According to this:\n<ul>\n<li>Class loaded by the parent classloader should <em>not<\/em> be again loaded by the child classloader<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>1.2.2 How classes are loaded in Java?<\/h4>\n<p>Classloaders are hierarchical. The very first class in an application is specifically loaded with the help of static <code>main()<\/code> method. All the subsequent classes are either loaded by the Static or the Dynamic class loading techniques.<\/p>\n<ul>\n<li><strong>Static class loading<\/strong>: In this technique classes are statically loaded via the <code>new<\/code> operator<\/li>\n<li><strong>Dynamic class loading<\/strong>: In this technique classes are programmatically loaded by using the <code>Class.forName()<\/code> or the <code>loadClass()<\/code> method. The difference between the two is that the former one initializes the object after loading it while the latter one only loads the class but doesn\u2019t initialize the object<\/li>\n<\/ul>\n<h3>1.3 Runtime Data Areas<\/h3>\n<p>As shown in Fig. 5, this subsystem is divided into five major components i.e.<\/p>\n<p><figure id=\"attachment_75714\" aria-describedby=\"caption-attachment-75714\" style=\"width: 797px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_5.jpg\"><img decoding=\"async\" class=\"wp-image-75714 size-full\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_5.jpg\" alt=\"Fig. 5: JVM Runtime Data Areas\" width=\"797\" height=\"567\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_5.jpg 797w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_5-300x213.jpg 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/jvm_archi_clrda_guide_5-768x546.jpg 768w\" sizes=\"(max-width: 797px) 100vw, 797px\" \/><\/a><figcaption id=\"caption-attachment-75714\" class=\"wp-caption-text\">Fig. 5: JVM Runtime Data Areas<\/figcaption><\/figure><\/p>\n<ul>\n<li><strong>Method Area<\/strong>: This component holds the class level data of each <code>.class<\/code> file such as metadata, constant runtime pool, static variables, the code for the methods etc. There is only <span style=\"text-decoration: underline;\">one<\/span> method area per JVM and is shared among all the classes. The memory allocated to this area is by-default allocated by the JVM or can be increased as per the computation needs. The following exceptional condition is associated with this area i.e.\n<ul>\n<li>If the method area is not available to satisfy a memory allocation request, the JVM throws an <code>OutOfMemory<\/code> error<\/li>\n<\/ul>\n<\/li>\n<li><strong>Heap Area<\/strong>: This component is a part of JVM memory where all the objects and its corresponding instance variables and arrays are stored. This memory area is created on the JVM start-up and there is only <span style=\"text-decoration: underline;\">one<\/span> heap area shared across multiple threads as the data stored in this area is <em>not<\/em> thread-safe. If the objects stored in the heap memory have no reference, memory for that object is reclaimed by the <em>garbage collector<\/em> (i.e. the automatic storage management system); objects in this area are never explicitly deallocated. The following exceptional condition is associated with this area i.e.\n<ul>\n<li>If the computation requires more heap area than the available, JVM throws an <code>OutOfMemory<\/code> error<\/li>\n<\/ul>\n<\/li>\n<li><strong>Stack Area<\/strong>: This component is again a part of JVM memory where all the temporary variables are stored. This area has stack frames and allocates one frame for each thread. Once the thread execution is completed, this frame also gets destroyed. The stack area is thread-safe as it is not a shared resource and is divided into three sub-entities such as:\n<ul>\n<li>Local variable array: These local variables are used by the virtual machine to pass the parameters upon the method invocation<\/li>\n<li>Operand Stack: This place is the actual place to perform operations during a method execution. The virtual machine takes the operand from the stack, operates on them, and pushes the result back onto the operand stack. This stack also prepares the arguments to be passed to a method and even to receive the method results<\/li>\n<li>Frame data<\/li>\n<\/ul>\n<p>The following exceptional condition is associated with this area i.e.<\/p>\n<ul>\n<li>If the thread processing requires the virtual machine stack than its permissible limit, the JVM throws a <code>StackOverflow<\/code> error<\/li>\n<li>If the virtual machine stack is insufficiently expanded, the JVM throws a <code>OutOfMemory<\/code> error<\/li>\n<\/ul>\n<\/li>\n<li><strong>PC (Program Counter) Registers<\/strong>: This component holds the address of the JVM instruction which is currently executing. Each thread in Java has its own PC register to hold the address of the currently executing instruction<\/li>\n<li><strong>Native Method Stacks<\/strong>: This component is written in a different language and holds the native method information. Every thread in Java has a separate native method stack. The following exceptional condition is associated with this area i.e.\n<ul>\n<li>If the thread processing requires the native stack than its permissible limit, the JVM throws a <code>StackOverflow<\/code> error<\/li>\n<li>If the native method stack is insufficiently expanded, the JVM throws a <code>OutOfMemory<\/code> error<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>That\u2019s all for this post. Happy Learning!<\/p>\n<h2>2. Conclusion<\/h2>\n<p>In this tutorial, developers had an overview of the virtual machine ClassLoader and Runtime Data Areas components. You can download the sample code in the <a href=\"#download\">Downloads<\/a> section.<\/p>\n<h2><a name=\"download\"><\/a>3. Download the Source Code<\/h2>\n<p>This was a tutorial of virtual machine ClassLoader and Runtime Data Areas components.<\/p>\n<div class=\"download\"><strong>Download<\/strong><br \/>\nYou can download the source code of this tutorial here: <a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2018\/04\/CodeSnippet.zip\" target=\"_blank\" rel=\"noopener\"><strong>JVM_Example<\/strong><\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Hello readers! In the previous article of JVM series, developers learned about the Java Virtual Machine (JVM) and it\u2019s architecture. This tutorial will help developers to correctly answer the questions on below topics: ClassLoader Subsystem Runtime Data Areas 1. Introduction Before moving further let\u2019s take a look at the Java Virtual Machine and its basic &hellip;<\/p>\n","protected":false},"author":26931,"featured_media":148,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[161,1110,207,1729],"class_list":["post-75709","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-core-java","tag-classloading","tag-core-java","tag-jvm","tag-jvm-architecture"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Architecture: JVM Class loader and Runtime Data Areas - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Hello readers, in this tutorial developers will briefly learn about the virtual machine classloader and runtime data areas components.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Architecture: JVM Class loader and Runtime Data Areas - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Hello readers, in this tutorial developers will briefly learn about the virtual machine classloader and runtime data areas components.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-12T16:00:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-04-18T12:49:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Yatin Batra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yatin Batra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html\"},\"author\":{\"name\":\"Yatin Batra\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/cda31a4c1965373fed40c8907dc09b8d\"},\"headline\":\"JVM Architecture: JVM Class loader and Runtime Data Areas\",\"datePublished\":\"2018-04-12T16:00:47+00:00\",\"dateModified\":\"2018-04-18T12:49:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html\"},\"wordCount\":1713,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"keywords\":[\"Classloading\",\"Core Java\",\"JVM\",\"JVM Architecture\"],\"articleSection\":[\"Core Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html\",\"name\":\"JVM Architecture: JVM Class loader and Runtime Data Areas - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"datePublished\":\"2018-04-12T16:00:47+00:00\",\"dateModified\":\"2018-04-18T12:49:26+00:00\",\"description\":\"Hello readers, in this tutorial developers will briefly learn about the virtual machine classloader and runtime data areas components.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2018\\\/04\\\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Core Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/core-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"JVM Architecture: JVM Class loader and Runtime Data Areas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/cda31a4c1965373fed40c8907dc09b8d\",\"name\":\"Yatin Batra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Yatin.batra_.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Yatin.batra_.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/Yatin.batra_.jpg\",\"caption\":\"Yatin Batra\"},\"description\":\"An experience full-stack engineer well versed with Core Java, Spring\\\/Springboot, MVC, Security, AOP, Frontend (Angular &amp; React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).\",\"sameAs\":[\"https:\\\/\\\/www.javacodegeeks.com\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/yatin-batra\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JVM Architecture: JVM Class loader and Runtime Data Areas - Java Code Geeks","description":"Hello readers, in this tutorial developers will briefly learn about the virtual machine classloader and runtime data areas components.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html","og_locale":"en_US","og_type":"article","og_title":"JVM Architecture: JVM Class loader and Runtime Data Areas - Java Code Geeks","og_description":"Hello readers, in this tutorial developers will briefly learn about the virtual machine classloader and runtime data areas components.","og_url":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2018-04-12T16:00:47+00:00","article_modified_time":"2018-04-18T12:49:26+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","type":"image\/jpeg"}],"author":"Yatin Batra","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Yatin Batra","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html"},"author":{"name":"Yatin Batra","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/cda31a4c1965373fed40c8907dc09b8d"},"headline":"JVM Architecture: JVM Class loader and Runtime Data Areas","datePublished":"2018-04-12T16:00:47+00:00","dateModified":"2018-04-18T12:49:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html"},"wordCount":1713,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","keywords":["Classloading","Core Java","JVM","JVM Architecture"],"articleSection":["Core Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html","url":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html","name":"JVM Architecture: JVM Class loader and Runtime Data Areas - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","datePublished":"2018-04-12T16:00:47+00:00","dateModified":"2018-04-18T12:49:26+00:00","description":"Hello readers, in this tutorial developers will briefly learn about the virtual machine classloader and runtime data areas components.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2018\/04\/jvm-architecture-jvm-class-loader-and-runtime-data-areas.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Core Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/core-java"},{"@type":"ListItem","position":4,"name":"JVM Architecture: JVM Class loader and Runtime Data Areas"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/cda31a4c1965373fed40c8907dc09b8d","name":"Yatin Batra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Yatin.batra_.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Yatin.batra_.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/12\/Yatin.batra_.jpg","caption":"Yatin Batra"},"description":"An experience full-stack engineer well versed with Core Java, Spring\/Springboot, MVC, Security, AOP, Frontend (Angular &amp; React), and cloud technologies (such as AWS, GCP, Jenkins, Docker, K8).","sameAs":["https:\/\/www.javacodegeeks.com"],"url":"https:\/\/www.javacodegeeks.com\/author\/yatin-batra"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/75709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/26931"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=75709"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/75709\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=75709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=75709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=75709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}