{"id":8079,"date":"2013-02-05T10:00:04","date_gmt":"2013-02-05T08:00:04","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/?p=8079"},"modified":"2013-02-04T19:58:37","modified_gmt":"2013-02-04T17:58:37","slug":"java-8-from-permgen-to-metaspace","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html","title":{"rendered":"Java 8: From PermGen to Metaspace"},"content":{"rendered":"<p>As you may be aware, the <a href=\"http:\/\/jdk8.java.net\/\">JDK 8 Early Access<\/a> is now available for download. This allows Java developers to experiment with some of the new language and runtime features of Java 8. One of these features is the complete removal of the Permanent Generation (PermGen) space which has been <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2011\/10\/java-7-features-permgen-removal.html\">announced by Oracle<\/a> since the release of JDK 7. Interned strings, for example, have already been removed from the PermGen space since JDK 7. The JDK 8 release finalizes its decommissioning. This article will share the information that we found so far on the PermGen successor: <strong>Metaspace<\/strong>. We will also compare the runtime behavior of the HotSpot 1.7 vs. HotSpot 1.8 (b75) when executing a Java program \u201cleaking\u201d class metadata objects. The final specifications, tuning flags and documentation around Metaspace should be available once Java 8 is officially released.<\/p>\n<h2>Metaspace:<\/h2>\n<h2>A new memory space is born<\/h2>\n<p>The JDK 8 HotSpot JVM is now using native memory for the representation of class metadata and is called<strong> Metaspace;\u00a0 <\/strong>similar to the <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2012\/02\/java-heap-space-jrockit-vm.html\">Oracle JRockit<\/a> and <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2012\/02\/java-heap-space-ibm-vm.html\">IBM JVM&#8217;s<\/a>. The good news is that it means no more <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2011\/02\/outofmemoryerror-permgen-patterns-part1.html\">java.lang.OutOfMemoryError: PermGen<\/a> space problems and no need for you to tune and monitor this memory space anymore\u2026not so fast. While this change is invisible by default, we will show you next that you will still need to worry about the class metadata memory footprint. Please also keep in mind that this new feature does not magically eliminate class and classloader memory leaks. You will need to track down these problems using a different approach and by learning the new naming convention. I recommend that you read the PermGen removal summary and <a href=\"http:\/\/mail.openjdk.java.net\/pipermail\/hotspot-dev\/2012-September\/006679.html\">comments from Jon<\/a> on this subject.<\/p>\n<p>In summary:<\/p>\n<h2>PermGen space situation<\/h2>\n<ul>\n<li>This memory space is completely removed.<\/li>\n<li>The PermSize and MaxPermSize JVM arguments are ignored and a warning is issued if present at start-up.<\/li>\n<\/ul>\n<p><strong><\/strong><strong>Metaspace memory allocation model<br \/>\n<\/strong><\/p>\n<ul>\n<li>Most allocations for the class metadata are now allocated out of native memory.<\/li>\n<li>The klasses that were used to describe class metadata have been removed.<\/li>\n<\/ul>\n<h2>Metaspace capacity<\/h2>\n<ul>\n<li>By default class metadata allocation is limited by the amount of available native memory (capacity will of course depend if you use a 32-bit JVM vs. 64-bit along with OS virtual memory availability).<\/li>\n<li>A new flag is available (MaxMetaspaceSize), allowing you to <span style=\"text-decoration: underline;\">limit<\/span> the amount of native memory used for class metadata. If you don\u2019t specify this flag, the Metaspace will dynamically re-size depending of the application demand at runtime.<\/li>\n<\/ul>\n<h2>Metaspace garbage collection<\/h2>\n<ul>\n<li>Garbage collection of the dead classes and classloaders is triggered once the class metadata usage reaches the \u201cMaxMetaspaceSize\u201d.<\/li>\n<li>Proper monitoring &amp; tuning of the Metaspace will obviously be required in order to limit the frequency or delay of such garbage collections. Excessive Metaspace garbage collections may be a symptom of classes, classloaders memory leak or inadequate sizing for your application.<\/li>\n<\/ul>\n<h2>Java heap space impact<\/h2>\n<ul>\n<li>Some miscellaneous data has been moved to the Java heap space. This means you may observe an increase of the Java heap space following a future JDK 8 upgrade.<\/li>\n<\/ul>\n<h2>Metaspace monitoring<\/h2>\n<ul>\n<li>Metaspace usage is available from the HotSpot 1.8 verbose GC log output.<\/li>\n<li>Jstat &amp; JVisualVM have not been updated at this point based on our testing with b75 and the old PermGen space references are still present.<\/li>\n<\/ul>\n<p>Enough theory now, let\u2019s see this new memory space in action via our leaking Java program\u2026<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<h2>PermGen vs. Metaspace runtime comparison<\/h2>\n<p>In order to better understand the runtime behavior of the new Metaspace memory space, we created a class metadata leaking Java program. You can download the source <a href=\"https:\/\/docs.google.com\/file\/d\/0B6UjfNcYT7yGbjVLNlpJRWlKUWc\/edit?usp=sharing\">here<\/a>.<\/p>\n<p>The following scenarios will be tested:<\/p>\n<ul>\n<li>Run the Java program using JDK 1.7 in order to monitor &amp; deplete the PermGen memory space set at 128 MB.<\/li>\n<li>Run the Java program using JDK 1.8 (b75) in order to monitor the dynamic increase and garbage collection of the new Metaspace memory space.<\/li>\n<li>Run the Java program using JDK 1.8 (b75) in order to simulate the depletion of the Metaspace by setting the MaxMetaspaceSize value at 128 MB.<\/li>\n<\/ul>\n<h2>JDK 1.7 @64-bit \u2013 PermGen depletion<\/h2>\n<ul>\n<li>Java program with 50K configured iterations<\/li>\n<li>Java heap space of 1024 MB<\/li>\n<li>Java PermGen space of 128 MB (-XX:MaxPermSize=128m)<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/JDK7_JVisualVM_PermGen_depletion.png\"><img decoding=\"async\" class=\"aligncenter\" style=\"border: 0px none;\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/JDK7_JVisualVM_PermGen_depletion.png\" alt=\"\" width=\"539\" height=\"166\" border=\"0\" \/><\/a><\/p>\n<p>As you can see form JVisualVM, the PermGen depletion was reached after loading about 30K+ classes. We can also see this depletion from the program and GC output.<\/p>\n<pre class=\"brush:bash\">Class metadata leak simulator\r\n\r\nAuthor: Pierre-Hugues Charbonneau\r\n\r\nhttp:\/\/javaeesupportpatterns.blogspot.com\r\n\r\nERROR: java.lang.OutOfMemoryError: PermGen space<\/pre>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/JDK7_GC_PermGen_depletion.png\"><img decoding=\"async\" class=\"aligncenter\" style=\"border: 0px none;\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/JDK7_GC_PermGen_depletion.png\" alt=\"\" width=\"368\" height=\"199\" border=\"0\" \/><\/a><\/p>\n<p>Now let\u2019s execute the program using the HotSpot JDK 1.8 JRE.<\/p>\n<h2>JDK 1.8 @64-bit \u2013 Metaspace dynamic re-size<\/h2>\n<ul>\n<li>Java program with 50K configured iterations<\/li>\n<li>Java heap space of 1024 MB<\/li>\n<li>Java Metaspace space: unbounded (default)<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_classes.png\"><img decoding=\"async\" class=\"aligncenter\" style=\"border: 0px none;\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_classes.png\" alt=\"\" width=\"536\" height=\"162\" border=\"0\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_dynamic_resize.png\"><img decoding=\"async\" class=\"aligncenter\" style=\"border: 0px none;\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_dynamic_resize.png\" alt=\"\" width=\"575\" height=\"420\" border=\"0\" \/><\/a><\/p>\n<p>As you can see from the verbose GC output, the JVM Metaspace did expand dynamically from 20 MB up to 328 MB of reserved native memory in order to honor the increased class metadata memory footprint from our Java program. We could also observe garbage collection events in the attempt by the JVM to destroy any dead class or classloader object. Since our Java program is leaking, the JVM had no choice but to dynamically expand the Metaspace memory space. The program was able to run its 50K of iterations with no OOM event and loaded 50K+ Classes. Let&#8217;s move to our last testing scenario.<\/p>\n<h2>JDK 1.8 @64-bit \u2013 Metaspace depletion<\/h2>\n<ul>\n<li>Java program with 50K configured iterations<\/li>\n<li>Java heap space of 1024 MB<\/li>\n<li>Java Metaspace space: 128 MB (-XX:MaxMetaspaceSize=128m)<\/li>\n<\/ul>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_classes_2.png\"><img decoding=\"async\" class=\"aligncenter\" style=\"border: 0px none;\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_classes_2.png\" alt=\"\" width=\"532\" height=\"157\" border=\"0\" \/><\/a><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/JDK8_GC_Metaspace_depletion.png\"><img decoding=\"async\" class=\"aligncenter\" style=\"border: 0px none;\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/JDK8_GC_Metaspace_depletion.png\" alt=\"\" width=\"506\" height=\"225\" border=\"0\" \/><\/a><\/p>\n<p>As you can see form JVisualVM, the Metaspace depletion was reached after loading about 30K+ classes; very similar to the run with the JDK 1.7. We can also see this from the program and GC output. Another interesting observation is that the native memory footprint reserved was twice as much as the maximum size specified. This may indicate some opportunities to fine tune the Metaspace re-size policy, if possible, in order to avoid native memory waste.<\/p>\n<p>Now find below the Exception we got from the Java program output.<\/p>\n<pre class=\"brush:bash\">Class metadata leak simulator\r\n\r\nAuthor: Pierre-Hugues Charbonneau\r\n\r\nhttp:\/\/javaeesupportpatterns.blogspot.com\r\n\r\nERROR: java.lang.OutOfMemoryError: Metadata space<\/pre>\n<p>Done!<\/p>\n<p>As expected, capping the Metaspace at 128 MB like we did for the baseline run with JDK 1.7 did not allow us to complete the 50K iterations of our program. A new OOM error was thrown by the JVM. The above OOM event was thrown by the JVM from the Metaspace following a memory allocation failure.<\/p>\n<h2>#metaspace.cpp<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_CPP_OOM.png\"><img decoding=\"async\" class=\"aligncenter\" style=\"border: 0px none;\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2013\/02\/Java8_Metaspace_CPP_OOM.png\" alt=\"\" width=\"590\" height=\"374\" border=\"0\" \/><\/a><\/p>\n<h2>Final words<\/h2>\n<p>I hope you appreciated this early analysis and experiment with the new Java 8 Metaspace. The current observations definitely indicate that proper monitoring &amp; tuning will be required in order to stay away from problems such as excessive Metaspace GC or OOM conditions triggered from our last testing scenario. Future articles may include performance comparisons in order to identify potential performance improvements associated with this new feature.<br \/>\n&nbsp;<\/p>\n<p><strong><em>Reference: <\/em><\/strong><a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/2013\/02\/java-8-from-permgen-to-metaspace.html\">Java 8: From PermGen to Metaspace<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Pierre-Hugues Charbonneau at the <a href=\"http:\/\/javaeesupportpatterns.blogspot.com\/\">Java EE Support Patterns &amp; Java Tutorial<\/a> blog.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As you may be aware, the JDK 8 Early Access is now available for download. This allows Java developers to experiment with some of the new language and runtime features of Java 8. One of these features is the complete removal of the Permanent Generation (PermGen) space which has been announced by Oracle since the &hellip;<\/p>\n","protected":false},"author":189,"featured_media":148,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[196,207],"class_list":["post-8079","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-core-java","tag-java-8","tag-jvm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Java 8: From PermGen to Metaspace<\/title>\n<meta name=\"description\" content=\"As you may be aware, the JDK 8 Early Access is now available for download. This allows Java developers to experiment with some of the new language and\" \/>\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\/2013\/02\/java-8-from-permgen-to-metaspace.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java 8: From PermGen to Metaspace\" \/>\n<meta property=\"og:description\" content=\"As you may be aware, the JDK 8 Early Access is now available for download. This allows Java developers to experiment with some of the new language and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.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=\"2013-02-05T08:00:04+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=\"Pierre Hugues Charbonneau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/PHCharbonneau\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pierre Hugues Charbonneau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html\"},\"author\":{\"name\":\"Pierre Hugues Charbonneau\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/866904c8ea3551dbbb464ce6bbb17035\"},\"headline\":\"Java 8: From PermGen to Metaspace\",\"datePublished\":\"2013-02-05T08:00:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html\"},\"wordCount\":1108,\"commentCount\":9,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"keywords\":[\"Java 8\",\"JVM\"],\"articleSection\":[\"Core Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html\",\"name\":\"Java 8: From PermGen to Metaspace\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/java-logo.jpg\",\"datePublished\":\"2013-02-05T08:00:04+00:00\",\"description\":\"As you may be aware, the JDK 8 Early Access is now available for download. This allows Java developers to experiment with some of the new language and\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.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\\\/2013\\\/02\\\/java-8-from-permgen-to-metaspace.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\":\"Java 8: From PermGen to Metaspace\"}]},{\"@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\\\/866904c8ea3551dbbb464ce6bbb17035\",\"name\":\"Pierre Hugues Charbonneau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g\",\"caption\":\"Pierre Hugues Charbonneau\"},\"description\":\"Pierre-Hugues Charbonneau (nickname P-H) is working for CGI Inc. Canada for the last 10 years as a senior IT consultant. His primary area of expertise is Java EE, middleware &amp; JVM technologies. He is a specialist in production system troubleshooting, root cause analysis, middleware, JVM tuning, scalability and capacity improvement; including internal processes improvement for IT support teams. P-H is the principal author at Java EE Support Patterns.\",\"sameAs\":[\"http:\\\/\\\/javaeesupportpatterns.blogspot.com\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/PHCharbonneau\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Pierre-Hugues-Charbonneau\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Java 8: From PermGen to Metaspace","description":"As you may be aware, the JDK 8 Early Access is now available for download. This allows Java developers to experiment with some of the new language and","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\/2013\/02\/java-8-from-permgen-to-metaspace.html","og_locale":"en_US","og_type":"article","og_title":"Java 8: From PermGen to Metaspace","og_description":"As you may be aware, the JDK 8 Early Access is now available for download. This allows Java developers to experiment with some of the new language and","og_url":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2013-02-05T08:00:04+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":"Pierre Hugues Charbonneau","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/PHCharbonneau","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Pierre Hugues Charbonneau","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html"},"author":{"name":"Pierre Hugues Charbonneau","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/866904c8ea3551dbbb464ce6bbb17035"},"headline":"Java 8: From PermGen to Metaspace","datePublished":"2013-02-05T08:00:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html"},"wordCount":1108,"commentCount":9,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","keywords":["Java 8","JVM"],"articleSection":["Core Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html","url":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html","name":"Java 8: From PermGen to Metaspace","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/java-logo.jpg","datePublished":"2013-02-05T08:00:04+00:00","description":"As you may be aware, the JDK 8 Early Access is now available for download. This allows Java developers to experiment with some of the new language and","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2013\/02\/java-8-from-permgen-to-metaspace.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\/2013\/02\/java-8-from-permgen-to-metaspace.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":"Java 8: From PermGen to Metaspace"}]},{"@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\/866904c8ea3551dbbb464ce6bbb17035","name":"Pierre Hugues Charbonneau","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/41ce66b642ba516e85800d6b0a9e81b901463fea1fbc6bd6646d58cf2a215e10?s=96&d=mm&r=g","caption":"Pierre Hugues Charbonneau"},"description":"Pierre-Hugues Charbonneau (nickname P-H) is working for CGI Inc. Canada for the last 10 years as a senior IT consultant. His primary area of expertise is Java EE, middleware &amp; JVM technologies. He is a specialist in production system troubleshooting, root cause analysis, middleware, JVM tuning, scalability and capacity improvement; including internal processes improvement for IT support teams. P-H is the principal author at Java EE Support Patterns.","sameAs":["http:\/\/javaeesupportpatterns.blogspot.com\/","https:\/\/x.com\/https:\/\/twitter.com\/PHCharbonneau"],"url":"https:\/\/www.javacodegeeks.com\/author\/Pierre-Hugues-Charbonneau"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/8079","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\/189"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=8079"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/8079\/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=8079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=8079"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=8079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}