Generated from commit: 00d3d0de4750c5ee83ff3720fdc43365eb03389d

Signed-off-by: genie-openj9 <openj9-bot@eclipse.org>
diff --git a/404.html b/404.html
index 67bc57d..b0fab37 100644
--- a/404.html
+++ b/404.html
@@ -107,24 +107,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -211,20 +194,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -266,20 +247,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3416,6 +3395,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/adoptopenjdk/index.html b/adoptopenjdk/index.html
index 7474ec9..70d85b7 100644
--- a/adoptopenjdk/index.html
+++ b/adoptopenjdk/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -335,14 +314,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#supported-platforms" title="Supported platforms" class="md-nav__link">
+  <a href="#supported-platforms" class="md-nav__link">
     Supported platforms
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#installation-pre-requisites" title="Installation pre-requisites" class="md-nav__link">
+  <a href="#installation-pre-requisites" class="md-nav__link">
     Installation pre-requisites
   </a>
   
@@ -3332,14 +3311,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#supported-platforms" title="Supported platforms" class="md-nav__link">
+  <a href="#supported-platforms" class="md-nav__link">
     Supported platforms
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#installation-pre-requisites" title="Installation pre-requisites" class="md-nav__link">
+  <a href="#installation-pre-requisites" class="md-nav__link">
     Installation pre-requisites
   </a>
   
@@ -3572,6 +3551,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/aot/index.html b/aot/index.html
index 56c86d8..5c2203a 100644
--- a/aot/index.html
+++ b/aot/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -563,7 +542,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3325,7 +3304,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3571,6 +3550,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/assets/images/icons/bitbucket.1b09e088.svg b/assets/images/icons/bitbucket.1b09e088.svg
index a25435a..cf58c14 100644
--- a/assets/images/icons/bitbucket.1b09e088.svg
+++ b/assets/images/icons/bitbucket.1b09e088.svg
@@ -1,20 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="352" height="448"
-    viewBox="0 0 352 448" id="__bitbucket">
-  <path fill="currentColor" d="M203.75 214.75q2 15.75-12.625 25.25t-27.875
-        1.5q-9.75-4.25-13.375-14.5t-0.125-20.5 13-14.5q9-4.5 18.125-3t16 8.875
-        6.875 16.875zM231.5 209.5q-3.5-26.75-28.25-41t-49.25-3.25q-15.75
-        7-25.125 22.125t-8.625 32.375q1 22.75 19.375 38.75t41.375 14q22.75-2
-        38-21t12.5-42zM291.25
-        74q-5-6.75-14-11.125t-14.5-5.5-17.75-3.125q-72.75-11.75-141.5 0.5-10.75
-        1.75-16.5 3t-13.75 5.5-12.5 10.75q7.5 7 19 11.375t18.375 5.5 21.875
-        2.875q57 7.25 112 0.25 15.75-2 22.375-3t18.125-5.375 18.75-11.625zM305.5
-        332.75q-2 6.5-3.875 19.125t-3.5 21-7.125 17.5-14.5 14.125q-21.5
-        12-47.375 17.875t-50.5 5.5-50.375-4.625q-11.5-2-20.375-4.5t-19.125-6.75-18.25-10.875-13-15.375q-6.25-24-14.25-73l1.5-4
-        4.5-2.25q55.75 37 126.625 37t126.875-37q5.25 1.5 6 5.75t-1.25 11.25-2
-        9.25zM350.75 92.5q-6.5 41.75-27.75 163.75-1.25 7.5-6.75 14t-10.875
-        10-13.625 7.75q-63 31.5-152.5
-        22-62-6.75-98.5-34.75-3.75-3-6.375-6.625t-4.25-8.75-2.25-8.5-1.5-9.875-1.375-8.75q-2.25-12.5-6.625-37.5t-7-40.375-5.875-36.875-5.5-39.5q0.75-6.5
-        4.375-12.125t7.875-9.375 11.25-7.5 11.5-5.625 12-4.625q31.25-11.5
-        78.25-16 94.75-9.25 169 12.5 38.75 11.5 53.75 30.5 4 5 4.125
-        12.75t-1.375 13.5z" />
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="352" height="448" viewBox="0 0 352 448" id="__bitbucket"><path fill="currentColor" d="M203.75 214.75q2 15.75-12.625 25.25t-27.875 1.5q-9.75-4.25-13.375-14.5t-.125-20.5 13-14.5q9-4.5 18.125-3t16 8.875 6.875 16.875zm27.75-5.25q-3.5-26.75-28.25-41T154 165.25q-15.75 7-25.125 22.125t-8.625 32.375q1 22.75 19.375 38.75t41.375 14q22.75-2 38-21t12.5-42zM291.25 74q-5-6.75-14-11.125t-14.5-5.5T245 54.25q-72.75-11.75-141.5.5-10.75 1.75-16.5 3t-13.75 5.5T60.75 74q7.5 7 19 11.375t18.375 5.5T120 93.75Q177 101 232 94q15.75-2 22.375-3t18.125-5.375T291.25 74zm14.25 258.75q-2 6.5-3.875 19.125t-3.5 21-7.125 17.5-14.5 14.125q-21.5 12-47.375 17.875t-50.5 5.5-50.375-4.625q-11.5-2-20.375-4.5T88.75 412 70.5 401.125t-13-15.375q-6.25-24-14.25-73l1.5-4 4.5-2.25q55.75 37 126.625 37t126.875-37q5.25 1.5 6 5.75t-1.25 11.25-2 9.25zM350.75 92.5q-6.5 41.75-27.75 163.75-1.25 7.5-6.75 14t-10.875 10T291.75 288q-63 31.5-152.5 22-62-6.75-98.5-34.75-3.75-3-6.375-6.625t-4.25-8.75-2.25-8.5-1.5-9.875T25 232.75q-2.25-12.5-6.625-37.5t-7-40.375T5.5 118 0 78.5Q.75 72 4.375 66.375T12.25 57t11.25-7.5T35 43.875t12-4.625q31.25-11.5 78.25-16 94.75-9.25 169 12.5Q333 47.25 348 66.25q4 5 4.125 12.75t-1.375 13.5z"/></svg>
\ No newline at end of file
diff --git a/assets/images/icons/github.f0b8504a.svg b/assets/images/icons/github.f0b8504a.svg
index c009420..3d13b19 100644
--- a/assets/images/icons/github.f0b8504a.svg
+++ b/assets/images/icons/github.f0b8504a.svg
@@ -1,18 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
\ No newline at end of file
diff --git a/assets/images/icons/gitlab.6dd19c00.svg b/assets/images/icons/gitlab.6dd19c00.svg
index 9e3d6f0..1d9fffa 100644
--- a/assets/images/icons/gitlab.6dd19c00.svg
+++ b/assets/images/icons/gitlab.6dd19c00.svg
@@ -1,38 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500"
-    viewBox="0 0 500 500" id="__gitlab">
-  <g transform="translate(156.197863, 1.160267)">
-  	<path fill="currentColor"
-        d="M93.667,473.347L93.667,473.347l90.684-279.097H2.983L93.667,
-          473.347L93.667,473.347z" />
-  </g>
-  <g transform="translate(28.531199, 1.160800)" opacity="0.7">
-  	<path fill="currentColor"
-        d="M221.333,473.345L130.649,194.25H3.557L221.333,473.345L221.333,
-          473.345z" />
-  </g>
-  <g transform="translate(0.088533, 0.255867)" opacity="0.5">
-  	<path fill="currentColor"
-        d="M32,195.155L32,195.155L4.441,279.97c-2.513,7.735,0.24,16.21,6.821,
-          20.99l238.514,173.29 L32,195.155L32,195.155z" />
-  </g>
-  <g transform="translate(29.421866, 280.255593)">
-  	<path fill="currentColor"
-        d="M2.667-84.844h127.092L75.14-252.942c-2.811-8.649-15.047-8.649-17.856,
-          0L2.667-84.844 L2.667-84.844z" />
-  </g>
-  <g transform="translate(247.197860, 1.160800)" opacity="0.7">
-  	<path fill="currentColor"
-        d="M2.667,473.345L93.351,194.25h127.092L2.667,473.345L2.667,
-          473.345z" />
-  </g>
-  <g transform="translate(246.307061, 0.255867)" opacity="0.5">
-  	<path fill="currentColor"
-        d="M221.334,195.155L221.334,195.155l27.559,84.815c2.514,7.735-0.24,
-          16.21-6.821,20.99 L3.557,474.25L221.334,195.155L221.334,195.155z" />
-  </g>
-  <g transform="translate(336.973725, 280.255593)">
-  	<path fill="currentColor"
-        d="M130.667-84.844H3.575l54.618-168.098c2.811-8.649,15.047-8.649,
-          17.856,0L130.667-84.844 L130.667-84.844z" />
-  </g>
-</svg>
+<svg xmlns="http://www.w3.org/2000/svg" width="500" height="500" viewBox="0 0 500 500" id="__gitlab"><path fill="currentColor" d="M93.667 473.347l90.684-279.097H2.983l90.684 279.097z" transform="translate(156.198 1.16)"/><path fill="currentColor" d="M221.333 473.345L130.649 194.25H3.557l217.776 279.095z" transform="translate(28.531 1.16)" opacity=".7"/><path fill="currentColor" d="M32 195.155L4.441 279.97a18.773 18.773 0 0 0 6.821 20.99l238.514 173.29L32 195.155z" transform="translate(.089 .256)" opacity=".5"/><path fill="currentColor" d="M2.667-84.844h127.092L75.14-252.942c-2.811-8.649-15.047-8.649-17.856 0L2.667-84.844z" transform="translate(29.422 280.256)"/><path fill="currentColor" d="M2.667 473.345L93.351 194.25h127.092L2.667 473.345z" transform="translate(247.198 1.16)" opacity=".7"/><path fill="currentColor" d="M221.334 195.155l27.559 84.815a18.772 18.772 0 0 1-6.821 20.99L3.557 474.25l217.777-279.095z" transform="translate(246.307 .256)" opacity=".5"/><path fill="currentColor" d="M130.667-84.844H3.575l54.618-168.098c2.811-8.649 15.047-8.649 17.856 0l54.618 168.098z" transform="translate(336.974 280.256)"/></svg>
\ No newline at end of file
diff --git a/assets/javascripts/application.583bbe55.js b/assets/javascripts/application.583bbe55.js
deleted file mode 100644
index 7cc2081..0000000
--- a/assets/javascripts/application.583bbe55.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t,n){"use strict";t.__esModule=!0,t.default={createElement:function(e,t){var n=document.createElement(e);t&&Array.prototype.forEach.call(Object.keys(t),function(e){n.setAttribute(e,t[e])});for(var r=arguments.length,i=Array(r>2?r-2:0),o=2;o<r;o++)i[o-2]=arguments[o];return function e(t){Array.prototype.forEach.call(t,function(t){"string"==typeof t||"number"==typeof t?n.textContent+=t:Array.isArray(t)?e(t):void 0!==t.__html?n.innerHTML+=t.__html:t instanceof Node&&n.appendChild(t)})}(i),n}},e.exports=t.default},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof fetch?fetch.bind():function(e,t){return t=t||{},new Promise(function(n,r){function i(){var e,t=[],n=[],r={};return o.getAllResponseHeaders().replace(/^(.*?):\s*([\s\S]*?)$/gm,function(i,o,a){t.push(o=o.toLowerCase()),n.push([o,a]),e=r[o],r[o]=e?e+","+a:a}),{ok:1==(o.status/200|0),status:o.status,statusText:o.statusText,url:o.responseURL,clone:i,text:function(){return Promise.resolve(o.responseText)},json:function(){return Promise.resolve(o.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([o.response]))},headers:{keys:function(){return t},entries:function(){return n},get:function(e){return r[e.toLowerCase()]},has:function(e){return e.toLowerCase()in r}}}}var o=new XMLHttpRequest;o.open(t.method||"get",e);for(var a in t.headers)o.setRequestHeader(a,t.headers[a]);o.withCredentials="include"==t.credentials,o.onload=function(){n(i())},o.onerror=r,o.send(t.body)})};t.default=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t,n,i){var o=this;r(this,e),this.els_=Array.prototype.slice.call("string"==typeof t?document.querySelectorAll(t):[].concat(t)),this.handler_="function"==typeof i?{update:i}:i,this.events_=[].concat(n),this.update_=function(e){return o.handler_.update(e)}}return e.prototype.listen=function(){var e=this;this.els_.forEach(function(t){e.events_.forEach(function(n){t.addEventListener(n,e.update_,!1)})}),"function"==typeof this.handler_.setup&&this.handler_.setup()},e.prototype.unlisten=function(){var e=this;this.els_.forEach(function(t){e.events_.forEach(function(n){t.removeEventListener(n,e.update_)})}),"function"==typeof this.handler_.reset&&this.handler_.reset()},e}();t.default=i},,,function(e,t,n){"use strict";(function(e){function r(e){return e&&e.__esModule?e:{default:e}}function i(t){new f.default.Event.Listener(document,"DOMContentLoaded",function(){if(!(document.body instanceof HTMLElement))throw new ReferenceError;l.default.attach(document.body),Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)});var t=document.querySelectorAll("table:not([class])");if(Array.prototype.forEach.call(t,function(t){var n=e.createElement("div",{class:"md-typeset__scrollwrap"},e.createElement("div",{class:"md-typeset__table"}));t.nextSibling?t.parentNode.insertBefore(n,t.nextSibling):t.parentNode.appendChild(n),n.children[0].appendChild(t)}),c.default.isSupported()){var n=document.querySelectorAll(".codehilite > pre, pre > code");Array.prototype.forEach.call(n,function(t,n){var r="__code_"+n,i=e.createElement("button",{class:"md-clipboard",title:h("clipboard.copy"),"data-clipboard-target":"#"+r+" pre, #"+r+" code"},e.createElement("span",{class:"md-clipboard__message"})),o=t.parentNode;o.id=r,o.insertBefore(i,t)});new c.default(".md-clipboard").on("success",function(e){var t=e.trigger.querySelector(".md-clipboard__message");if(!(t instanceof HTMLElement))throw new ReferenceError;e.clearSelection(),t.dataset.mdTimer&&clearTimeout(parseInt(t.dataset.mdTimer,10)),t.classList.add("md-clipboard__message--active"),t.innerHTML=h("clipboard.copied"),t.dataset.mdTimer=setTimeout(function(){t.classList.remove("md-clipboard__message--active"),t.dataset.mdTimer=""},2e3).toString()})}if(!Modernizr.details){var r=document.querySelectorAll("details > summary");Array.prototype.forEach.call(r,function(e){e.addEventListener("click",function(e){var t=e.target.parentNode;t.hasAttribute("open")?t.removeAttribute("open"):t.setAttribute("open","")})})}var i=function(){if(document.location.hash){var e=document.getElementById(document.location.hash.substring(1));if(!e)return;for(var t=e.parentNode;t&&!(t instanceof HTMLDetailsElement);)t=t.parentNode;if(t&&!t.open){t.open=!0;var n=location.hash;location.hash=" ",location.hash=n}}};if(window.addEventListener("hashchange",i),i(),Modernizr.ios){var o=document.querySelectorAll("[data-md-scrollfix]");Array.prototype.forEach.call(o,function(e){e.addEventListener("touchstart",function(){var t=e.scrollTop;0===t?e.scrollTop=1:t+e.offsetHeight===e.scrollHeight&&(e.scrollTop=t-1)})})}}).listen(),new f.default.Event.Listener(window,["scroll","resize","orientationchange"],new f.default.Header.Shadow("[data-md-component=container]","[data-md-component=header]")).listen(),new f.default.Event.Listener(window,["scroll","resize","orientationchange"],new f.default.Header.Title("[data-md-component=title]",".md-typeset h1")).listen(),document.querySelector("[data-md-component=hero]")&&new f.default.Event.Listener(window,["scroll","resize","orientationchange"],new f.default.Tabs.Toggle("[data-md-component=hero]")).listen(),document.querySelector("[data-md-component=tabs]")&&new f.default.Event.Listener(window,["scroll","resize","orientationchange"],new f.default.Tabs.Toggle("[data-md-component=tabs]")).listen(),new f.default.Event.MatchMedia("(min-width: 1220px)",new f.default.Event.Listener(window,["scroll","resize","orientationchange"],new f.default.Sidebar.Position("[data-md-component=navigation]","[data-md-component=header]"))),document.querySelector("[data-md-component=toc]")&&new f.default.Event.MatchMedia("(min-width: 960px)",new f.default.Event.Listener(window,["scroll","resize","orientationchange"],new f.default.Sidebar.Position("[data-md-component=toc]","[data-md-component=header]"))),new f.default.Event.MatchMedia("(min-width: 960px)",new f.default.Event.Listener(window,"scroll",new f.default.Nav.Blur("[data-md-component=toc] [href]")));var n=document.querySelectorAll("[data-md-component=collapsible]");Array.prototype.forEach.call(n,function(e){new f.default.Event.MatchMedia("(min-width: 1220px)",new f.default.Event.Listener(e.previousElementSibling,"click",new f.default.Nav.Collapse(e)))}),new f.default.Event.MatchMedia("(max-width: 1219px)",new f.default.Event.Listener("[data-md-component=navigation] [data-md-toggle]","change",new f.default.Nav.Scrolling("[data-md-component=navigation] nav"))),document.querySelector("[data-md-component=search]")&&(new f.default.Event.MatchMedia("(max-width: 959px)",new f.default.Event.Listener("[data-md-toggle=search]","change",new f.default.Search.Lock("[data-md-toggle=search]"))),new f.default.Event.Listener("[data-md-component=query]",["focus","keyup","change"],new f.default.Search.Result("[data-md-component=result]",function(){return fetch(t.url.base+"/"+(t.version<"0.17"?"mkdocs":"search")+"/search_index.json",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e.docs.map(function(e){return e.location=t.url.base+"/"+e.location,e})})})).listen(),new f.default.Event.Listener("[data-md-component=reset]","click",function(){setTimeout(function(){var e=document.querySelector("[data-md-component=query]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.focus()},10)}).listen(),new f.default.Event.Listener("[data-md-toggle=search]","change",function(e){setTimeout(function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.focus()}},400,e.target)}).listen(),new f.default.Event.MatchMedia("(min-width: 960px)",new f.default.Event.Listener("[data-md-component=query]","focus",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked||(e.checked=!0,e.dispatchEvent(new CustomEvent("change")))})),new f.default.Event.Listener(window,"keydown",function(e){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;var n=document.querySelector("[data-md-component=query]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!e.metaKey&&!e.ctrlKey)if(t.checked){if(13===e.keyCode){if(n===document.activeElement){e.preventDefault();var r=document.querySelector("[data-md-component=search] [href][data-md-state=active]");r instanceof HTMLLinkElement&&(window.location=r.getAttribute("href"),t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur())}}else if(9===e.keyCode||27===e.keyCode)t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur();else if(-1!==[8,37,39].indexOf(e.keyCode))n!==document.activeElement&&n.focus();else if(-1!==[38,40].indexOf(e.keyCode)){var i=e.keyCode,o=Array.prototype.slice.call(document.querySelectorAll("[data-md-component=query], [data-md-component=search] [href]")),a=o.find(function(e){if(!(e instanceof HTMLElement))throw new ReferenceError;return"active"===e.dataset.mdState});a&&(a.dataset.mdState="");var s=Math.max(0,(o.indexOf(a)+o.length+(38===i?-1:1))%o.length);return o[s]&&(o[s].dataset.mdState="active",o[s].focus()),e.preventDefault(),e.stopPropagation(),!1}}else document.activeElement&&!document.activeElement.form&&(70!==e.keyCode&&83!==e.keyCode||(n.focus(),e.preventDefault()))}).listen(),new f.default.Event.Listener(window,"keypress",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t!==document.activeElement&&t.focus()}}).listen()),new f.default.Event.Listener(document.body,"keydown",function(e){if(9===e.keyCode){var t=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[for]:not([tabindex])");Array.prototype.forEach.call(t,function(e){e.offsetHeight&&(e.tabIndex=0)})}}).listen(),new f.default.Event.Listener(document.body,"mousedown",function(){var e=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[tabindex]");Array.prototype.forEach.call(e,function(e){e.removeAttribute("tabIndex")})}).listen(),document.body.addEventListener("click",function(){"tabbing"===document.body.dataset.mdState&&(document.body.dataset.mdState="")}),new f.default.Event.MatchMedia("(max-width: 959px)",new f.default.Event.Listener("[data-md-component=navigation] [href^='#']","click",function(){var e=document.querySelector("[data-md-toggle=drawer]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked&&(e.checked=!1,e.dispatchEvent(new CustomEvent("change")))})),function(){var e=document.querySelector("[data-md-source]");if(!e)return a.default.resolve([]);if(!(e instanceof HTMLAnchorElement))throw new ReferenceError;switch(e.dataset.mdSource){case"github":return new f.default.Source.Adapter.GitHub(e).fetch();default:return a.default.resolve([])}}().then(function(e){var t=document.querySelectorAll("[data-md-source]");Array.prototype.forEach.call(t,function(t){new f.default.Source.Repository(t).initialize(e)})})}t.__esModule=!0,t.app=void 0,n(7),n(8),n(9),n(10),n(11),n(12),n(13);var o=n(14),a=r(o),s=n(19),c=r(s),u=n(20),l=r(u),d=n(21),f=r(d);window.Promise=window.Promise||a.default;var h=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content},p={initialize:i};t.app=p}).call(t,n(0))},function(e,t,n){e.exports=n.p+"assets/images/icons/bitbucket.1b09e088.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/github.f0b8504a.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/gitlab.6dd19c00.svg"},function(e,t){},function(e,t){},function(e,t){!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=function(e,t){var n,r;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},n=document.createEvent("CustomEvent"),n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},function(e,t,n){window.fetch||(window.fetch=n(2).default||n(2))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){function r(){}function i(e,t){return function(){e.apply(t,arguments)}}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],d(e,this)}function a(e,t){for(;3===e._state;)e=e._value;if(0===e._state)return void e._deferreds.push(t);e._handled=!0,o._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null===n)return void(1===e._state?s:c)(t.promise,e._value);var r;try{r=n(e._value)}catch(e){return void c(t.promise,e)}s(t.promise,r)})}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var n=t.then;if(t instanceof o)return e._state=3,e._value=t,void u(e);if("function"==typeof n)return void d(i(n,t),e)}e._state=1,e._value=t,u(e)}catch(t){c(e,t)}}function c(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)a(e,e._deferreds[t]);e._deferreds=null}function l(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function d(e,t){var n=!1;try{e(function(e){n||(n=!0,s(t,e))},function(e){n||(n=!0,c(t,e))})}catch(e){if(n)return;n=!0,c(t,e)}}var f=n(18),h=setTimeout;o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var n=new this.constructor(r);return a(this,new l(e,t,n)),n},o.prototype.finally=f.a,o.all=function(e){return new o(function(t,n){function r(e,a){try{if(a&&("object"==typeof a||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(t){r(e,t)},n)}i[e]=a,0==--o&&t(i)}catch(e){n(e)}}if(!e||void 0===e.length)throw new TypeError("Promise.all accepts an array");var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);for(var o=i.length,a=0;a<i.length;a++)r(a,i[a])})},o.resolve=function(e){return e&&"object"==typeof e&&e.constructor===o?e:new o(function(t){t(e)})},o.reject=function(e){return new o(function(t,n){n(e)})},o.race=function(e){return new o(function(t,n){for(var r=0,i=e.length;r<i;r++)e[r].then(t,n)})},o._immediateFn="function"==typeof e&&function(t){e(t)}||function(e){h(e,0)},o._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},t.default=o}.call(t,n(15).setImmediate)},function(e,t,n){(function(e){function r(e,t){this._id=e,this._clearFn=t}var i=Function.prototype.apply;t.setTimeout=function(){return new r(i.call(setTimeout,window,arguments),clearTimeout)},t.setInterval=function(){return new r(i.call(setInterval,window,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(window,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(16),t.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(t,n(1))},function(e,t,n){(function(e,t){!function(e,n){"use strict";function r(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var r={callback:e,args:t};return u[c]=r,s(c),c++}function i(e){delete u[e]}function o(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}function a(e){if(l)setTimeout(a,0,e);else{var t=u[e];if(t){l=!0;try{o(t)}finally{i(e),l=!1}}}}if(!e.setImmediate){var s,c=1,u={},l=!1,d=e.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(e);f=f&&f.setTimeout?f:e,"[object process]"==={}.toString.call(e.process)?function(){s=function(e){t.nextTick(function(){a(e)})}}():function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?function(){var t="setImmediate$"+Math.random()+"$",n=function(n){n.source===e&&"string"==typeof n.data&&0===n.data.indexOf(t)&&a(+n.data.slice(t.length))};e.addEventListener?e.addEventListener("message",n,!1):e.attachEvent("onmessage",n),s=function(n){e.postMessage(t+n,"*")}}():e.MessageChannel?function(){var e=new MessageChannel;e.port1.onmessage=function(e){a(e.data)},s=function(t){e.port2.postMessage(t)}}():d&&"onreadystatechange"in d.createElement("script")?function(){var e=d.documentElement;s=function(t){var n=d.createElement("script");n.onreadystatechange=function(){a(t),n.onreadystatechange=null,e.removeChild(n),n=null},e.appendChild(n)}}():function(){s=function(e){setTimeout(a,0,e)}}(),f.setImmediate=r,f.clearImmediate=i}}("undefined"==typeof self?void 0===e?this:e:self)}).call(t,n(1),n(17))},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(e){if(l===setTimeout)return setTimeout(e,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(e,0);try{return l(e,0)}catch(t){try{return l.call(null,e,0)}catch(t){return l.call(this,e,0)}}}function o(e){if(d===clearTimeout)return clearTimeout(e);if((d===r||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function a(){m&&h&&(m=!1,h.length?p=h.concat(p):v=-1,p.length&&s())}function s(){if(!m){var e=i(a);m=!0;for(var t=p.length;t;){for(h=p,p=[];++v<t;)h&&h[v].run();v=-1,t=p.length}h=null,m=!1,o(e)}}function c(e,t){this.fun=e,this.array=t}function u(){}var l,d,f=e.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(e){l=n}try{d="function"==typeof clearTimeout?clearTimeout:r}catch(e){d=r}}();var h,p=[],m=!1,v=-1;f.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];p.push(new c(e,t)),1!==p.length||m||i(s)},c.prototype.run=function(){this.fun.apply(null,this.array)},f.title="browser",f.browser=!0,f.env={},f.argv=[],f.version="",f.versions={},f.on=u,f.addListener=u,f.once=u,f.off=u,f.removeListener=u,f.removeAllListeners=u,f.emit=u,f.prependListener=u,f.prependOnceListener=u,f.listeners=function(e){return[]},f.binding=function(e){throw new Error("process.binding is not supported")},f.cwd=function(){return"/"},f.chdir=function(e){throw new Error("process.chdir is not supported")},f.umask=function(){return 0}},function(e,t,n){"use strict";t.a=function(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){return t.reject(n)})})}},function(e,t,n){!function(t,n){e.exports=n()}(0,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=3)}([function(e,t,n){var r,i,o;!function(a,s){i=[e,n(7)],r=s,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(e){return e&&e.__esModule?e:{default:e}}(t),i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(){function e(t){n(this,e),this.resolveOptions(t),this.initSelection()}return o(e,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,r.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,r.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":i(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=a})},function(e,t,n){function r(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!s.string(t))throw new TypeError("Second argument must be a String");if(!s.fn(n))throw new TypeError("Third argument must be a Function");if(s.node(e))return i(e,t,n);if(s.nodeList(e))return o(e,t,n);if(s.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function o(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return c(document.body,e,t,n)}var s=n(6),c=n(5);e.exports=r},function(e,t){function n(){}n.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function r(){i.off(e,r),t.apply(n,arguments)}var i=this;return r._=t,this.on(e,r,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,i=n.length;for(r;r<i;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],i=[];if(r&&t)for(var o=0,a=r.length;o<a;o++)r[o].fn!==t&&r[o].fn._!==t&&i.push(r[o]);return i.length?n[e]=i:delete n[e],this}},e.exports=n},function(e,t,n){var r,i,o;!function(a,s){i=[e,n(0),n(2),n(1)],r=s,void 0!==(o="function"==typeof r?r.apply(t,i):r)&&(e.exports=o)}(0,function(e,t,n,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function c(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var u=i(t),l=i(n),d=i(r),f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),p=function(e){function t(e,n){o(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.resolveOptions(n),r.listenClick(e),r}return s(t,e),h(t,[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===f(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,d.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return c("action",e)}},{key:"defaultTarget",value:function(e){var t=c("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return c("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),t}(l.default);e.exports=p})},function(e,t){function n(e,t){for(;e&&e.nodeType!==r;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}var r=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}e.exports=n},function(e,t,n){function r(e,t,n,r,i){var a=o.apply(this,arguments);return e.addEventListener(n,a,i),{destroy:function(){e.removeEventListener(n,a,i)}}}function i(e,t,n,i,o){return"function"==typeof e.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,function(e){return r(e,t,n,i,o)}))}function o(e,t,n,r){return function(n){n.delegateTarget=a(n.target,t),n.delegateTarget&&r.call(e,n)}}var a=n(4);e.exports=i},function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},function(e,t){function n(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i),t=r.toString()}return t}e.exports=n}])})},function(e,t,n){var r;!function(){"use strict";function i(e,t){var n;if(t=t||{},this.trackingClick=!1,this.trackingClickStart=0,this.targetElement=null,this.touchStartX=0,this.touchStartY=0,this.lastTouchIdentifier=0,this.touchBoundary=t.touchBoundary||10,this.layer=e,this.tapDelay=t.tapDelay||200,this.tapTimeout=t.tapTimeout||700,!i.notNeeded(e)){for(var r=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"],o=this,s=0,c=r.length;s<c;s++)o[r[s]]=function(e,t){return function(){return e.apply(t,arguments)}}(o[r[s]],o);a&&(e.addEventListener("mouseover",this.onMouse,!0),e.addEventListener("mousedown",this.onMouse,!0),e.addEventListener("mouseup",this.onMouse,!0)),e.addEventListener("click",this.onClick,!0),e.addEventListener("touchstart",this.onTouchStart,!1),e.addEventListener("touchmove",this.onTouchMove,!1),e.addEventListener("touchend",this.onTouchEnd,!1),e.addEventListener("touchcancel",this.onTouchCancel,!1),Event.prototype.stopImmediatePropagation||(e.removeEventListener=function(t,n,r){var i=Node.prototype.removeEventListener;"click"===t?i.call(e,t,n.hijacked||n,r):i.call(e,t,n,r)},e.addEventListener=function(t,n,r){var i=Node.prototype.addEventListener;"click"===t?i.call(e,t,n.hijacked||(n.hijacked=function(e){e.propagationStopped||n(e)}),r):i.call(e,t,n,r)}),"function"==typeof e.onclick&&(n=e.onclick,e.addEventListener("click",function(e){n(e)},!1),e.onclick=null)}}var o=navigator.userAgent.indexOf("Windows Phone")>=0,a=navigator.userAgent.indexOf("Android")>0&&!o,s=/iP(ad|hone|od)/.test(navigator.userAgent)&&!o,c=s&&/OS 4_\d(_\d)?/.test(navigator.userAgent),u=s&&/OS [6-7]_\d/.test(navigator.userAgent),l=navigator.userAgent.indexOf("BB10")>0;i.prototype.needsClick=function(e){switch(e.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(e.disabled)return!0;break;case"input":if(s&&"file"===e.type||e.disabled)return!0;break;case"label":case"iframe":case"video":return!0}return/\bneedsclick\b/.test(e.className)},i.prototype.needsFocus=function(e){switch(e.nodeName.toLowerCase()){case"textarea":return!0;case"select":return!a;case"input":switch(e.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return!1}return!e.disabled&&!e.readOnly;default:return/\bneedsfocus\b/.test(e.className)}},i.prototype.sendClick=function(e,t){var n,r;document.activeElement&&document.activeElement!==e&&document.activeElement.blur(),r=t.changedTouches[0],n=document.createEvent("MouseEvents"),n.initMouseEvent(this.determineEventType(e),!0,!0,window,1,r.screenX,r.screenY,r.clientX,r.clientY,!1,!1,!1,!1,0,null),n.forwardedTouchEvent=!0,e.dispatchEvent(n)},i.prototype.determineEventType=function(e){return a&&"select"===e.tagName.toLowerCase()?"mousedown":"click"},i.prototype.focus=function(e){var t;s&&e.setSelectionRange&&0!==e.type.indexOf("date")&&"time"!==e.type&&"month"!==e.type?(t=e.value.length,e.setSelectionRange(t,t)):e.focus()},i.prototype.updateScrollParent=function(e){var t,n;if(!(t=e.fastClickScrollParent)||!t.contains(e)){n=e;do{if(n.scrollHeight>n.offsetHeight){t=n,e.fastClickScrollParent=n;break}n=n.parentElement}while(n)}t&&(t.fastClickLastScrollTop=t.scrollTop)},i.prototype.getTargetElementFromEventTarget=function(e){return e.nodeType===Node.TEXT_NODE?e.parentNode:e},i.prototype.onTouchStart=function(e){var t,n,r;if(e.targetTouches.length>1)return!0;if(t=this.getTargetElementFromEventTarget(e.target),n=e.targetTouches[0],s){if(r=window.getSelection(),r.rangeCount&&!r.isCollapsed)return!0;if(!c){if(n.identifier&&n.identifier===this.lastTouchIdentifier)return e.preventDefault(),!1;this.lastTouchIdentifier=n.identifier,this.updateScrollParent(t)}}return this.trackingClick=!0,this.trackingClickStart=e.timeStamp,this.targetElement=t,this.touchStartX=n.pageX,this.touchStartY=n.pageY,e.timeStamp-this.lastClickTime<this.tapDelay&&e.preventDefault(),!0},i.prototype.touchHasMoved=function(e){var t=e.changedTouches[0],n=this.touchBoundary;return Math.abs(t.pageX-this.touchStartX)>n||Math.abs(t.pageY-this.touchStartY)>n},i.prototype.onTouchMove=function(e){return!this.trackingClick||((this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e))&&(this.trackingClick=!1,this.targetElement=null),!0)},i.prototype.findControl=function(e){return void 0!==e.control?e.control:e.htmlFor?document.getElementById(e.htmlFor):e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")},i.prototype.onTouchEnd=function(e){var t,n,r,i,o,l=this.targetElement;if(!this.trackingClick)return!0;if(e.timeStamp-this.lastClickTime<this.tapDelay)return this.cancelNextClick=!0,!0;if(e.timeStamp-this.trackingClickStart>this.tapTimeout)return!0;if(this.cancelNextClick=!1,this.lastClickTime=e.timeStamp,n=this.trackingClickStart,this.trackingClick=!1,this.trackingClickStart=0,u&&(o=e.changedTouches[0],l=document.elementFromPoint(o.pageX-window.pageXOffset,o.pageY-window.pageYOffset)||l,l.fastClickScrollParent=this.targetElement.fastClickScrollParent),"label"===(r=l.tagName.toLowerCase())){if(t=this.findControl(l)){if(this.focus(l),a)return!1;l=t}}else if(this.needsFocus(l))return e.timeStamp-n>100||s&&window.top!==window&&"input"===r?(this.targetElement=null,!1):(this.focus(l),this.sendClick(l,e),s&&"select"===r||(this.targetElement=null,e.preventDefault()),!1);return!(!s||c||!(i=l.fastClickScrollParent)||i.fastClickLastScrollTop===i.scrollTop)||(this.needsClick(l)||(e.preventDefault(),this.sendClick(l,e)),!1)},i.prototype.onTouchCancel=function(){this.trackingClick=!1,this.targetElement=null},i.prototype.onMouse=function(e){return!this.targetElement||(!!e.forwardedTouchEvent||(!e.cancelable||(!(!this.needsClick(this.targetElement)||this.cancelNextClick)||(e.stopImmediatePropagation?e.stopImmediatePropagation():e.propagationStopped=!0,e.stopPropagation(),e.preventDefault(),!1))))},i.prototype.onClick=function(e){var t;return this.trackingClick?(this.targetElement=null,this.trackingClick=!1,!0):"submit"===e.target.type&&0===e.detail||(t=this.onMouse(e),t||(this.targetElement=null),t)},i.prototype.destroy=function(){var e=this.layer;a&&(e.removeEventListener("mouseover",this.onMouse,!0),e.removeEventListener("mousedown",this.onMouse,!0),e.removeEventListener("mouseup",this.onMouse,!0)),e.removeEventListener("click",this.onClick,!0),e.removeEventListener("touchstart",this.onTouchStart,!1),e.removeEventListener("touchmove",this.onTouchMove,!1),e.removeEventListener("touchend",this.onTouchEnd,!1),e.removeEventListener("touchcancel",this.onTouchCancel,!1)},i.notNeeded=function(e){var t,n,r;if(void 0===window.ontouchstart)return!0;if(n=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]){if(!a)return!0;if(t=document.querySelector("meta[name=viewport]")){if(-1!==t.content.indexOf("user-scalable=no"))return!0;if(n>31&&document.documentElement.scrollWidth<=window.outerWidth)return!0}}if(l&&(r=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/),r[1]>=10&&r[2]>=3&&(t=document.querySelector("meta[name=viewport]")))){if(-1!==t.content.indexOf("user-scalable=no"))return!0;if(document.documentElement.scrollWidth<=window.outerWidth)return!0}return"none"===e.style.msTouchAction||"manipulation"===e.style.touchAction||(!!(+(/Firefox\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1]>=27&&(t=document.querySelector("meta[name=viewport]"))&&(-1!==t.content.indexOf("user-scalable=no")||document.documentElement.scrollWidth<=window.outerWidth))||("none"===e.style.touchAction||"manipulation"===e.style.touchAction))},i.attach=function(e,t){return new i(e,t)},void 0!==(r=function(){return i}.call(t,n,t,e))&&(e.exports=r)}()},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(22),o=r(i),a=n(24),s=r(a),c=n(27),u=r(c),l=n(31),d=r(l),f=n(37),h=r(f),p=n(39),m=r(p),v=n(45),y=r(v);t.default={Event:o.default,Header:s.default,Nav:u.default,Search:d.default,Sidebar:h.default,Source:m.default,Tabs:y.default}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(3),o=r(i),a=n(23),s=r(a);t.default={Listener:o.default,MatchMedia:s.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=n(3),o=(function(e){e&&e.__esModule}(i),function e(t,n){r(this,e),this.handler_=function(e){e.matches?n.listen():n.unlisten()};var i=window.matchMedia(t);i.addListener(this.handler_),this.handler_(i)});t.default=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(25),o=r(i),a=n(26),s=r(a);t.default={Shadow:o.default,Title:s.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement&&i.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=i.parentNode,!((i="string"==typeof n?document.querySelector(n):n)instanceof HTMLElement))throw new ReferenceError;this.header_=i,this.height_=0,this.active_=!1}return e.prototype.setup=function(){for(var e=this.el_;e=e.previousElementSibling;){if(!(e instanceof HTMLElement))throw new ReferenceError;this.height_+=e.offsetHeight}this.update()},e.prototype.update=function(e){if(!e||"resize"!==e.type&&"orientationchange"!==e.type){var t=window.pageYOffset>=this.height_;t!==this.active_&&(this.header_.dataset.mdState=(this.active_=t)?"shadow":"")}else this.height_=0,this.setup()},e.prototype.reset=function(){this.header_.dataset.mdState="",this.height_=0,this.active_=!1},e}();t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement))throw new ReferenceError;if(this.el_=i,!((i="string"==typeof n?document.querySelector(n):n)instanceof HTMLHeadingElement))throw new ReferenceError;this.header_=i,this.active_=!1}return e.prototype.setup=function(){var e=this;Array.prototype.forEach.call(this.el_.children,function(t){t.style.width=e.el_.offsetWidth-20+"px"})},e.prototype.update=function(e){var t=this,n=window.pageYOffset>=this.header_.offsetTop;n!==this.active_&&(this.el_.dataset.mdState=(this.active_=n)?"active":""),"resize"!==e.type&&"orientationchange"!==e.type||Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},e.prototype.reset=function(){this.el_.dataset.mdState="",this.el_.style.width="",this.active_=!1},e}();t.default=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(28),o=r(i),a=n(29),s=r(a),c=n(30),u=r(c);t.default={Blur:o.default,Collapse:s.default,Scrolling:u.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e),this.els_="string"==typeof t?document.querySelectorAll(t):t,this.index_=0,this.offset_=window.pageYOffset,this.dir_=!1,this.anchors_=[].reduce.call(this.els_,function(e,t){return e.concat(document.getElementById(t.hash.substring(1))||[])},[])}return e.prototype.setup=function(){this.update()},e.prototype.update=function(){var e=window.pageYOffset,t=this.offset_-e<0;if(this.dir_!==t&&(this.index_=this.index_=t?0:this.els_.length-1),0!==this.anchors_.length){if(this.offset_<=e)for(var n=this.index_+1;n<this.els_.length&&this.anchors_[n].offsetTop-80<=e;n++)n>0&&(this.els_[n-1].dataset.mdState="blur"),this.index_=n;else for(var r=this.index_;r>=0;r--){if(!(this.anchors_[r].offsetTop-80>e)){this.index_=r;break}r>0&&(this.els_[r-1].dataset.mdState="")}this.offset_=e,this.dir_=t}},e.prototype.reset=function(){Array.prototype.forEach.call(this.els_,function(e){e.dataset.mdState=""}),this.index_=0,this.offset_=window.pageYOffset},e}();t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n}return e.prototype.setup=function(){var e=this.el_.getBoundingClientRect().height;this.el_.style.display=e?"block":"none",this.el_.style.overflow=e?"visible":"hidden"},e.prototype.update=function(){var e=this,t=this.el_.getBoundingClientRect().height;if(this.el_.style.display="block",this.el_.style.overflow="",t)this.el_.style.maxHeight=t+"px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight="0px"});else{this.el_.setAttribute("data-md-state","expand"),this.el_.style.maxHeight="";var n=this.el_.getBoundingClientRect().height;this.el_.removeAttribute("data-md-state"),this.el_.style.maxHeight="0px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight=n+"px"})}var r=function e(n){var r=n.target;if(!(r instanceof HTMLElement))throw new ReferenceError;r.removeAttribute("data-md-state"),r.style.maxHeight="",r.style.display=t?"none":"block",r.style.overflow=t?"hidden":"visible",r.removeEventListener("transitionend",e)};this.el_.addEventListener("transitionend",r,!1)},e.prototype.reset=function(){this.el_.dataset.mdState="",this.el_.style.maxHeight="",this.el_.style.display="",this.el_.style.overflow=""},e}();t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n}return e.prototype.setup=function(){this.el_.children[this.el_.children.length-1].style.webkitOverflowScrolling="touch";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling="touch"}})},e.prototype.update=function(e){var t=e.target;if(!(t instanceof HTMLElement))throw new ReferenceError;var n=t.nextElementSibling;if(!(n instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==n.tagName&&n.nextElementSibling;)n=n.nextElementSibling;if(!(t.parentNode instanceof HTMLElement&&t.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var r=t.parentNode.parentNode,i=n.children[n.children.length-1];if(r.style.webkitOverflowScrolling="",i.style.webkitOverflowScrolling="",!t.checked){var o=function e(){n instanceof HTMLElement&&(r.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))};n.addEventListener("transitionend",o,!1)}if(t.checked){var a=function e(){n instanceof HTMLElement&&(i.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))};n.addEventListener("transitionend",a,!1)}},e.prototype.reset=function(){this.el_.children[1].style.webkitOverflowScrolling="";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling=""}})},e}();t.default=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(32),o=r(i),a=n(33),s=r(a);t.default={Lock:o.default,Result:s.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(this.el_=n,!document.body)throw new ReferenceError;this.lock_=document.body}return e.prototype.setup=function(){this.update()},e.prototype.update=function(){var e=this;this.el_.checked?(this.offset_=window.pageYOffset,setTimeout(function(){window.scrollTo(0,0),e.el_.checked&&(e.lock_.dataset.mdState="lock")},400)):(this.lock_.dataset.mdState="",setTimeout(function(){void 0!==e.offset_&&window.scrollTo(0,e.offset_)},100))},e.prototype.reset=function(){"lock"===this.lock_.dataset.mdState&&window.scrollTo(0,this.offset_),this.lock_.dataset.mdState=""},e}();t.default=i},function(e,t,n){"use strict";(function(e){function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var o=n(34),a=r(o),s=n(35),c=r(s),u=function(e,t){var n=t;if(e.length>n){for(;" "!==e[n]&&--n>0;);return e.substring(0,n)+"..."}return e},l=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content},d=function(){function t(e,n){i(this,t);var r="string"==typeof e?document.querySelector(e):e;if(!(r instanceof HTMLElement))throw new ReferenceError;this.el_=r;var o=Array.prototype.slice.call(this.el_.children),a=o[0],s=o[1];this.data_=n,this.meta_=a,this.list_=s,this.message_={placeholder:this.meta_.textContent,none:l("search.result.none"),one:l("search.result.one"),other:l("search.result.other")};var u=l("search.tokenizer");u.length&&(c.default.tokenizer.separator=u),this.lang_=l("search.language").split(",").filter(Boolean).map(function(e){return e.trim()})}return t.prototype.update=function(t){var n=this;if("focus"!==t.type||this.index_){if("focus"===t.type||"keyup"===t.type){var r=t.target;if(!(r instanceof HTMLInputElement))throw new ReferenceError;if(!this.index_||r.value===this.value_)return;for(;this.list_.firstChild;)this.list_.removeChild(this.list_.firstChild);if(this.value_=r.value,0===this.value_.length)return void(this.meta_.textContent=this.message_.placeholder);var i=this.index_.query(function(e){n.value_.toLowerCase().split(" ").filter(Boolean).forEach(function(t){e.term(t,{wildcard:c.default.Query.wildcard.TRAILING})})}).reduce(function(e,t){var r=n.docs_.get(t.ref);if(r.parent){var i=r.parent.location;e.set(i,(e.get(i)||[]).concat(t))}else{var o=r.location;e.set(o,e.get(o)||[])}return e},new Map),o=(0,a.default)(this.value_.trim()).replace(new RegExp(c.default.tokenizer.separator,"img"),"|"),s=new RegExp("(^|"+c.default.tokenizer.separator+")("+o+")","img"),d=function(e,t,n){return t+"<em>"+n+"</em>"};this.stack_=[],i.forEach(function(t,r){var i,o=n.docs_.get(r),a=e.createElement("li",{class:"md-search-result__item"},e.createElement("a",{href:o.location,title:o.title,class:"md-search-result__link",tabindex:"-1"},e.createElement("article",{class:"md-search-result__article md-search-result__article--document"},e.createElement("h1",{class:"md-search-result__title"},{__html:o.title.replace(s,d)}),o.text.length?e.createElement("p",{class:"md-search-result__teaser"},{__html:o.text.replace(s,d)}):{}))),c=t.map(function(t){return function(){var r=n.docs_.get(t.ref);a.appendChild(e.createElement("a",{href:r.location,title:r.title,class:"md-search-result__link","data-md-rel":"anchor",tabindex:"-1"},e.createElement("article",{class:"md-search-result__article"},e.createElement("h1",{class:"md-search-result__title"},{__html:r.title.replace(s,d)}),r.text.length?e.createElement("p",{class:"md-search-result__teaser"},{__html:u(r.text.replace(s,d),400)}):{})))}});(i=n.stack_).push.apply(i,[function(){return n.list_.appendChild(a)}].concat(c))});var f=this.el_.parentNode;if(!(f instanceof HTMLElement))throw new ReferenceError;for(;this.stack_.length&&f.offsetHeight>=f.scrollHeight-16;)this.stack_.shift()();var h=this.list_.querySelectorAll("[data-md-rel=anchor]");switch(Array.prototype.forEach.call(h,function(e){["click","keydown"].forEach(function(t){e.addEventListener(t,function(n){if("keydown"!==t||13===n.keyCode){var r=document.querySelector("[data-md-toggle=search]");if(!(r instanceof HTMLInputElement))throw new ReferenceError;r.checked&&(r.checked=!1,r.dispatchEvent(new CustomEvent("change"))),n.preventDefault(),setTimeout(function(){document.location.href=e.href},100)}})})}),i.size){case 0:this.meta_.textContent=this.message_.none;break;case 1:this.meta_.textContent=this.message_.one;break;default:this.meta_.textContent=this.message_.other.replace("#",i.size)}}}else{var p=function(e){n.docs_=e.reduce(function(e,t){var n=t.location.split("#"),r=n[0];return n[1]&&(t.parent=e.get(r),t.parent&&!t.parent.done&&(t.parent.title=t.title,t.parent.text=t.text,t.parent.done=!0)),t.text=t.text.replace(/\n/g," ").replace(/\s+/g," ").replace(/\s+([,.:;!?])/g,function(e,t){return t}),t.parent&&t.parent.title===t.title||e.set(t.location,t),e},new Map);var t=n.docs_,r=n.lang_;n.stack_=[],n.index_=(0,c.default)(function(){var e,n=this,i={"search.pipeline.trimmer":c.default.trimmer,"search.pipeline.stopwords":c.default.stopWordFilter},o=Object.keys(i).reduce(function(e,t){return l(t).match(/^false$/i)||e.push(i[t]),e},[]);this.pipeline.reset(),o&&(e=this.pipeline).add.apply(e,o),1===r.length&&"en"!==r[0]&&c.default[r[0]]?this.use(c.default[r[0]]):r.length>1&&this.use(c.default.multiLanguage.apply(c.default,r)),this.field("title",{boost:10}),this.field("text"),this.ref("location"),t.forEach(function(e){return n.add(e)})});var i=n.el_.parentNode;if(!(i instanceof HTMLElement))throw new ReferenceError;i.addEventListener("scroll",function(){for(;n.stack_.length&&i.scrollTop+i.offsetHeight>=i.scrollHeight-16;)n.stack_.splice(0,10).forEach(function(e){return e()})})};setTimeout(function(){return"function"==typeof n.data_?n.data_().then(p):p(n.data_)},250)}},t}();t.default=d}).call(t,n(0))},function(e,t,n){"use strict";var r=/[|\\{}()[\]^$+*?.]/g;e.exports=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return e.replace(r,"\\$&")}},function(e,t,n){(function(t){e.exports=t.lunr=n(36)}).call(t,n(1))},function(e,t,n){var r,i;!function(){var o=function(e){var t=new o.Builder;return t.pipeline.add(o.trimmer,o.stopWordFilter,o.stemmer),t.searchPipeline.add(o.stemmer),e.call(t,t),t.build()};o.version="2.1.5",o.utils={},o.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),o.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},o.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},o.FieldRef.joiner="/",o.FieldRef.fromString=function(e){var t=e.indexOf(o.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new o.FieldRef(r,n,e)},o.FieldRef.prototype.toString=function(){return void 0==this._stringValue&&(this._stringValue=this.fieldName+o.FieldRef.joiner+this.docRef),this._stringValue},o.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var i=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(i))},o.Token=function(e,t){this.str=e||"",this.metadata=t||{}},o.Token.prototype.toString=function(){return this.str},o.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},o.Token.prototype.clone=function(e){return e=e||function(e){return e},new o.Token(e(this.str,this.metadata),this.metadata)},o.tokenizer=function(e){if(null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return new o.Token(o.utils.asString(e).toLowerCase())});for(var t=e.toString().trim().toLowerCase(),n=t.length,r=[],i=0,a=0;i<=n;i++){var s=t.charAt(i),c=i-a;(s.match(o.tokenizer.separator)||i==n)&&(c>0&&r.push(new o.Token(t.slice(a,i),{position:[a,c],index:r.length})),a=i+1)}return r},o.tokenizer.separator=/[\s\-]+/,o.Pipeline=function(){this._stack=[]},o.Pipeline.registeredFunctions=Object.create(null),o.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&o.utils.warn("Overwriting existing registered function: "+t),e.label=t,o.Pipeline.registeredFunctions[e.label]=e},o.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||o.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},o.Pipeline.load=function(e){var t=new o.Pipeline;return e.forEach(function(e){var n=o.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)}),t},o.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){o.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},o.Pipeline.prototype.after=function(e,t){o.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},o.Pipeline.prototype.before=function(e,t){o.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},o.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},o.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){var r=this._stack[n];e=e.reduce(function(t,n,i){var o=r(n,i,e);return void 0===o||""===o?t:t.concat(o)},[])}return e},o.Pipeline.prototype.runString=function(e){var t=new o.Token(e);return this.run([t]).map(function(e){return e.toString()})},o.Pipeline.prototype.reset=function(){this._stack=[]},o.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return o.Pipeline.warnIfFunctionNotRegistered(e),e.label})},o.Vector=function(e){this._magnitude=0,this.elements=e||[]},o.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,i=Math.floor(r/2),o=this.elements[2*i];r>1&&(o<e&&(t=i),o>e&&(n=i),o!=e);)r=n-t,i=t+Math.floor(r/2),o=this.elements[2*i];return o==e?2*i:o>e?2*i:o<e?2*(i+1):void 0},o.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},o.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},o.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},o.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,i=n.length,o=r.length,a=0,s=0,c=0,u=0;c<i&&u<o;)a=n[c],s=r[u],a<s?c+=2:a>s?u+=2:a==s&&(t+=n[c+1]*r[u+1],c+=2,u+=2);return t},o.Vector.prototype.similarity=function(e){return this.dot(e)/(this.magnitude()*e.magnitude())},o.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},o.Vector.prototype.toJSON=function(){return this.elements},o.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[aeiouy]",r="[^aeiou][^aeiouy]*",i=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),o=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),a=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),s=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),c=/^(.+?)(ss|i)es$/,u=/^(.+?)([^s])s$/,l=/^(.+?)eed$/,d=/^(.+?)(ed|ing)$/,f=/.$/,h=/(at|bl|iz)$/,p=new RegExp("([^aeiouylsz])\\1$"),m=new RegExp("^"+r+n+"[^aeiouwxy]$"),v=/^(.+?[^aeiou])y$/,y=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,g=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,w=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,E=/^(.+?)e$/,x=/ll$/,b=new RegExp("^"+r+n+"[^aeiouwxy]$"),k=function(n){var r,k,T,S,L,C,M;if(n.length<3)return n;if(T=n.substr(0,1),"y"==T&&(n=T.toUpperCase()+n.substr(1)),S=c,L=u,S.test(n)?n=n.replace(S,"$1$2"):L.test(n)&&(n=n.replace(L,"$1$2")),S=l,L=d,S.test(n)){var O=S.exec(n);S=i,S.test(O[1])&&(S=f,n=n.replace(S,""))}else if(L.test(n)){var O=L.exec(n);r=O[1],L=s,L.test(r)&&(n=r,L=h,C=p,M=m,L.test(n)?n+="e":C.test(n)?(S=f,n=n.replace(S,"")):M.test(n)&&(n+="e"))}if(S=v,S.test(n)){var O=S.exec(n);r=O[1],n=r+"i"}if(S=y,S.test(n)){var O=S.exec(n);r=O[1],k=O[2],S=i,S.test(r)&&(n=r+e[k])}if(S=g,S.test(n)){var O=S.exec(n);r=O[1],k=O[2],S=i,S.test(r)&&(n=r+t[k])}if(S=w,L=_,S.test(n)){var O=S.exec(n);r=O[1],S=o,S.test(r)&&(n=r)}else if(L.test(n)){var O=L.exec(n);r=O[1]+O[2],L=o,L.test(r)&&(n=r)}if(S=E,S.test(n)){var O=S.exec(n);r=O[1],S=o,L=a,C=b,(S.test(r)||L.test(r)&&!C.test(r))&&(n=r)}return S=x,L=o,S.test(n)&&L.test(n)&&(S=f,n=n.replace(S,"")),"y"==T&&(n=T.toLowerCase()+n.substr(1)),n};return function(e){return e.update(k)}}(),o.Pipeline.registerFunction(o.stemmer,"stemmer"),o.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},o.stopWordFilter=o.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),o.Pipeline.registerFunction(o.stopWordFilter,"stopWordFilter"),o.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},o.Pipeline.registerFunction(o.trimmer,"trimmer"),o.TokenSet=function(){this.final=!1,this.edges={},this.id=o.TokenSet._nextId,o.TokenSet._nextId+=1},o.TokenSet._nextId=1,o.TokenSet.fromArray=function(e){for(var t=new o.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},o.TokenSet.fromClause=function(e){return"editDistance"in e?o.TokenSet.fromFuzzyString(e.term,e.editDistance):o.TokenSet.fromString(e.term)},o.TokenSet.fromFuzzyString=function(e,t){for(var n=new o.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var i=r.pop();if(i.str.length>0){var a,s=i.str.charAt(0);s in i.node.edges?a=i.node.edges[s]:(a=new o.TokenSet,i.node.edges[s]=a),1==i.str.length?a.final=!0:r.push({node:a,editsRemaining:i.editsRemaining,str:i.str.slice(1)})}if(i.editsRemaining>0&&i.str.length>1){var c,s=i.str.charAt(1);s in i.node.edges?c=i.node.edges[s]:(c=new o.TokenSet,i.node.edges[s]=c),i.str.length<=2?c.final=!0:r.push({node:c,editsRemaining:i.editsRemaining-1,str:i.str.slice(2)})}if(i.editsRemaining>0&&1==i.str.length&&(i.node.final=!0),i.editsRemaining>0&&i.str.length>=1){if("*"in i.node.edges)var u=i.node.edges["*"];else{var u=new o.TokenSet;i.node.edges["*"]=u}1==i.str.length?u.final=!0:r.push({node:u,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)})}if(i.editsRemaining>0){if("*"in i.node.edges)var l=i.node.edges["*"];else{var l=new o.TokenSet;i.node.edges["*"]=l}0==i.str.length?l.final=!0:r.push({node:l,editsRemaining:i.editsRemaining-1,str:i.str})}if(i.editsRemaining>0&&i.str.length>1){var d,f=i.str.charAt(0),h=i.str.charAt(1);h in i.node.edges?d=i.node.edges[h]:(d=new o.TokenSet,i.node.edges[h]=d),1==i.str.length?d.final=!0:r.push({node:d,editsRemaining:i.editsRemaining-1,str:f+i.str.slice(2)})}}return n},o.TokenSet.fromString=function(e){for(var t=new o.TokenSet,n=t,r=!1,i=0,a=e.length;i<a;i++){var s=e[i],c=i==a-1;if("*"==s)r=!0,t.edges[s]=t,t.final=c;else{var u=new o.TokenSet;u.final=c,t.edges[s]=u,t=u,r&&(t.edges["*"]=n)}}return n},o.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),i=r.length;n.node.final&&e.push(n.prefix);for(var o=0;o<i;o++){var a=r[o];t.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},o.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var i=t[r];e=e+i+this.edges[i].id}return e},o.TokenSet.prototype.intersect=function(e){for(var t=new o.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var i=Object.keys(n.qNode.edges),a=i.length,s=Object.keys(n.node.edges),c=s.length,u=0;u<a;u++)for(var l=i[u],d=0;d<c;d++){var f=s[d];if(f==l||"*"==l){var h=n.node.edges[f],p=n.qNode.edges[l],m=h.final&&p.final,v=void 0;f in n.output.edges?(v=n.output.edges[f],v.final=v.final||m):(v=new o.TokenSet,v.final=m,n.output.edges[f]=v),r.push({qNode:p,output:v,node:h})}}}return t},o.TokenSet.Builder=function(){this.previousWord="",this.root=new o.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},o.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var r=n;r<e.length;r++){var i=new o.TokenSet,a=e[r];t.edges[a]=i,this.uncheckedNodes.push({parent:t,char:a,child:i}),t=i}t.final=!0,this.previousWord=e},o.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},o.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},o.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},o.Index.prototype.search=function(e){return this.query(function(t){new o.QueryParser(e,t).parse()})},o.Index.prototype.query=function(e){var t=new o.Query(this.fields),n=Object.create(null),r=Object.create(null),i=Object.create(null);e.call(t,t);for(var a=0;a<t.clauses.length;a++){var s=t.clauses[a],c=null;c=s.usePipeline?this.pipeline.runString(s.term):[s.term];for(var u=0;u<c.length;u++){var l=c[u];s.term=l;for(var d=o.TokenSet.fromClause(s),f=this.tokenSet.intersect(d).toArray(),h=0;h<f.length;h++)for(var p=f[h],m=this.invertedIndex[p],v=m._index,y=0;y<s.fields.length;y++){var g=s.fields[y],w=m[g],_=Object.keys(w),E=p+"/"+g;if(void 0===r[g]&&(r[g]=new o.Vector),r[g].upsert(v,1*s.boost,function(e,t){return e+t}),!i[E]){for(var x=0;x<_.length;x++){var b,k=_[x],T=new o.FieldRef(k,g),S=w[k];void 0===(b=n[T])?n[T]=new o.MatchData(p,g,S):b.add(p,g,S)}i[E]=!0}}}}for(var L=Object.keys(n),C=[],M=Object.create(null),a=0;a<L.length;a++){var O,A=o.FieldRef.fromString(L[a]),R=A.docRef,I=this.fieldVectors[A],P=r[A.fieldName].similarity(I);if(void 0!==(O=M[R]))O.score+=P,O.matchData.combine(n[A]);else{var N={ref:R,score:P,matchData:n[A]};M[R]=N,C.push(N)}}return C.sort(function(e,t){return t.score-e.score})},o.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:o.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},o.Index.load=function(e){var t={},n={},r=e.fieldVectors,i={},a=e.invertedIndex,s=new o.TokenSet.Builder,c=o.Pipeline.load(e.pipeline);e.version!=o.version&&o.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+o.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<r.length;u++){var l=r[u],d=l[0],f=l[1];n[d]=new o.Vector(f)}for(var u=0;u<a.length;u++){var l=a[u],h=l[0],p=l[1];s.insert(h),i[h]=p}return s.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=i,t.tokenSet=s.root,t.pipeline=c,new o.Index(t)},o.Builder=function(){this._ref="id",this._fields=[],this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=o.tokenizer,this.pipeline=new o.Pipeline,this.searchPipeline=new o.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},o.Builder.prototype.ref=function(e){this._ref=e},o.Builder.prototype.field=function(e){this._fields.push(e)},o.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},o.Builder.prototype.k1=function(e){this._k1=e},o.Builder.prototype.add=function(e){var t=e[this._ref];this.documentCount+=1;for(var n=0;n<this._fields.length;n++){var r=this._fields[n],i=e[r],a=this.tokenizer(i),s=this.pipeline.run(a),c=new o.FieldRef(t,r),u=Object.create(null);this.fieldTermFrequencies[c]=u,this.fieldLengths[c]=0,this.fieldLengths[c]+=s.length;for(var l=0;l<s.length;l++){var d=s[l];if(void 0==u[d]&&(u[d]=0),u[d]+=1,void 0==this.invertedIndex[d]){var f=Object.create(null);f._index=this.termIndex,this.termIndex+=1;for(var h=0;h<this._fields.length;h++)f[this._fields[h]]=Object.create(null);this.invertedIndex[d]=f}void 0==this.invertedIndex[d][r][t]&&(this.invertedIndex[d][r][t]=Object.create(null));for(var p=0;p<this.metadataWhitelist.length;p++){var m=this.metadataWhitelist[p],v=d.metadata[m];void 0==this.invertedIndex[d][r][t][m]&&(this.invertedIndex[d][r][t][m]=[]),this.invertedIndex[d][r][t][m].push(v)}}}},o.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},i=0;i<t;i++){var a=o.FieldRef.fromString(e[i]),s=a.fieldName;r[s]||(r[s]=0),r[s]+=1,n[s]||(n[s]=0),n[s]+=this.fieldLengths[a]}for(var i=0;i<this._fields.length;i++){var s=this._fields[i];n[s]=n[s]/r[s]}this.averageFieldLength=n},o.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),i=0;i<n;i++){for(var a=o.FieldRef.fromString(t[i]),s=a.fieldName,c=this.fieldLengths[a],u=new o.Vector,l=this.fieldTermFrequencies[a],d=Object.keys(l),f=d.length,h=0;h<f;h++){var p,m,v,y=d[h],g=l[y],w=this.invertedIndex[y]._index;void 0===r[y]?(p=o.idf(this.invertedIndex[y],this.documentCount),r[y]=p):p=r[y],m=p*((this._k1+1)*g)/(this._k1*(1-this._b+this._b*(c/this.averageFieldLength[s]))+g),v=Math.round(1e3*m)/1e3,u.insert(w,v)}e[a]=u}this.fieldVectors=e},o.Builder.prototype.createTokenSet=function(){this.tokenSet=o.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},o.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new o.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:this._fields,pipeline:this.searchPipeline})},o.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},o.MatchData=function(e,t,n){for(var r=Object.create(null),i=Object.keys(n),o=0;o<i.length;o++){var a=i[o];r[a]=n[a].slice()}this.metadata=Object.create(null),this.metadata[e]=Object.create(null),this.metadata[e][t]=r},o.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],i=Object.keys(e.metadata[r]);void 0==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var o=0;o<i.length;o++){var a=i[o],s=Object.keys(e.metadata[r][a]);void 0==this.metadata[r][a]&&(this.metadata[r][a]=Object.create(null));for(var c=0;c<s.length;c++){var u=s[c];void 0==this.metadata[r][a][u]?this.metadata[r][a][u]=e.metadata[r][a][u]:this.metadata[r][a][u]=this.metadata[r][a][u].concat(e.metadata[r][a][u])}}}},o.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(!(t in this.metadata[e]))return void(this.metadata[e][t]=n);for(var r=Object.keys(n),i=0;i<r.length;i++){var o=r[i];o in this.metadata[e][t]?this.metadata[e][t][o]=this.metadata[e][t][o].concat(n[o]):this.metadata[e][t][o]=n[o]}},o.Query=function(e){this.clauses=[],this.allFields=e},o.Query.wildcard=new String("*"),o.Query.wildcard.NONE=0,o.Query.wildcard.LEADING=1,o.Query.wildcard.TRAILING=2,o.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=o.Query.wildcard.NONE),e.wildcard&o.Query.wildcard.LEADING&&e.term.charAt(0)!=o.Query.wildcard&&(e.term="*"+e.term),e.wildcard&o.Query.wildcard.TRAILING&&e.term.slice(-1)!=o.Query.wildcard&&(e.term=e.term+"*"),this.clauses.push(e),this},o.Query.prototype.term=function(e,t){var n=t||{};return n.term=e,this.clause(n),this},o.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},o.QueryParseError.prototype=new Error,o.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},o.QueryLexer.prototype.run=function(){for(var e=o.QueryLexer.lexText;e;)e=e(this)},o.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},o.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},o.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},o.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return o.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},o.QueryLexer.prototype.width=function(){return this.pos-this.start},o.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},o.QueryLexer.prototype.backup=function(){this.pos-=1},o.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{e=this.next(),t=e.charCodeAt(0)}while(t>47&&t<58);e!=o.QueryLexer.EOS&&this.backup()},o.QueryLexer.prototype.more=function(){return this.pos<this.length},o.QueryLexer.EOS="EOS",o.QueryLexer.FIELD="FIELD",o.QueryLexer.TERM="TERM",o.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",o.QueryLexer.BOOST="BOOST",o.QueryLexer.lexField=function(e){return e.backup(),e.emit(o.QueryLexer.FIELD),e.ignore(),o.QueryLexer.lexText},o.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(o.QueryLexer.TERM)),e.ignore(),e.more())return o.QueryLexer.lexText},o.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(o.QueryLexer.EDIT_DISTANCE),o.QueryLexer.lexText},o.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(o.QueryLexer.BOOST),o.QueryLexer.lexText},o.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(o.QueryLexer.TERM)},o.QueryLexer.termSeparator=o.tokenizer.separator,o.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==o.QueryLexer.EOS)return o.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return o.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(o.QueryLexer.TERM),o.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(o.QueryLexer.TERM),o.QueryLexer.lexBoost;if(t.match(o.QueryLexer.termSeparator))return o.QueryLexer.lexTerm}else e.escapeCharacter()}},o.QueryParser=function(e,t){this.lexer=new o.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},o.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=o.QueryParser.parseFieldOrTerm;e;)e=e(this);return this.query},o.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},o.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},o.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},o.QueryParser.parseFieldOrTerm=function(e){var t=e.peekLexeme();if(void 0!=t)switch(t.type){case o.QueryLexer.FIELD:return o.QueryParser.parseField;case o.QueryLexer.TERM:return o.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new o.QueryParseError(n,t.start,t.end)}},o.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(void 0!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(void 0==i){var r="expecting term, found nothing";throw new o.QueryParseError(r,t.start,t.end)}switch(i.type){case o.QueryLexer.TERM:return o.QueryParser.parseTerm;default:var r="expecting term, found '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},o.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(void 0!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(void 0==n)return void e.nextClause();switch(n.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;default:var r="Unexpected lexeme type '"+n.type+"'";throw new o.QueryParseError(r,n.start,n.end)}}},o.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var i=e.peekLexeme();if(void 0==i)return void e.nextClause();switch(i.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;default:var r="Unexpected lexeme type '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},o.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(void 0!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new o.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var i=e.peekLexeme();if(void 0==i)return void e.nextClause();switch(i.type){case o.QueryLexer.TERM:return e.nextClause(),o.QueryParser.parseTerm;case o.QueryLexer.FIELD:return e.nextClause(),o.QueryParser.parseField;case o.QueryLexer.EDIT_DISTANCE:return o.QueryParser.parseEditDistance;case o.QueryLexer.BOOST:return o.QueryParser.parseBoost;default:var r="Unexpected lexeme type '"+i.type+"'";throw new o.QueryParseError(r,i.start,i.end)}}},function(o,a){r=a,void 0!==(i="function"==typeof r?r.call(t,n,t,e):r)&&(e.exports=i)}(0,function(){return o})}()},function(e,t,n){"use strict";t.__esModule=!0;var r=n(38),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default={Position:i.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t,n){r(this,e);var i="string"==typeof t?document.querySelector(t):t;if(!(i instanceof HTMLElement&&i.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=i,this.parent_=i.parentNode,!((i="string"==typeof n?document.querySelector(n):n)instanceof HTMLElement))throw new ReferenceError;this.header_=i,this.height_=0,this.pad_="fixed"===window.getComputedStyle(this.header_).position}return e.prototype.setup=function(){var e=Array.prototype.reduce.call(this.parent_.children,function(e,t){return Math.max(e,t.offsetTop)},0);this.offset_=e-(this.pad_?this.header_.offsetHeight:0),this.update()},e.prototype.update=function(e){var t=window.pageYOffset,n=window.innerHeight;e&&"resize"===e.type&&this.setup();var r={top:this.pad_?this.header_.offsetHeight:0,bottom:this.parent_.offsetTop+this.parent_.offsetHeight},i=n-r.top-Math.max(0,this.offset_-t)-Math.max(0,t+n-r.bottom);i!==this.height_&&(this.el_.style.height=(this.height_=i)+"px"),t>=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")},e.prototype.reset=function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0},e}();t.default=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(40),o=r(i),a=n(44),s=r(a);t.default={Adapter:o.default,Repository:s.default}},function(e,t,n){"use strict";t.__esModule=!0;var r=n(41),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default={GitHub:i.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0;var a=n(42),s=function(e){return e&&e.__esModule?e:{default:e}}(a),c=function(e){function t(n){r(this,t);var o=i(this,e.call(this,n)),a=/^.+github\.com\/([^\/]+)\/?([^\/]+)?.*$/.exec(o.base_);if(a&&3===a.length){var s=a[1],c=a[2];o.base_="https://api.github.com/users/"+s+"/repos",o.name_=c}return o}return o(t,e),t.prototype.fetch_=function(){var e=this;return function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return fetch(e.base_+"?per_page=30&page="+n).then(function(e){return e.json()}).then(function(r){if(!(r instanceof Array))throw new TypeError;if(e.name_){var i=r.find(function(t){return t.name===e.name_});return i||30!==r.length?i?[e.format_(i.stargazers_count)+" Stars",e.format_(i.forks_count)+" Forks"]:[]:t(n+1)}return[r.length+" Repositories"]})}()},t}(s.default);t.default=c},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=n(43),o=function(e){return e&&e.__esModule?e:{default:e}}(i),a=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof HTMLAnchorElement))throw new ReferenceError;this.el_=n,this.base_=this.el_.href,this.salt_=this.hash_(this.base_)}return e.prototype.fetch=function(){var e=this;return new Promise(function(t){var n=o.default.getJSON(e.salt_+".cache-source");void 0!==n?t(n):e.fetch_().then(function(n){o.default.set(e.salt_+".cache-source",n,{expires:1/96}),t(n)})})},e.prototype.fetch_=function(){throw new Error("fetch_(): Not implemented")},e.prototype.format_=function(e){return e>1e4?(e/1e3).toFixed(0)+"k":e>1e3?(e/1e3).toFixed(1)+"k":""+e},e.prototype.hash_=function(e){var t=0;if(0===e.length)return t;for(var n=0,r=e.length;n<r;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return t},e}();t.default=a},function(e,t,n){var r,i;!function(o){var a=!1;if(r=o,void 0!==(i="function"==typeof r?r.call(t,n,t,e):r)&&(e.exports=i),a=!0,e.exports=o(),a=!0,!a){var s=window.Cookies,c=window.Cookies=o();c.noConflict=function(){return window.Cookies=s,c}}}(function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(n){function r(t,i,o){var a;if("undefined"!=typeof document){if(arguments.length>1){if(o=e({path:"/"},r.defaults,o),"number"==typeof o.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*o.expires),o.expires=s}o.expires=o.expires?o.expires.toUTCString():"";try{a=JSON.stringify(i),/^[\{\[]/.test(a)&&(i=a)}catch(e){}i=n.write?n.write(i,t):encodeURIComponent(String(i)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)),t=t.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),t=t.replace(/[\(\)]/g,escape);var c="";for(var u in o)o[u]&&(c+="; "+u,!0!==o[u]&&(c+="="+o[u]));return document.cookie=t+"="+i+c}t||(a={});for(var l=document.cookie?document.cookie.split("; "):[],d=/(%[0-9A-Z]{2})+/g,f=0;f<l.length;f++){var h=l[f].split("="),p=h.slice(1).join("=");this.json||'"'!==p.charAt(0)||(p=p.slice(1,-1));try{var m=h[0].replace(d,decodeURIComponent);if(p=n.read?n.read(p,m):n(p,m)||p.replace(d,decodeURIComponent),this.json)try{p=JSON.parse(p)}catch(e){}if(t===m){a=p;break}t||(a[m]=p)}catch(e){}}return a}}return r.set=r,r.get=function(e){return r.call(r,e)},r.getJSON=function(){return r.apply({json:!0},[].slice.call(arguments))},r.defaults={},r.remove=function(t,n){r(t,"",e(n,{expires:-1}))},r.withConverter=t,r}return t(function(){})})},function(e,t,n){"use strict";(function(e){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var r=function(){function t(e){n(this,t);var r="string"==typeof e?document.querySelector(e):e;if(!(r instanceof HTMLElement))throw new ReferenceError;this.el_=r}return t.prototype.initialize=function(t){t.length&&this.el_.children.length&&this.el_.children[this.el_.children.length-1].appendChild(e.createElement("ul",{class:"md-source__facts"},t.map(function(t){return e.createElement("li",{class:"md-source__fact"},t)}))),this.el_.dataset.mdState="done"},t}();t.default=r}).call(t,n(0))},function(e,t,n){"use strict";t.__esModule=!0;var r=n(46),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default={Toggle:i.default}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(t){r(this,e);var n="string"==typeof t?document.querySelector(t):t;if(!(n instanceof Node))throw new ReferenceError;this.el_=n,this.active_=!1}return e.prototype.update=function(){var e=window.pageYOffset>=this.el_.children[0].offsetTop+-43;e!==this.active_&&(this.el_.dataset.mdState=(this.active_=e)?"hidden":"")},e.prototype.reset=function(){this.el_.dataset.mdState="",this.active_=!1},e}();t.default=i}]));
\ No newline at end of file
diff --git a/assets/javascripts/application.a8b5e56f.js b/assets/javascripts/application.a8b5e56f.js
new file mode 100644
index 0000000..f30bf24
--- /dev/null
+++ b/assets/javascripts/application.a8b5e56f.js
@@ -0,0 +1,60 @@
+!function(e,t){for(var n in t)e[n]=t[n]}(window,function(n){var r={};function i(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=n,i.c=r,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=13)}([function(e,t,n){"use strict";var r={Listener:function(){function e(e,t,n){var r=this;this.els_=Array.prototype.slice.call("string"==typeof e?document.querySelectorAll(e):[].concat(e)),this.handler_="function"==typeof n?{update:n}:n,this.events_=[].concat(t),this.update_=function(e){return r.handler_.update(e)}}var t=e.prototype;return t.listen=function(){var n=this;this.els_.forEach(function(t){n.events_.forEach(function(e){t.addEventListener(e,n.update_,!1)})}),"function"==typeof this.handler_.setup&&this.handler_.setup()},t.unlisten=function(){var n=this;this.els_.forEach(function(t){n.events_.forEach(function(e){t.removeEventListener(e,n.update_)})}),"function"==typeof this.handler_.reset&&this.handler_.reset()},e}(),MatchMedia:function(e,t){this.handler_=function(e){e.matches?t.listen():t.unlisten()};var n=window.matchMedia(e);n.addListener(this.handler_),this.handler_(n)}},i={Shadow:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement&&n.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=n.parentNode,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLElement))throw new ReferenceError;this.header_=n,this.height_=0,this.active_=!1}var t=e.prototype;return t.setup=function(){for(var e=this.el_;e=e.previousElementSibling;){if(!(e instanceof HTMLElement))throw new ReferenceError;this.height_+=e.offsetHeight}this.update()},t.update=function(e){if(!e||"resize"!==e.type&&"orientationchange"!==e.type){var t=window.pageYOffset>=this.height_;t!==this.active_&&(this.header_.dataset.mdState=(this.active_=t)?"shadow":"")}else this.height_=0,this.setup()},t.reset=function(){this.header_.dataset.mdState="",this.height_=0,this.active_=!1},e}(),Title:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement))throw new ReferenceError;if(this.el_=n,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLHeadingElement))throw new ReferenceError;this.header_=n,this.active_=!1}var t=e.prototype;return t.setup=function(){var t=this;Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.update=function(e){var t=this,n=window.pageYOffset>=this.header_.offsetTop;n!==this.active_&&(this.el_.dataset.mdState=(this.active_=n)?"active":""),"resize"!==e.type&&"orientationchange"!==e.type||Array.prototype.forEach.call(this.el_.children,function(e){e.style.width=t.el_.offsetWidth-20+"px"})},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.width="",this.active_=!1},e}()},o={Blur:function(){function e(e){this.els_="string"==typeof e?document.querySelectorAll(e):e,this.index_=0,this.offset_=window.pageYOffset,this.dir_=!1,this.anchors_=[].reduce.call(this.els_,function(e,t){var n=decodeURIComponent(t.hash);return e.concat(document.getElementById(n.substring(1))||[])},[])}var t=e.prototype;return t.setup=function(){this.update()},t.update=function(){var e=window.pageYOffset,t=this.offset_-e<0;if(this.dir_!==t&&(this.index_=this.index_=t?0:this.els_.length-1),0!==this.anchors_.length){if(this.offset_<=e)for(var n=this.index_+1;n<this.els_.length&&this.anchors_[n].offsetTop-80<=e;n++)0<n&&(this.els_[n-1].dataset.mdState="blur"),this.index_=n;else for(var r=this.index_;0<=r;r--){if(!(this.anchors_[r].offsetTop-80>e)){this.index_=r;break}0<r&&(this.els_[r-1].dataset.mdState="")}this.offset_=e,this.dir_=t}},t.reset=function(){Array.prototype.forEach.call(this.els_,function(e){e.dataset.mdState=""}),this.index_=0,this.offset_=window.pageYOffset},e}(),Collapse:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}var t=e.prototype;return t.setup=function(){var e=this.el_.getBoundingClientRect().height;this.el_.style.display=e?"block":"none",this.el_.style.overflow=e?"visible":"hidden"},t.update=function(){var e=this,t=this.el_.getBoundingClientRect().height;this.el_.style.display="block",this.el_.style.overflow="";var r=this.el_.previousElementSibling.previousElementSibling.checked;if(r)this.el_.style.maxHeight=t+"px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight="0px"});else{this.el_.setAttribute("data-md-state","expand"),this.el_.style.maxHeight="";var n=this.el_.getBoundingClientRect().height;this.el_.removeAttribute("data-md-state"),this.el_.style.maxHeight="0px",requestAnimationFrame(function(){e.el_.setAttribute("data-md-state","animate"),e.el_.style.maxHeight=n+"px"})}this.el_.addEventListener("transitionend",function e(t){var n=t.target;if(!(n instanceof HTMLElement))throw new ReferenceError;n.removeAttribute("data-md-state"),n.style.maxHeight="",n.style.display=r?"none":"block",n.style.overflow=r?"hidden":"visible",n.removeEventListener("transitionend",e)},!1)},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.maxHeight="",this.el_.style.display="",this.el_.style.overflow=""},e}(),Scrolling:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}var t=e.prototype;return t.setup=function(){this.el_.children[this.el_.children.length-1].style.webkitOverflowScrolling="touch";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling="touch"}})},t.update=function(e){var t=e.target;if(!(t instanceof HTMLElement))throw new ReferenceError;var n=t.nextElementSibling;if(!(n instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==n.tagName&&n.nextElementSibling;)n=n.nextElementSibling;if(!(t.parentNode instanceof HTMLElement&&t.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var r=t.parentNode.parentNode,i=n.children[n.children.length-1];if(r.style.webkitOverflowScrolling="",i.style.webkitOverflowScrolling="",!t.checked){n.addEventListener("transitionend",function e(){n instanceof HTMLElement&&(r.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))},!1)}if(t.checked){n.addEventListener("transitionend",function e(){n instanceof HTMLElement&&(i.style.webkitOverflowScrolling="touch",n.removeEventListener("transitionend",e))},!1)}},t.reset=function(){this.el_.children[1].style.webkitOverflowScrolling="";var e=this.el_.querySelectorAll("[data-md-toggle]");Array.prototype.forEach.call(e,function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=e.nextElementSibling;if(!(t instanceof HTMLElement))throw new ReferenceError;for(;"NAV"!==t.tagName&&t.nextElementSibling;)t=t.nextElementSibling;if(!(e.parentNode instanceof HTMLElement&&e.parentNode.parentNode instanceof HTMLElement))throw new ReferenceError;var n=e.parentNode.parentNode,r=t.children[t.children.length-1];n.style.webkitOverflowScrolling="",r.style.webkitOverflowScrolling=""}})},e}()},a={Lock:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLInputElement))throw new ReferenceError;if(this.el_=t,!document.body)throw new ReferenceError;this.lock_=document.body}var t=e.prototype;return t.setup=function(){this.update()},t.update=function(){var e=this;this.el_.checked?(this.offset_=window.pageYOffset,setTimeout(function(){window.scrollTo(0,0),e.el_.checked&&(e.lock_.dataset.mdState="lock")},400)):(this.lock_.dataset.mdState="",setTimeout(function(){void 0!==e.offset_&&window.scrollTo(0,e.offset_)},100))},t.reset=function(){"lock"===this.lock_.dataset.mdState&&window.scrollTo(0,this.offset_),this.lock_.dataset.mdState=""},e}(),Result:n(9).a},s={Position:function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement&&n.parentNode instanceof HTMLElement))throw new ReferenceError;if(this.el_=n,this.parent_=n.parentNode,!((n="string"==typeof t?document.querySelector(t):t)instanceof HTMLElement))throw new ReferenceError;this.header_=n,this.height_=0,this.pad_="fixed"===window.getComputedStyle(this.header_).position}var t=e.prototype;return t.setup=function(){var e=Array.prototype.reduce.call(this.parent_.children,function(e,t){return Math.max(e,t.offsetTop)},0);this.offset_=e-(this.pad_?this.header_.offsetHeight:0),this.update()},t.update=function(e){var t=window.pageYOffset,n=window.innerHeight;e&&"resize"===e.type&&this.setup();var r=this.pad_?this.header_.offsetHeight:0,i=this.parent_.offsetTop+this.parent_.offsetHeight,o=n-r-Math.max(0,this.offset_-t)-Math.max(0,t+n-i);o!==this.height_&&(this.el_.style.height=(this.height_=o)+"px"),t>=this.offset_?"lock"!==this.el_.dataset.mdState&&(this.el_.dataset.mdState="lock"):"lock"===this.el_.dataset.mdState&&(this.el_.dataset.mdState="")},t.reset=function(){this.el_.dataset.mdState="",this.el_.style.height="",this.height_=0},e}()},c=n(6),l=n.n(c);var u={Adapter:{GitHub:function(o){var e,t;function n(e){var t;t=o.call(this,e)||this;var n=/^.+github\.com\/([^/]+)\/?([^/]+)?.*$/.exec(t.base_);if(n&&3===n.length){var r=n[1],i=n[2];t.base_="https://api.github.com/users/"+r+"/repos",t.name_=i}return t}return t=o,(e=n).prototype=Object.create(t.prototype),(e.prototype.constructor=e).__proto__=t,n.prototype.fetch_=function(){var i=this;return function n(r){return void 0===r&&(r=0),fetch(i.base_+"?per_page=100&sort=updated&page="+r).then(function(e){return e.json()}).then(function(e){if(!(e instanceof Array))return[];if(i.name_){var t=e.find(function(e){return e.name===i.name_});return t||30!==e.length?t?[i.format_(t.stargazers_count)+" Stars",i.format_(t.forks_count)+" Forks"]:[]:n(r+1)}return[e.length+" Repositories"]})}()},n}(function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLAnchorElement))throw new ReferenceError;this.el_=t,this.base_=this.el_.href,this.salt_=this.hash_(this.base_)}var t=e.prototype;return t.fetch=function(){var n=this;return new Promise(function(t){var e=l.a.getJSON(n.salt_+".cache-source");void 0!==e?t(e):n.fetch_().then(function(e){l.a.set(n.salt_+".cache-source",e,{expires:1/96}),t(e)})})},t.fetch_=function(){throw new Error("fetch_(): Not implemented")},t.format_=function(e){return 1e4<e?(e/1e3).toFixed(0)+"k":1e3<e?(e/1e3).toFixed(1)+"k":""+e},t.hash_=function(e){var t=0;if(0===e.length)return t;for(var n=0,r=e.length;n<r;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return t},e}())},Repository:n(10).a},f={Toggle:function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof Node))throw new ReferenceError;this.el_=t;var n=document.querySelector("[data-md-component=header]");this.height_=n.offsetHeight,this.active_=!1}var t=e.prototype;return t.update=function(){var e=window.pageYOffset>=this.el_.children[0].offsetTop+(5-this.height_);e!==this.active_&&(this.el_.dataset.mdState=(this.active_=e)?"hidden":"")},t.reset=function(){this.el_.dataset.mdState="",this.active_=!1},e}()};t.a={Event:r,Header:i,Nav:o,Search:a,Sidebar:s,Source:u,Tabs:f}},function(t,e,n){(function(e){t.exports=e.lunr=n(24)}).call(this,n(4))},function(e,d,h){"use strict";(function(t){var e=h(8),n=setTimeout;function c(e){return Boolean(e&&void 0!==e.length)}function r(){}function o(e){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function i(n,r){for(;3===n._state;)n=n._value;0!==n._state?(n._handled=!0,o._immediateFn(function(){var e=1===n._state?r.onFulfilled:r.onRejected;if(null!==e){var t;try{t=e(n._value)}catch(e){return void s(r.promise,e)}a(r.promise,t)}else(1===n._state?a:s)(r.promise,n._value)})):n._deferreds.push(r)}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void l(t);if("function"==typeof n)return void f((r=n,i=e,function(){r.apply(i,arguments)}),t)}t._state=1,t._value=e,l(t)}catch(e){s(t,e)}var r,i}function s(e,t){e._state=2,e._value=t,l(e)}function l(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)i(e,e._deferreds[t]);e._deferreds=null}function u(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function f(e,t){var n=!1;try{e(function(e){n||(n=!0,a(t,e))},function(e){n||(n=!0,s(t,e))})}catch(e){if(n)return;n=!0,s(t,e)}}o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var n=new this.constructor(r);return i(this,new u(e,t,n)),n},o.prototype.finally=e.a,o.all=function(t){return new o(function(r,i){if(!c(t))return i(new TypeError("Promise.all accepts an array"));var o=Array.prototype.slice.call(t);if(0===o.length)return r([]);var a=o.length;function s(t,e){try{if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if("function"==typeof n)return void n.call(e,function(e){s(t,e)},i)}o[t]=e,0==--a&&r(o)}catch(e){i(e)}}for(var e=0;e<o.length;e++)s(e,o[e])})},o.resolve=function(t){return t&&"object"==typeof t&&t.constructor===o?t:new o(function(e){e(t)})},o.reject=function(n){return new o(function(e,t){t(n)})},o.race=function(i){return new o(function(e,t){if(!c(i))return t(new TypeError("Promise.race accepts an array"));for(var n=0,r=i.length;n<r;n++)o.resolve(i[n]).then(e,t)})},o._immediateFn="function"==typeof t&&function(e){t(e)}||function(e){n(e,0)},o._unhandledRejectionFn=function(e){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",e)},d.a=o}).call(this,h(21).setImmediate)},function(e,t,n){"use strict";function r(e,t){var n=document.createElement(e);t&&Array.prototype.forEach.call(Object.keys(t),function(e){n.setAttribute(e,t[e])});for(var r=arguments.length,i=new Array(2<r?r-2:0),o=2;o<r;o++)i[o-2]=arguments[o];return function t(e){Array.prototype.forEach.call(e,function(e){"string"==typeof e||"number"==typeof e?n.textContent+=e:Array.isArray(e)?t(e):void 0!==e.__html?n.innerHTML+=e.__html:e instanceof Node&&n.appendChild(e)})}(i),n}n.r(t),n.d(t,"createElement",function(){return r})},function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){
+/*!
+ * clipboard.js v2.0.4
+ * https://zenorocha.github.io/clipboard.js
+ * 
+ * Licensed MIT © Zeno Rocha
+ */
+var r;r=function(){return function(n){var r={};function i(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=n,i.c=r,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=0)}([function(e,t,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),a=r(n(1)),s=r(n(3)),c=r(n(4));function r(e){return e&&e.__esModule?e:{default:e}}var l=function(e){function r(e,t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r);var n=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return n.resolveOptions(t),n.listenClick(e),n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(r,s.default),o(r,[{key:"resolveOptions",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===i(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,c.default)(e,"click",function(e){return t.onClick(e)})}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return u("action",e)}},{key:"defaultTarget",value:function(e){var t=u("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return u("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach(function(e){n=n&&!!document.queryCommandSupported(e)}),n}}]),r}();function u(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}e.exports=l},function(e,t,n){"use strict";var r,i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}}(),a=n(2),s=(r=a)&&r.__esModule?r:{default:r};var c=function(){function t(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),this.resolveOptions(e),this.initSelection()}return o(t,[{key:"resolveOptions",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":i(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),t}();e.exports=c},function(e,t){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),i=document.createRange();i.selectNodeContents(e),r.removeAllRanges(),r.addRange(i),t=r.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function i(){r.off(e,i),t.apply(n,arguments)}return i._=t,this.on(e,i,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,i=n.length;r<i;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],i=[];if(r&&t)for(var o=0,a=r.length;o<a;o++)r[o].fn!==t&&r[o].fn._!==t&&i.push(r[o]);return i.length?n[e]=i:delete n[e],this}},e.exports=n},function(e,t,n){var d=n(5),h=n(6);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!d.string(t))throw new TypeError("Second argument must be a String");if(!d.fn(n))throw new TypeError("Third argument must be a Function");if(d.node(e))return u=t,f=n,(l=e).addEventListener(u,f),{destroy:function(){l.removeEventListener(u,f)}};if(d.nodeList(e))return a=e,s=t,c=n,Array.prototype.forEach.call(a,function(e){e.addEventListener(s,c)}),{destroy:function(){Array.prototype.forEach.call(a,function(e){e.removeEventListener(s,c)})}};if(d.string(e))return r=e,i=t,o=n,h(document.body,r,i,o);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var r,i,o,a,s,c,l,u,f}},function(e,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},function(e,t,n){var a=n(7);function o(e,t,n,r,i){var o=function(t,n,e,r){return function(e){e.delegateTarget=a(e.target,n),e.delegateTarget&&r.call(t,e)}}.apply(this,arguments);return e.addEventListener(n,o,i),{destroy:function(){e.removeEventListener(n,o,i)}}}e.exports=function(e,t,n,r,i){return"function"==typeof e.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,function(e){return o(e,t,n,r,i)}))}},function(e,t){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}}])},e.exports=r()},function(r,i,o){var a,s;
+/*!
+ * JavaScript Cookie v2.2.1
+ * https://github.com/js-cookie/js-cookie
+ *
+ * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
+ * Released under the MIT license
+ */!function(e){if(void 0===(s="function"==typeof(a=e)?a.call(i,o,i,r):a)||(r.exports=s),!0,r.exports=e(),!!0){var t=window.Cookies,n=window.Cookies=e();n.noConflict=function(){return window.Cookies=t,n}}}(function(){function s(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function l(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function e(c){function a(){}function n(e,t,n){if("undefined"!=typeof document){"number"==typeof(n=s({path:"/"},a.defaults,n)).expires&&(n.expires=new Date(1*new Date+864e5*n.expires)),n.expires=n.expires?n.expires.toUTCString():"";try{var r=JSON.stringify(t);/^[\{\[]/.test(r)&&(t=r)}catch(e){}t=c.write?c.write(t,e):encodeURIComponent(String(t)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),e=encodeURIComponent(String(e)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var i="";for(var o in n)n[o]&&(i+="; "+o,!0!==n[o]&&(i+="="+n[o].split(";")[0]));return document.cookie=e+"="+t+i}}function t(e,t){if("undefined"!=typeof document){for(var n={},r=document.cookie?document.cookie.split("; "):[],i=0;i<r.length;i++){var o=r[i].split("="),a=o.slice(1).join("=");t||'"'!==a.charAt(0)||(a=a.slice(1,-1));try{var s=l(o[0]);if(a=(c.read||c)(a,s)||l(a),t)try{a=JSON.parse(a)}catch(e){}if(n[s]=a,e===s)break}catch(e){}}return e?n[e]:n}}return a.set=n,a.get=function(e){return t(e,!1)},a.getJSON=function(e){return t(e,!0)},a.remove=function(e,t){n(e,"",s(t,{expires:-1}))},a.defaults={},a.withConverter=e,a}(function(){})})},function(e,t,n){"use strict";n.r(t);var r="function"==typeof fetch?fetch.bind():function(i,o){return o=o||{},new Promise(function(e,t){var n=new XMLHttpRequest;for(var r in n.open(o.method||"get",i,!0),o.headers)n.setRequestHeader(r,o.headers[r]);function s(){var r,i=[],o=[],a={};return n.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,function(e,t,n){i.push(t=t.toLowerCase()),o.push([t,n]),r=a[t],a[t]=r?r+","+n:n}),{ok:2==(n.status/100|0),status:n.status,statusText:n.statusText,url:n.responseURL,clone:s,text:function(){return Promise.resolve(n.responseText)},json:function(){return Promise.resolve(n.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([n.response]))},headers:{keys:function(){return i},entries:function(){return o},get:function(e){return a[e.toLowerCase()]},has:function(e){return e.toLowerCase()in a}}}}n.withCredentials="include"==o.credentials,n.onload=function(){e(s())},n.onerror=t,n.send(o.body||null)})};t.default=r},function(e,t,n){"use strict";t.a=function(t){var n=this.constructor;return this.then(function(e){return n.resolve(t()).then(function(){return e})},function(e){return n.resolve(t()).then(function(){return n.reject(e)})})}},function(e,n,r){"use strict";(function(f){r.d(n,"a",function(){return t});var e=r(1),d=r.n(e),h=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content},t=function(){function e(e,t){var n="string"==typeof e?document.querySelector(e):e;if(!(n instanceof HTMLElement))throw new ReferenceError;this.el_=n;var r=Array.prototype.slice.call(this.el_.children),i=r[0],o=r[1];this.data_=t,this.meta_=i,this.list_=o,this.message_={placeholder:this.meta_.textContent,none:h("search.result.none"),one:h("search.result.one"),other:h("search.result.other")};var a=h("search.tokenizer");a.length&&(d.a.tokenizer.separator=a),this.lang_=h("search.language").split(",").filter(Boolean).map(function(e){return e.trim()})}return e.prototype.update=function(e){var t,a=this;if("focus"!==e.type||this.index_){if("focus"===e.type||"keyup"===e.type){var n=e.target;if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!this.index_||n.value===this.value_)return;for(;this.list_.firstChild;)this.list_.removeChild(this.list_.firstChild);if(this.value_=n.value,0===this.value_.length)return void(this.meta_.textContent=this.message_.placeholder);var r=this.index_.query(function(t){a.value_.toLowerCase().split(" ").filter(Boolean).forEach(function(e){t.term(e,{wildcard:d.a.Query.wildcard.TRAILING})})}).reduce(function(e,t){var n=a.docs_.get(t.ref);if(n.parent){var r=n.parent.location;e.set(r,(e.get(r)||[]).concat(t))}else{var i=n.location;e.set(i,e.get(i)||[])}return e},new Map),i=(t=this.value_.trim(),t.replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&")).replace(new RegExp(d.a.tokenizer.separator,"img"),"|"),s=new RegExp("(^|"+d.a.tokenizer.separator+")("+i+")","img"),c=function(e,t,n){return t+"<em>"+n+"</em>"};this.stack_=[],r.forEach(function(e,t){var n,r=a.docs_.get(t),i=f.createElement("li",{class:"md-search-result__item"},f.createElement("a",{href:r.location,title:r.title,class:"md-search-result__link",tabindex:"-1"},f.createElement("article",{class:"md-search-result__article md-search-result__article--document"},f.createElement("h1",{class:"md-search-result__title"},{__html:r.title.replace(s,c)}),r.text.length?f.createElement("p",{class:"md-search-result__teaser"},{__html:r.text.replace(s,c)}):{}))),o=e.map(function(t){return function(){var e=a.docs_.get(t.ref);i.appendChild(f.createElement("a",{href:e.location,title:e.title,class:"md-search-result__link","data-md-rel":"anchor",tabindex:"-1"},f.createElement("article",{class:"md-search-result__article"},f.createElement("h1",{class:"md-search-result__title"},{__html:e.title.replace(s,c)}),e.text.length?f.createElement("p",{class:"md-search-result__teaser"},{__html:function(e,t){var n=t;if(e.length>n){for(;" "!==e[n]&&0<--n;);return e.substring(0,n)+"..."}return e}(e.text.replace(s,c),400)}):{})))}});(n=a.stack_).push.apply(n,[function(){return a.list_.appendChild(i)}].concat(o))});var o=this.el_.parentNode;if(!(o instanceof HTMLElement))throw new ReferenceError;for(;this.stack_.length&&o.offsetHeight>=o.scrollHeight-16;)this.stack_.shift()();var l=this.list_.querySelectorAll("[data-md-rel=anchor]");switch(Array.prototype.forEach.call(l,function(r){["click","keydown"].forEach(function(n){r.addEventListener(n,function(e){if("keydown"!==n||13===e.keyCode){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.checked&&(t.checked=!1,t.dispatchEvent(new CustomEvent("change"))),e.preventDefault(),setTimeout(function(){document.location.href=r.href},100)}})})}),r.size){case 0:this.meta_.textContent=this.message_.none;break;case 1:this.meta_.textContent=this.message_.one;break;default:this.meta_.textContent=this.message_.other.replace("#",r.size)}}}else{var u=function(e){a.docs_=e.reduce(function(e,t){var n,r,i,o=t.location.split("#"),a=o[0],s=o[1];return t.text=(n=t.text,r=document.createTextNode(n),(i=document.createElement("p")).appendChild(r),i.innerHTML),s&&(t.parent=e.get(a),t.parent&&!t.parent.done&&(t.parent.title=t.title,t.parent.text=t.text,t.parent.done=!0)),t.text=t.text.replace(/\n/g," ").replace(/\s+/g," ").replace(/\s+([,.:;!?])/g,function(e,t){return t}),t.parent&&t.parent.title===t.title||e.set(t.location,t),e},new Map);var i=a.docs_,o=a.lang_;a.stack_=[],a.index_=d()(function(){var e,t=this,n={"search.pipeline.trimmer":d.a.trimmer,"search.pipeline.stopwords":d.a.stopWordFilter},r=Object.keys(n).reduce(function(e,t){return h(t).match(/^false$/i)||e.push(n[t]),e},[]);this.pipeline.reset(),r&&(e=this.pipeline).add.apply(e,r),1===o.length&&"en"!==o[0]&&d.a[o[0]]?this.use(d.a[o[0]]):1<o.length&&this.use(d.a.multiLanguage.apply(d.a,o)),this.field("title",{boost:10}),this.field("text"),this.ref("location"),i.forEach(function(e){return t.add(e)})});var t=a.el_.parentNode;if(!(t instanceof HTMLElement))throw new ReferenceError;t.addEventListener("scroll",function(){for(;a.stack_.length&&t.scrollTop+t.offsetHeight>=t.scrollHeight-16;)a.stack_.splice(0,10).forEach(function(e){return e()})})};setTimeout(function(){return"function"==typeof a.data_?a.data_().then(u):u(a.data_)},250)}},e}()}).call(this,r(3))},function(e,n,r){"use strict";(function(t){r.d(n,"a",function(){return e});var e=function(){function e(e){var t="string"==typeof e?document.querySelector(e):e;if(!(t instanceof HTMLElement))throw new ReferenceError;this.el_=t}return e.prototype.initialize=function(e){e.length&&this.el_.children.length&&this.el_.children[this.el_.children.length-1].appendChild(t.createElement("ul",{class:"md-source__facts"},e.map(function(e){return t.createElement("li",{class:"md-source__fact"},e)}))),this.el_.dataset.mdState="done"},e}()}).call(this,r(3))},,,function(e,n,c){"use strict";c.r(n),function(o){c.d(n,"app",function(){return t});c(14),c(15),c(16),c(17),c(18),c(19),c(20);var r=c(2),e=c(5),a=c.n(e),i=c(0);window.Promise=window.Promise||r.a;var s=function(e){var t=document.getElementsByName("lang:"+e)[0];if(!(t instanceof HTMLMetaElement))throw new ReferenceError;return t.content};var t={initialize:function(t){new i.a.Event.Listener(document,"DOMContentLoaded",function(){if(!(document.body instanceof HTMLElement))throw new ReferenceError;Modernizr.addTest("ios",function(){return!!navigator.userAgent.match(/(iPad|iPhone|iPod)/g)});var e=document.querySelectorAll("table:not([class])");if(Array.prototype.forEach.call(e,function(e){var t=o.createElement("div",{class:"md-typeset__scrollwrap"},o.createElement("div",{class:"md-typeset__table"}));e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.children[0].appendChild(e)}),a.a.isSupported()){var t=document.querySelectorAll(".codehilite > pre, pre > code");Array.prototype.forEach.call(t,function(e,t){var n="__code_"+t,r=o.createElement("button",{class:"md-clipboard",title:s("clipboard.copy"),"data-clipboard-target":"#"+n+" pre, #"+n+" code"},o.createElement("span",{class:"md-clipboard__message"})),i=e.parentNode;i.id=n,i.insertBefore(r,e)}),new a.a(".md-clipboard").on("success",function(e){var t=e.trigger.querySelector(".md-clipboard__message");if(!(t instanceof HTMLElement))throw new ReferenceError;e.clearSelection(),t.dataset.mdTimer&&clearTimeout(parseInt(t.dataset.mdTimer,10)),t.classList.add("md-clipboard__message--active"),t.innerHTML=s("clipboard.copied"),t.dataset.mdTimer=setTimeout(function(){t.classList.remove("md-clipboard__message--active"),t.dataset.mdTimer=""},2e3).toString()})}if(!Modernizr.details){var n=document.querySelectorAll("details > summary");Array.prototype.forEach.call(n,function(e){e.addEventListener("click",function(e){var t=e.target.parentNode;t.hasAttribute("open")?t.removeAttribute("open"):t.setAttribute("open","")})})}var r=function(){if(document.location.hash){var e=document.getElementById(document.location.hash.substring(1));if(!e)return;for(var t=e.parentNode;t&&!(t instanceof HTMLDetailsElement);)t=t.parentNode;if(t&&!t.open){t.open=!0;var n=location.hash;location.hash=" ",location.hash=n}}};if(window.addEventListener("hashchange",r),r(),Modernizr.ios){var i=document.querySelectorAll("[data-md-scrollfix]");Array.prototype.forEach.call(i,function(t){t.addEventListener("touchstart",function(){var e=t.scrollTop;0===e?t.scrollTop=1:e+t.offsetHeight===t.scrollHeight&&(t.scrollTop=e-1)})})}}).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Shadow("[data-md-component=container]","[data-md-component=header]")).listen(),new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Header.Title("[data-md-component=title]",".md-typeset h1")).listen(),document.querySelector("[data-md-component=hero]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=hero]")).listen(),document.querySelector("[data-md-component=tabs]")&&new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Tabs.Toggle("[data-md-component=tabs]")).listen(),new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=navigation]","[data-md-component=header]"))),document.querySelector("[data-md-component=toc]")&&new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,["scroll","resize","orientationchange"],new i.a.Sidebar.Position("[data-md-component=toc]","[data-md-component=header]"))),new i.a.Event.MatchMedia("(min-width: 960px)",new i.a.Event.Listener(window,"scroll",new i.a.Nav.Blur("[data-md-component=toc] .md-nav__link")));var e=document.querySelectorAll("[data-md-component=collapsible]");Array.prototype.forEach.call(e,function(e){new i.a.Event.MatchMedia("(min-width: 1220px)",new i.a.Event.Listener(e.previousElementSibling,"click",new i.a.Nav.Collapse(e)))}),new i.a.Event.MatchMedia("(max-width: 1219px)",new i.a.Event.Listener("[data-md-component=navigation] [data-md-toggle]","change",new i.a.Nav.Scrolling("[data-md-component=navigation] nav"))),document.querySelector("[data-md-component=search]")&&(new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-toggle=search]","change",new i.a.Search.Lock("[data-md-toggle=search]"))),new i.a.Event.Listener("[data-md-component=query]",["focus","keyup","change"],new i.a.Search.Result("[data-md-component=result]",function(){return fetch(t.url.base+"/search/search_index.json",{credentials:"same-origin"}).then(function(e){return e.json()}).then(function(e){return e.docs.map(function(e){return e.location=t.url.base+"/"+e.location,e})})})).listen(),new i.a.Event.Listener("[data-md-component=reset]","click",function(){setTimeout(function(){var e=document.querySelector("[data-md-component=query]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.focus()},10)}).listen(),new i.a.Event.Listener("[data-md-toggle=search]","change",function(e){setTimeout(function(e){if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t.focus()}},400,e.target)}).listen(),new i.a.Event.Listener("[data-md-component=query]","focus",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked||(e.checked=!0,e.dispatchEvent(new CustomEvent("change")))}).listen(),new i.a.Event.Listener(window,"keydown",function(e){var t=document.querySelector("[data-md-toggle=search]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;var n=document.querySelector("[data-md-component=query]");if(!(n instanceof HTMLInputElement))throw new ReferenceError;if(!(document.activeElement instanceof HTMLElement&&document.activeElement.isContentEditable||e.metaKey||e.ctrlKey))if(t.checked){if(13===e.keyCode){if(n===document.activeElement){e.preventDefault();var r=document.querySelector("[data-md-component=search] [href][data-md-state=active]");r instanceof HTMLLinkElement&&(window.location=r.getAttribute("href"),t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur())}}else if(9===e.keyCode||27===e.keyCode)t.checked=!1,t.dispatchEvent(new CustomEvent("change")),n.blur();else if(-1!==[8,37,39].indexOf(e.keyCode))n!==document.activeElement&&n.focus();else if(-1!==[38,40].indexOf(e.keyCode)){var i=e.keyCode,o=Array.prototype.slice.call(document.querySelectorAll("[data-md-component=query], [data-md-component=search] [href]")),a=o.find(function(e){if(!(e instanceof HTMLElement))throw new ReferenceError;return"active"===e.dataset.mdState});a&&(a.dataset.mdState="");var s=Math.max(0,(o.indexOf(a)+o.length+(38===i?-1:1))%o.length);return o[s]&&(o[s].dataset.mdState="active",o[s].focus()),e.preventDefault(),e.stopPropagation(),!1}}else if(document.activeElement&&!document.activeElement.form){if("TEXTAREA"===document.activeElement.tagName||"INPUT"===document.activeElement.tagName)return;70!==e.keyCode&&83!==e.keyCode||(n.focus(),e.preventDefault())}}).listen(),new i.a.Event.Listener(window,"keypress",function(){var e=document.querySelector("[data-md-toggle=search]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;if(e.checked){var t=document.querySelector("[data-md-component=query]");if(!(t instanceof HTMLInputElement))throw new ReferenceError;t!==document.activeElement&&t.focus()}}).listen()),new i.a.Event.Listener(document.body,"keydown",function(e){if(9===e.keyCode){var t=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[for]:not([tabindex])");Array.prototype.forEach.call(t,function(e){e.offsetHeight&&(e.tabIndex=0)})}}).listen(),new i.a.Event.Listener(document.body,"mousedown",function(){var e=document.querySelectorAll("[data-md-component=navigation] .md-nav__link[tabindex]");Array.prototype.forEach.call(e,function(e){e.removeAttribute("tabIndex")})}).listen(),document.body.addEventListener("click",function(){"tabbing"===document.body.dataset.mdState&&(document.body.dataset.mdState="")}),new i.a.Event.MatchMedia("(max-width: 959px)",new i.a.Event.Listener("[data-md-component=navigation] [href^='#']","click",function(){var e=document.querySelector("[data-md-toggle=drawer]");if(!(e instanceof HTMLInputElement))throw new ReferenceError;e.checked&&(e.checked=!1,e.dispatchEvent(new CustomEvent("change")))})),function(){var e=document.querySelector("[data-md-source]");if(!e)return r.a.resolve([]);if(!(e instanceof HTMLAnchorElement))throw new ReferenceError;switch(e.dataset.mdSource){case"github":return new i.a.Source.Adapter.GitHub(e).fetch();default:return r.a.resolve([])}}().then(function(t){var e=document.querySelectorAll("[data-md-source]");Array.prototype.forEach.call(e,function(e){new i.a.Source.Repository(e).initialize(t)})});var n=function(){var e=document.querySelectorAll("details");Array.prototype.forEach.call(e,function(e){e.setAttribute("open","")})};new i.a.Event.MatchMedia("print",{listen:n,unlisten:function(){}}),window.onbeforeprint=n}}}.call(this,c(3))},function(e,t,n){e.exports=n.p+"assets/images/icons/bitbucket.1b09e088.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/github.f0b8504a.svg"},function(e,t,n){e.exports=n.p+"assets/images/icons/gitlab.6dd19c00.svg"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application.1b62728e.css"},function(e,t){e.exports="/home/travis/build/squidfunk/mkdocs-material/material/application-palette.a8b3c06d.css"},function(e,t){!function(){if("undefined"!=typeof window)try{var e=new window.CustomEvent("test",{cancelable:!0});if(e.preventDefault(),!0!==e.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var t=function(e,t){var n,r;return(t=t||{}).bubbles=!!t.bubbles,t.cancelable=!!t.cancelable,(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),r=n.preventDefault,n.preventDefault=function(){r.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};t.prototype=window.Event.prototype,window.CustomEvent=t}}()},function(e,t,n){window.fetch||(window.fetch=n(7).default||n(7))},function(e,i,o){(function(e){var t=void 0!==e&&e||"undefined"!=typeof self&&self||window,n=Function.prototype.apply;function r(e,t){this._id=e,this._clearFn=t}i.setTimeout=function(){return new r(n.call(setTimeout,t,arguments),clearTimeout)},i.setInterval=function(){return new r(n.call(setInterval,t,arguments),clearInterval)},i.clearTimeout=i.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(t,this._id)},i.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},i.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},i._unrefActive=i.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;0<=t&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},o(22),i.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==e&&e.setImmediate||this&&this.setImmediate,i.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==e&&e.clearImmediate||this&&this.clearImmediate}).call(this,o(4))},function(e,t,n){(function(e,p){!function(n,r){"use strict";if(!n.setImmediate){var i,o,t,a,e,s=1,c={},l=!1,u=n.document,f=Object.getPrototypeOf&&Object.getPrototypeOf(n);f=f&&f.setTimeout?f:n,i="[object process]"==={}.toString.call(n.process)?function(e){p.nextTick(function(){h(e)})}:function(){if(n.postMessage&&!n.importScripts){var e=!0,t=n.onmessage;return n.onmessage=function(){e=!1},n.postMessage("","*"),n.onmessage=t,e}}()?(a="setImmediate$"+Math.random()+"$",e=function(e){e.source===n&&"string"==typeof e.data&&0===e.data.indexOf(a)&&h(+e.data.slice(a.length))},n.addEventListener?n.addEventListener("message",e,!1):n.attachEvent("onmessage",e),function(e){n.postMessage(a+e,"*")}):n.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){h(e.data)},function(e){t.port2.postMessage(e)}):u&&"onreadystatechange"in u.createElement("script")?(o=u.documentElement,function(e){var t=u.createElement("script");t.onreadystatechange=function(){h(e),t.onreadystatechange=null,o.removeChild(t),t=null},o.appendChild(t)}):function(e){setTimeout(h,0,e)},f.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n<t.length;n++)t[n]=arguments[n+1];var r={callback:e,args:t};return c[s]=r,i(s),s++},f.clearImmediate=d}function d(e){delete c[e]}function h(e){if(l)setTimeout(h,0,e);else{var t=c[e];if(t){l=!0;try{!function(e){var t=e.callback,n=e.args;switch(n.length){case 0:t();break;case 1:t(n[0]);break;case 2:t(n[0],n[1]);break;case 3:t(n[0],n[1],n[2]);break;default:t.apply(r,n)}}(t)}finally{d(e),l=!1}}}}}("undefined"==typeof self?void 0===e?this:e:self)}).call(this,n(4),n(23))},function(e,t){var n,r,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(e){n=o}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,l=[],u=!1,f=-1;function d(){u&&c&&(u=!1,c.length?l=c.concat(l):f=-1,l.length&&h())}function h(){if(!u){var e=s(d);u=!0;for(var t=l.length;t;){for(c=l,l=[];++f<t;)c&&c[f].run();f=-1,t=l.length}c=null,u=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function m(){}i.nextTick=function(e){var t=new Array(arguments.length-1);if(1<arguments.length)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new p(e,t)),1!==l.length||u||s(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=m,i.addListener=m,i.once=m,i.off=m,i.removeListener=m,i.removeAllListeners=m,i.emit=m,i.prependListener=m,i.prependOnceListener=m,i.listeners=function(e){return[]},i.binding=function(e){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(e){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(i,o,a){var s,c;!function(){var t,l,u,e,n,f,d,h,p,m,y,v,g,w,_,E,x,b,k,S,T,L,R,O,C,r,D=function(e){var t=new D.Builder;return t.pipeline.add(D.trimmer,D.stopWordFilter,D.stemmer),t.searchPipeline.add(D.stemmer),e.call(t,t),t.build()};D.version="2.3.8"
+/*!
+ * lunr.utils
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.utils={},D.utils.warn=(t=this,function(e){t.console&&console.warn&&console.warn(e)}),D.utils.asString=function(e){return null==e?"":e.toString()},D.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var i=n[r],o=e[i];if(Array.isArray(o))t[i]=o.slice();else{if("string"!=typeof o&&"number"!=typeof o&&"boolean"!=typeof o)throw new TypeError("clone is not deep and does not support nested objects");t[i]=o}}return t},D.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},D.FieldRef.joiner="/",D.FieldRef.fromString=function(e){var t=e.indexOf(D.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new D.FieldRef(r,n,e)},D.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+D.FieldRef.joiner+this.docRef),this._stringValue}
+/*!
+ * lunr.Set
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},D.Set.complete={intersect:function(e){return e},union:function(e){return e},contains:function(){return!0}},D.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},D.Set.prototype.contains=function(e){return!!this.elements[e]},D.Set.prototype.intersect=function(e){var t,n,r,i=[];if(e===D.Set.complete)return this;if(e===D.Set.empty)return e;n=this.length<e.length?(t=this,e):(t=e,this),r=Object.keys(t.elements);for(var o=0;o<r.length;o++){var a=r[o];a in n.elements&&i.push(a)}return new D.Set(i)},D.Set.prototype.union=function(e){return e===D.Set.complete?D.Set.complete:e===D.Set.empty?this:new D.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},D.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var i=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(i))},D.Token=function(e,t){this.str=e||"",this.metadata=t||{}},D.Token.prototype.toString=function(){return this.str},D.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},D.Token.prototype.clone=function(e){return e=e||function(e){return e},new D.Token(e(this.str,this.metadata),this.metadata)}
+/*!
+ * lunr.tokenizer
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return new D.Token(D.utils.asString(e).toLowerCase(),D.utils.clone(t))});for(var n=e.toString().toLowerCase(),r=n.length,i=[],o=0,a=0;o<=r;o++){var s=o-a;if(n.charAt(o).match(D.tokenizer.separator)||o==r){if(0<s){var c=D.utils.clone(t)||{};c.position=[a,s],c.index=i.length,i.push(new D.Token(n.slice(a,o),c))}a=o+1}}return i},D.tokenizer.separator=/[\s\-]+/
+/*!
+ * lunr.Pipeline
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.Pipeline=function(){this._stack=[]},D.Pipeline.registeredFunctions=Object.create(null),D.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&D.utils.warn("Overwriting existing registered function: "+t),e.label=t,D.Pipeline.registeredFunctions[e.label]=e},D.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||D.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},D.Pipeline.load=function(e){var n=new D.Pipeline;return e.forEach(function(e){var t=D.Pipeline.registeredFunctions[e];if(!t)throw new Error("Cannot load unregistered function: "+e);n.add(t)}),n},D.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){D.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},D.Pipeline.prototype.after=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},D.Pipeline.prototype.before=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},D.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},D.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],i=[],o=0;o<e.length;o++){var a=r(e[o],o,e);if(null!=a&&""!==a)if(Array.isArray(a))for(var s=0;s<a.length;s++)i.push(a[s]);else i.push(a)}e=i}return e},D.Pipeline.prototype.runString=function(e,t){var n=new D.Token(e,t);return this.run([n]).map(function(e){return e.toString()})},D.Pipeline.prototype.reset=function(){this._stack=[]},D.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return D.Pipeline.warnIfFunctionNotRegistered(e),e.label})}
+/*!
+ * lunr.Vector
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.Vector=function(e){this._magnitude=0,this.elements=e||[]},D.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,i=Math.floor(r/2),o=this.elements[2*i];1<r&&(o<e&&(t=i),e<o&&(n=i),o!=e);)r=n-t,i=t+Math.floor(r/2),o=this.elements[2*i];return o==e?2*i:e<o?2*i:o<e?2*(i+1):void 0},D.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},D.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},D.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},D.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,i=n.length,o=r.length,a=0,s=0,c=0,l=0;c<i&&l<o;)(a=n[c])<(s=r[l])?c+=2:s<a?l+=2:a==s&&(t+=n[c+1]*r[l+1],c+=2,l+=2);return t},D.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},D.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},D.Vector.prototype.toJSON=function(){return this.elements}
+/*!
+ * lunr.stemmer
+ * Copyright (C) 2019 Oliver Nightingale
+ * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
+ */,D.stemmer=(l={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},u={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},e="[aeiouy]",n="[^aeiou][^aeiouy]*",f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),m=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,w=/.$/,_=/(at|bl|iz)$/,E=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+n+e+"[^aeiouwxy]$"),b=/^(.+?[^aeiou])y$/,k=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,S=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,L=/^(.+?)(s|t)(ion)$/,R=/^(.+?)e$/,O=/ll$/,C=new RegExp("^"+n+e+"[^aeiouwxy]$"),r=function(e){var t,n,r,i,o,a,s;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),o=y,(i=m).test(e)?e=e.replace(i,"$1$2"):o.test(e)&&(e=e.replace(o,"$1$2")),o=g,(i=v).test(e)){var c=i.exec(e);(i=f).test(c[1])&&(i=w,e=e.replace(i,""))}else if(o.test(e)){t=(c=o.exec(e))[1],(o=p).test(t)&&(a=E,s=x,(o=_).test(e=t)?e+="e":a.test(e)?(i=w,e=e.replace(i,"")):s.test(e)&&(e+="e"))}(i=b).test(e)&&(e=(t=(c=i.exec(e))[1])+"i");(i=k).test(e)&&(t=(c=i.exec(e))[1],n=c[2],(i=f).test(t)&&(e=t+l[n]));(i=S).test(e)&&(t=(c=i.exec(e))[1],n=c[2],(i=f).test(t)&&(e=t+u[n]));if(o=L,(i=T).test(e))t=(c=i.exec(e))[1],(i=d).test(t)&&(e=t);else if(o.test(e)){t=(c=o.exec(e))[1]+c[2],(o=d).test(t)&&(e=t)}(i=R).test(e)&&(t=(c=i.exec(e))[1],o=h,a=C,((i=d).test(t)||o.test(t)&&!a.test(t))&&(e=t));return o=d,(i=O).test(e)&&o.test(e)&&(i=w,e=e.replace(i,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(r)}),D.Pipeline.registerFunction(D.stemmer,"stemmer")
+/*!
+ * lunr.stopWordFilter
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},D.stopWordFilter=D.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),D.Pipeline.registerFunction(D.stopWordFilter,"stopWordFilter")
+/*!
+ * lunr.trimmer
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},D.Pipeline.registerFunction(D.trimmer,"trimmer")
+/*!
+ * lunr.TokenSet
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.TokenSet=function(){this.final=!1,this.edges={},this.id=D.TokenSet._nextId,D.TokenSet._nextId+=1},D.TokenSet._nextId=1,D.TokenSet.fromArray=function(e){for(var t=new D.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},D.TokenSet.fromClause=function(e){return"editDistance"in e?D.TokenSet.fromFuzzyString(e.term,e.editDistance):D.TokenSet.fromString(e.term)},D.TokenSet.fromFuzzyString=function(e,t){for(var n=new D.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var i=r.pop();if(0<i.str.length){var o,a=i.str.charAt(0);a in i.node.edges?o=i.node.edges[a]:(o=new D.TokenSet,i.node.edges[a]=o),1==i.str.length&&(o.final=!0),r.push({node:o,editsRemaining:i.editsRemaining,str:i.str.slice(1)})}if(0!=i.editsRemaining){if("*"in i.node.edges)var s=i.node.edges["*"];else{s=new D.TokenSet;i.node.edges["*"]=s}if(0==i.str.length&&(s.final=!0),r.push({node:s,editsRemaining:i.editsRemaining-1,str:i.str}),1<i.str.length&&r.push({node:i.node,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)}),1==i.str.length&&(i.node.final=!0),1<=i.str.length){if("*"in i.node.edges)var c=i.node.edges["*"];else{c=new D.TokenSet;i.node.edges["*"]=c}1==i.str.length&&(c.final=!0),r.push({node:c,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)})}if(1<i.str.length){var l,u=i.str.charAt(0),f=i.str.charAt(1);f in i.node.edges?l=i.node.edges[f]:(l=new D.TokenSet,i.node.edges[f]=l),1==i.str.length&&(l.final=!0),r.push({node:l,editsRemaining:i.editsRemaining-1,str:u+i.str.slice(2)})}}}return n},D.TokenSet.fromString=function(e){for(var t=new D.TokenSet,n=t,r=0,i=e.length;r<i;r++){var o=e[r],a=r==i-1;if("*"==o)(t.edges[o]=t).final=a;else{var s=new D.TokenSet;s.final=a,t.edges[o]=s,t=s}}return n},D.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),i=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<i;o++){var a=r[o];t.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},D.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var i=t[r];e=e+i+this.edges[i].id}return e},D.TokenSet.prototype.intersect=function(e){for(var t=new D.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var i=Object.keys(n.qNode.edges),o=i.length,a=Object.keys(n.node.edges),s=a.length,c=0;c<o;c++)for(var l=i[c],u=0;u<s;u++){var f=a[u];if(f==l||"*"==l){var d=n.node.edges[f],h=n.qNode.edges[l],p=d.final&&h.final,m=void 0;f in n.output.edges?(m=n.output.edges[f]).final=m.final||p:((m=new D.TokenSet).final=p,n.output.edges[f]=m),r.push({qNode:h,output:m,node:d})}}}return t},D.TokenSet.Builder=function(){this.previousWord="",this.root=new D.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},D.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var i=new D.TokenSet,o=e[r];t.edges[o]=i,this.uncheckedNodes.push({parent:t,char:o,child:i}),t=i}t.final=!0,this.previousWord=e},D.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},D.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;e<=t;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}}
+/*!
+ * lunr.Index
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},D.Index.prototype.search=function(t){return this.query(function(e){new D.QueryParser(t,e).parse()})},D.Index.prototype.query=function(e){for(var t=new D.Query(this.fields),n=Object.create(null),r=Object.create(null),i=Object.create(null),o=Object.create(null),a=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new D.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var c=t.clauses[s],l=null,u=D.Set.complete;l=c.usePipeline?this.pipeline.runString(c.term,{fields:c.fields}):[c.term];for(var f=0;f<l.length;f++){var d=l[f];c.term=d;var h=D.TokenSet.fromClause(c),p=this.tokenSet.intersect(h).toArray();if(0===p.length&&c.presence===D.Query.presence.REQUIRED){for(var m=0;m<c.fields.length;m++){o[P=c.fields[m]]=D.Set.empty}break}for(var y=0;y<p.length;y++){var v=p[y],g=this.invertedIndex[v],w=g._index;for(m=0;m<c.fields.length;m++){var _=g[P=c.fields[m]],E=Object.keys(_),x=v+"/"+P,b=new D.Set(E);if(c.presence==D.Query.presence.REQUIRED&&(u=u.union(b),void 0===o[P]&&(o[P]=D.Set.complete)),c.presence!=D.Query.presence.PROHIBITED){if(r[P].upsert(w,c.boost,function(e,t){return e+t}),!i[x]){for(var k=0;k<E.length;k++){var S,T=E[k],L=new D.FieldRef(T,P),R=_[T];void 0===(S=n[L])?n[L]=new D.MatchData(v,P,R):S.add(v,P,R)}i[x]=!0}}else void 0===a[P]&&(a[P]=D.Set.empty),a[P]=a[P].union(b)}}}if(c.presence===D.Query.presence.REQUIRED)for(m=0;m<c.fields.length;m++){o[P=c.fields[m]]=o[P].intersect(u)}}var O=D.Set.complete,C=D.Set.empty;for(s=0;s<this.fields.length;s++){var P;o[P=this.fields[s]]&&(O=O.intersect(o[P])),a[P]&&(C=C.union(a[P]))}var Q=Object.keys(n),A=[],I=Object.create(null);if(t.isNegated()){Q=Object.keys(this.fieldVectors);for(s=0;s<Q.length;s++){L=Q[s];var M=D.FieldRef.fromString(L);n[L]=new D.MatchData}}for(s=0;s<Q.length;s++){var N=(M=D.FieldRef.fromString(Q[s])).docRef;if(O.contains(N)&&!C.contains(N)){var j,F=this.fieldVectors[M],H=r[M.fieldName].similarity(F);if(void 0!==(j=I[N]))j.score+=H,j.matchData.combine(n[M]);else{var q={ref:N,score:H,matchData:n[M]};I[N]=q,A.push(q)}}}return A.sort(function(e,t){return t.score-e.score})},D.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:D.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},D.Index.load=function(e){var t={},n={},r=e.fieldVectors,i=Object.create(null),o=e.invertedIndex,a=new D.TokenSet.Builder,s=D.Pipeline.load(e.pipeline);e.version!=D.version&&D.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+D.version+"' does not match serialized index '"+e.version+"'");for(var c=0;c<r.length;c++){var l=(f=r[c])[0],u=f[1];n[l]=new D.Vector(u)}for(c=0;c<o.length;c++){var f,d=(f=o[c])[0],h=f[1];a.insert(d),i[d]=h}return a.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=i,t.tokenSet=a.root,t.pipeline=s,new D.Index(t)}
+/*!
+ * lunr.Builder
+ * Copyright (C) 2019 Oliver Nightingale
+ */,D.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=D.tokenizer,this.pipeline=new D.Pipeline,this.searchPipeline=new D.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},D.Builder.prototype.ref=function(e){this._ref=e},D.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},D.Builder.prototype.b=function(e){this._b=e<0?0:1<e?1:e},D.Builder.prototype.k1=function(e){this._k1=e},D.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var i=0;i<r.length;i++){var o=r[i],a=this._fields[o].extractor,s=a?a(e):e[o],c=this.tokenizer(s,{fields:[o]}),l=this.pipeline.run(c),u=new D.FieldRef(n,o),f=Object.create(null);this.fieldTermFrequencies[u]=f,this.fieldLengths[u]=0,this.fieldLengths[u]+=l.length;for(var d=0;d<l.length;d++){var h=l[d];if(null==f[h]&&(f[h]=0),f[h]+=1,null==this.invertedIndex[h]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var m=0;m<r.length;m++)p[r[m]]=Object.create(null);this.invertedIndex[h]=p}null==this.invertedIndex[h][o][n]&&(this.invertedIndex[h][o][n]=Object.create(null));for(var y=0;y<this.metadataWhitelist.length;y++){var v=this.metadataWhitelist[y],g=h.metadata[v];null==this.invertedIndex[h][o][n][v]&&(this.invertedIndex[h][o][n][v]=[]),this.invertedIndex[h][o][n][v].push(g)}}}},D.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},i=0;i<t;i++){var o=D.FieldRef.fromString(e[i]),a=o.fieldName;r[a]||(r[a]=0),r[a]+=1,n[a]||(n[a]=0),n[a]+=this.fieldLengths[o]}var s=Object.keys(this._fields);for(i=0;i<s.length;i++){var c=s[i];n[c]=n[c]/r[c]}this.averageFieldLength=n},D.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),i=0;i<n;i++){for(var o=D.FieldRef.fromString(t[i]),a=o.fieldName,s=this.fieldLengths[o],c=new D.Vector,l=this.fieldTermFrequencies[o],u=Object.keys(l),f=u.length,d=this._fields[a].boost||1,h=this._documents[o.docRef].boost||1,p=0;p<f;p++){var m,y,v,g=u[p],w=l[g],_=this.invertedIndex[g]._index;void 0===r[g]?(m=D.idf(this.invertedIndex[g],this.documentCount),r[g]=m):m=r[g],y=m*((this._k1+1)*w)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[a]))+w),y*=d,y*=h,v=Math.round(1e3*y)/1e3,c.insert(_,v)}e[o]=c}this.fieldVectors=e},D.Builder.prototype.createTokenSet=function(){this.tokenSet=D.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},D.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new D.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},D.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},D.MatchData=function(e,t,n){for(var r=Object.create(null),i=Object.keys(n||{}),o=0;o<i.length;o++){var a=i[o];r[a]=n[a].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},D.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],i=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var o=0;o<i.length;o++){var a=i[o],s=Object.keys(e.metadata[r][a]);null==this.metadata[r][a]&&(this.metadata[r][a]=Object.create(null));for(var c=0;c<s.length;c++){var l=s[c];null==this.metadata[r][a][l]?this.metadata[r][a][l]=e.metadata[r][a][l]:this.metadata[r][a][l]=this.metadata[r][a][l].concat(e.metadata[r][a][l])}}}},D.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),i=0;i<r.length;i++){var o=r[i];o in this.metadata[e][t]?this.metadata[e][t][o]=this.metadata[e][t][o].concat(n[o]):this.metadata[e][t][o]=n[o]}else this.metadata[e][t]=n},D.Query=function(e){this.clauses=[],this.allFields=e},D.Query.wildcard=new String("*"),D.Query.wildcard.NONE=0,D.Query.wildcard.LEADING=1,D.Query.wildcard.TRAILING=2,D.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},D.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=D.Query.wildcard.NONE),e.wildcard&D.Query.wildcard.LEADING&&e.term.charAt(0)!=D.Query.wildcard&&(e.term="*"+e.term),e.wildcard&D.Query.wildcard.TRAILING&&e.term.slice(-1)!=D.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=D.Query.presence.OPTIONAL),this.clauses.push(e),this},D.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=D.Query.presence.PROHIBITED)return!1;return!0},D.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach(function(e){this.term(e,D.utils.clone(t))},this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},D.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},D.QueryParseError.prototype=new Error,D.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},D.QueryLexer.prototype.run=function(){for(var e=D.QueryLexer.lexText;e;)e=e(this)},D.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},D.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},D.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},D.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return D.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},D.QueryLexer.prototype.width=function(){return this.pos-this.start},D.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},D.QueryLexer.prototype.backup=function(){this.pos-=1},D.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=D.QueryLexer.EOS&&this.backup()},D.QueryLexer.prototype.more=function(){return this.pos<this.length},D.QueryLexer.EOS="EOS",D.QueryLexer.FIELD="FIELD",D.QueryLexer.TERM="TERM",D.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",D.QueryLexer.BOOST="BOOST",D.QueryLexer.PRESENCE="PRESENCE",D.QueryLexer.lexField=function(e){return e.backup(),e.emit(D.QueryLexer.FIELD),e.ignore(),D.QueryLexer.lexText},D.QueryLexer.lexTerm=function(e){if(1<e.width()&&(e.backup(),e.emit(D.QueryLexer.TERM)),e.ignore(),e.more())return D.QueryLexer.lexText},D.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.EDIT_DISTANCE),D.QueryLexer.lexText},D.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.BOOST),D.QueryLexer.lexText},D.QueryLexer.lexEOS=function(e){0<e.width()&&e.emit(D.QueryLexer.TERM)},D.QueryLexer.termSeparator=D.tokenizer.separator,D.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==D.QueryLexer.EOS)return D.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return D.QueryLexer.lexField;if("~"==t)return e.backup(),0<e.width()&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),0<e.width()&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if(t.match(D.QueryLexer.termSeparator))return D.QueryLexer.lexTerm}else e.escapeCharacter()}},D.QueryParser=function(e,t){this.lexer=new D.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},D.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=D.QueryParser.parseClause;e;)e=e(this);return this.query},D.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},D.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},D.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},D.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case D.QueryLexer.PRESENCE:return D.QueryParser.parsePresence;case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw 1<=t.str.length&&(n+=" with value '"+t.str+"'"),new D.QueryParseError(n,t.start,t.end)}},D.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=D.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=D.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new D.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new D.QueryParseError(n,t.start,t.end)}switch(r.type){case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new D.QueryParseError(n,r.start,r.end)}}},D.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){r="expecting term, found nothing";throw new D.QueryParseError(r,t.start,t.end)}switch(i.type){case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:r="expecting term, found '"+i.type+"'";throw new D.QueryParseError(r,i.start,i.end)}}},D.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new D.QueryParseError(r,n.start,n.end)}else e.nextClause()}},D.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var i=e.peekLexeme();if(null!=i)switch(i.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+i.type+"'";throw new D.QueryParseError(r,i.start,i.end)}else e.nextClause()}},D.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var i=e.peekLexeme();if(null!=i)switch(i.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+i.type+"'";throw new D.QueryParseError(r,i.start,i.end)}else e.nextClause()}},void 0===(c="function"==typeof(s=function(){return D})?s.call(o,a,o,i):s)||(i.exports=c)}()}]));
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.ar.js b/assets/javascripts/lunr/lunr.ar.js
new file mode 100644
index 0000000..4fc6a5d
--- /dev/null
+++ b/assets/javascripts/lunr/lunr.ar.js
@@ -0,0 +1,20 @@
+/*!
+ * Lunr languages, `Arabic` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2018, Dalia Al-Shahrabi
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Kazem Taghva, Rania Elkhoury, and Jeffrey Coombs (2005)
+ * Meryeme Hadni, Abdelmonaime Lachkar, and S. Alaoui Ouatik (2012)
+ *
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ar=function(){this.pipeline.reset(),this.pipeline.add(e.ar.trimmer,e.ar.stopWordFilter,e.ar.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ar.stemmer))},e.ar.wordCharacters="ء-ٛٱـ",e.ar.trimmer=e.trimmerSupport.generateTrimmer(e.ar.wordCharacters),e.Pipeline.registerFunction(e.ar.trimmer,"trimmer-ar"),e.ar.stemmer=function(){var m=this;return m.result=!1,m.preRemoved=!1,m.sufRemoved=!1,m.pre={pre1:"ف ك ب و س ل ن ا ي ت",pre2:"ال لل",pre3:"بال وال فال تال كال ولل",pre4:"فبال كبال وبال وكال"},m.suf={suf1:"ه ك ت ن ا ي",suf2:"نك نه ها وك يا اه ون ين تن تم نا وا ان كم كن ني نن ما هم هن تك ته ات يه",suf3:"تين كهم نيه نهم ونه وها يهم ونا ونك وني وهم تكم تنا تها تني تهم كما كها ناه نكم هنا تان يها",suf4:"كموه ناها ونني ونهم تكما تموه تكاه كماه ناكم ناهم نيها وننا"},m.patterns=JSON.parse('{"pt43":[{"pt":[{"c":"ا","l":1}]},{"pt":[{"c":"ا,ت,ن,ي","l":0}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"و","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ل","l":2,"m":3}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ي","l":2}],"mPt":[{"c":"ف","l":0,"m":0},{"c":"ع","l":1,"m":1},{"c":"ا","l":2},{"c":"ل","l":3,"m":3}]},{"pt":[{"c":"م","l":0}]}],"pt53":[{"pt":[{"c":"ت","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":3},{"c":"ل","l":3,"m":4},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":0},{"c":"ا","l":3}],"mPt":[{"c":"ف","l":0,"m":1},{"c":"ع","l":1,"m":2},{"c":"ل","l":2,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ن","l":4}]},{"pt":[{"c":"ت","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"م","l":0},{"c":"و","l":3}]},{"pt":[{"c":"ا","l":1},{"c":"و","l":3}]},{"pt":[{"c":"و","l":1},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ي","l":3}]},{"pt":[{"c":"ا","l":2},{"c":"ن","l":3}]},{"pt":[{"c":"م","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"م","l":0},{"c":"ا","l":2}]},{"pt":[{"c":"م","l":1},{"c":"ا","l":3}]},{"pt":[{"c":"ي,ت,ا,ن","l":0},{"c":"ت","l":1}],"mPt":[{"c":"ف","l":0,"m":2},{"c":"ع","l":1,"m":3},{"c":"ا","l":2},{"c":"ل","l":3,"m":4}]},{"pt":[{"c":"ت,ي,ا,ن","l":0},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ت","l":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":2},{"c":"ي","l":3}]},{"pt":[{"c":"ا,ي,ت,ن","l":0},{"c":"ن","l":1}],"mPt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ف","l":2,"m":2},{"c":"ع","l":3,"m":3},{"c":"ا","l":4},{"c":"ل","l":5,"m":4}]},{"pt":[{"c":"ا","l":3},{"c":"ء","l":4}]}],"pt63":[{"pt":[{"c":"ا","l":0},{"c":"ت","l":2},{"c":"ا","l":4}]},{"pt":[{"c":"ا,ت,ن,ي","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ا,ن,ت,ي","l":0},{"c":"و","l":3}]},{"pt":[{"c":"م","l":0},{"c":"س","l":1},{"c":"ت","l":2}],"mPt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ف","l":3,"m":3},{"c":"ع","l":4,"m":4},{"c":"ا","l":5},{"c":"ل","l":6,"m":5}]},{"pt":[{"c":"ي","l":1},{"c":"ي","l":3},{"c":"ا","l":4},{"c":"ء","l":5}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":1},{"c":"ا","l":4}]}],"pt54":[{"pt":[{"c":"ت","l":0}]},{"pt":[{"c":"ا,ي,ت,ن","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"م","l":0}],"mPt":[{"c":"ا","l":0},{"c":"ف","l":1,"m":1},{"c":"ع","l":2,"m":2},{"c":"ل","l":3,"m":3},{"c":"ر","l":4,"m":4},{"c":"ا","l":5},{"c":"ر","l":6,"m":4}]},{"pt":[{"c":"ا","l":2}]},{"pt":[{"c":"ا","l":0},{"c":"ن","l":2}]}],"pt64":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":4}]},{"pt":[{"c":"م","l":0},{"c":"ت","l":1}]}],"pt73":[{"pt":[{"c":"ا","l":0},{"c":"س","l":1},{"c":"ت","l":2},{"c":"ا","l":5}]}],"pt75":[{"pt":[{"c":"ا","l":0},{"c":"ا","l":5}]}]}'),m.execArray=["cleanWord","removeDiacritics","cleanAlef","removeStopWords","normalizeHamzaAndAlef","removeStartWaw","removePre432","removeEndTaa","wordCheck"],m.stem=function(){var e=0;for(m.result=!1,m.preRemoved=!1,m.sufRemoved=!1;e<m.execArray.length&&1!=m.result;)m.result=m[m.execArray[e]](),e++},m.setCurrent=function(e){m.word=e},m.getCurrent=function(){return m.word},m.cleanWord=function(){var e=new RegExp("[^ء-ٛٱـ]");return m.word=m.word.replace("ـ",""),!!e.test("")},m.removeDiacritics=function(){new RegExp("[ً-ٛ]");return m.word=m.word.replace(/[\u064b-\u065b]/gi,""),!1},m.cleanAlef=function(){var e=new RegExp("[آأإٱى]");return m.word=m.word.replace(e,"ا"),!1},m.removeStopWords=function(){if(0<="، اض امين اه اها اي ا اب اجل اجمع اخ اخذ اصبح اضحى اقبل اقل اكثر الا ام اما امامك امامك امسى اما ان انا انت انتم انتما انتن انت انشا انى او اوشك اولئك اولئكم اولاء اولالك اوه اي ايا اين اينما اي ان اي اف اذ اذا اذا اذما اذن الى اليكم اليكما اليكن اليك اليك الا اما ان انما اي اياك اياكم اياكما اياكن ايانا اياه اياها اياهم اياهما اياهن اياي ايه ان ا ابتدا اثر اجل احد اخرى اخلولق اذا اربعة ارتد استحال اطار اعادة اعلنت اف اكثر اكد الالاء الالى الا الاخيرة الان الاول الاولى التى التي الثاني الثانية الذاتي الذى الذي الذين السابق الف اللائي اللاتي اللتان اللتيا اللتين اللذان اللذين اللواتي الماضي المقبل الوقت الى اليوم اما امام امس ان انبرى انقلب انه انها او اول اي ايار ايام ايضا ب بات باسم بان بخ برس بسبب بس بشكل بضع بطان بعد بعض بك بكم بكما بكن بل بلى بما بماذا بمن بن بنا به بها بي بيد بين بس بله بئس تان تانك تبدل تجاه تحول تلقاء تلك تلكم تلكما تم تينك تين ته تي ثلاثة ثم ثم ثمة ثم جعل جلل جميع جير حار حاشا حاليا حاي حتى حرى حسب حم حوالى حول حيث حيثما حين حي حبذا حتى حذار خلا خلال دون دونك ذا ذات ذاك ذانك ذان ذلك ذلكم ذلكما ذلكن ذو ذوا ذواتا ذواتي ذيت ذينك ذين ذه ذي راح رجع رويدك ريث رب زيارة سبحان سرعان سنة سنوات سوف سوى ساء ساءما شبه شخصا شرع شتان صار صباح صفر صه صه ضد ضمن طاق طالما طفق طق ظل عاد عام عاما عامة عدا عدة عدد عدم عسى عشر عشرة علق على عليك عليه عليها عل عن عند عندما عوض عين عدس عما غدا غير  ف فان فلان فو فى في فيم فيما فيه فيها قال قام قبل قد قط قلما قوة كانما كاين كاي كاين كاد كان كانت كذا كذلك كرب كل كلا كلاهما كلتا كلم كليكما كليهما كلما كلا كم كما كي كيت كيف كيفما كان كخ لئن لا لات لاسيما لدن لدى لعمر لقاء لك لكم لكما لكن لكنما لكي لكيلا للامم لم لما لما لن لنا له لها لو لوكالة لولا لوما لي لست لست لستم لستما لستن لست لسن لعل لكن ليت ليس ليسا ليستا ليست ليسوا لسنا ما ماانفك مابرح مادام ماذا مازال مافتئ مايو متى مثل مذ مساء مع معاذ مقابل مكانكم مكانكما مكانكن مكانك مليار مليون مما ممن من منذ منها مه مهما من من نحن نحو نعم نفس نفسه نهاية نخ نعما نعم ها هاؤم هاك هاهنا هب هذا هذه هكذا هل هلم هلا هم هما هن هنا هناك هنالك هو هي هيا هيت هيا هؤلاء هاتان هاتين هاته هاتي هج هذا هذان هذين هذه هذي هيهات و وا واحد واضاف واضافت واكد وان واها واوضح وراءك وفي وقال وقالت وقد وقف وكان وكانت ولا ولم ومن وهو وهي ويكان وي وشكان يكون يمكن يوم ايان".split(" ").indexOf(m.word))return!0},m.normalizeHamzaAndAlef=function(){return m.word=m.word.replace("ؤ","ء"),m.word=m.word.replace("ئ","ء"),m.word=m.word.replace(/([\u0627])\1+/gi,"ا"),!1},m.removeEndTaa=function(){return!(2<m.word.length)||(m.word=m.word.replace(/[\u0627]$/,""),m.word=m.word.replace("ة",""),!1)},m.removeStartWaw=function(){return 3<m.word.length&&"و"==m.word[0]&&"و"==m.word[1]&&(m.word=m.word.slice(1)),!1},m.removePre432=function(){var e=m.word;if(7<=m.word.length){var r=new RegExp("^("+m.pre.pre4.split(" ").join("|")+")");m.word=m.word.replace(r,"")}if(m.word==e&&6<=m.word.length){var t=new RegExp("^("+m.pre.pre3.split(" ").join("|")+")");m.word=m.word.replace(t,"")}if(m.word==e&&5<=m.word.length){var c=new RegExp("^("+m.pre.pre2.split(" ").join("|")+")");m.word=m.word.replace(c,"")}return e!=m.word&&(m.preRemoved=!0),!1},m.patternCheck=function(r){for(var t=0;t<r.length;t++){for(var e=!0,c=0;c<r[t].pt.length;c++){var l=r[t].pt[c].c.split(","),o=!1;if(l.forEach(function(e){m.word[r[t].pt[c].l]==e&&(o=!0)}),!o){e=!1;break}}if(1==e){if(r[t].mPt){for(var n=[],p=0;p<r[t].mPt.length;p++)null!=r[t].mPt[p].m?n[r[t].mPt[p].l]=m.word[r[t].mPt[p].m]:n[r[t].mPt[p].l]=r[t].mPt[p].c;m.word=n.join("")}m.result=!0;break}}},m.removePre1=function(){var e=m.word;if(0==m.preRemoved&&3<m.word.length){var r=new RegExp("^("+m.pre.pre1.split(" ").join("|")+")");m.word=m.word.replace(r,"")}return e!=m.word&&(m.preRemoved=!0),!1},m.removeSuf1=function(){var e=m.word;if(0==m.sufRemoved&&3<m.word.length){var r=new RegExp("("+m.suf.suf1.split(" ").join("|")+")$");m.word=m.word.replace(r,"")}return e!=m.word&&(m.sufRemoved=!0),!1},m.removeSuf432=function(){var e=m.word;if(6<=m.word.length){var r=new RegExp("("+m.suf.suf4.split(" ").join("|")+")$");m.word=m.word.replace(r,"")}if(m.word==e&&5<=m.word.length){var t=new RegExp("("+m.suf.suf3.split(" ").join("|")+")$");m.word=m.word.replace(t,"")}if(m.word==e&&4<=m.word.length){var c=new RegExp("("+m.suf.suf2.split(" ").join("|")+")$");m.word=m.word.replace(c,"")}return e!=m.word&&(m.sufRemoved=!0),!1},m.wordCheck=function(){m.word;for(var e=[m.removeSuf432,m.removeSuf1,m.removePre1],r=0,t=!1;7<=m.word.length&&!m.result&&r<e.length;)t=7!=m.word.length||t?(e[r](),r++,!1):(m.checkPattern73(),!0);var c=[m.checkPattern63,m.removeSuf432,m.removeSuf1,m.removePre1,m.checkPattern64];for(r=0;6==m.word.length&&!m.result&&r<c.length;)c[r](),r++;var l=[m.checkPattern53,m.removeSuf432,m.removeSuf1,m.removePre1,m.checkPattern54];for(r=0;5==m.word.length&&!m.result&&r<l.length;)l[r](),r++;var o=[m.checkPattern43,m.removeSuf1,m.removePre1,m.removeSuf432];for(r=0;4==m.word.length&&!m.result&&r<o.length;)o[r](),r++;return!0},m.checkPattern43=function(){m.patternCheck(m.patterns.pt43)},m.checkPattern53=function(){m.patternCheck(m.patterns.pt53)},m.checkPattern54=function(){m.patternCheck(m.patterns.pt54)},m.checkPattern63=function(){m.patternCheck(m.patterns.pt63)},m.checkPattern64=function(){m.patternCheck(m.patterns.pt64)},m.checkPattern73=function(){m.patternCheck(m.patterns.pt73)},function(e){return"function"==typeof e.update?e.update(function(e){return m.setCurrent(e),m.stem(),m.getCurrent()}):(m.setCurrent(e),m.stem(),m.getCurrent())}}(),e.Pipeline.registerFunction(e.ar.stemmer,"stemmer-ar"),e.ar.stopWordFilter=e.generateStopWordFilter("، اض امين اه اها اي ا اب اجل اجمع اخ اخذ اصبح اضحى اقبل اقل اكثر الا ام اما امامك امامك امسى اما ان انا انت انتم انتما انتن انت انشا انى او اوشك اولئك اولئكم اولاء اولالك اوه اي ايا اين اينما اي ان اي اف اذ اذا اذا اذما اذن الى اليكم اليكما اليكن اليك اليك الا اما ان انما اي اياك اياكم اياكما اياكن ايانا اياه اياها اياهم اياهما اياهن اياي ايه ان ا ابتدا اثر اجل احد اخرى اخلولق اذا اربعة ارتد استحال اطار اعادة اعلنت اف اكثر اكد الالاء الالى الا الاخيرة الان الاول الاولى التى التي الثاني الثانية الذاتي الذى الذي الذين السابق الف اللائي اللاتي اللتان اللتيا اللتين اللذان اللذين اللواتي الماضي المقبل الوقت الى اليوم اما امام امس ان انبرى انقلب انه انها او اول اي ايار ايام ايضا ب بات باسم بان بخ برس بسبب بس بشكل بضع بطان بعد بعض بك بكم بكما بكن بل بلى بما بماذا بمن بن بنا به بها بي بيد بين بس بله بئس تان تانك تبدل تجاه تحول تلقاء تلك تلكم تلكما تم تينك تين ته تي ثلاثة ثم ثم ثمة ثم جعل جلل جميع جير حار حاشا حاليا حاي حتى حرى حسب حم حوالى حول حيث حيثما حين حي حبذا حتى حذار خلا خلال دون دونك ذا ذات ذاك ذانك ذان ذلك ذلكم ذلكما ذلكن ذو ذوا ذواتا ذواتي ذيت ذينك ذين ذه ذي راح رجع رويدك ريث رب زيارة سبحان سرعان سنة سنوات سوف سوى ساء ساءما شبه شخصا شرع شتان صار صباح صفر صه صه ضد ضمن طاق طالما طفق طق ظل عاد عام عاما عامة عدا عدة عدد عدم عسى عشر عشرة علق على عليك عليه عليها عل عن عند عندما عوض عين عدس عما غدا غير  ف فان فلان فو فى في فيم فيما فيه فيها قال قام قبل قد قط قلما قوة كانما كاين كاي كاين كاد كان كانت كذا كذلك كرب كل كلا كلاهما كلتا كلم كليكما كليهما كلما كلا كم كما كي كيت كيف كيفما كان كخ لئن لا لات لاسيما لدن لدى لعمر لقاء لك لكم لكما لكن لكنما لكي لكيلا للامم لم لما لما لن لنا له لها لو لوكالة لولا لوما لي لست لست لستم لستما لستن لست لسن لعل لكن ليت ليس ليسا ليستا ليست ليسوا لسنا ما ماانفك مابرح مادام ماذا مازال مافتئ مايو متى مثل مذ مساء مع معاذ مقابل مكانكم مكانكما مكانكن مكانك مليار مليون مما ممن من منذ منها مه مهما من من نحن نحو نعم نفس نفسه نهاية نخ نعما نعم ها هاؤم هاك هاهنا هب هذا هذه هكذا هل هلم هلا هم هما هن هنا هناك هنالك هو هي هيا هيت هيا هؤلاء هاتان هاتين هاته هاتي هج هذا هذان هذين هذه هذي هيهات وا واحد واضاف واضافت واكد وان واها واوضح وراءك وفي وقال وقالت وقد وقف وكان وكانت ولا ولم ومن وهو وهي ويكان وي وشكان يكون يمكن يوم ايان".split(" ")),e.Pipeline.registerFunction(e.ar.stopWordFilter,"stopWordFilter-ar")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.da.js b/assets/javascripts/lunr/lunr.da.js
index 3b07b2c..88921d4 100644
--- a/assets/javascripts/lunr/lunr.da.js
+++ b/assets/javascripts/lunr/lunr.da.js
@@ -1 +1,17 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,i,n;e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=(r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,t,s=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],o=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new i;function l(){var e,r=c.limit-c.cursor;c.cursor>=n&&(e=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.find_among_b(o,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var r,i=c.cursor;return function(){var r,i=c.cursor+3;if(n=c.limit,0<=i&&i<=c.limit){for(e=i;;){if(r=c.cursor,c.in_grouping(d,97,248)){c.cursor=r;break}if(c.cursor=r,r>=c.limit)return;c.cursor++}for(;!c.out_grouping(d,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(n=c.cursor)<e&&(n=e)}}(),c.limit_backward=i,c.cursor=c.limit,function(){var e,r;if(c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(s,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(u,97,229)&&c.slice_del()}}(),c.cursor=c.limit,l(),c.cursor=c.limit,function(){var e,r,i,t=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig")&&c.slice_del()),c.cursor=c.limit-t,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,e=c.find_among_b(a,5),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del(),i=c.limit-c.cursor,l(),c.cursor=c.limit-i;break;case 2:c.slice_from("løs")}}(),c.cursor=c.limit,c.cursor>=n&&(r=c.limit_backward,c.limit_backward=n,c.ket=c.cursor,c.out_grouping_b(d,97,248)?(c.bra=c.cursor,t=c.slice_to(t),c.limit_backward=r,c.eq_v_b(t)&&c.slice_del()):c.limit_backward=r),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Danish` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,m,i;e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=(r=e.stemmerSupport.Among,m=e.stemmerSupport.SnowballProgram,i=new function(){var i,t,n,s=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],o=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],u=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],c=new m;function l(){var e,r=c.limit-c.cursor;c.cursor>=t&&(e=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,c.find_among_b(o,4)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e)}this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var e,r=c.cursor;return function(){var e,r=c.cursor+3;if(t=c.limit,0<=r&&r<=c.limit){for(i=r;;){if(e=c.cursor,c.in_grouping(d,97,248)){c.cursor=e;break}if((c.cursor=e)>=c.limit)return;c.cursor++}for(;!c.out_grouping(d,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(t=c.cursor)<i&&(t=i)}}(),c.limit_backward=r,c.cursor=c.limit,function(){var e,r;if(c.cursor>=t&&(r=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,e=c.find_among_b(s,32),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:c.in_grouping_b(u,97,229)&&c.slice_del()}}(),c.cursor=c.limit,l(),c.cursor=c.limit,function(){var e,r,i,n=c.limit-c.cursor;if(c.ket=c.cursor,c.eq_s_b(2,"st")&&(c.bra=c.cursor,c.eq_s_b(2,"ig")&&c.slice_del()),c.cursor=c.limit-n,c.cursor>=t&&(r=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,e=c.find_among_b(a,5),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del(),i=c.limit-c.cursor,l(),c.cursor=c.limit-i;break;case 2:c.slice_from("løs")}}(),c.cursor=c.limit,c.cursor>=t&&(e=c.limit_backward,c.limit_backward=t,c.ket=c.cursor,c.out_grouping_b(d,97,248)?(c.bra=c.cursor,n=c.slice_to(n),c.limit_backward=e,c.eq_v_b(n)&&c.slice_del()):c.limit_backward=e),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.de.js b/assets/javascripts/lunr/lunr.de.js
index ebd78f2..73e55eb 100644
--- a/assets/javascripts/lunr/lunr.de.js
+++ b/assets/javascripts/lunr/lunr.de.js
@@ -1 +1,17 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,i;e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){var e,i,s,t=[new r("",-1,6),new r("U",0,2),new r("Y",0,1),new r("ä",0,3),new r("ö",0,4),new r("ü",0,5)],o=[new r("e",-1,2),new r("em",-1,1),new r("en",-1,2),new r("ern",-1,1),new r("er",-1,1),new r("s",-1,3),new r("es",5,2)],c=[new r("en",-1,1),new r("er",-1,1),new r("st",-1,2),new r("est",2,1)],u=[new r("ig",-1,1),new r("lich",-1,1)],a=[new r("end",-1,1),new r("ig",-1,2),new r("ung",-1,1),new r("lich",-1,3),new r("isch",-1,2),new r("ik",-1,2),new r("heit",-1,3),new r("keit",-1,4)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],l=[117,30,5],m=[117,30,4],h=new n;function w(e,r,n){return!(!h.eq_s(1,e)||(h.ket=h.cursor,!h.in_grouping(d,97,252)))&&(h.slice_from(r),h.cursor=n,!0)}function f(){for(;!h.in_grouping(d,97,252);){if(h.cursor>=h.limit)return!0;h.cursor++}for(;!h.out_grouping(d,97,252);){if(h.cursor>=h.limit)return!0;h.cursor++}return!1}function b(){return s<=h.cursor}function _(){return i<=h.cursor}this.setCurrent=function(e){h.setCurrent(e)},this.getCurrent=function(){return h.getCurrent()},this.stem=function(){var r=h.cursor;return function(){for(var e,r,n,i,s=h.cursor;;)if(e=h.cursor,h.bra=e,h.eq_s(1,"ß"))h.ket=h.cursor,h.slice_from("ss");else{if(e>=h.limit)break;h.cursor=e+1}for(h.cursor=s;;)for(r=h.cursor;;){if(n=h.cursor,h.in_grouping(d,97,252)){if(i=h.cursor,h.bra=i,w("u","U",n))break;if(h.cursor=i,w("y","Y",n))break}if(n>=h.limit)return void(h.cursor=r);h.cursor=n+1}}(),h.cursor=r,function(){s=h.limit,i=s;var r=h.cursor+3;0<=r&&r<=h.limit&&(e=r,f()||((s=h.cursor)<e&&(s=e),f()||(i=h.cursor)))}(),h.limit_backward=r,h.cursor=h.limit,function(){var e,r,n,i,s=h.limit-h.cursor;if(h.ket=h.cursor,(e=h.find_among_b(o,7))&&(h.bra=h.cursor,b()))switch(e){case 1:h.slice_del();break;case 2:h.slice_del(),h.ket=h.cursor,h.eq_s_b(1,"s")&&(h.bra=h.cursor,h.eq_s_b(3,"nis")&&h.slice_del());break;case 3:h.in_grouping_b(l,98,116)&&h.slice_del()}if(h.cursor=h.limit-s,h.ket=h.cursor,(e=h.find_among_b(c,4))&&(h.bra=h.cursor,b()))switch(e){case 1:h.slice_del();break;case 2:if(h.in_grouping_b(m,98,116)){var t=h.cursor-3;h.limit_backward<=t&&t<=h.limit&&(h.cursor=t,h.slice_del())}}if(h.cursor=h.limit-s,h.ket=h.cursor,(e=h.find_among_b(a,8))&&(h.bra=h.cursor,_()))switch(e){case 1:h.slice_del(),h.ket=h.cursor,h.eq_s_b(2,"ig")&&(h.bra=h.cursor,r=h.limit-h.cursor,h.eq_s_b(1,"e")||(h.cursor=h.limit-r,_()&&h.slice_del()));break;case 2:n=h.limit-h.cursor,h.eq_s_b(1,"e")||(h.cursor=h.limit-n,h.slice_del());break;case 3:if(h.slice_del(),h.ket=h.cursor,i=h.limit-h.cursor,!h.eq_s_b(2,"er")&&(h.cursor=h.limit-i,!h.eq_s_b(2,"en")))break;h.bra=h.cursor,b()&&h.slice_del();break;case 4:h.slice_del(),h.ket=h.cursor,(e=h.find_among_b(u,2))&&(h.bra=h.cursor,_()&&1==e&&h.slice_del())}}(),h.cursor=h.limit_backward,function(){for(var e,r;;){if(r=h.cursor,h.bra=r,!(e=h.find_among(t,6)))return;switch(h.ket=h.cursor,e){case 1:h.slice_from("y");break;case 2:case 5:h.slice_from("u");break;case 3:h.slice_from("a");break;case 4:h.slice_from("o");break;case 6:if(h.cursor>=h.limit)return;h.cursor++}}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `German` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var _,p,r;e.de=function(){this.pipeline.reset(),this.pipeline.add(e.de.trimmer,e.de.stopWordFilter,e.de.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.de.stemmer))},e.de.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.de.trimmer=e.trimmerSupport.generateTrimmer(e.de.wordCharacters),e.Pipeline.registerFunction(e.de.trimmer,"trimmer-de"),e.de.stemmer=(_=e.stemmerSupport.Among,p=e.stemmerSupport.SnowballProgram,r=new function(){var r,n,i,s=[new _("",-1,6),new _("U",0,2),new _("Y",0,1),new _("ä",0,3),new _("ö",0,4),new _("ü",0,5)],o=[new _("e",-1,2),new _("em",-1,1),new _("en",-1,2),new _("ern",-1,1),new _("er",-1,1),new _("s",-1,3),new _("es",5,2)],c=[new _("en",-1,1),new _("er",-1,1),new _("st",-1,2),new _("est",2,1)],u=[new _("ig",-1,1),new _("lich",-1,1)],a=[new _("end",-1,1),new _("ig",-1,2),new _("ung",-1,1),new _("lich",-1,3),new _("isch",-1,2),new _("ik",-1,2),new _("heit",-1,3),new _("keit",-1,4)],t=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8],d=[117,30,5],l=[117,30,4],m=new p;function h(e,r,n){return!(!m.eq_s(1,e)||(m.ket=m.cursor,!m.in_grouping(t,97,252)))&&(m.slice_from(r),m.cursor=n,!0)}function w(){for(;!m.in_grouping(t,97,252);){if(m.cursor>=m.limit)return!0;m.cursor++}for(;!m.out_grouping(t,97,252);){if(m.cursor>=m.limit)return!0;m.cursor++}return!1}function f(){return i<=m.cursor}function b(){return n<=m.cursor}this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var e=m.cursor;return function(){for(var e,r,n,i,s=m.cursor;;)if(e=m.cursor,m.bra=e,m.eq_s(1,"ß"))m.ket=m.cursor,m.slice_from("ss");else{if(e>=m.limit)break;m.cursor=e+1}for(m.cursor=s;;)for(r=m.cursor;;){if(n=m.cursor,m.in_grouping(t,97,252)){if(i=m.cursor,m.bra=i,h("u","U",n))break;if(m.cursor=i,h("y","Y",n))break}if(n>=m.limit)return m.cursor=r;m.cursor=n+1}}(),m.cursor=e,function(){i=m.limit,n=i;var e=m.cursor+3;0<=e&&e<=m.limit&&(r=e,w()||((i=m.cursor)<r&&(i=r),w()||(n=m.cursor)))}(),m.limit_backward=e,m.cursor=m.limit,function(){var e,r,n,i,s=m.limit-m.cursor;if(m.ket=m.cursor,(e=m.find_among_b(o,7))&&(m.bra=m.cursor,f()))switch(e){case 1:m.slice_del();break;case 2:m.slice_del(),m.ket=m.cursor,m.eq_s_b(1,"s")&&(m.bra=m.cursor,m.eq_s_b(3,"nis")&&m.slice_del());break;case 3:m.in_grouping_b(d,98,116)&&m.slice_del()}if(m.cursor=m.limit-s,m.ket=m.cursor,(e=m.find_among_b(c,4))&&(m.bra=m.cursor,f()))switch(e){case 1:m.slice_del();break;case 2:if(m.in_grouping_b(l,98,116)){var t=m.cursor-3;m.limit_backward<=t&&t<=m.limit&&(m.cursor=t,m.slice_del())}}if(m.cursor=m.limit-s,m.ket=m.cursor,(e=m.find_among_b(a,8))&&(m.bra=m.cursor,b()))switch(e){case 1:m.slice_del(),m.ket=m.cursor,m.eq_s_b(2,"ig")&&(m.bra=m.cursor,r=m.limit-m.cursor,m.eq_s_b(1,"e")||(m.cursor=m.limit-r,b()&&m.slice_del()));break;case 2:n=m.limit-m.cursor,m.eq_s_b(1,"e")||(m.cursor=m.limit-n,m.slice_del());break;case 3:if(m.slice_del(),m.ket=m.cursor,i=m.limit-m.cursor,!m.eq_s_b(2,"er")&&(m.cursor=m.limit-i,!m.eq_s_b(2,"en")))break;m.bra=m.cursor,f()&&m.slice_del();break;case 4:m.slice_del(),m.ket=m.cursor,(e=m.find_among_b(u,2))&&(m.bra=m.cursor,b()&&1==e&&m.slice_del())}}(),m.cursor=m.limit_backward,function(){for(var e,r;;){if(r=m.cursor,m.bra=r,!(e=m.find_among(s,6)))return;switch(m.ket=m.cursor,e){case 1:m.slice_from("y");break;case 2:case 5:m.slice_from("u");break;case 3:m.slice_from("a");break;case 4:m.slice_from("o");break;case 6:if(m.cursor>=m.limit)return;m.cursor++}}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.de.stemmer,"stemmer-de"),e.de.stopWordFilter=e.generateStopWordFilter("aber alle allem allen aller alles als also am an ander andere anderem anderen anderer anderes anderm andern anderr anders auch auf aus bei bin bis bist da damit dann das dasselbe dazu daß dein deine deinem deinen deiner deines dem demselben den denn denselben der derer derselbe derselben des desselben dessen dich die dies diese dieselbe dieselben diesem diesen dieser dieses dir doch dort du durch ein eine einem einen einer eines einig einige einigem einigen einiger einiges einmal er es etwas euch euer eure eurem euren eurer eures für gegen gewesen hab habe haben hat hatte hatten hier hin hinter ich ihm ihn ihnen ihr ihre ihrem ihren ihrer ihres im in indem ins ist jede jedem jeden jeder jedes jene jenem jenen jener jenes jetzt kann kein keine keinem keinen keiner keines können könnte machen man manche manchem manchen mancher manches mein meine meinem meinen meiner meines mich mir mit muss musste nach nicht nichts noch nun nur ob oder ohne sehr sein seine seinem seinen seiner seines selbst sich sie sind so solche solchem solchen solcher solches soll sollte sondern sonst um und uns unse unsem unsen unser unses unter viel vom von vor war waren warst was weg weil weiter welche welchem welchen welcher welches wenn werde werden wie wieder will wir wird wirst wo wollen wollte während würde würden zu zum zur zwar zwischen über".split(" ")),e.Pipeline.registerFunction(e.de.stopWordFilter,"stopWordFilter-de")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.du.js b/assets/javascripts/lunr/lunr.du.js
index 375c0e7..e9c6729 100644
--- a/assets/javascripts/lunr/lunr.du.js
+++ b/assets/javascripts/lunr/lunr.du.js
@@ -1 +1,17 @@
-!function(r,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,i,n;r.du=function(){this.pipeline.reset(),this.pipeline.add(r.du.trimmer,r.du.stopWordFilter,r.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.du.stemmer))},r.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.du.trimmer=r.trimmerSupport.generateTrimmer(r.du.wordCharacters),r.Pipeline.registerFunction(r.du.trimmer,"trimmer-du"),r.du.stemmer=(e=r.stemmerSupport.Among,i=r.stemmerSupport.SnowballProgram,n=new function(){var r,n,o,t=[new e("",-1,6),new e("á",0,1),new e("ä",0,1),new e("é",0,2),new e("ë",0,2),new e("í",0,3),new e("ï",0,3),new e("ó",0,4),new e("ö",0,4),new e("ú",0,5),new e("ü",0,5)],s=[new e("",-1,3),new e("I",0,2),new e("Y",0,1)],u=[new e("dd",-1,-1),new e("kk",-1,-1),new e("tt",-1,-1)],c=[new e("ene",-1,2),new e("se",-1,3),new e("en",-1,2),new e("heden",2,1),new e("s",-1,3)],a=[new e("end",-1,1),new e("ig",-1,2),new e("ing",-1,1),new e("lijk",-1,3),new e("baar",-1,4),new e("bar",-1,5)],l=[new e("aa",-1,-1),new e("ee",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1)],m=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],d=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],_=new i;function w(r){return _.cursor=r,r>=_.limit||(_.cursor++,!1)}function b(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function p(){return n<=_.cursor}function g(){return r<=_.cursor}function h(){var r=_.limit-_.cursor;_.find_among_b(u,3)&&(_.cursor=_.limit-r,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function k(){var r;o=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,p()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.slice_del(),o=!0,h())))}function v(){var r;p()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.eq_s_b(3,"gem")||(_.cursor=_.limit-r,_.slice_del(),h())))}this.setCurrent=function(r){_.setCurrent(r)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var e=_.cursor;return function(){for(var r,e,i,n=_.cursor;;){if(_.bra=_.cursor,r=_.find_among(t,11))switch(_.ket=_.cursor,r){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(e=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=e);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=e;else if(w(e))break}else if(w(e))break}(),_.cursor=e,n=_.limit,r=n,b()||((n=_.cursor)<3&&(n=3),b()||(r=_.cursor)),_.limit_backward=e,_.cursor=_.limit,function(){var r,e,i,n,t,s,u=_.limit-_.cursor;if(_.ket=_.cursor,r=_.find_among_b(c,5))switch(_.bra=_.cursor,r){case 1:p()&&_.slice_from("heid");break;case 2:v();break;case 3:p()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-u,k(),_.cursor=_.limit-u,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,g()&&(e=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-e,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,v())))),_.cursor=_.limit-u,_.ket=_.cursor,r=_.find_among_b(a,6))switch(_.bra=_.cursor,r){case 1:if(g()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,g()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,h()}break;case 2:g()&&(t=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-t,_.slice_del()));break;case 3:g()&&(_.slice_del(),k());break;case 4:g()&&_.slice_del();break;case 5:g()&&o&&_.slice_del()}_.cursor=_.limit-u,_.out_grouping_b(d,73,232)&&(s=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-s,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var r;;)if(_.bra=_.cursor,r=_.find_among(s,3))switch(_.ket=_.cursor,r){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}),r.Pipeline.registerFunction(r.du.stemmer,"stemmer-du"),r.du.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.du.stopWordFilter,"stopWordFilter-du")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Dutch` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,q,r;console.warn('[Lunr Languages] Please use the "nl" instead of the "du". The "nl" code is the standard code for Dutch language, and "du" will be removed in the next major versions.'),e.du=function(){this.pipeline.reset(),this.pipeline.add(e.du.trimmer,e.du.stopWordFilter,e.du.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.du.stemmer))},e.du.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.du.trimmer=e.trimmerSupport.generateTrimmer(e.du.wordCharacters),e.Pipeline.registerFunction(e.du.trimmer,"trimmer-du"),e.du.stemmer=(v=e.stemmerSupport.Among,q=e.stemmerSupport.SnowballProgram,r=new function(){var r,i,u,o=[new v("",-1,6),new v("á",0,1),new v("ä",0,1),new v("é",0,2),new v("ë",0,2),new v("í",0,3),new v("ï",0,3),new v("ó",0,4),new v("ö",0,4),new v("ú",0,5),new v("ü",0,5)],n=[new v("",-1,3),new v("I",0,2),new v("Y",0,1)],t=[new v("dd",-1,-1),new v("kk",-1,-1),new v("tt",-1,-1)],c=[new v("ene",-1,2),new v("se",-1,3),new v("en",-1,2),new v("heden",2,1),new v("s",-1,3)],a=[new v("end",-1,1),new v("ig",-1,2),new v("ing",-1,1),new v("lijk",-1,3),new v("baar",-1,4),new v("bar",-1,5)],l=[new v("aa",-1,-1),new v("ee",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1)],m=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],d=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],_=new q;function s(e){return(_.cursor=e)>=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return r<=_.cursor}function g(){var e=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-e,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var e;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(e=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-e,_.slice_del(),u=!0,g())))}function k(){var e;b()&&(e=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-e,_.eq_s_b(3,"gem")||(_.cursor=_.limit-e,_.slice_del(),g())))}this.setCurrent=function(e){_.setCurrent(e)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var e=_.cursor;return function(){for(var e,r,i,n=_.cursor;;){if(_.bra=_.cursor,e=_.find_among(o,11))switch(_.ket=_.cursor,e){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(r=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=r);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=r;else if(s(r))break}else if(s(r))break}(),_.cursor=e,i=_.limit,r=i,w()||((i=_.cursor)<3&&(i=3),w()||(r=_.cursor)),_.limit_backward=e,_.cursor=_.limit,function(){var e,r,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,e=_.find_among_b(c,5))switch(_.bra=_.cursor,e){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(r=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-r,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,e=_.find_among_b(a,6))switch(_.bra=_.cursor,e){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var e;;)if(_.bra=_.cursor,e=_.find_among(n,3))switch(_.ket=_.cursor,e){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.du.stemmer,"stemmer-du"),e.du.stopWordFilter=e.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),e.Pipeline.registerFunction(e.du.stopWordFilter,"stopWordFilter-du")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.es.js b/assets/javascripts/lunr/lunr.es.js
index 4cb634f..2918bd1 100644
--- a/assets/javascripts/lunr/lunr.es.js
+++ b/assets/javascripts/lunr/lunr.es.js
@@ -1 +1,17 @@
-!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var s,r,n;e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=(s=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,i,a=[new s("",-1,6),new s("á",0,1),new s("é",0,2),new s("í",0,3),new s("ó",0,4),new s("ú",0,5)],t=[new s("la",-1,-1),new s("sela",0,-1),new s("le",-1,-1),new s("me",-1,-1),new s("se",-1,-1),new s("lo",-1,-1),new s("selo",5,-1),new s("las",-1,-1),new s("selas",7,-1),new s("les",-1,-1),new s("los",-1,-1),new s("selos",10,-1),new s("nos",-1,-1)],o=[new s("ando",-1,6),new s("iendo",-1,6),new s("yendo",-1,7),new s("ándo",-1,2),new s("iéndo",-1,1),new s("ar",-1,6),new s("er",-1,6),new s("ir",-1,6),new s("ár",-1,3),new s("ér",-1,4),new s("ír",-1,5)],u=[new s("ic",-1,-1),new s("ad",-1,-1),new s("os",-1,-1),new s("iv",-1,1)],w=[new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,1)],c=[new s("ic",-1,1),new s("abil",-1,1),new s("iv",-1,1)],m=[new s("ica",-1,1),new s("ancia",-1,2),new s("encia",-1,5),new s("adora",-1,2),new s("osa",-1,1),new s("ista",-1,1),new s("iva",-1,9),new s("anza",-1,1),new s("logía",-1,3),new s("idad",-1,8),new s("able",-1,1),new s("ible",-1,1),new s("ante",-1,2),new s("mente",-1,7),new s("amente",13,6),new s("ación",-1,2),new s("ución",-1,4),new s("ico",-1,1),new s("ismo",-1,1),new s("oso",-1,1),new s("amiento",-1,1),new s("imiento",-1,1),new s("ivo",-1,9),new s("ador",-1,2),new s("icas",-1,1),new s("ancias",-1,2),new s("encias",-1,5),new s("adoras",-1,2),new s("osas",-1,1),new s("istas",-1,1),new s("ivas",-1,9),new s("anzas",-1,1),new s("logías",-1,3),new s("idades",-1,8),new s("ables",-1,1),new s("ibles",-1,1),new s("aciones",-1,2),new s("uciones",-1,4),new s("adores",-1,2),new s("antes",-1,2),new s("icos",-1,1),new s("ismos",-1,1),new s("osos",-1,1),new s("amientos",-1,1),new s("imientos",-1,1),new s("ivos",-1,9)],l=[new s("ya",-1,1),new s("ye",-1,1),new s("yan",-1,1),new s("yen",-1,1),new s("yeron",-1,1),new s("yendo",-1,1),new s("yo",-1,1),new s("yas",-1,1),new s("yes",-1,1),new s("yais",-1,1),new s("yamos",-1,1),new s("yó",-1,1)],d=[new s("aba",-1,2),new s("ada",-1,2),new s("ida",-1,2),new s("ara",-1,2),new s("iera",-1,2),new s("ía",-1,2),new s("aría",5,2),new s("ería",5,2),new s("iría",5,2),new s("ad",-1,2),new s("ed",-1,2),new s("id",-1,2),new s("ase",-1,2),new s("iese",-1,2),new s("aste",-1,2),new s("iste",-1,2),new s("an",-1,2),new s("aban",16,2),new s("aran",16,2),new s("ieran",16,2),new s("ían",16,2),new s("arían",20,2),new s("erían",20,2),new s("irían",20,2),new s("en",-1,1),new s("asen",24,2),new s("iesen",24,2),new s("aron",-1,2),new s("ieron",-1,2),new s("arán",-1,2),new s("erán",-1,2),new s("irán",-1,2),new s("ado",-1,2),new s("ido",-1,2),new s("ando",-1,2),new s("iendo",-1,2),new s("ar",-1,2),new s("er",-1,2),new s("ir",-1,2),new s("as",-1,2),new s("abas",39,2),new s("adas",39,2),new s("idas",39,2),new s("aras",39,2),new s("ieras",39,2),new s("ías",39,2),new s("arías",45,2),new s("erías",45,2),new s("irías",45,2),new s("es",-1,1),new s("ases",49,2),new s("ieses",49,2),new s("abais",-1,2),new s("arais",-1,2),new s("ierais",-1,2),new s("íais",-1,2),new s("aríais",55,2),new s("eríais",55,2),new s("iríais",55,2),new s("aseis",-1,2),new s("ieseis",-1,2),new s("asteis",-1,2),new s("isteis",-1,2),new s("áis",-1,2),new s("éis",-1,1),new s("aréis",64,2),new s("eréis",64,2),new s("iréis",64,2),new s("ados",-1,2),new s("idos",-1,2),new s("amos",-1,2),new s("ábamos",70,2),new s("áramos",70,2),new s("iéramos",70,2),new s("íamos",70,2),new s("aríamos",74,2),new s("eríamos",74,2),new s("iríamos",74,2),new s("emos",-1,1),new s("aremos",78,2),new s("eremos",78,2),new s("iremos",78,2),new s("ásemos",78,2),new s("iésemos",78,2),new s("imos",-1,2),new s("arás",-1,2),new s("erás",-1,2),new s("irás",-1,2),new s("ís",-1,2),new s("ará",-1,2),new s("erá",-1,2),new s("irá",-1,2),new s("aré",-1,2),new s("eré",-1,2),new s("iré",-1,2),new s("ió",-1,2)],b=[new s("a",-1,1),new s("e",-1,2),new s("o",-1,1),new s("os",-1,1),new s("á",-1,1),new s("é",-1,2),new s("í",-1,1),new s("ó",-1,1)],f=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],_=new r;function h(){if(_.out_grouping(f,97,252)){for(;!_.in_grouping(f,97,252);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}return!0}function v(){var e,s=_.cursor;if(function(){if(_.in_grouping(f,97,252)){var e=_.cursor;if(h()){if(_.cursor=e,!_.in_grouping(f,97,252))return!0;for(;!_.out_grouping(f,97,252);){if(_.cursor>=_.limit)return!0;_.cursor++}}return!1}return!0}()){if(_.cursor=s,!_.out_grouping(f,97,252))return;if(e=_.cursor,h()){if(_.cursor=e,!_.in_grouping(f,97,252)||_.cursor>=_.limit)return;_.cursor++}}i=_.cursor}function p(){for(;!_.in_grouping(f,97,252);){if(_.cursor>=_.limit)return!1;_.cursor++}for(;!_.out_grouping(f,97,252);){if(_.cursor>=_.limit)return!1;_.cursor++}return!0}function g(){return i<=_.cursor}function k(){return e<=_.cursor}function y(e,s){if(!k())return!0;_.slice_del(),_.ket=_.cursor;var r=_.find_among_b(e,s);return r&&(_.bra=_.cursor,1==r&&k()&&_.slice_del()),!1}function q(e){return!k()||(_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,e)&&(_.bra=_.cursor,k()&&_.slice_del()),!1)}function C(){var e;if(_.ket=_.cursor,e=_.find_among_b(m,46)){switch(_.bra=_.cursor,e){case 1:if(!k())return!1;_.slice_del();break;case 2:if(q("ic"))return!1;break;case 3:if(!k())return!1;_.slice_from("log");break;case 4:if(!k())return!1;_.slice_from("u");break;case 5:if(!k())return!1;_.slice_from("ente");break;case 6:if(!(n<=_.cursor))return!1;_.slice_del(),_.ket=_.cursor,(e=_.find_among_b(u,4))&&(_.bra=_.cursor,k()&&(_.slice_del(),1==e&&(_.ket=_.cursor,_.eq_s_b(2,"at")&&(_.bra=_.cursor,k()&&_.slice_del()))));break;case 7:if(y(w,3))return!1;break;case 8:if(y(c,3))return!1;break;case 9:if(q("at"))return!1}return!0}return!1}this.setCurrent=function(e){_.setCurrent(e)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var s,r=_.cursor;return s=_.cursor,i=_.limit,n=i,e=i,v(),_.cursor=s,p()&&(n=_.cursor,p()&&(e=_.cursor)),_.limit_backward=r,_.cursor=_.limit,function(){var e;if(_.ket=_.cursor,_.find_among_b(t,13)&&(_.bra=_.cursor,(e=_.find_among_b(o,11))&&g()))switch(e){case 1:_.bra=_.cursor,_.slice_from("iendo");break;case 2:_.bra=_.cursor,_.slice_from("ando");break;case 3:_.bra=_.cursor,_.slice_from("ar");break;case 4:_.bra=_.cursor,_.slice_from("er");break;case 5:_.bra=_.cursor,_.slice_from("ir");break;case 6:_.slice_del();break;case 7:_.eq_s_b(1,"u")&&_.slice_del()}}(),_.cursor=_.limit,C()||(_.cursor=_.limit,function(){var e,s;if(_.cursor>=i&&(s=_.limit_backward,_.limit_backward=i,_.ket=_.cursor,e=_.find_among_b(l,12),_.limit_backward=s,e)){if(_.bra=_.cursor,1==e){if(!_.eq_s_b(1,"u"))return!1;_.slice_del()}return!0}return!1}()||(_.cursor=_.limit,function(){var e,s,r,n;if(_.cursor>=i&&(s=_.limit_backward,_.limit_backward=i,_.ket=_.cursor,e=_.find_among_b(d,96),_.limit_backward=s,e))switch(_.bra=_.cursor,e){case 1:r=_.limit-_.cursor,_.eq_s_b(1,"u")?(n=_.limit-_.cursor,_.eq_s_b(1,"g")?_.cursor=_.limit-n:_.cursor=_.limit-r):_.cursor=_.limit-r,_.bra=_.cursor;case 2:_.slice_del()}}())),_.cursor=_.limit,function(){var e,s;if(_.ket=_.cursor,e=_.find_among_b(b,8))switch(_.bra=_.cursor,e){case 1:g()&&_.slice_del();break;case 2:g()&&(_.slice_del(),_.ket=_.cursor,_.eq_s_b(1,"u")&&(_.bra=_.cursor,s=_.limit-_.cursor,_.eq_s_b(1,"g")&&(_.cursor=_.limit-s,g()&&_.slice_del())))}}(),_.cursor=_.limit_backward,function(){for(var e;;){if(_.bra=_.cursor,e=_.find_among(a,6))switch(_.ket=_.cursor,e){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Spanish` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,s){"function"==typeof define&&define.amd?define(s):"object"==typeof exports?module.exports=s():s()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var C,P,s;e.es=function(){this.pipeline.reset(),this.pipeline.add(e.es.trimmer,e.es.stopWordFilter,e.es.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.es.stemmer))},e.es.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.es.trimmer=e.trimmerSupport.generateTrimmer(e.es.wordCharacters),e.Pipeline.registerFunction(e.es.trimmer,"trimmer-es"),e.es.stemmer=(C=e.stemmerSupport.Among,P=e.stemmerSupport.SnowballProgram,s=new function(){var r,n,i,a=[new C("",-1,6),new C("á",0,1),new C("é",0,2),new C("í",0,3),new C("ó",0,4),new C("ú",0,5)],t=[new C("la",-1,-1),new C("sela",0,-1),new C("le",-1,-1),new C("me",-1,-1),new C("se",-1,-1),new C("lo",-1,-1),new C("selo",5,-1),new C("las",-1,-1),new C("selas",7,-1),new C("les",-1,-1),new C("los",-1,-1),new C("selos",10,-1),new C("nos",-1,-1)],o=[new C("ando",-1,6),new C("iendo",-1,6),new C("yendo",-1,7),new C("ándo",-1,2),new C("iéndo",-1,1),new C("ar",-1,6),new C("er",-1,6),new C("ir",-1,6),new C("ár",-1,3),new C("ér",-1,4),new C("ír",-1,5)],s=[new C("ic",-1,-1),new C("ad",-1,-1),new C("os",-1,-1),new C("iv",-1,1)],u=[new C("able",-1,1),new C("ible",-1,1),new C("ante",-1,1)],w=[new C("ic",-1,1),new C("abil",-1,1),new C("iv",-1,1)],c=[new C("ica",-1,1),new C("ancia",-1,2),new C("encia",-1,5),new C("adora",-1,2),new C("osa",-1,1),new C("ista",-1,1),new C("iva",-1,9),new C("anza",-1,1),new C("logía",-1,3),new C("idad",-1,8),new C("able",-1,1),new C("ible",-1,1),new C("ante",-1,2),new C("mente",-1,7),new C("amente",13,6),new C("ación",-1,2),new C("ución",-1,4),new C("ico",-1,1),new C("ismo",-1,1),new C("oso",-1,1),new C("amiento",-1,1),new C("imiento",-1,1),new C("ivo",-1,9),new C("ador",-1,2),new C("icas",-1,1),new C("ancias",-1,2),new C("encias",-1,5),new C("adoras",-1,2),new C("osas",-1,1),new C("istas",-1,1),new C("ivas",-1,9),new C("anzas",-1,1),new C("logías",-1,3),new C("idades",-1,8),new C("ables",-1,1),new C("ibles",-1,1),new C("aciones",-1,2),new C("uciones",-1,4),new C("adores",-1,2),new C("antes",-1,2),new C("icos",-1,1),new C("ismos",-1,1),new C("osos",-1,1),new C("amientos",-1,1),new C("imientos",-1,1),new C("ivos",-1,9)],m=[new C("ya",-1,1),new C("ye",-1,1),new C("yan",-1,1),new C("yen",-1,1),new C("yeron",-1,1),new C("yendo",-1,1),new C("yo",-1,1),new C("yas",-1,1),new C("yes",-1,1),new C("yais",-1,1),new C("yamos",-1,1),new C("yó",-1,1)],l=[new C("aba",-1,2),new C("ada",-1,2),new C("ida",-1,2),new C("ara",-1,2),new C("iera",-1,2),new C("ía",-1,2),new C("aría",5,2),new C("ería",5,2),new C("iría",5,2),new C("ad",-1,2),new C("ed",-1,2),new C("id",-1,2),new C("ase",-1,2),new C("iese",-1,2),new C("aste",-1,2),new C("iste",-1,2),new C("an",-1,2),new C("aban",16,2),new C("aran",16,2),new C("ieran",16,2),new C("ían",16,2),new C("arían",20,2),new C("erían",20,2),new C("irían",20,2),new C("en",-1,1),new C("asen",24,2),new C("iesen",24,2),new C("aron",-1,2),new C("ieron",-1,2),new C("arán",-1,2),new C("erán",-1,2),new C("irán",-1,2),new C("ado",-1,2),new C("ido",-1,2),new C("ando",-1,2),new C("iendo",-1,2),new C("ar",-1,2),new C("er",-1,2),new C("ir",-1,2),new C("as",-1,2),new C("abas",39,2),new C("adas",39,2),new C("idas",39,2),new C("aras",39,2),new C("ieras",39,2),new C("ías",39,2),new C("arías",45,2),new C("erías",45,2),new C("irías",45,2),new C("es",-1,1),new C("ases",49,2),new C("ieses",49,2),new C("abais",-1,2),new C("arais",-1,2),new C("ierais",-1,2),new C("íais",-1,2),new C("aríais",55,2),new C("eríais",55,2),new C("iríais",55,2),new C("aseis",-1,2),new C("ieseis",-1,2),new C("asteis",-1,2),new C("isteis",-1,2),new C("áis",-1,2),new C("éis",-1,1),new C("aréis",64,2),new C("eréis",64,2),new C("iréis",64,2),new C("ados",-1,2),new C("idos",-1,2),new C("amos",-1,2),new C("ábamos",70,2),new C("áramos",70,2),new C("iéramos",70,2),new C("íamos",70,2),new C("aríamos",74,2),new C("eríamos",74,2),new C("iríamos",74,2),new C("emos",-1,1),new C("aremos",78,2),new C("eremos",78,2),new C("iremos",78,2),new C("ásemos",78,2),new C("iésemos",78,2),new C("imos",-1,2),new C("arás",-1,2),new C("erás",-1,2),new C("irás",-1,2),new C("ís",-1,2),new C("ará",-1,2),new C("erá",-1,2),new C("irá",-1,2),new C("aré",-1,2),new C("eré",-1,2),new C("iré",-1,2),new C("ió",-1,2)],d=[new C("a",-1,1),new C("e",-1,2),new C("o",-1,1),new C("os",-1,1),new C("á",-1,1),new C("é",-1,2),new C("í",-1,1),new C("ó",-1,1)],b=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,4,10],f=new P;function _(){if(f.out_grouping(b,97,252)){for(;!f.in_grouping(b,97,252);){if(f.cursor>=f.limit)return!0;f.cursor++}return!1}return!0}function h(){var e,s=f.cursor;if(function(){if(f.in_grouping(b,97,252)){var e=f.cursor;if(_()){if(f.cursor=e,!f.in_grouping(b,97,252))return!0;for(;!f.out_grouping(b,97,252);){if(f.cursor>=f.limit)return!0;f.cursor++}}return!1}return!0}()){if(f.cursor=s,!f.out_grouping(b,97,252))return;if(e=f.cursor,_()){if(f.cursor=e,!f.in_grouping(b,97,252)||f.cursor>=f.limit)return;f.cursor++}}i=f.cursor}function v(){for(;!f.in_grouping(b,97,252);){if(f.cursor>=f.limit)return!1;f.cursor++}for(;!f.out_grouping(b,97,252);){if(f.cursor>=f.limit)return!1;f.cursor++}return!0}function p(){return i<=f.cursor}function g(){return r<=f.cursor}function k(e,s){if(!g())return!0;f.slice_del(),f.ket=f.cursor;var r=f.find_among_b(e,s);return r&&(f.bra=f.cursor,1==r&&g()&&f.slice_del()),!1}function y(e){return!g()||(f.slice_del(),f.ket=f.cursor,f.eq_s_b(2,e)&&(f.bra=f.cursor,g()&&f.slice_del()),!1)}function q(){var e;if(f.ket=f.cursor,e=f.find_among_b(c,46)){switch(f.bra=f.cursor,e){case 1:if(!g())return!1;f.slice_del();break;case 2:if(y("ic"))return!1;break;case 3:if(!g())return!1;f.slice_from("log");break;case 4:if(!g())return!1;f.slice_from("u");break;case 5:if(!g())return!1;f.slice_from("ente");break;case 6:if(!(n<=f.cursor))return!1;f.slice_del(),f.ket=f.cursor,(e=f.find_among_b(s,4))&&(f.bra=f.cursor,g()&&(f.slice_del(),1==e&&(f.ket=f.cursor,f.eq_s_b(2,"at")&&(f.bra=f.cursor,g()&&f.slice_del()))));break;case 7:if(k(u,3))return!1;break;case 8:if(k(w,3))return!1;break;case 9:if(y("at"))return!1}return!0}return!1}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var e,s=f.cursor;return e=f.cursor,i=f.limit,r=n=i,h(),f.cursor=e,v()&&(n=f.cursor,v()&&(r=f.cursor)),f.limit_backward=s,f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,f.find_among_b(t,13)&&(f.bra=f.cursor,(e=f.find_among_b(o,11))&&p()))switch(e){case 1:f.bra=f.cursor,f.slice_from("iendo");break;case 2:f.bra=f.cursor,f.slice_from("ando");break;case 3:f.bra=f.cursor,f.slice_from("ar");break;case 4:f.bra=f.cursor,f.slice_from("er");break;case 5:f.bra=f.cursor,f.slice_from("ir");break;case 6:f.slice_del();break;case 7:f.eq_s_b(1,"u")&&f.slice_del()}}(),f.cursor=f.limit,q()||(f.cursor=f.limit,function(){var e,s;if(f.cursor>=i&&(s=f.limit_backward,f.limit_backward=i,f.ket=f.cursor,e=f.find_among_b(m,12),f.limit_backward=s,e)){if(f.bra=f.cursor,1==e){if(!f.eq_s_b(1,"u"))return!1;f.slice_del()}return!0}return!1}()||(f.cursor=f.limit,function(){var e,s,r,n;if(f.cursor>=i&&(s=f.limit_backward,f.limit_backward=i,f.ket=f.cursor,e=f.find_among_b(l,96),f.limit_backward=s,e))switch(f.bra=f.cursor,e){case 1:r=f.limit-f.cursor,f.eq_s_b(1,"u")?(n=f.limit-f.cursor,f.eq_s_b(1,"g")?f.cursor=f.limit-n:f.cursor=f.limit-r):f.cursor=f.limit-r,f.bra=f.cursor;case 2:f.slice_del()}}())),f.cursor=f.limit,function(){var e,s;if(f.ket=f.cursor,e=f.find_among_b(d,8))switch(f.bra=f.cursor,e){case 1:p()&&f.slice_del();break;case 2:p()&&(f.slice_del(),f.ket=f.cursor,f.eq_s_b(1,"u")&&(f.bra=f.cursor,s=f.limit-f.cursor,f.eq_s_b(1,"g")&&(f.cursor=f.limit-s,p()&&f.slice_del())))}}(),f.cursor=f.limit_backward,function(){for(var e;;){if(f.bra=f.cursor,e=f.find_among(a,6))switch(f.ket=f.cursor,e){case 1:f.slice_from("a");continue;case 2:f.slice_from("e");continue;case 3:f.slice_from("i");continue;case 4:f.slice_from("o");continue;case 5:f.slice_from("u");continue;case 6:if(f.cursor>=f.limit)break;f.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return s.setCurrent(e),s.stem(),s.getCurrent()}):(s.setCurrent(e),s.stem(),s.getCurrent())}),e.Pipeline.registerFunction(e.es.stemmer,"stemmer-es"),e.es.stopWordFilter=e.generateStopWordFilter("a al algo algunas algunos ante antes como con contra cual cuando de del desde donde durante e el ella ellas ellos en entre era erais eran eras eres es esa esas ese eso esos esta estaba estabais estaban estabas estad estada estadas estado estados estamos estando estar estaremos estará estarán estarás estaré estaréis estaría estaríais estaríamos estarían estarías estas este estemos esto estos estoy estuve estuviera estuvierais estuvieran estuvieras estuvieron estuviese estuvieseis estuviesen estuvieses estuvimos estuviste estuvisteis estuviéramos estuviésemos estuvo está estábamos estáis están estás esté estéis estén estés fue fuera fuerais fueran fueras fueron fuese fueseis fuesen fueses fui fuimos fuiste fuisteis fuéramos fuésemos ha habida habidas habido habidos habiendo habremos habrá habrán habrás habré habréis habría habríais habríamos habrían habrías habéis había habíais habíamos habían habías han has hasta hay haya hayamos hayan hayas hayáis he hemos hube hubiera hubierais hubieran hubieras hubieron hubiese hubieseis hubiesen hubieses hubimos hubiste hubisteis hubiéramos hubiésemos hubo la las le les lo los me mi mis mucho muchos muy más mí mía mías mío míos nada ni no nos nosotras nosotros nuestra nuestras nuestro nuestros o os otra otras otro otros para pero poco por porque que quien quienes qué se sea seamos sean seas seremos será serán serás seré seréis sería seríais seríamos serían serías seáis sido siendo sin sobre sois somos son soy su sus suya suyas suyo suyos sí también tanto te tendremos tendrá tendrán tendrás tendré tendréis tendría tendríais tendríamos tendrían tendrías tened tenemos tenga tengamos tengan tengas tengo tengáis tenida tenidas tenido tenidos teniendo tenéis tenía teníais teníamos tenían tenías ti tiene tienen tienes todo todos tu tus tuve tuviera tuvierais tuvieran tuvieras tuvieron tuviese tuvieseis tuviesen tuvieses tuvimos tuviste tuvisteis tuviéramos tuviésemos tuvo tuya tuyas tuyo tuyos tú un una uno unos vosotras vosotros vuestra vuestras vuestro vuestros y ya yo él éramos".split(" ")),e.Pipeline.registerFunction(e.es.stopWordFilter,"stopWordFilter-es")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.fi.js b/assets/javascripts/lunr/lunr.fi.js
index 0200b1f..f34d10e 100644
--- a/assets/javascripts/lunr/lunr.fi.js
+++ b/assets/javascripts/lunr/lunr.fi.js
@@ -1 +1,17 @@
-!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var e,r,n;i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=(e=i.stemmerSupport.Among,r=i.stemmerSupport.SnowballProgram,n=new function(){var i,n,t,s,l=[new e("pa",-1,1),new e("sti",-1,2),new e("kaan",-1,1),new e("han",-1,1),new e("kin",-1,1),new e("hän",-1,1),new e("kään",-1,1),new e("ko",-1,1),new e("pä",-1,1),new e("kö",-1,1)],o=[new e("lla",-1,-1),new e("na",-1,-1),new e("ssa",-1,-1),new e("ta",-1,-1),new e("lta",3,-1),new e("sta",3,-1)],a=[new e("llä",-1,-1),new e("nä",-1,-1),new e("ssä",-1,-1),new e("tä",-1,-1),new e("ltä",3,-1),new e("stä",3,-1)],u=[new e("lle",-1,-1),new e("ine",-1,-1)],c=[new e("nsa",-1,3),new e("mme",-1,3),new e("nne",-1,3),new e("ni",-1,2),new e("si",-1,1),new e("an",-1,4),new e("en",-1,6),new e("än",-1,5),new e("nsä",-1,3)],m=[new e("aa",-1,-1),new e("ee",-1,-1),new e("ii",-1,-1),new e("oo",-1,-1),new e("uu",-1,-1),new e("ää",-1,-1),new e("öö",-1,-1)],w=[new e("a",-1,8),new e("lla",0,-1),new e("na",0,-1),new e("ssa",0,-1),new e("ta",0,-1),new e("lta",4,-1),new e("sta",4,-1),new e("tta",4,9),new e("lle",-1,-1),new e("ine",-1,-1),new e("ksi",-1,-1),new e("n",-1,7),new e("han",11,1),new e("den",11,-1,C),new e("seen",11,-1,v),new e("hen",11,2),new e("tten",11,-1,C),new e("hin",11,3),new e("siin",11,-1,C),new e("hon",11,4),new e("hän",11,5),new e("hön",11,6),new e("ä",-1,8),new e("llä",22,-1),new e("nä",22,-1),new e("ssä",22,-1),new e("tä",22,-1),new e("ltä",26,-1),new e("stä",26,-1),new e("ttä",26,9)],_=[new e("eja",-1,-1),new e("mma",-1,1),new e("imma",1,-1),new e("mpa",-1,1),new e("impa",3,-1),new e("mmi",-1,1),new e("immi",5,-1),new e("mpi",-1,1),new e("impi",7,-1),new e("ejä",-1,-1),new e("mmä",-1,1),new e("immä",10,-1),new e("mpä",-1,1),new e("impä",12,-1)],k=[new e("i",-1,-1),new e("j",-1,-1)],b=[new e("mma",-1,1),new e("imma",0,-1)],d=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],f=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],h=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],p=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],g=new r;function j(){for(var i;i=g.cursor,!g.in_grouping(f,97,246);){if(g.cursor=i,i>=g.limit)return!0;g.cursor++}for(g.cursor=i;!g.out_grouping(f,97,246);){if(g.cursor>=g.limit)return!0;g.cursor++}return!1}function q(){var i,e;if(g.cursor>=s)if(e=g.limit_backward,g.limit_backward=s,g.ket=g.cursor,i=g.find_among_b(l,10)){switch(g.bra=g.cursor,g.limit_backward=e,i){case 1:if(!g.in_grouping_b(p,97,246))return;break;case 2:if(!(t<=g.cursor))return}g.slice_del()}else g.limit_backward=e}function v(){return g.find_among_b(m,7)}function C(){return g.eq_s_b(1,"i")&&g.in_grouping_b(h,97,246)}this.setCurrent=function(i){g.setCurrent(i)},this.getCurrent=function(){return g.getCurrent()},this.stem=function(){var e,r=g.cursor;return s=g.limit,t=s,j()||(s=g.cursor,j()||(t=g.cursor)),i=!1,g.limit_backward=r,g.cursor=g.limit,q(),g.cursor=g.limit,function(){var i,e,r;if(g.cursor>=s)if(e=g.limit_backward,g.limit_backward=s,g.ket=g.cursor,i=g.find_among_b(c,9))switch(g.bra=g.cursor,g.limit_backward=e,i){case 1:r=g.limit-g.cursor,g.eq_s_b(1,"k")||(g.cursor=g.limit-r,g.slice_del());break;case 2:g.slice_del(),g.ket=g.cursor,g.eq_s_b(3,"kse")&&(g.bra=g.cursor,g.slice_from("ksi"));break;case 3:g.slice_del();break;case 4:g.find_among_b(o,6)&&g.slice_del();break;case 5:g.find_among_b(a,6)&&g.slice_del();break;case 6:g.find_among_b(u,2)&&g.slice_del()}else g.limit_backward=e}(),g.cursor=g.limit,function(){var e,r,n;if(g.cursor>=s)if(r=g.limit_backward,g.limit_backward=s,g.ket=g.cursor,e=g.find_among_b(w,30)){switch(g.bra=g.cursor,g.limit_backward=r,e){case 1:if(!g.eq_s_b(1,"a"))return;break;case 2:case 9:if(!g.eq_s_b(1,"e"))return;break;case 3:if(!g.eq_s_b(1,"i"))return;break;case 4:if(!g.eq_s_b(1,"o"))return;break;case 5:if(!g.eq_s_b(1,"ä"))return;break;case 6:if(!g.eq_s_b(1,"ö"))return;break;case 7:if(n=g.limit-g.cursor,!v()&&(g.cursor=g.limit-n,!g.eq_s_b(2,"ie"))){g.cursor=g.limit-n;break}if(g.cursor=g.limit-n,g.cursor<=g.limit_backward){g.cursor=g.limit-n;break}g.cursor--,g.bra=g.cursor;break;case 8:if(!g.in_grouping_b(f,97,246)||!g.out_grouping_b(f,97,246))return}g.slice_del(),i=!0}else g.limit_backward=r}(),g.cursor=g.limit,function(){var i,e,r;if(g.cursor>=t)if(e=g.limit_backward,g.limit_backward=t,g.ket=g.cursor,i=g.find_among_b(_,14)){if(g.bra=g.cursor,g.limit_backward=e,1==i){if(r=g.limit-g.cursor,g.eq_s_b(2,"po"))return;g.cursor=g.limit-r}g.slice_del()}else g.limit_backward=e}(),g.cursor=g.limit,i?(g.cursor>=s&&(e=g.limit_backward,g.limit_backward=s,g.ket=g.cursor,g.find_among_b(k,2)?(g.bra=g.cursor,g.limit_backward=e,g.slice_del()):g.limit_backward=e),g.cursor=g.limit):(g.cursor=g.limit,function(){var i,e,r,n,l,o;if(g.cursor>=s){if(e=g.limit_backward,g.limit_backward=s,g.ket=g.cursor,g.eq_s_b(1,"t")&&(g.bra=g.cursor,r=g.limit-g.cursor,g.in_grouping_b(f,97,246)&&(g.cursor=g.limit-r,g.slice_del(),g.limit_backward=e,n=g.limit-g.cursor,g.cursor>=t&&(g.cursor=t,l=g.limit_backward,g.limit_backward=g.cursor,g.cursor=g.limit-n,g.ket=g.cursor,i=g.find_among_b(b,2))))){if(g.bra=g.cursor,g.limit_backward=l,1==i){if(o=g.limit-g.cursor,g.eq_s_b(2,"po"))return;g.cursor=g.limit-o}return void g.slice_del()}g.limit_backward=e}}(),g.cursor=g.limit),function(){var i,e,r,t;if(g.cursor>=s){for(i=g.limit_backward,g.limit_backward=s,e=g.limit-g.cursor,v()&&(g.cursor=g.limit-e,g.ket=g.cursor,g.cursor>g.limit_backward&&(g.cursor--,g.bra=g.cursor,g.slice_del())),g.cursor=g.limit-e,g.ket=g.cursor,g.in_grouping_b(d,97,228)&&(g.bra=g.cursor,g.out_grouping_b(f,97,246)&&g.slice_del()),g.cursor=g.limit-e,g.ket=g.cursor,g.eq_s_b(1,"j")&&(g.bra=g.cursor,r=g.limit-g.cursor,g.eq_s_b(1,"o")?g.slice_del():(g.cursor=g.limit-r,g.eq_s_b(1,"u")&&g.slice_del())),g.cursor=g.limit-e,g.ket=g.cursor,g.eq_s_b(1,"o")&&(g.bra=g.cursor,g.eq_s_b(1,"j")&&g.slice_del()),g.cursor=g.limit-e,g.limit_backward=i;;){if(t=g.limit-g.cursor,g.out_grouping_b(f,97,246)){g.cursor=g.limit-t;break}if(g.cursor=g.limit-t,g.cursor<=g.limit_backward)return;g.cursor--}g.ket=g.cursor,g.cursor>g.limit_backward&&(g.cursor--,g.bra=g.cursor,n=g.slice_to(),g.eq_v_b(n)&&g.slice_del())}}(),!0}},function(i){return"function"==typeof i.update?i.update(function(i){return n.setCurrent(i),n.stem(),n.getCurrent()}):(n.setCurrent(i),n.stem(),n.getCurrent())}),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Finnish` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(i,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(i.lunr)}(this,function(){return function(i){if(void 0===i)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===i.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,C,e;i.fi=function(){this.pipeline.reset(),this.pipeline.add(i.fi.trimmer,i.fi.stopWordFilter,i.fi.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(i.fi.stemmer))},i.fi.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",i.fi.trimmer=i.trimmerSupport.generateTrimmer(i.fi.wordCharacters),i.Pipeline.registerFunction(i.fi.trimmer,"trimmer-fi"),i.fi.stemmer=(v=i.stemmerSupport.Among,C=i.stemmerSupport.SnowballProgram,e=new function(){var n,t,l,o,r=[new v("pa",-1,1),new v("sti",-1,2),new v("kaan",-1,1),new v("han",-1,1),new v("kin",-1,1),new v("hän",-1,1),new v("kään",-1,1),new v("ko",-1,1),new v("pä",-1,1),new v("kö",-1,1)],s=[new v("lla",-1,-1),new v("na",-1,-1),new v("ssa",-1,-1),new v("ta",-1,-1),new v("lta",3,-1),new v("sta",3,-1)],a=[new v("llä",-1,-1),new v("nä",-1,-1),new v("ssä",-1,-1),new v("tä",-1,-1),new v("ltä",3,-1),new v("stä",3,-1)],u=[new v("lle",-1,-1),new v("ine",-1,-1)],c=[new v("nsa",-1,3),new v("mme",-1,3),new v("nne",-1,3),new v("ni",-1,2),new v("si",-1,1),new v("an",-1,4),new v("en",-1,6),new v("än",-1,5),new v("nsä",-1,3)],i=[new v("aa",-1,-1),new v("ee",-1,-1),new v("ii",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1),new v("ää",-1,-1),new v("öö",-1,-1)],m=[new v("a",-1,8),new v("lla",0,-1),new v("na",0,-1),new v("ssa",0,-1),new v("ta",0,-1),new v("lta",4,-1),new v("sta",4,-1),new v("tta",4,9),new v("lle",-1,-1),new v("ine",-1,-1),new v("ksi",-1,-1),new v("n",-1,7),new v("han",11,1),new v("den",11,-1,q),new v("seen",11,-1,j),new v("hen",11,2),new v("tten",11,-1,q),new v("hin",11,3),new v("siin",11,-1,q),new v("hon",11,4),new v("hän",11,5),new v("hön",11,6),new v("ä",-1,8),new v("llä",22,-1),new v("nä",22,-1),new v("ssä",22,-1),new v("tä",22,-1),new v("ltä",26,-1),new v("stä",26,-1),new v("ttä",26,9)],w=[new v("eja",-1,-1),new v("mma",-1,1),new v("imma",1,-1),new v("mpa",-1,1),new v("impa",3,-1),new v("mmi",-1,1),new v("immi",5,-1),new v("mpi",-1,1),new v("impi",7,-1),new v("ejä",-1,-1),new v("mmä",-1,1),new v("immä",10,-1),new v("mpä",-1,1),new v("impä",12,-1)],_=[new v("i",-1,-1),new v("j",-1,-1)],k=[new v("mma",-1,1),new v("imma",0,-1)],b=[17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],e=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],f=[17,97,24,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32],h=new C;function p(){for(var i;i=h.cursor,!h.in_grouping(d,97,246);){if((h.cursor=i)>=h.limit)return!0;h.cursor++}for(h.cursor=i;!h.out_grouping(d,97,246);){if(h.cursor>=h.limit)return!0;h.cursor++}return!1}function g(){var i,e;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(r,10)){switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:if(!h.in_grouping_b(f,97,246))return;break;case 2:if(!(l<=h.cursor))return}h.slice_del()}else h.limit_backward=e}function j(){return h.find_among_b(i,7)}function q(){return h.eq_s_b(1,"i")&&h.in_grouping_b(e,97,246)}this.setCurrent=function(i){h.setCurrent(i)},this.getCurrent=function(){return h.getCurrent()},this.stem=function(){var i,e=h.cursor;return o=h.limit,l=o,p()||(o=h.cursor,p()||(l=h.cursor)),n=!1,h.limit_backward=e,h.cursor=h.limit,g(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(c,9))switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:r=h.limit-h.cursor,h.eq_s_b(1,"k")||(h.cursor=h.limit-r,h.slice_del());break;case 2:h.slice_del(),h.ket=h.cursor,h.eq_s_b(3,"kse")&&(h.bra=h.cursor,h.slice_from("ksi"));break;case 3:h.slice_del();break;case 4:h.find_among_b(s,6)&&h.slice_del();break;case 5:h.find_among_b(a,6)&&h.slice_del();break;case 6:h.find_among_b(u,2)&&h.slice_del()}else h.limit_backward=e}(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=o)if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,i=h.find_among_b(m,30)){switch(h.bra=h.cursor,h.limit_backward=e,i){case 1:if(!h.eq_s_b(1,"a"))return;break;case 2:case 9:if(!h.eq_s_b(1,"e"))return;break;case 3:if(!h.eq_s_b(1,"i"))return;break;case 4:if(!h.eq_s_b(1,"o"))return;break;case 5:if(!h.eq_s_b(1,"ä"))return;break;case 6:if(!h.eq_s_b(1,"ö"))return;break;case 7:if(r=h.limit-h.cursor,!j()&&(h.cursor=h.limit-r,!h.eq_s_b(2,"ie"))){h.cursor=h.limit-r;break}if(h.cursor=h.limit-r,h.cursor<=h.limit_backward){h.cursor=h.limit-r;break}h.cursor--,h.bra=h.cursor;break;case 8:if(!h.in_grouping_b(d,97,246)||!h.out_grouping_b(d,97,246))return}h.slice_del(),n=!0}else h.limit_backward=e}(),h.cursor=h.limit,function(){var i,e,r;if(h.cursor>=l)if(e=h.limit_backward,h.limit_backward=l,h.ket=h.cursor,i=h.find_among_b(w,14)){if(h.bra=h.cursor,h.limit_backward=e,1==i){if(r=h.limit-h.cursor,h.eq_s_b(2,"po"))return;h.cursor=h.limit-r}h.slice_del()}else h.limit_backward=e}(),h.cursor=h.limit,h.cursor=(n?h.cursor>=o&&(i=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,h.find_among_b(_,2)?(h.bra=h.cursor,h.limit_backward=i,h.slice_del()):h.limit_backward=i):(h.cursor=h.limit,function(){var i,e,r,n,t,s;if(h.cursor>=o){if(e=h.limit_backward,h.limit_backward=o,h.ket=h.cursor,h.eq_s_b(1,"t")&&(h.bra=h.cursor,r=h.limit-h.cursor,h.in_grouping_b(d,97,246)&&(h.cursor=h.limit-r,h.slice_del(),h.limit_backward=e,n=h.limit-h.cursor,h.cursor>=l&&(h.cursor=l,t=h.limit_backward,h.limit_backward=h.cursor,h.cursor=h.limit-n,h.ket=h.cursor,i=h.find_among_b(k,2))))){if(h.bra=h.cursor,h.limit_backward=t,1==i){if(s=h.limit-h.cursor,h.eq_s_b(2,"po"))return;h.cursor=h.limit-s}return h.slice_del()}h.limit_backward=e}}()),h.limit),function(){var i,e,r,n;if(h.cursor>=o){for(i=h.limit_backward,h.limit_backward=o,e=h.limit-h.cursor,j()&&(h.cursor=h.limit-e,h.ket=h.cursor,h.cursor>h.limit_backward&&(h.cursor--,h.bra=h.cursor,h.slice_del())),h.cursor=h.limit-e,h.ket=h.cursor,h.in_grouping_b(b,97,228)&&(h.bra=h.cursor,h.out_grouping_b(d,97,246)&&h.slice_del()),h.cursor=h.limit-e,h.ket=h.cursor,h.eq_s_b(1,"j")&&(h.bra=h.cursor,r=h.limit-h.cursor,h.eq_s_b(1,"o")?h.slice_del():(h.cursor=h.limit-r,h.eq_s_b(1,"u")&&h.slice_del())),h.cursor=h.limit-e,h.ket=h.cursor,h.eq_s_b(1,"o")&&(h.bra=h.cursor,h.eq_s_b(1,"j")&&h.slice_del()),h.cursor=h.limit-e,h.limit_backward=i;;){if(n=h.limit-h.cursor,h.out_grouping_b(d,97,246)){h.cursor=h.limit-n;break}if(h.cursor=h.limit-n,h.cursor<=h.limit_backward)return;h.cursor--}h.ket=h.cursor,h.cursor>h.limit_backward&&(h.cursor--,h.bra=h.cursor,t=h.slice_to(),h.eq_v_b(t)&&h.slice_del())}}(),!0}},function(i){return"function"==typeof i.update?i.update(function(i){return e.setCurrent(i),e.stem(),e.getCurrent()}):(e.setCurrent(i),e.stem(),e.getCurrent())}),i.Pipeline.registerFunction(i.fi.stemmer,"stemmer-fi"),i.fi.stopWordFilter=i.generateStopWordFilter("ei eivät emme en et ette että he heidän heidät heihin heille heillä heiltä heissä heistä heitä hän häneen hänelle hänellä häneltä hänen hänessä hänestä hänet häntä itse ja johon joiden joihin joiksi joilla joille joilta joina joissa joista joita joka joksi jolla jolle jolta jona jonka jos jossa josta jota jotka kanssa keiden keihin keiksi keille keillä keiltä keinä keissä keistä keitä keneen keneksi kenelle kenellä keneltä kenen kenenä kenessä kenestä kenet ketkä ketkä ketä koska kuin kuka kun me meidän meidät meihin meille meillä meiltä meissä meistä meitä mihin miksi mikä mille millä miltä minkä minkä minua minulla minulle minulta minun minussa minusta minut minuun minä minä missä mistä mitkä mitä mukaan mutta ne niiden niihin niiksi niille niillä niiltä niin niin niinä niissä niistä niitä noiden noihin noiksi noilla noille noilta noin noina noissa noista noita nuo nyt näiden näihin näiksi näille näillä näiltä näinä näissä näistä näitä nämä ole olemme olen olet olette oli olimme olin olisi olisimme olisin olisit olisitte olisivat olit olitte olivat olla olleet ollut on ovat poikki se sekä sen siihen siinä siitä siksi sille sillä sillä siltä sinua sinulla sinulle sinulta sinun sinussa sinusta sinut sinuun sinä sinä sitä tai te teidän teidät teihin teille teillä teiltä teissä teistä teitä tuo tuohon tuoksi tuolla tuolle tuolta tuon tuona tuossa tuosta tuota tähän täksi tälle tällä tältä tämä tämän tänä tässä tästä tätä vaan vai vaikka yli".split(" ")),i.Pipeline.registerFunction(i.fi.stopWordFilter,"stopWordFilter-fi")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.fr.js b/assets/javascripts/lunr/lunr.fr.js
index 3a9b9b1..d043ec6 100644
--- a/assets/javascripts/lunr/lunr.fr.js
+++ b/assets/javascripts/lunr/lunr.fr.js
@@ -1 +1,17 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,s,i;e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=(r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,i=new function(){var e,i,n,t=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],u=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],o=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],c=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],a=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],l=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],w=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],f=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],m=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],_=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],b=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],d=new s;function k(e,r,s){return!(!d.eq_s(1,e)||(d.ket=d.cursor,!d.in_grouping(_,97,251)))&&(d.slice_from(r),d.cursor=s,!0)}function p(e,r,s){return!!d.eq_s(1,e)&&(d.ket=d.cursor,d.slice_from(r),d.cursor=s,!0)}function g(){for(;!d.in_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}for(;!d.out_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}return!1}function q(){return n<=d.cursor}function v(){return i<=d.cursor}function h(){return e<=d.cursor}function z(){if(!function(){var e,r;if(d.ket=d.cursor,e=d.find_among_b(a,43)){switch(d.bra=d.cursor,e){case 1:if(!h())return!1;d.slice_del();break;case 2:if(!h())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")&&(d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU"));break;case 3:if(!h())return!1;d.slice_from("log");break;case 4:if(!h())return!1;d.slice_from("u");break;case 5:if(!h())return!1;d.slice_from("ent");break;case 6:if(!q())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(o,6))switch(d.bra=d.cursor,e){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&d.slice_del()));break;case 2:h()?d.slice_del():v()&&d.slice_from("eux");break;case 3:h()&&d.slice_del();break;case 4:q()&&d.slice_from("i")}break;case 7:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(c,3))switch(d.bra=d.cursor,e){case 1:h()?d.slice_del():d.slice_from("abl");break;case 2:h()?d.slice_del():d.slice_from("iqU");break;case 3:h()&&d.slice_del()}break;case 8:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")))){d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU");break}break;case 9:d.slice_from("eau");break;case 10:if(!v())return!1;d.slice_from("al");break;case 11:if(h())d.slice_del();else{if(!v())return!1;d.slice_from("eux")}break;case 12:if(!v()||!d.out_grouping_b(_,97,251))return!1;d.slice_del();break;case 13:return q()&&d.slice_from("ant"),!1;case 14:return q()&&d.slice_from("ent"),!1;case 15:return r=d.limit-d.cursor,d.in_grouping_b(_,97,251)&&q()&&(d.cursor=d.limit-r,d.slice_del()),!1}return!0}return!1}()&&(d.cursor=d.limit,!function(){var e,r;if(d.cursor<n)return!1;if(r=d.limit_backward,d.limit_backward=n,d.ket=d.cursor,!(e=d.find_among_b(l,35)))return d.limit_backward=r,!1;if(d.bra=d.cursor,1==e){if(!d.out_grouping_b(_,97,251))return d.limit_backward=r,!1;d.slice_del()}return d.limit_backward=r,!0}()&&(d.cursor=d.limit,!function(){var e,r,s;if(d.cursor<n)return!1;if(r=d.limit_backward,d.limit_backward=n,d.ket=d.cursor,!(e=d.find_among_b(w,38)))return d.limit_backward=r,!1;switch(d.bra=d.cursor,e){case 1:if(!h())return d.limit_backward=r,!1;d.slice_del();break;case 2:d.slice_del();break;case 3:d.slice_del(),s=d.limit-d.cursor,d.ket=d.cursor,d.eq_s_b(1,"e")?(d.bra=d.cursor,d.slice_del()):d.cursor=d.limit-s}return d.limit_backward=r,!0}())))return d.cursor=d.limit,void function(){var e,r,s,i,t=d.limit-d.cursor;if(d.ket=d.cursor,d.eq_s_b(1,"s")?(d.bra=d.cursor,r=d.limit-d.cursor,d.out_grouping_b(b,97,232)?(d.cursor=d.limit-r,d.slice_del()):d.cursor=d.limit-t):d.cursor=d.limit-t,d.cursor>=n){if(s=d.limit_backward,d.limit_backward=n,d.ket=d.cursor,e=d.find_among_b(f,7))switch(d.bra=d.cursor,e){case 1:if(h()){if(i=d.limit-d.cursor,!d.eq_s_b(1,"s")&&(d.cursor=d.limit-i,!d.eq_s_b(1,"t")))break;d.slice_del()}break;case 2:d.slice_from("i");break;case 3:d.slice_del();break;case 4:d.eq_s_b(2,"gu")&&d.slice_del()}d.limit_backward=s}}();d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"Y")?(d.bra=d.cursor,d.slice_from("i")):(d.cursor=d.limit,d.eq_s_b(1,"ç")&&(d.bra=d.cursor,d.slice_from("c")))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var r,s=d.cursor;return function(){for(var e,r;;){if(e=d.cursor,d.in_grouping(_,97,251)){if(d.bra=d.cursor,r=d.cursor,k("u","U",e))continue;if(d.cursor=r,k("i","I",e))continue;if(d.cursor=r,p("y","Y",e))continue}if(d.cursor=e,d.bra=e,!k("y","Y",e)){if(d.cursor=e,d.eq_s(1,"q")&&(d.bra=d.cursor,p("u","U",e)))continue;if(d.cursor=e,e>=d.limit)return;d.cursor++}}}(),d.cursor=s,function(){var r=d.cursor;if(n=d.limit,i=n,e=n,d.in_grouping(_,97,251)&&d.in_grouping(_,97,251)&&d.cursor<d.limit)d.cursor++;else if(d.cursor=r,!d.find_among(t,3)){d.cursor=r;do{if(d.cursor>=d.limit){d.cursor=n;break}d.cursor++}while(!d.in_grouping(_,97,251))}n=d.cursor,d.cursor=r,g()||(i=d.cursor,g()||(e=d.cursor))}(),d.limit_backward=s,d.cursor=d.limit,z(),d.cursor=d.limit,r=d.limit-d.cursor,d.find_among_b(m,5)&&(d.cursor=d.limit-r,d.ket=d.cursor,d.cursor>d.limit_backward&&(d.cursor--,d.bra=d.cursor,d.slice_del())),d.cursor=d.limit,function(){for(var e,r=1;d.out_grouping_b(_,97,251);)r--;if(r<=0){if(d.ket=d.cursor,e=d.limit-d.cursor,!d.eq_s_b(1,"é")&&(d.cursor=d.limit-e,!d.eq_s_b(1,"è")))return;d.bra=d.cursor,d.slice_from("e")}}(),d.cursor=d.limit_backward,function(){for(var e,r;r=d.cursor,d.bra=r,e=d.find_among(u,4);)switch(d.ket=d.cursor,e){case 1:d.slice_from("i");break;case 2:d.slice_from("u");break;case 3:d.slice_from("y");break;case 4:if(d.cursor>=d.limit)return;d.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `French` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,y,s;e.fr=function(){this.pipeline.reset(),this.pipeline.add(e.fr.trimmer,e.fr.stopWordFilter,e.fr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.fr.stemmer))},e.fr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.fr.trimmer=e.trimmerSupport.generateTrimmer(e.fr.wordCharacters),e.Pipeline.registerFunction(e.fr.trimmer,"trimmer-fr"),e.fr.stemmer=(r=e.stemmerSupport.Among,y=e.stemmerSupport.SnowballProgram,s=new function(){var s,i,t,n=[new r("col",-1,-1),new r("par",-1,-1),new r("tap",-1,-1)],u=[new r("",-1,4),new r("I",0,1),new r("U",0,2),new r("Y",0,3)],o=[new r("iqU",-1,3),new r("abl",-1,3),new r("Ièr",-1,4),new r("ièr",-1,4),new r("eus",-1,2),new r("iv",-1,1)],c=[new r("ic",-1,2),new r("abil",-1,1),new r("iv",-1,3)],a=[new r("iqUe",-1,1),new r("atrice",-1,2),new r("ance",-1,1),new r("ence",-1,5),new r("logie",-1,3),new r("able",-1,1),new r("isme",-1,1),new r("euse",-1,11),new r("iste",-1,1),new r("ive",-1,8),new r("if",-1,8),new r("usion",-1,4),new r("ation",-1,2),new r("ution",-1,4),new r("ateur",-1,2),new r("iqUes",-1,1),new r("atrices",-1,2),new r("ances",-1,1),new r("ences",-1,5),new r("logies",-1,3),new r("ables",-1,1),new r("ismes",-1,1),new r("euses",-1,11),new r("istes",-1,1),new r("ives",-1,8),new r("ifs",-1,8),new r("usions",-1,4),new r("ations",-1,2),new r("utions",-1,4),new r("ateurs",-1,2),new r("ments",-1,15),new r("ements",30,6),new r("issements",31,12),new r("ités",-1,7),new r("ment",-1,15),new r("ement",34,6),new r("issement",35,12),new r("amment",34,13),new r("emment",34,14),new r("aux",-1,10),new r("eaux",39,9),new r("eux",-1,1),new r("ité",-1,7)],l=[new r("ira",-1,1),new r("ie",-1,1),new r("isse",-1,1),new r("issante",-1,1),new r("i",-1,1),new r("irai",4,1),new r("ir",-1,1),new r("iras",-1,1),new r("ies",-1,1),new r("îmes",-1,1),new r("isses",-1,1),new r("issantes",-1,1),new r("îtes",-1,1),new r("is",-1,1),new r("irais",13,1),new r("issais",13,1),new r("irions",-1,1),new r("issions",-1,1),new r("irons",-1,1),new r("issons",-1,1),new r("issants",-1,1),new r("it",-1,1),new r("irait",21,1),new r("issait",21,1),new r("issant",-1,1),new r("iraIent",-1,1),new r("issaIent",-1,1),new r("irent",-1,1),new r("issent",-1,1),new r("iront",-1,1),new r("ît",-1,1),new r("iriez",-1,1),new r("issiez",-1,1),new r("irez",-1,1),new r("issez",-1,1)],w=[new r("a",-1,3),new r("era",0,2),new r("asse",-1,3),new r("ante",-1,3),new r("ée",-1,2),new r("ai",-1,3),new r("erai",5,2),new r("er",-1,2),new r("as",-1,3),new r("eras",8,2),new r("âmes",-1,3),new r("asses",-1,3),new r("antes",-1,3),new r("âtes",-1,3),new r("ées",-1,2),new r("ais",-1,3),new r("erais",15,2),new r("ions",-1,1),new r("erions",17,2),new r("assions",17,3),new r("erons",-1,2),new r("ants",-1,3),new r("és",-1,2),new r("ait",-1,3),new r("erait",23,2),new r("ant",-1,3),new r("aIent",-1,3),new r("eraIent",26,2),new r("èrent",-1,2),new r("assent",-1,3),new r("eront",-1,2),new r("ât",-1,3),new r("ez",-1,2),new r("iez",32,2),new r("eriez",33,2),new r("assiez",33,3),new r("erez",32,2),new r("é",-1,2)],f=[new r("e",-1,3),new r("Ière",0,2),new r("ière",0,2),new r("ion",-1,1),new r("Ier",-1,2),new r("ier",-1,2),new r("ë",-1,4)],m=[new r("ell",-1,-1),new r("eill",-1,-1),new r("enn",-1,-1),new r("onn",-1,-1),new r("ett",-1,-1)],_=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,128,130,103,8,5],b=[1,65,20,0,0,0,0,0,0,0,0,0,0,0,0,0,128],d=new y;function k(e,r,s){return!(!d.eq_s(1,e)||(d.ket=d.cursor,!d.in_grouping(_,97,251)))&&(d.slice_from(r),d.cursor=s,!0)}function p(e,r,s){return!!d.eq_s(1,e)&&(d.ket=d.cursor,d.slice_from(r),d.cursor=s,!0)}function g(){for(;!d.in_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}for(;!d.out_grouping(_,97,251);){if(d.cursor>=d.limit)return!0;d.cursor++}return!1}function q(){return t<=d.cursor}function v(){return i<=d.cursor}function h(){return s<=d.cursor}function z(){if(!function(){var e,r;if(d.ket=d.cursor,e=d.find_among_b(a,43)){switch(d.bra=d.cursor,e){case 1:if(!h())return!1;d.slice_del();break;case 2:if(!h())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")&&(d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU"));break;case 3:if(!h())return!1;d.slice_from("log");break;case 4:if(!h())return!1;d.slice_from("u");break;case 5:if(!h())return!1;d.slice_from("ent");break;case 6:if(!q())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(o,6))switch(d.bra=d.cursor,e){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&d.slice_del()));break;case 2:h()?d.slice_del():v()&&d.slice_from("eux");break;case 3:h()&&d.slice_del();break;case 4:q()&&d.slice_from("i")}break;case 7:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,e=d.find_among_b(c,3))switch(d.bra=d.cursor,e){case 1:h()?d.slice_del():d.slice_from("abl");break;case 2:h()?d.slice_del():d.slice_from("iqU");break;case 3:h()&&d.slice_del()}break;case 8:if(!h())return!1;if(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")))){d.bra=d.cursor,h()?d.slice_del():d.slice_from("iqU");break}break;case 9:d.slice_from("eau");break;case 10:if(!v())return!1;d.slice_from("al");break;case 11:if(h())d.slice_del();else{if(!v())return!1;d.slice_from("eux")}break;case 12:if(!v()||!d.out_grouping_b(_,97,251))return!1;d.slice_del();break;case 13:return q()&&d.slice_from("ant"),!1;case 14:return q()&&d.slice_from("ent"),!1;case 15:return r=d.limit-d.cursor,d.in_grouping_b(_,97,251)&&q()&&(d.cursor=d.limit-r,d.slice_del()),!1}return!0}return!1}()&&(d.cursor=d.limit,!function(){var e,r;if(d.cursor<t)return!1;if(r=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,!(e=d.find_among_b(l,35)))return d.limit_backward=r,!1;if(d.bra=d.cursor,1==e){if(!d.out_grouping_b(_,97,251))return d.limit_backward=r,!1;d.slice_del()}return d.limit_backward=r,!0}()&&(d.cursor=d.limit,!function(){var e,r,s;if(d.cursor<t)return!1;if(r=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,!(e=d.find_among_b(w,38)))return d.limit_backward=r,!1;switch(d.bra=d.cursor,e){case 1:if(!h())return d.limit_backward=r,!1;d.slice_del();break;case 2:d.slice_del();break;case 3:d.slice_del(),s=d.limit-d.cursor,d.ket=d.cursor,d.eq_s_b(1,"e")?(d.bra=d.cursor,d.slice_del()):d.cursor=d.limit-s}return d.limit_backward=r,!0}())))return d.cursor=d.limit,void function(){var e,r,s,i,n=d.limit-d.cursor;if(d.ket=d.cursor,d.eq_s_b(1,"s")?(d.bra=d.cursor,r=d.limit-d.cursor,d.out_grouping_b(b,97,232)?(d.cursor=d.limit-r,d.slice_del()):d.cursor=d.limit-n):d.cursor=d.limit-n,d.cursor>=t){if(s=d.limit_backward,d.limit_backward=t,d.ket=d.cursor,e=d.find_among_b(f,7))switch(d.bra=d.cursor,e){case 1:if(h()){if(i=d.limit-d.cursor,!d.eq_s_b(1,"s")&&(d.cursor=d.limit-i,!d.eq_s_b(1,"t")))break;d.slice_del()}break;case 2:d.slice_from("i");break;case 3:d.slice_del();break;case 4:d.eq_s_b(2,"gu")&&d.slice_del()}d.limit_backward=s}}();d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"Y")?(d.bra=d.cursor,d.slice_from("i")):(d.cursor=d.limit,d.eq_s_b(1,"ç")&&(d.bra=d.cursor,d.slice_from("c")))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var e,r=d.cursor;return function(){for(var e,r;;){if(e=d.cursor,d.in_grouping(_,97,251)){if(d.bra=d.cursor,r=d.cursor,k("u","U",e))continue;if(d.cursor=r,k("i","I",e))continue;if(d.cursor=r,p("y","Y",e))continue}if(d.cursor=e,!k("y","Y",d.bra=e)){if(d.cursor=e,d.eq_s(1,"q")&&(d.bra=d.cursor,p("u","U",e)))continue;if((d.cursor=e)>=d.limit)return;d.cursor++}}}(),d.cursor=r,function(){var e=d.cursor;if(t=d.limit,s=i=t,d.in_grouping(_,97,251)&&d.in_grouping(_,97,251)&&d.cursor<d.limit)d.cursor++;else if(d.cursor=e,!d.find_among(n,3)){d.cursor=e;do{if(d.cursor>=d.limit){d.cursor=t;break}d.cursor++}while(!d.in_grouping(_,97,251))}t=d.cursor,d.cursor=e,g()||(i=d.cursor,g()||(s=d.cursor))}(),d.limit_backward=r,d.cursor=d.limit,z(),d.cursor=d.limit,e=d.limit-d.cursor,d.find_among_b(m,5)&&(d.cursor=d.limit-e,d.ket=d.cursor,d.cursor>d.limit_backward&&(d.cursor--,d.bra=d.cursor,d.slice_del())),d.cursor=d.limit,function(){for(var e,r=1;d.out_grouping_b(_,97,251);)r--;if(r<=0){if(d.ket=d.cursor,e=d.limit-d.cursor,!d.eq_s_b(1,"é")&&(d.cursor=d.limit-e,!d.eq_s_b(1,"è")))return;d.bra=d.cursor,d.slice_from("e")}}(),d.cursor=d.limit_backward,function(){for(var e,r;r=d.cursor,d.bra=r,e=d.find_among(u,4);)switch(d.ket=d.cursor,e){case 1:d.slice_from("i");break;case 2:d.slice_from("u");break;case 3:d.slice_from("y");break;case 4:if(d.cursor>=d.limit)return;d.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return s.setCurrent(e),s.stem(),s.getCurrent()}):(s.setCurrent(e),s.stem(),s.getCurrent())}),e.Pipeline.registerFunction(e.fr.stemmer,"stemmer-fr"),e.fr.stopWordFilter=e.generateStopWordFilter("ai aie aient aies ait as au aura aurai auraient aurais aurait auras aurez auriez aurions aurons auront aux avaient avais avait avec avez aviez avions avons ayant ayez ayons c ce ceci celà ces cet cette d dans de des du elle en es est et eu eue eues eurent eus eusse eussent eusses eussiez eussions eut eux eûmes eût eûtes furent fus fusse fussent fusses fussiez fussions fut fûmes fût fûtes ici il ils j je l la le les leur leurs lui m ma mais me mes moi mon même n ne nos notre nous on ont ou par pas pour qu que quel quelle quelles quels qui s sa sans se sera serai seraient serais serait seras serez seriez serions serons seront ses soi soient sois soit sommes son sont soyez soyons suis sur t ta te tes toi ton tu un une vos votre vous y à étaient étais était étant étiez étions été étée étées étés êtes".split(" ")),e.Pipeline.registerFunction(e.fr.stopWordFilter,"stopWordFilter-fr")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.hu.js b/assets/javascripts/lunr/lunr.hu.js
index fa704a6..bfc68db 100644
--- a/assets/javascripts/lunr/lunr.hu.js
+++ b/assets/javascripts/lunr/lunr.hu.js
@@ -1 +1,17 @@
-!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var n,r,i;e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=(n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,i=new function(){var e,i=[new n("cs",-1,-1),new n("dzs",-1,-1),new n("gy",-1,-1),new n("ly",-1,-1),new n("ny",-1,-1),new n("sz",-1,-1),new n("ty",-1,-1),new n("zs",-1,-1)],a=[new n("á",-1,1),new n("é",-1,2)],t=[new n("bb",-1,-1),new n("cc",-1,-1),new n("dd",-1,-1),new n("ff",-1,-1),new n("gg",-1,-1),new n("jj",-1,-1),new n("kk",-1,-1),new n("ll",-1,-1),new n("mm",-1,-1),new n("nn",-1,-1),new n("pp",-1,-1),new n("rr",-1,-1),new n("ccs",-1,-1),new n("ss",-1,-1),new n("zzs",-1,-1),new n("tt",-1,-1),new n("vv",-1,-1),new n("ggy",-1,-1),new n("lly",-1,-1),new n("nny",-1,-1),new n("tty",-1,-1),new n("ssz",-1,-1),new n("zz",-1,-1)],s=[new n("al",-1,1),new n("el",-1,2)],c=[new n("ba",-1,-1),new n("ra",-1,-1),new n("be",-1,-1),new n("re",-1,-1),new n("ig",-1,-1),new n("nak",-1,-1),new n("nek",-1,-1),new n("val",-1,-1),new n("vel",-1,-1),new n("ul",-1,-1),new n("nál",-1,-1),new n("nél",-1,-1),new n("ból",-1,-1),new n("ról",-1,-1),new n("tól",-1,-1),new n("bõl",-1,-1),new n("rõl",-1,-1),new n("tõl",-1,-1),new n("ül",-1,-1),new n("n",-1,-1),new n("an",19,-1),new n("ban",20,-1),new n("en",19,-1),new n("ben",22,-1),new n("képpen",22,-1),new n("on",19,-1),new n("ön",19,-1),new n("képp",-1,-1),new n("kor",-1,-1),new n("t",-1,-1),new n("at",29,-1),new n("et",29,-1),new n("ként",29,-1),new n("anként",32,-1),new n("enként",32,-1),new n("onként",32,-1),new n("ot",29,-1),new n("ért",29,-1),new n("öt",29,-1),new n("hez",-1,-1),new n("hoz",-1,-1),new n("höz",-1,-1),new n("vá",-1,-1),new n("vé",-1,-1)],w=[new n("án",-1,2),new n("én",-1,1),new n("ánként",-1,3)],o=[new n("stul",-1,2),new n("astul",0,1),new n("ástul",0,3),new n("stül",-1,2),new n("estül",3,1),new n("éstül",3,4)],l=[new n("á",-1,1),new n("é",-1,2)],u=[new n("k",-1,7),new n("ak",0,4),new n("ek",0,6),new n("ok",0,5),new n("ák",0,1),new n("ék",0,2),new n("ök",0,3)],m=[new n("éi",-1,7),new n("áéi",0,6),new n("ééi",0,5),new n("é",-1,9),new n("ké",3,4),new n("aké",4,1),new n("eké",4,1),new n("oké",4,1),new n("áké",4,3),new n("éké",4,2),new n("öké",4,1),new n("éé",3,8)],k=[new n("a",-1,18),new n("ja",0,17),new n("d",-1,16),new n("ad",2,13),new n("ed",2,13),new n("od",2,13),new n("ád",2,14),new n("éd",2,15),new n("öd",2,13),new n("e",-1,18),new n("je",9,17),new n("nk",-1,4),new n("unk",11,1),new n("ánk",11,2),new n("énk",11,3),new n("ünk",11,1),new n("uk",-1,8),new n("juk",16,7),new n("ájuk",17,5),new n("ük",-1,8),new n("jük",19,7),new n("éjük",20,6),new n("m",-1,12),new n("am",22,9),new n("em",22,9),new n("om",22,9),new n("ám",22,10),new n("ém",22,11),new n("o",-1,18),new n("á",-1,19),new n("é",-1,20)],f=[new n("id",-1,10),new n("aid",0,9),new n("jaid",1,6),new n("eid",0,9),new n("jeid",3,6),new n("áid",0,7),new n("éid",0,8),new n("i",-1,15),new n("ai",7,14),new n("jai",8,11),new n("ei",7,14),new n("jei",10,11),new n("ái",7,12),new n("éi",7,13),new n("itek",-1,24),new n("eitek",14,21),new n("jeitek",15,20),new n("éitek",14,23),new n("ik",-1,29),new n("aik",18,26),new n("jaik",19,25),new n("eik",18,26),new n("jeik",21,25),new n("áik",18,27),new n("éik",18,28),new n("ink",-1,20),new n("aink",25,17),new n("jaink",26,16),new n("eink",25,17),new n("jeink",28,16),new n("áink",25,18),new n("éink",25,19),new n("aitok",-1,21),new n("jaitok",32,20),new n("áitok",-1,22),new n("im",-1,5),new n("aim",35,4),new n("jaim",36,1),new n("eim",35,4),new n("jeim",38,1),new n("áim",35,2),new n("éim",35,3)],b=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],d=new r;function g(){return e<=d.cursor}function h(){var e=d.limit-d.cursor;return!!d.find_among_b(t,23)&&(d.cursor=d.limit-e,!0)}function p(){if(d.cursor>d.limit_backward){d.cursor--,d.ket=d.cursor;var e=d.cursor-1;d.limit_backward<=e&&e<=d.limit&&(d.cursor=e,d.bra=e,d.slice_del())}}function _(){d.ket=d.cursor,d.find_among_b(c,44)&&(d.bra=d.cursor,g()&&(d.slice_del(),function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(a,2))&&(d.bra=d.cursor,g()))switch(e){case 1:d.slice_from("a");break;case 2:d.slice_from("e")}}()))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var n=d.cursor;return function(){var n,r=d.cursor;if(e=d.limit,d.in_grouping(b,97,252))for(;;){if(n=d.cursor,d.out_grouping(b,97,252))return d.cursor=n,d.find_among(i,8)||(d.cursor=n,n<d.limit&&d.cursor++),void(e=d.cursor);if(d.cursor=n,n>=d.limit)return void(e=n);d.cursor++}if(d.cursor=r,d.out_grouping(b,97,252)){for(;!d.in_grouping(b,97,252);){if(d.cursor>=d.limit)return;d.cursor++}e=d.cursor}}(),d.limit_backward=n,d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(s,2))&&(d.bra=d.cursor,g())){if((1==e||2==e)&&!h())return;d.slice_del(),p()}}(),d.cursor=d.limit,_(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(w,3))&&(d.bra=d.cursor,g()))switch(e){case 1:d.slice_from("e");break;case 2:case 3:d.slice_from("a")}}(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(o,6))&&(d.bra=d.cursor,g()))switch(e){case 1:case 2:d.slice_del();break;case 3:d.slice_from("a");break;case 4:d.slice_from("e")}}(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(l,2))&&(d.bra=d.cursor,g())){if((1==e||2==e)&&!h())return;d.slice_del(),p()}}(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(m,12))&&(d.bra=d.cursor,g()))switch(e){case 1:case 4:case 7:case 9:d.slice_del();break;case 2:case 5:case 8:d.slice_from("e");break;case 3:case 6:d.slice_from("a")}}(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(k,31))&&(d.bra=d.cursor,g()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:d.slice_del();break;case 2:case 5:case 10:case 14:case 19:d.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:d.slice_from("e")}}(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(f,42))&&(d.bra=d.cursor,g()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:d.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:d.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:d.slice_from("e")}}(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,(e=d.find_among_b(u,7))&&(d.bra=d.cursor,g()))switch(e){case 1:d.slice_from("a");break;case 2:d.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:d.slice_del()}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Hungarian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var p,_,n;e.hu=function(){this.pipeline.reset(),this.pipeline.add(e.hu.trimmer,e.hu.stopWordFilter,e.hu.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.hu.stemmer))},e.hu.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.hu.trimmer=e.trimmerSupport.generateTrimmer(e.hu.wordCharacters),e.Pipeline.registerFunction(e.hu.trimmer,"trimmer-hu"),e.hu.stemmer=(p=e.stemmerSupport.Among,_=e.stemmerSupport.SnowballProgram,n=new function(){var r,i=[new p("cs",-1,-1),new p("dzs",-1,-1),new p("gy",-1,-1),new p("ly",-1,-1),new p("ny",-1,-1),new p("sz",-1,-1),new p("ty",-1,-1),new p("zs",-1,-1)],n=[new p("á",-1,1),new p("é",-1,2)],a=[new p("bb",-1,-1),new p("cc",-1,-1),new p("dd",-1,-1),new p("ff",-1,-1),new p("gg",-1,-1),new p("jj",-1,-1),new p("kk",-1,-1),new p("ll",-1,-1),new p("mm",-1,-1),new p("nn",-1,-1),new p("pp",-1,-1),new p("rr",-1,-1),new p("ccs",-1,-1),new p("ss",-1,-1),new p("zzs",-1,-1),new p("tt",-1,-1),new p("vv",-1,-1),new p("ggy",-1,-1),new p("lly",-1,-1),new p("nny",-1,-1),new p("tty",-1,-1),new p("ssz",-1,-1),new p("zz",-1,-1)],t=[new p("al",-1,1),new p("el",-1,2)],e=[new p("ba",-1,-1),new p("ra",-1,-1),new p("be",-1,-1),new p("re",-1,-1),new p("ig",-1,-1),new p("nak",-1,-1),new p("nek",-1,-1),new p("val",-1,-1),new p("vel",-1,-1),new p("ul",-1,-1),new p("nál",-1,-1),new p("nél",-1,-1),new p("ból",-1,-1),new p("ról",-1,-1),new p("tól",-1,-1),new p("bõl",-1,-1),new p("rõl",-1,-1),new p("tõl",-1,-1),new p("ül",-1,-1),new p("n",-1,-1),new p("an",19,-1),new p("ban",20,-1),new p("en",19,-1),new p("ben",22,-1),new p("képpen",22,-1),new p("on",19,-1),new p("ön",19,-1),new p("képp",-1,-1),new p("kor",-1,-1),new p("t",-1,-1),new p("at",29,-1),new p("et",29,-1),new p("ként",29,-1),new p("anként",32,-1),new p("enként",32,-1),new p("onként",32,-1),new p("ot",29,-1),new p("ért",29,-1),new p("öt",29,-1),new p("hez",-1,-1),new p("hoz",-1,-1),new p("höz",-1,-1),new p("vá",-1,-1),new p("vé",-1,-1)],s=[new p("án",-1,2),new p("én",-1,1),new p("ánként",-1,3)],c=[new p("stul",-1,2),new p("astul",0,1),new p("ástul",0,3),new p("stül",-1,2),new p("estül",3,1),new p("éstül",3,4)],w=[new p("á",-1,1),new p("é",-1,2)],o=[new p("k",-1,7),new p("ak",0,4),new p("ek",0,6),new p("ok",0,5),new p("ák",0,1),new p("ék",0,2),new p("ök",0,3)],l=[new p("éi",-1,7),new p("áéi",0,6),new p("ééi",0,5),new p("é",-1,9),new p("ké",3,4),new p("aké",4,1),new p("eké",4,1),new p("oké",4,1),new p("áké",4,3),new p("éké",4,2),new p("öké",4,1),new p("éé",3,8)],u=[new p("a",-1,18),new p("ja",0,17),new p("d",-1,16),new p("ad",2,13),new p("ed",2,13),new p("od",2,13),new p("ád",2,14),new p("éd",2,15),new p("öd",2,13),new p("e",-1,18),new p("je",9,17),new p("nk",-1,4),new p("unk",11,1),new p("ánk",11,2),new p("énk",11,3),new p("ünk",11,1),new p("uk",-1,8),new p("juk",16,7),new p("ájuk",17,5),new p("ük",-1,8),new p("jük",19,7),new p("éjük",20,6),new p("m",-1,12),new p("am",22,9),new p("em",22,9),new p("om",22,9),new p("ám",22,10),new p("ém",22,11),new p("o",-1,18),new p("á",-1,19),new p("é",-1,20)],m=[new p("id",-1,10),new p("aid",0,9),new p("jaid",1,6),new p("eid",0,9),new p("jeid",3,6),new p("áid",0,7),new p("éid",0,8),new p("i",-1,15),new p("ai",7,14),new p("jai",8,11),new p("ei",7,14),new p("jei",10,11),new p("ái",7,12),new p("éi",7,13),new p("itek",-1,24),new p("eitek",14,21),new p("jeitek",15,20),new p("éitek",14,23),new p("ik",-1,29),new p("aik",18,26),new p("jaik",19,25),new p("eik",18,26),new p("jeik",21,25),new p("áik",18,27),new p("éik",18,28),new p("ink",-1,20),new p("aink",25,17),new p("jaink",26,16),new p("eink",25,17),new p("jeink",28,16),new p("áink",25,18),new p("éink",25,19),new p("aitok",-1,21),new p("jaitok",32,20),new p("áitok",-1,22),new p("im",-1,5),new p("aim",35,4),new p("jaim",36,1),new p("eim",35,4),new p("jeim",38,1),new p("áim",35,2),new p("éim",35,3)],k=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,1,17,52,14],f=new _;function b(){return r<=f.cursor}function d(){var e=f.limit-f.cursor;return!!f.find_among_b(a,23)&&(f.cursor=f.limit-e,!0)}function g(){if(f.cursor>f.limit_backward){f.cursor--,f.ket=f.cursor;var e=f.cursor-1;f.limit_backward<=e&&e<=f.limit&&(f.cursor=e,f.bra=e,f.slice_del())}}function h(){f.ket=f.cursor,f.find_among_b(e,44)&&(f.bra=f.cursor,b()&&(f.slice_del(),function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(n,2))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("a");break;case 2:f.slice_from("e")}}()))}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var e=f.cursor;return function(){var e,n=f.cursor;if(r=f.limit,f.in_grouping(k,97,252))for(;;){if(e=f.cursor,f.out_grouping(k,97,252))return f.cursor=e,f.find_among(i,8)||(f.cursor=e)<f.limit&&f.cursor++,r=f.cursor;if((f.cursor=e)>=f.limit)return r=e;f.cursor++}if(f.cursor=n,f.out_grouping(k,97,252)){for(;!f.in_grouping(k,97,252);){if(f.cursor>=f.limit)return;f.cursor++}r=f.cursor}}(),f.limit_backward=e,f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(t,2))&&(f.bra=f.cursor,b())){if((1==e||2==e)&&!d())return;f.slice_del(),g()}}(),f.cursor=f.limit,h(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(s,3))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("e");break;case 2:case 3:f.slice_from("a")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(c,6))&&(f.bra=f.cursor,b()))switch(e){case 1:case 2:f.slice_del();break;case 3:f.slice_from("a");break;case 4:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(w,2))&&(f.bra=f.cursor,b())){if((1==e||2==e)&&!d())return;f.slice_del(),g()}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(l,12))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 7:case 9:f.slice_del();break;case 2:case 5:case 8:f.slice_from("e");break;case 3:case 6:f.slice_from("a")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(u,31))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 7:case 8:case 9:case 12:case 13:case 16:case 17:case 18:f.slice_del();break;case 2:case 5:case 10:case 14:case 19:f.slice_from("a");break;case 3:case 6:case 11:case 15:case 20:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(m,42))&&(f.bra=f.cursor,b()))switch(e){case 1:case 4:case 5:case 6:case 9:case 10:case 11:case 14:case 15:case 16:case 17:case 20:case 21:case 24:case 25:case 26:case 29:f.slice_del();break;case 2:case 7:case 12:case 18:case 22:case 27:f.slice_from("a");break;case 3:case 8:case 13:case 19:case 23:case 28:f.slice_from("e")}}(),f.cursor=f.limit,function(){var e;if(f.ket=f.cursor,(e=f.find_among_b(o,7))&&(f.bra=f.cursor,b()))switch(e){case 1:f.slice_from("a");break;case 2:f.slice_from("e");break;case 3:case 4:case 5:case 6:case 7:f.slice_del()}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.hu.stemmer,"stemmer-hu"),e.hu.stopWordFilter=e.generateStopWordFilter("a abban ahhoz ahogy ahol aki akik akkor alatt amely amelyek amelyekben amelyeket amelyet amelynek ami amikor amit amolyan amíg annak arra arról az azok azon azonban azt aztán azután azzal azért be belül benne bár cikk cikkek cikkeket csak de e ebben eddig egy egyes egyetlen egyik egyre egyéb egész ehhez ekkor el ellen elsõ elég elõ elõször elõtt emilyen ennek erre ez ezek ezen ezt ezzel ezért fel felé hanem hiszen hogy hogyan igen ill ill. illetve ilyen ilyenkor ismét ison itt jobban jó jól kell kellett keressünk keresztül ki kívül között közül legalább legyen lehet lehetett lenne lenni lesz lett maga magát majd majd meg mellett mely melyek mert mi mikor milyen minden mindenki mindent mindig mint mintha mit mivel miért most már más másik még míg nagy nagyobb nagyon ne nekem neki nem nincs néha néhány nélkül olyan ott pedig persze rá s saját sem semmi sok sokat sokkal szemben szerint szinte számára talán tehát teljes tovább továbbá több ugyanis utolsó után utána vagy vagyis vagyok valaki valami valamint való van vannak vele vissza viszont volna volt voltak voltam voltunk által általában át én éppen és így õ õk õket össze úgy új újabb újra".split(" ")),e.Pipeline.registerFunction(e.hu.stopWordFilter,"stopWordFilter-hu")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.it.js b/assets/javascripts/lunr/lunr.it.js
index 2930733..58a46fb 100644
--- a/assets/javascripts/lunr/lunr.it.js
+++ b/assets/javascripts/lunr/lunr.it.js
@@ -1 +1,17 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,i,n;e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=(r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,o,t=[new r("",-1,7),new r("qu",0,6),new r("á",0,1),new r("é",0,2),new r("í",0,3),new r("ó",0,4),new r("ú",0,5)],s=[new r("",-1,3),new r("I",0,1),new r("U",0,2)],a=[new r("la",-1,-1),new r("cela",0,-1),new r("gliela",0,-1),new r("mela",0,-1),new r("tela",0,-1),new r("vela",0,-1),new r("le",-1,-1),new r("cele",6,-1),new r("gliele",6,-1),new r("mele",6,-1),new r("tele",6,-1),new r("vele",6,-1),new r("ne",-1,-1),new r("cene",12,-1),new r("gliene",12,-1),new r("mene",12,-1),new r("sene",12,-1),new r("tene",12,-1),new r("vene",12,-1),new r("ci",-1,-1),new r("li",-1,-1),new r("celi",20,-1),new r("glieli",20,-1),new r("meli",20,-1),new r("teli",20,-1),new r("veli",20,-1),new r("gli",20,-1),new r("mi",-1,-1),new r("si",-1,-1),new r("ti",-1,-1),new r("vi",-1,-1),new r("lo",-1,-1),new r("celo",31,-1),new r("glielo",31,-1),new r("melo",31,-1),new r("telo",31,-1),new r("velo",31,-1)],u=[new r("ando",-1,1),new r("endo",-1,1),new r("ar",-1,2),new r("er",-1,2),new r("ir",-1,2)],c=[new r("ic",-1,-1),new r("abil",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],w=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],l=[new r("ica",-1,1),new r("logia",-1,3),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,9),new r("anza",-1,1),new r("enza",-1,5),new r("ice",-1,1),new r("atrice",7,1),new r("iche",-1,1),new r("logie",-1,3),new r("abile",-1,1),new r("ibile",-1,1),new r("usione",-1,4),new r("azione",-1,2),new r("uzione",-1,4),new r("atore",-1,2),new r("ose",-1,1),new r("ante",-1,1),new r("mente",-1,1),new r("amente",19,7),new r("iste",-1,1),new r("ive",-1,9),new r("anze",-1,1),new r("enze",-1,5),new r("ici",-1,1),new r("atrici",25,1),new r("ichi",-1,1),new r("abili",-1,1),new r("ibili",-1,1),new r("ismi",-1,1),new r("usioni",-1,4),new r("azioni",-1,2),new r("uzioni",-1,4),new r("atori",-1,2),new r("osi",-1,1),new r("anti",-1,1),new r("amenti",-1,6),new r("imenti",-1,6),new r("isti",-1,1),new r("ivi",-1,9),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,6),new r("imento",-1,6),new r("ivo",-1,9),new r("ità",-1,8),new r("istà",-1,1),new r("istè",-1,1),new r("istì",-1,1)],m=[new r("isca",-1,1),new r("enda",-1,1),new r("ata",-1,1),new r("ita",-1,1),new r("uta",-1,1),new r("ava",-1,1),new r("eva",-1,1),new r("iva",-1,1),new r("erebbe",-1,1),new r("irebbe",-1,1),new r("isce",-1,1),new r("ende",-1,1),new r("are",-1,1),new r("ere",-1,1),new r("ire",-1,1),new r("asse",-1,1),new r("ate",-1,1),new r("avate",16,1),new r("evate",16,1),new r("ivate",16,1),new r("ete",-1,1),new r("erete",20,1),new r("irete",20,1),new r("ite",-1,1),new r("ereste",-1,1),new r("ireste",-1,1),new r("ute",-1,1),new r("erai",-1,1),new r("irai",-1,1),new r("isci",-1,1),new r("endi",-1,1),new r("erei",-1,1),new r("irei",-1,1),new r("assi",-1,1),new r("ati",-1,1),new r("iti",-1,1),new r("eresti",-1,1),new r("iresti",-1,1),new r("uti",-1,1),new r("avi",-1,1),new r("evi",-1,1),new r("ivi",-1,1),new r("isco",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("Yamo",-1,1),new r("iamo",-1,1),new r("avamo",-1,1),new r("evamo",-1,1),new r("ivamo",-1,1),new r("eremo",-1,1),new r("iremo",-1,1),new r("assimo",-1,1),new r("ammo",-1,1),new r("emmo",-1,1),new r("eremmo",54,1),new r("iremmo",54,1),new r("immo",-1,1),new r("ano",-1,1),new r("iscano",58,1),new r("avano",58,1),new r("evano",58,1),new r("ivano",58,1),new r("eranno",-1,1),new r("iranno",-1,1),new r("ono",-1,1),new r("iscono",65,1),new r("arono",65,1),new r("erono",65,1),new r("irono",65,1),new r("erebbero",-1,1),new r("irebbero",-1,1),new r("assero",-1,1),new r("essero",-1,1),new r("issero",-1,1),new r("ato",-1,1),new r("ito",-1,1),new r("uto",-1,1),new r("avo",-1,1),new r("evo",-1,1),new r("ivo",-1,1),new r("ar",-1,1),new r("ir",-1,1),new r("erà",-1,1),new r("irà",-1,1),new r("erò",-1,1),new r("irò",-1,1)],f=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],v=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],b=[17],d=new i;function _(e,r,i){return!(!d.eq_s(1,e)||(d.ket=d.cursor,!d.in_grouping(f,97,249)))&&(d.slice_from(r),d.cursor=i,!0)}function g(e){if(d.cursor=e,!d.in_grouping(f,97,249))return!1;for(;!d.out_grouping(f,97,249);){if(d.cursor>=d.limit)return!1;d.cursor++}return!0}function p(){var e,r=d.cursor;if(!function(){if(d.in_grouping(f,97,249)){var e=d.cursor;if(d.out_grouping(f,97,249)){for(;!d.in_grouping(f,97,249);){if(d.cursor>=d.limit)return g(e);d.cursor++}return!0}return g(e)}return!1}()){if(d.cursor=r,!d.out_grouping(f,97,249))return;if(e=d.cursor,d.out_grouping(f,97,249)){for(;!d.in_grouping(f,97,249);){if(d.cursor>=d.limit)return d.cursor=e,void(d.in_grouping(f,97,249)&&d.cursor<d.limit&&d.cursor++);d.cursor++}return void(o=d.cursor)}if(d.cursor=e,!d.in_grouping(f,97,249)||d.cursor>=d.limit)return;d.cursor++}o=d.cursor}function k(){for(;!d.in_grouping(f,97,249);){if(d.cursor>=d.limit)return!1;d.cursor++}for(;!d.out_grouping(f,97,249);){if(d.cursor>=d.limit)return!1;d.cursor++}return!0}function h(){return o<=d.cursor}function q(){return e<=d.cursor}function C(){var e;if(d.ket=d.cursor,!(e=d.find_among_b(l,51)))return!1;switch(d.bra=d.cursor,e){case 1:if(!q())return!1;d.slice_del();break;case 2:if(!q())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")&&(d.bra=d.cursor,q()&&d.slice_del());break;case 3:if(!q())return!1;d.slice_from("log");break;case 4:if(!q())return!1;d.slice_from("u");break;case 5:if(!q())return!1;d.slice_from("ente");break;case 6:if(!h())return!1;d.slice_del();break;case 7:if(!(n<=d.cursor))return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(c,4))&&(d.bra=d.cursor,q()&&(d.slice_del(),1==e&&(d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,q()&&d.slice_del()))));break;case 8:if(!q())return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(w,3))&&(d.bra=d.cursor,1==e&&q()&&d.slice_del());break;case 9:if(!q())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,q()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"ic")&&(d.bra=d.cursor,q()&&d.slice_del())))}return!0}function z(){var e;e=d.limit-d.cursor,d.ket=d.cursor,d.in_grouping_b(v,97,242)&&(d.bra=d.cursor,h()&&(d.slice_del(),d.ket=d.cursor,d.eq_s_b(1,"i")&&(d.bra=d.cursor,h())))?d.slice_del():d.cursor=d.limit-e,d.ket=d.cursor,d.eq_s_b(1,"h")&&(d.bra=d.cursor,d.in_grouping_b(b,99,103)&&h()&&d.slice_del())}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var r,i,c,w=d.cursor;return function(){for(var e,r,i,n,o=d.cursor;;){if(d.bra=d.cursor,e=d.find_among(t,7))switch(d.ket=d.cursor,e){case 1:d.slice_from("à");continue;case 2:d.slice_from("è");continue;case 3:d.slice_from("ì");continue;case 4:d.slice_from("ò");continue;case 5:d.slice_from("ù");continue;case 6:d.slice_from("qU");continue;case 7:if(d.cursor>=d.limit)break;d.cursor++;continue}break}for(d.cursor=o;;)for(r=d.cursor;;){if(i=d.cursor,d.in_grouping(f,97,249)){if(d.bra=d.cursor,n=d.cursor,_("u","U",i))break;if(d.cursor=n,_("i","I",i))break}if(d.cursor=i,d.cursor>=d.limit)return void(d.cursor=r);d.cursor++}}(),d.cursor=w,r=d.cursor,o=d.limit,n=o,e=o,p(),d.cursor=r,k()&&(n=d.cursor,k()&&(e=d.cursor)),d.limit_backward=w,d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,d.find_among_b(a,37)&&(d.bra=d.cursor,(e=d.find_among_b(u,5))&&h()))switch(e){case 1:d.slice_del();break;case 2:d.slice_from("e")}}(),d.cursor=d.limit,C()||(d.cursor=d.limit,d.cursor>=o&&(c=d.limit_backward,d.limit_backward=o,d.ket=d.cursor,(i=d.find_among_b(m,87))&&(d.bra=d.cursor,1==i&&d.slice_del()),d.limit_backward=c)),d.cursor=d.limit,z(),d.cursor=d.limit_backward,function(){for(var e;d.bra=d.cursor,e=d.find_among(s,3);)switch(d.ket=d.cursor,e){case 1:d.slice_from("i");break;case 2:d.slice_from("u");break;case 3:if(d.cursor>=d.limit)return;d.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Italian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var z,P,r;e.it=function(){this.pipeline.reset(),this.pipeline.add(e.it.trimmer,e.it.stopWordFilter,e.it.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.it.stemmer))},e.it.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.it.trimmer=e.trimmerSupport.generateTrimmer(e.it.wordCharacters),e.Pipeline.registerFunction(e.it.trimmer,"trimmer-it"),e.it.stemmer=(z=e.stemmerSupport.Among,P=e.stemmerSupport.SnowballProgram,r=new function(){var o,t,s,a=[new z("",-1,7),new z("qu",0,6),new z("á",0,1),new z("é",0,2),new z("í",0,3),new z("ó",0,4),new z("ú",0,5)],u=[new z("",-1,3),new z("I",0,1),new z("U",0,2)],c=[new z("la",-1,-1),new z("cela",0,-1),new z("gliela",0,-1),new z("mela",0,-1),new z("tela",0,-1),new z("vela",0,-1),new z("le",-1,-1),new z("cele",6,-1),new z("gliele",6,-1),new z("mele",6,-1),new z("tele",6,-1),new z("vele",6,-1),new z("ne",-1,-1),new z("cene",12,-1),new z("gliene",12,-1),new z("mene",12,-1),new z("sene",12,-1),new z("tene",12,-1),new z("vene",12,-1),new z("ci",-1,-1),new z("li",-1,-1),new z("celi",20,-1),new z("glieli",20,-1),new z("meli",20,-1),new z("teli",20,-1),new z("veli",20,-1),new z("gli",20,-1),new z("mi",-1,-1),new z("si",-1,-1),new z("ti",-1,-1),new z("vi",-1,-1),new z("lo",-1,-1),new z("celo",31,-1),new z("glielo",31,-1),new z("melo",31,-1),new z("telo",31,-1),new z("velo",31,-1)],w=[new z("ando",-1,1),new z("endo",-1,1),new z("ar",-1,2),new z("er",-1,2),new z("ir",-1,2)],r=[new z("ic",-1,-1),new z("abil",-1,-1),new z("os",-1,-1),new z("iv",-1,1)],n=[new z("ic",-1,1),new z("abil",-1,1),new z("iv",-1,1)],i=[new z("ica",-1,1),new z("logia",-1,3),new z("osa",-1,1),new z("ista",-1,1),new z("iva",-1,9),new z("anza",-1,1),new z("enza",-1,5),new z("ice",-1,1),new z("atrice",7,1),new z("iche",-1,1),new z("logie",-1,3),new z("abile",-1,1),new z("ibile",-1,1),new z("usione",-1,4),new z("azione",-1,2),new z("uzione",-1,4),new z("atore",-1,2),new z("ose",-1,1),new z("ante",-1,1),new z("mente",-1,1),new z("amente",19,7),new z("iste",-1,1),new z("ive",-1,9),new z("anze",-1,1),new z("enze",-1,5),new z("ici",-1,1),new z("atrici",25,1),new z("ichi",-1,1),new z("abili",-1,1),new z("ibili",-1,1),new z("ismi",-1,1),new z("usioni",-1,4),new z("azioni",-1,2),new z("uzioni",-1,4),new z("atori",-1,2),new z("osi",-1,1),new z("anti",-1,1),new z("amenti",-1,6),new z("imenti",-1,6),new z("isti",-1,1),new z("ivi",-1,9),new z("ico",-1,1),new z("ismo",-1,1),new z("oso",-1,1),new z("amento",-1,6),new z("imento",-1,6),new z("ivo",-1,9),new z("ità",-1,8),new z("istà",-1,1),new z("istè",-1,1),new z("istì",-1,1)],l=[new z("isca",-1,1),new z("enda",-1,1),new z("ata",-1,1),new z("ita",-1,1),new z("uta",-1,1),new z("ava",-1,1),new z("eva",-1,1),new z("iva",-1,1),new z("erebbe",-1,1),new z("irebbe",-1,1),new z("isce",-1,1),new z("ende",-1,1),new z("are",-1,1),new z("ere",-1,1),new z("ire",-1,1),new z("asse",-1,1),new z("ate",-1,1),new z("avate",16,1),new z("evate",16,1),new z("ivate",16,1),new z("ete",-1,1),new z("erete",20,1),new z("irete",20,1),new z("ite",-1,1),new z("ereste",-1,1),new z("ireste",-1,1),new z("ute",-1,1),new z("erai",-1,1),new z("irai",-1,1),new z("isci",-1,1),new z("endi",-1,1),new z("erei",-1,1),new z("irei",-1,1),new z("assi",-1,1),new z("ati",-1,1),new z("iti",-1,1),new z("eresti",-1,1),new z("iresti",-1,1),new z("uti",-1,1),new z("avi",-1,1),new z("evi",-1,1),new z("ivi",-1,1),new z("isco",-1,1),new z("ando",-1,1),new z("endo",-1,1),new z("Yamo",-1,1),new z("iamo",-1,1),new z("avamo",-1,1),new z("evamo",-1,1),new z("ivamo",-1,1),new z("eremo",-1,1),new z("iremo",-1,1),new z("assimo",-1,1),new z("ammo",-1,1),new z("emmo",-1,1),new z("eremmo",54,1),new z("iremmo",54,1),new z("immo",-1,1),new z("ano",-1,1),new z("iscano",58,1),new z("avano",58,1),new z("evano",58,1),new z("ivano",58,1),new z("eranno",-1,1),new z("iranno",-1,1),new z("ono",-1,1),new z("iscono",65,1),new z("arono",65,1),new z("erono",65,1),new z("irono",65,1),new z("erebbero",-1,1),new z("irebbero",-1,1),new z("assero",-1,1),new z("essero",-1,1),new z("issero",-1,1),new z("ato",-1,1),new z("ito",-1,1),new z("uto",-1,1),new z("avo",-1,1),new z("evo",-1,1),new z("ivo",-1,1),new z("ar",-1,1),new z("ir",-1,1),new z("erà",-1,1),new z("irà",-1,1),new z("erò",-1,1),new z("irò",-1,1)],m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2,1],f=[17,65,0,0,0,0,0,0,0,0,0,0,0,0,0,128,128,8,2],v=[17],b=new P;function d(e,r,n){return!(!b.eq_s(1,e)||(b.ket=b.cursor,!b.in_grouping(m,97,249)))&&(b.slice_from(r),b.cursor=n,!0)}function _(e){if(b.cursor=e,!b.in_grouping(m,97,249))return!1;for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}return!0}function g(){var e,r=b.cursor;if(!function(){if(b.in_grouping(m,97,249)){var e=b.cursor;if(b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return _(e);b.cursor++}return!0}return _(e)}return!1}()){if(b.cursor=r,!b.out_grouping(m,97,249))return;if(e=b.cursor,b.out_grouping(m,97,249)){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return b.cursor=e,void(b.in_grouping(m,97,249)&&b.cursor<b.limit&&b.cursor++);b.cursor++}return void(s=b.cursor)}if(b.cursor=e,!b.in_grouping(m,97,249)||b.cursor>=b.limit)return;b.cursor++}s=b.cursor}function p(){for(;!b.in_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}for(;!b.out_grouping(m,97,249);){if(b.cursor>=b.limit)return!1;b.cursor++}return!0}function k(){return s<=b.cursor}function h(){return o<=b.cursor}function q(){var e;if(b.ket=b.cursor,!(e=b.find_among_b(i,51)))return!1;switch(b.bra=b.cursor,e){case 1:if(!h())return!1;b.slice_del();break;case 2:if(!h())return!1;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic")&&(b.bra=b.cursor,h()&&b.slice_del());break;case 3:if(!h())return!1;b.slice_from("log");break;case 4:if(!h())return!1;b.slice_from("u");break;case 5:if(!h())return!1;b.slice_from("ente");break;case 6:if(!k())return!1;b.slice_del();break;case 7:if(!(t<=b.cursor))return!1;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(r,4))&&(b.bra=b.cursor,h()&&(b.slice_del(),1==e&&(b.ket=b.cursor,b.eq_s_b(2,"at")&&(b.bra=b.cursor,h()&&b.slice_del()))));break;case 8:if(!h())return!1;b.slice_del(),b.ket=b.cursor,(e=b.find_among_b(n,3))&&(b.bra=b.cursor,1==e&&h()&&b.slice_del());break;case 9:if(!h())return!1;b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"at")&&(b.bra=b.cursor,h()&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(2,"ic")&&(b.bra=b.cursor,h()&&b.slice_del())))}return!0}function C(){var e;e=b.limit-b.cursor,b.ket=b.cursor,b.in_grouping_b(f,97,242)&&(b.bra=b.cursor,k()&&(b.slice_del(),b.ket=b.cursor,b.eq_s_b(1,"i")&&(b.bra=b.cursor,k())))?b.slice_del():b.cursor=b.limit-e,b.ket=b.cursor,b.eq_s_b(1,"h")&&(b.bra=b.cursor,b.in_grouping_b(v,99,103)&&k()&&b.slice_del())}this.setCurrent=function(e){b.setCurrent(e)},this.getCurrent=function(){return b.getCurrent()},this.stem=function(){var e,r,n,i=b.cursor;return function(){for(var e,r,n,i,o=b.cursor;;){if(b.bra=b.cursor,e=b.find_among(a,7))switch(b.ket=b.cursor,e){case 1:b.slice_from("à");continue;case 2:b.slice_from("è");continue;case 3:b.slice_from("ì");continue;case 4:b.slice_from("ò");continue;case 5:b.slice_from("ù");continue;case 6:b.slice_from("qU");continue;case 7:if(b.cursor>=b.limit)break;b.cursor++;continue}break}for(b.cursor=o;;)for(r=b.cursor;;){if(n=b.cursor,b.in_grouping(m,97,249)){if(b.bra=b.cursor,i=b.cursor,d("u","U",n))break;if(b.cursor=i,d("i","I",n))break}if(b.cursor=n,b.cursor>=b.limit)return b.cursor=r;b.cursor++}}(),b.cursor=i,e=b.cursor,s=b.limit,o=t=s,g(),b.cursor=e,p()&&(t=b.cursor,p()&&(o=b.cursor)),b.limit_backward=i,b.cursor=b.limit,function(){var e;if(b.ket=b.cursor,b.find_among_b(c,37)&&(b.bra=b.cursor,(e=b.find_among_b(w,5))&&k()))switch(e){case 1:b.slice_del();break;case 2:b.slice_from("e")}}(),b.cursor=b.limit,q()||(b.cursor=b.limit,b.cursor>=s&&(n=b.limit_backward,b.limit_backward=s,b.ket=b.cursor,(r=b.find_among_b(l,87))&&(b.bra=b.cursor,1==r&&b.slice_del()),b.limit_backward=n)),b.cursor=b.limit,C(),b.cursor=b.limit_backward,function(){for(var e;b.bra=b.cursor,e=b.find_among(u,3);)switch(b.ket=b.cursor,e){case 1:b.slice_from("i");break;case 2:b.slice_from("u");break;case 3:if(b.cursor>=b.limit)return;b.cursor++}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.it.stemmer,"stemmer-it"),e.it.stopWordFilter=e.generateStopWordFilter("a abbia abbiamo abbiano abbiate ad agl agli ai al all alla alle allo anche avemmo avendo avesse avessero avessi avessimo aveste avesti avete aveva avevamo avevano avevate avevi avevo avrai avranno avrebbe avrebbero avrei avremmo avremo avreste avresti avrete avrà avrò avuta avute avuti avuto c che chi ci coi col come con contro cui da dagl dagli dai dal dall dalla dalle dallo degl degli dei del dell della delle dello di dov dove e ebbe ebbero ebbi ed era erano eravamo eravate eri ero essendo faccia facciamo facciano facciate faccio facemmo facendo facesse facessero facessi facessimo faceste facesti faceva facevamo facevano facevate facevi facevo fai fanno farai faranno farebbe farebbero farei faremmo faremo fareste faresti farete farà farò fece fecero feci fosse fossero fossi fossimo foste fosti fu fui fummo furono gli ha hai hanno ho i il in io l la le lei li lo loro lui ma mi mia mie miei mio ne negl negli nei nel nell nella nelle nello noi non nostra nostre nostri nostro o per perché più quale quanta quante quanti quanto quella quelle quelli quello questa queste questi questo sarai saranno sarebbe sarebbero sarei saremmo saremo sareste saresti sarete sarà sarò se sei si sia siamo siano siate siete sono sta stai stando stanno starai staranno starebbe starebbero starei staremmo staremo stareste staresti starete starà starò stava stavamo stavano stavate stavi stavo stemmo stesse stessero stessi stessimo steste stesti stette stettero stetti stia stiamo stiano stiate sto su sua sue sugl sugli sui sul sull sulla sulle sullo suo suoi ti tra tu tua tue tuo tuoi tutti tutto un una uno vi voi vostra vostre vostri vostro è".split(" ")),e.Pipeline.registerFunction(e.it.stopWordFilter,"stopWordFilter-it")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.ja.js b/assets/javascripts/lunr/lunr.ja.js
new file mode 100644
index 0000000..715b834
--- /dev/null
+++ b/assets/javascripts/lunr/lunr.ja.js
@@ -0,0 +1,17 @@
+/*!
+ * Lunr languages, `Japanese` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Chad Liu
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(m){if(void 0===m)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===m.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var l="2"==m.version[0];m.ja=function(){this.pipeline.reset(),this.pipeline.add(m.ja.trimmer,m.ja.stopWordFilter,m.ja.stemmer),l?this.tokenizer=m.ja.tokenizer:(m.tokenizer&&(m.tokenizer=m.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=m.ja.tokenizer))};var j=new m.TinySegmenter;m.ja.tokenizer=function(e){var r,t,i,n,o,s,p,a,u;if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return l?new m.Token(e.toLowerCase()):e.toLowerCase()});for(r=(t=e.toString().toLowerCase().replace(/^\s+/,"")).length-1;0<=r;r--)if(/\S/.test(t.charAt(r))){t=t.substring(0,r+1);break}for(o=[],i=t.length,p=a=0;a<=i;a++)if(s=a-p,t.charAt(a).match(/\s/)||a==i){if(0<s)for(n=j.segment(t.slice(p,a)).filter(function(e){return!!e}),u=p,r=0;r<n.length;r++)l?o.push(new m.Token(n[r],{position:[u,n[r].length],index:o.length})):o.push(n[r]),u+=n[r].length;p=a+1}return o},m.ja.stemmer=function(e){return e},m.Pipeline.registerFunction(m.ja.stemmer,"stemmer-ja"),m.ja.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",m.ja.trimmer=m.trimmerSupport.generateTrimmer(m.ja.wordCharacters),m.Pipeline.registerFunction(m.ja.trimmer,"trimmer-ja"),m.ja.stopWordFilter=m.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),m.Pipeline.registerFunction(m.ja.stopWordFilter,"stopWordFilter-ja"),m.jp=m.ja,m.Pipeline.registerFunction(m.jp.stemmer,"stemmer-jp"),m.Pipeline.registerFunction(m.jp.trimmer,"trimmer-jp"),m.Pipeline.registerFunction(m.jp.stopWordFilter,"stopWordFilter-jp")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.jp.js b/assets/javascripts/lunr/lunr.jp.js
index a33c3c7..c055eba 100644
--- a/assets/javascripts/lunr/lunr.jp.js
+++ b/assets/javascripts/lunr/lunr.jp.js
@@ -1 +1 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.jp=function(){this.pipeline.reset(),this.pipeline.add(e.jp.stopWordFilter,e.jp.stemmer),r?this.tokenizer=e.jp.tokenizer:(e.tokenizer&&(e.tokenizer=e.jp.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.jp.tokenizer))};var t=new e.TinySegmenter;e.jp.tokenizer=function(n){if(!arguments.length||null==n||null==n)return[];if(Array.isArray(n))return n.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(var i=n.toString().toLowerCase().replace(/^\s+/,""),o=i.length-1;o>=0;o--)if(/\S/.test(i.charAt(o))){i=i.substring(0,o+1);break}return t.segment(i).filter(function(e){return!!e}).map(function(t){return r?new e.Token(t):t})},e.jp.stemmer=function(e){return e},e.Pipeline.registerFunction(e.jp.stemmer,"stemmer-jp"),e.jp.wordCharacters="一二三四五六七八九十百千万億兆一-龠々〆ヵヶぁ-んァ-ヴーア-ン゙a-zA-Za-zA-Z0-90-9",e.jp.stopWordFilter=function(t){if(-1===e.jp.stopWordFilter.stopWords.indexOf(r?t.toString():t))return t},e.jp.stopWordFilter=e.generateStopWordFilter("これ それ あれ この その あの ここ そこ あそこ こちら どこ だれ なに なん 何 私 貴方 貴方方 我々 私達 あの人 あのかた 彼女 彼 です あります おります います は が の に を で え から まで より も どの と し それで しかし".split(" ")),e.Pipeline.registerFunction(e.jp.stopWordFilter,"stopWordFilter-jp")}});
\ No newline at end of file
+module.exports=require("./lunr.ja");
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.multi.js b/assets/javascripts/lunr/lunr.multi.js
index d3dbc86..b8c297e 100644
--- a/assets/javascripts/lunr/lunr.multi.js
+++ b/assets/javascripts/lunr/lunr.multi.js
@@ -1 +1 @@
-!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var i=Array.prototype.slice.call(arguments),t=i.join("-"),r="",n=[],s=[],p=0;p<i.length;++p)"en"==i[p]?(r+="\\w",n.unshift(e.stopWordFilter),n.push(e.stemmer),s.push(e.stemmer)):(r+=e[i[p]].wordCharacters,n.unshift(e[i[p]].stopWordFilter),n.push(e[i[p]].stemmer),s.push(e[i[p]].stemmer));var o=e.trimmerSupport.generateTrimmer(r);return e.Pipeline.registerFunction(o,"lunr-multi-trimmer-"+t),n.unshift(o),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,n),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,s))}}}});
\ No newline at end of file
+!function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(o){o.multiLanguage=function(){for(var e=Array.prototype.slice.call(arguments),t=e.join("-"),i="",r=[],n=[],s=0;s<e.length;++s)"en"==e[s]?(i+="\\w",r.unshift(o.stopWordFilter),r.push(o.stemmer),n.push(o.stemmer)):(i+=o[e[s]].wordCharacters,o[e[s]].stopWordFilter&&r.unshift(o[e[s]].stopWordFilter),o[e[s]].stemmer&&(r.push(o[e[s]].stemmer),n.push(o[e[s]].stemmer)));var p=o.trimmerSupport.generateTrimmer(i);return o.Pipeline.registerFunction(p,"lunr-multi-trimmer-"+t),r.unshift(p),function(){this.pipeline.reset(),this.pipeline.add.apply(this.pipeline,r),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add.apply(this.searchPipeline,n))}}}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.nl.js b/assets/javascripts/lunr/lunr.nl.js
new file mode 100644
index 0000000..19d42f4
--- /dev/null
+++ b/assets/javascripts/lunr/lunr.nl.js
@@ -0,0 +1,17 @@
+/*!
+ * Lunr languages, `Dutch` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(r,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():e()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var v,q,e;r.nl=function(){this.pipeline.reset(),this.pipeline.add(r.nl.trimmer,r.nl.stopWordFilter,r.nl.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.nl.stemmer))},r.nl.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.nl.trimmer=r.trimmerSupport.generateTrimmer(r.nl.wordCharacters),r.Pipeline.registerFunction(r.nl.trimmer,"trimmer-nl"),r.nl.stemmer=(v=r.stemmerSupport.Among,q=r.stemmerSupport.SnowballProgram,e=new function(){var e,i,u,o=[new v("",-1,6),new v("á",0,1),new v("ä",0,1),new v("é",0,2),new v("ë",0,2),new v("í",0,3),new v("ï",0,3),new v("ó",0,4),new v("ö",0,4),new v("ú",0,5),new v("ü",0,5)],n=[new v("",-1,3),new v("I",0,2),new v("Y",0,1)],t=[new v("dd",-1,-1),new v("kk",-1,-1),new v("tt",-1,-1)],c=[new v("ene",-1,2),new v("se",-1,3),new v("en",-1,2),new v("heden",2,1),new v("s",-1,3)],a=[new v("end",-1,1),new v("ig",-1,2),new v("ing",-1,1),new v("lijk",-1,3),new v("baar",-1,4),new v("bar",-1,5)],l=[new v("aa",-1,-1),new v("ee",-1,-1),new v("oo",-1,-1),new v("uu",-1,-1)],m=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],d=[1,0,0,17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],f=[17,67,16,1,0,0,0,0,0,0,0,0,0,0,0,0,128],_=new q;function s(r){return(_.cursor=r)>=_.limit||(_.cursor++,!1)}function w(){for(;!_.in_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}for(;!_.out_grouping(m,97,232);){if(_.cursor>=_.limit)return!0;_.cursor++}return!1}function b(){return i<=_.cursor}function p(){return e<=_.cursor}function g(){var r=_.limit-_.cursor;_.find_among_b(t,3)&&(_.cursor=_.limit-r,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del()))}function h(){var r;u=!1,_.ket=_.cursor,_.eq_s_b(1,"e")&&(_.bra=_.cursor,b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.slice_del(),u=!0,g())))}function k(){var r;b()&&(r=_.limit-_.cursor,_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-r,_.eq_s_b(3,"gem")||(_.cursor=_.limit-r,_.slice_del(),g())))}this.setCurrent=function(r){_.setCurrent(r)},this.getCurrent=function(){return _.getCurrent()},this.stem=function(){var r=_.cursor;return function(){for(var r,e,i,n=_.cursor;;){if(_.bra=_.cursor,r=_.find_among(o,11))switch(_.ket=_.cursor,r){case 1:_.slice_from("a");continue;case 2:_.slice_from("e");continue;case 3:_.slice_from("i");continue;case 4:_.slice_from("o");continue;case 5:_.slice_from("u");continue;case 6:if(_.cursor>=_.limit)break;_.cursor++;continue}break}for(_.cursor=n,_.bra=n,_.eq_s(1,"y")?(_.ket=_.cursor,_.slice_from("Y")):_.cursor=n;;)if(e=_.cursor,_.in_grouping(m,97,232)){if(i=_.cursor,_.bra=i,_.eq_s(1,"i"))_.ket=_.cursor,_.in_grouping(m,97,232)&&(_.slice_from("I"),_.cursor=e);else if(_.cursor=i,_.eq_s(1,"y"))_.ket=_.cursor,_.slice_from("Y"),_.cursor=e;else if(s(e))break}else if(s(e))break}(),_.cursor=r,i=_.limit,e=i,w()||((i=_.cursor)<3&&(i=3),w()||(e=_.cursor)),_.limit_backward=r,_.cursor=_.limit,function(){var r,e,i,n,o,t,s=_.limit-_.cursor;if(_.ket=_.cursor,r=_.find_among_b(c,5))switch(_.bra=_.cursor,r){case 1:b()&&_.slice_from("heid");break;case 2:k();break;case 3:b()&&_.out_grouping_b(f,97,232)&&_.slice_del()}if(_.cursor=_.limit-s,h(),_.cursor=_.limit-s,_.ket=_.cursor,_.eq_s_b(4,"heid")&&(_.bra=_.cursor,p()&&(e=_.limit-_.cursor,_.eq_s_b(1,"c")||(_.cursor=_.limit-e,_.slice_del(),_.ket=_.cursor,_.eq_s_b(2,"en")&&(_.bra=_.cursor,k())))),_.cursor=_.limit-s,_.ket=_.cursor,r=_.find_among_b(a,6))switch(_.bra=_.cursor,r){case 1:if(p()){if(_.slice_del(),i=_.limit-_.cursor,_.ket=_.cursor,_.eq_s_b(2,"ig")&&(_.bra=_.cursor,p()&&(n=_.limit-_.cursor,!_.eq_s_b(1,"e")))){_.cursor=_.limit-n,_.slice_del();break}_.cursor=_.limit-i,g()}break;case 2:p()&&(o=_.limit-_.cursor,_.eq_s_b(1,"e")||(_.cursor=_.limit-o,_.slice_del()));break;case 3:p()&&(_.slice_del(),h());break;case 4:p()&&_.slice_del();break;case 5:p()&&u&&_.slice_del()}_.cursor=_.limit-s,_.out_grouping_b(d,73,232)&&(t=_.limit-_.cursor,_.find_among_b(l,4)&&_.out_grouping_b(m,97,232)&&(_.cursor=_.limit-t,_.ket=_.cursor,_.cursor>_.limit_backward&&(_.cursor--,_.bra=_.cursor,_.slice_del())))}(),_.cursor=_.limit_backward,function(){for(var r;;)if(_.bra=_.cursor,r=_.find_among(n,3))switch(_.ket=_.cursor,r){case 1:_.slice_from("y");break;case 2:_.slice_from("i");break;case 3:if(_.cursor>=_.limit)return;_.cursor++}}(),!0}},function(r){return"function"==typeof r.update?r.update(function(r){return e.setCurrent(r),e.stem(),e.getCurrent()}):(e.setCurrent(r),e.stem(),e.getCurrent())}),r.Pipeline.registerFunction(r.nl.stemmer,"stemmer-nl"),r.nl.stopWordFilter=r.generateStopWordFilter(" aan al alles als altijd andere ben bij daar dan dat de der deze die dit doch doen door dus een eens en er ge geen geweest haar had heb hebben heeft hem het hier hij hoe hun iemand iets ik in is ja je kan kon kunnen maar me meer men met mij mijn moet na naar niet niets nog nu of om omdat onder ons ook op over reeds te tegen toch toen tot u uit uw van veel voor want waren was wat werd wezen wie wil worden wordt zal ze zelf zich zij zijn zo zonder zou".split(" ")),r.Pipeline.registerFunction(r.nl.stopWordFilter,"stopWordFilter-nl")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.no.js b/assets/javascripts/lunr/lunr.no.js
index 91db9d9..031e4b2 100644
--- a/assets/javascripts/lunr/lunr.no.js
+++ b/assets/javascripts/lunr/lunr.no.js
@@ -1 +1,17 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,i;e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){var e,i,t=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],o=[new r("dt",-1,-1),new r("vt",-1,-1)],s=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],a=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],m=[119,125,149,1],l=new n;this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var r,n,u,d,c=l.cursor;return function(){var r,n=l.cursor+3;if(i=l.limit,0<=n||n<=l.limit){for(e=n;;){if(r=l.cursor,l.in_grouping(a,97,248)){l.cursor=r;break}if(r>=l.limit)return;l.cursor=r+1}for(;!l.out_grouping(a,97,248);){if(l.cursor>=l.limit)return;l.cursor++}(i=l.cursor)<e&&(i=e)}}(),l.limit_backward=c,l.cursor=l.limit,function(){var e,r,n;if(l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,e=l.find_among_b(t,29),l.limit_backward=r,e))switch(l.bra=l.cursor,e){case 1:l.slice_del();break;case 2:n=l.limit-l.cursor,l.in_grouping_b(m,98,122)?l.slice_del():(l.cursor=l.limit-n,l.eq_s_b(1,"k")&&l.out_grouping_b(a,97,248)&&l.slice_del());break;case 3:l.slice_from("er")}}(),l.cursor=l.limit,n=l.limit-l.cursor,l.cursor>=i&&(r=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,l.find_among_b(o,2)?(l.bra=l.cursor,l.limit_backward=r,l.cursor=l.limit-n,l.cursor>l.limit_backward&&(l.cursor--,l.bra=l.cursor,l.slice_del())):l.limit_backward=r),l.cursor=l.limit,l.cursor>=i&&(d=l.limit_backward,l.limit_backward=i,l.ket=l.cursor,(u=l.find_among_b(s,11))?(l.bra=l.cursor,l.limit_backward=d,1==u&&l.slice_del()):l.limit_backward=d),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Norwegian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,i;e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){var o,s,a=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],m=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],u=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],d=[119,125,149,1],c=new n;this.setCurrent=function(e){c.setCurrent(e)},this.getCurrent=function(){return c.getCurrent()},this.stem=function(){var e,r,n,i,t=c.cursor;return function(){var e,r=c.cursor+3;if(s=c.limit,0<=r||r<=c.limit){for(o=r;;){if(e=c.cursor,c.in_grouping(u,97,248)){c.cursor=e;break}if(e>=c.limit)return;c.cursor=e+1}for(;!c.out_grouping(u,97,248);){if(c.cursor>=c.limit)return;c.cursor++}(s=c.cursor)<o&&(s=o)}}(),c.limit_backward=t,c.cursor=c.limit,function(){var e,r,n;if(c.cursor>=s&&(r=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,e=c.find_among_b(a,29),c.limit_backward=r,e))switch(c.bra=c.cursor,e){case 1:c.slice_del();break;case 2:n=c.limit-c.cursor,c.in_grouping_b(d,98,122)?c.slice_del():(c.cursor=c.limit-n,c.eq_s_b(1,"k")&&c.out_grouping_b(u,97,248)&&c.slice_del());break;case 3:c.slice_from("er")}}(),c.cursor=c.limit,r=c.limit-c.cursor,c.cursor>=s&&(e=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,c.find_among_b(m,2)?(c.bra=c.cursor,c.limit_backward=e,c.cursor=c.limit-r,c.cursor>c.limit_backward&&(c.cursor--,c.bra=c.cursor,c.slice_del())):c.limit_backward=e),c.cursor=c.limit,c.cursor>=s&&(i=c.limit_backward,c.limit_backward=s,c.ket=c.cursor,(n=c.find_among_b(l,11))?(c.bra=c.cursor,c.limit_backward=i,1==n&&c.slice_del()):c.limit_backward=i),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.pt.js b/assets/javascripts/lunr/lunr.pt.js
index 51035c9..59e766f 100644
--- a/assets/javascripts/lunr/lunr.pt.js
+++ b/assets/javascripts/lunr/lunr.pt.js
@@ -1 +1,17 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,s,n;e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=(r=e.stemmerSupport.Among,s=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,i,o=[new r("",-1,3),new r("ã",0,1),new r("õ",0,2)],a=[new r("",-1,3),new r("a~",0,1),new r("o~",0,2)],t=[new r("ic",-1,-1),new r("ad",-1,-1),new r("os",-1,-1),new r("iv",-1,1)],u=[new r("ante",-1,1),new r("avel",-1,1),new r("ível",-1,1)],w=[new r("ic",-1,1),new r("abil",-1,1),new r("iv",-1,1)],m=[new r("ica",-1,1),new r("ância",-1,1),new r("ência",-1,4),new r("ira",-1,9),new r("adora",-1,1),new r("osa",-1,1),new r("ista",-1,1),new r("iva",-1,8),new r("eza",-1,1),new r("logía",-1,2),new r("idade",-1,7),new r("ante",-1,1),new r("mente",-1,6),new r("amente",12,5),new r("ável",-1,1),new r("ível",-1,1),new r("ución",-1,3),new r("ico",-1,1),new r("ismo",-1,1),new r("oso",-1,1),new r("amento",-1,1),new r("imento",-1,1),new r("ivo",-1,8),new r("aça~o",-1,1),new r("ador",-1,1),new r("icas",-1,1),new r("ências",-1,4),new r("iras",-1,9),new r("adoras",-1,1),new r("osas",-1,1),new r("istas",-1,1),new r("ivas",-1,8),new r("ezas",-1,1),new r("logías",-1,2),new r("idades",-1,7),new r("uciones",-1,3),new r("adores",-1,1),new r("antes",-1,1),new r("aço~es",-1,1),new r("icos",-1,1),new r("ismos",-1,1),new r("osos",-1,1),new r("amentos",-1,1),new r("imentos",-1,1),new r("ivos",-1,8)],c=[new r("ada",-1,1),new r("ida",-1,1),new r("ia",-1,1),new r("aria",2,1),new r("eria",2,1),new r("iria",2,1),new r("ara",-1,1),new r("era",-1,1),new r("ira",-1,1),new r("ava",-1,1),new r("asse",-1,1),new r("esse",-1,1),new r("isse",-1,1),new r("aste",-1,1),new r("este",-1,1),new r("iste",-1,1),new r("ei",-1,1),new r("arei",16,1),new r("erei",16,1),new r("irei",16,1),new r("am",-1,1),new r("iam",20,1),new r("ariam",21,1),new r("eriam",21,1),new r("iriam",21,1),new r("aram",20,1),new r("eram",20,1),new r("iram",20,1),new r("avam",20,1),new r("em",-1,1),new r("arem",29,1),new r("erem",29,1),new r("irem",29,1),new r("assem",29,1),new r("essem",29,1),new r("issem",29,1),new r("ado",-1,1),new r("ido",-1,1),new r("ando",-1,1),new r("endo",-1,1),new r("indo",-1,1),new r("ara~o",-1,1),new r("era~o",-1,1),new r("ira~o",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("ir",-1,1),new r("as",-1,1),new r("adas",47,1),new r("idas",47,1),new r("ias",47,1),new r("arias",50,1),new r("erias",50,1),new r("irias",50,1),new r("aras",47,1),new r("eras",47,1),new r("iras",47,1),new r("avas",47,1),new r("es",-1,1),new r("ardes",58,1),new r("erdes",58,1),new r("irdes",58,1),new r("ares",58,1),new r("eres",58,1),new r("ires",58,1),new r("asses",58,1),new r("esses",58,1),new r("isses",58,1),new r("astes",58,1),new r("estes",58,1),new r("istes",58,1),new r("is",-1,1),new r("ais",71,1),new r("eis",71,1),new r("areis",73,1),new r("ereis",73,1),new r("ireis",73,1),new r("áreis",73,1),new r("éreis",73,1),new r("íreis",73,1),new r("ásseis",73,1),new r("ésseis",73,1),new r("ísseis",73,1),new r("áveis",73,1),new r("íeis",73,1),new r("aríeis",84,1),new r("eríeis",84,1),new r("iríeis",84,1),new r("ados",-1,1),new r("idos",-1,1),new r("amos",-1,1),new r("áramos",90,1),new r("éramos",90,1),new r("íramos",90,1),new r("ávamos",90,1),new r("íamos",90,1),new r("aríamos",95,1),new r("eríamos",95,1),new r("iríamos",95,1),new r("emos",-1,1),new r("aremos",99,1),new r("eremos",99,1),new r("iremos",99,1),new r("ássemos",99,1),new r("êssemos",99,1),new r("íssemos",99,1),new r("imos",-1,1),new r("armos",-1,1),new r("ermos",-1,1),new r("irmos",-1,1),new r("ámos",-1,1),new r("arás",-1,1),new r("erás",-1,1),new r("irás",-1,1),new r("eu",-1,1),new r("iu",-1,1),new r("ou",-1,1),new r("ará",-1,1),new r("erá",-1,1),new r("irá",-1,1)],l=[new r("a",-1,1),new r("i",-1,1),new r("o",-1,1),new r("os",-1,1),new r("á",-1,1),new r("í",-1,1),new r("ó",-1,1)],f=[new r("e",-1,1),new r("ç",-1,2),new r("é",-1,1),new r("ê",-1,1)],d=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],v=new s;function p(){if(v.out_grouping(d,97,250)){for(;!v.in_grouping(d,97,250);){if(v.cursor>=v.limit)return!0;v.cursor++}return!1}return!0}function _(){var e,r,s=v.cursor;if(v.in_grouping(d,97,250))if(e=v.cursor,p()){if(v.cursor=e,function(){if(v.in_grouping(d,97,250))for(;!v.out_grouping(d,97,250);){if(v.cursor>=v.limit)return!1;v.cursor++}return i=v.cursor,!0}())return}else i=v.cursor;if(v.cursor=s,v.out_grouping(d,97,250)){if(r=v.cursor,p()){if(v.cursor=r,!v.in_grouping(d,97,250)||v.cursor>=v.limit)return;v.cursor++}i=v.cursor}}function h(){for(;!v.in_grouping(d,97,250);){if(v.cursor>=v.limit)return!1;v.cursor++}for(;!v.out_grouping(d,97,250);){if(v.cursor>=v.limit)return!1;v.cursor++}return!0}function b(){return i<=v.cursor}function g(){return e<=v.cursor}function k(){var e;if(v.ket=v.cursor,!(e=v.find_among_b(m,45)))return!1;switch(v.bra=v.cursor,e){case 1:if(!g())return!1;v.slice_del();break;case 2:if(!g())return!1;v.slice_from("log");break;case 3:if(!g())return!1;v.slice_from("u");break;case 4:if(!g())return!1;v.slice_from("ente");break;case 5:if(!(n<=v.cursor))return!1;v.slice_del(),v.ket=v.cursor,(e=v.find_among_b(t,4))&&(v.bra=v.cursor,g()&&(v.slice_del(),1==e&&(v.ket=v.cursor,v.eq_s_b(2,"at")&&(v.bra=v.cursor,g()&&v.slice_del()))));break;case 6:if(!g())return!1;v.slice_del(),v.ket=v.cursor,(e=v.find_among_b(u,3))&&(v.bra=v.cursor,1==e&&g()&&v.slice_del());break;case 7:if(!g())return!1;v.slice_del(),v.ket=v.cursor,(e=v.find_among_b(w,3))&&(v.bra=v.cursor,1==e&&g()&&v.slice_del());break;case 8:if(!g())return!1;v.slice_del(),v.ket=v.cursor,v.eq_s_b(2,"at")&&(v.bra=v.cursor,g()&&v.slice_del());break;case 9:if(!b()||!v.eq_s_b(1,"e"))return!1;v.slice_from("ir")}return!0}function q(e,r){if(v.eq_s_b(1,e)){v.bra=v.cursor;var s=v.limit-v.cursor;if(v.eq_s_b(1,r))return v.cursor=v.limit-s,b()&&v.slice_del(),!1}return!0}function j(){if(!k()&&(v.cursor=v.limit,!function(){var e,r;if(v.cursor>=i){if(r=v.limit_backward,v.limit_backward=i,v.ket=v.cursor,e=v.find_among_b(c,120))return v.bra=v.cursor,1==e&&v.slice_del(),v.limit_backward=r,!0;v.limit_backward=r}return!1}()))return v.cursor=v.limit,v.ket=v.cursor,void((e=v.find_among_b(l,7))&&(v.bra=v.cursor,1==e&&b()&&v.slice_del()));var e;v.cursor=v.limit,v.ket=v.cursor,v.eq_s_b(1,"i")&&(v.bra=v.cursor,v.eq_s_b(1,"c")&&(v.cursor=v.limit,b()&&v.slice_del()))}this.setCurrent=function(e){v.setCurrent(e)},this.getCurrent=function(){return v.getCurrent()},this.stem=function(){var r,s=v.cursor;return function(){for(var e;;){if(v.bra=v.cursor,e=v.find_among(o,3))switch(v.ket=v.cursor,e){case 1:v.slice_from("a~");continue;case 2:v.slice_from("o~");continue;case 3:if(v.cursor>=v.limit)break;v.cursor++;continue}break}}(),v.cursor=s,r=v.cursor,i=v.limit,n=i,e=i,_(),v.cursor=r,h()&&(n=v.cursor,h()&&(e=v.cursor)),v.limit_backward=s,v.cursor=v.limit,j(),v.cursor=v.limit,function(){var e;if(v.ket=v.cursor,e=v.find_among_b(f,4))switch(v.bra=v.cursor,e){case 1:b()&&(v.slice_del(),v.ket=v.cursor,v.limit,v.cursor,q("u","g")&&q("i","c"));break;case 2:v.slice_from("c")}}(),v.cursor=v.limit_backward,function(){for(var e;;){if(v.bra=v.cursor,e=v.find_among(a,3))switch(v.ket=v.cursor,e){case 1:v.slice_from("ã");continue;case 2:v.slice_from("õ");continue;case 3:if(v.cursor>=v.limit)break;v.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Portuguese` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var j,C,r;e.pt=function(){this.pipeline.reset(),this.pipeline.add(e.pt.trimmer,e.pt.stopWordFilter,e.pt.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.pt.stemmer))},e.pt.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.pt.trimmer=e.trimmerSupport.generateTrimmer(e.pt.wordCharacters),e.Pipeline.registerFunction(e.pt.trimmer,"trimmer-pt"),e.pt.stemmer=(j=e.stemmerSupport.Among,C=e.stemmerSupport.SnowballProgram,r=new function(){var s,n,i,o=[new j("",-1,3),new j("ã",0,1),new j("õ",0,2)],a=[new j("",-1,3),new j("a~",0,1),new j("o~",0,2)],r=[new j("ic",-1,-1),new j("ad",-1,-1),new j("os",-1,-1),new j("iv",-1,1)],t=[new j("ante",-1,1),new j("avel",-1,1),new j("ível",-1,1)],u=[new j("ic",-1,1),new j("abil",-1,1),new j("iv",-1,1)],w=[new j("ica",-1,1),new j("ância",-1,1),new j("ência",-1,4),new j("ira",-1,9),new j("adora",-1,1),new j("osa",-1,1),new j("ista",-1,1),new j("iva",-1,8),new j("eza",-1,1),new j("logía",-1,2),new j("idade",-1,7),new j("ante",-1,1),new j("mente",-1,6),new j("amente",12,5),new j("ável",-1,1),new j("ível",-1,1),new j("ución",-1,3),new j("ico",-1,1),new j("ismo",-1,1),new j("oso",-1,1),new j("amento",-1,1),new j("imento",-1,1),new j("ivo",-1,8),new j("aça~o",-1,1),new j("ador",-1,1),new j("icas",-1,1),new j("ências",-1,4),new j("iras",-1,9),new j("adoras",-1,1),new j("osas",-1,1),new j("istas",-1,1),new j("ivas",-1,8),new j("ezas",-1,1),new j("logías",-1,2),new j("idades",-1,7),new j("uciones",-1,3),new j("adores",-1,1),new j("antes",-1,1),new j("aço~es",-1,1),new j("icos",-1,1),new j("ismos",-1,1),new j("osos",-1,1),new j("amentos",-1,1),new j("imentos",-1,1),new j("ivos",-1,8)],m=[new j("ada",-1,1),new j("ida",-1,1),new j("ia",-1,1),new j("aria",2,1),new j("eria",2,1),new j("iria",2,1),new j("ara",-1,1),new j("era",-1,1),new j("ira",-1,1),new j("ava",-1,1),new j("asse",-1,1),new j("esse",-1,1),new j("isse",-1,1),new j("aste",-1,1),new j("este",-1,1),new j("iste",-1,1),new j("ei",-1,1),new j("arei",16,1),new j("erei",16,1),new j("irei",16,1),new j("am",-1,1),new j("iam",20,1),new j("ariam",21,1),new j("eriam",21,1),new j("iriam",21,1),new j("aram",20,1),new j("eram",20,1),new j("iram",20,1),new j("avam",20,1),new j("em",-1,1),new j("arem",29,1),new j("erem",29,1),new j("irem",29,1),new j("assem",29,1),new j("essem",29,1),new j("issem",29,1),new j("ado",-1,1),new j("ido",-1,1),new j("ando",-1,1),new j("endo",-1,1),new j("indo",-1,1),new j("ara~o",-1,1),new j("era~o",-1,1),new j("ira~o",-1,1),new j("ar",-1,1),new j("er",-1,1),new j("ir",-1,1),new j("as",-1,1),new j("adas",47,1),new j("idas",47,1),new j("ias",47,1),new j("arias",50,1),new j("erias",50,1),new j("irias",50,1),new j("aras",47,1),new j("eras",47,1),new j("iras",47,1),new j("avas",47,1),new j("es",-1,1),new j("ardes",58,1),new j("erdes",58,1),new j("irdes",58,1),new j("ares",58,1),new j("eres",58,1),new j("ires",58,1),new j("asses",58,1),new j("esses",58,1),new j("isses",58,1),new j("astes",58,1),new j("estes",58,1),new j("istes",58,1),new j("is",-1,1),new j("ais",71,1),new j("eis",71,1),new j("areis",73,1),new j("ereis",73,1),new j("ireis",73,1),new j("áreis",73,1),new j("éreis",73,1),new j("íreis",73,1),new j("ásseis",73,1),new j("ésseis",73,1),new j("ísseis",73,1),new j("áveis",73,1),new j("íeis",73,1),new j("aríeis",84,1),new j("eríeis",84,1),new j("iríeis",84,1),new j("ados",-1,1),new j("idos",-1,1),new j("amos",-1,1),new j("áramos",90,1),new j("éramos",90,1),new j("íramos",90,1),new j("ávamos",90,1),new j("íamos",90,1),new j("aríamos",95,1),new j("eríamos",95,1),new j("iríamos",95,1),new j("emos",-1,1),new j("aremos",99,1),new j("eremos",99,1),new j("iremos",99,1),new j("ássemos",99,1),new j("êssemos",99,1),new j("íssemos",99,1),new j("imos",-1,1),new j("armos",-1,1),new j("ermos",-1,1),new j("irmos",-1,1),new j("ámos",-1,1),new j("arás",-1,1),new j("erás",-1,1),new j("irás",-1,1),new j("eu",-1,1),new j("iu",-1,1),new j("ou",-1,1),new j("ará",-1,1),new j("erá",-1,1),new j("irá",-1,1)],c=[new j("a",-1,1),new j("i",-1,1),new j("o",-1,1),new j("os",-1,1),new j("á",-1,1),new j("í",-1,1),new j("ó",-1,1)],l=[new j("e",-1,1),new j("ç",-1,2),new j("é",-1,1),new j("ê",-1,1)],f=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,3,19,12,2],d=new C;function v(){if(d.out_grouping(f,97,250)){for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return!0;d.cursor++}return!1}return!0}function p(){var e,r,s=d.cursor;if(d.in_grouping(f,97,250))if(e=d.cursor,v()){if(d.cursor=e,function(){if(d.in_grouping(f,97,250))for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}return i=d.cursor,!0}())return}else i=d.cursor;if(d.cursor=s,d.out_grouping(f,97,250)){if(r=d.cursor,v()){if(d.cursor=r,!d.in_grouping(f,97,250)||d.cursor>=d.limit)return;d.cursor++}i=d.cursor}}function _(){for(;!d.in_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}for(;!d.out_grouping(f,97,250);){if(d.cursor>=d.limit)return!1;d.cursor++}return!0}function h(){return i<=d.cursor}function b(){return s<=d.cursor}function g(){var e;if(d.ket=d.cursor,!(e=d.find_among_b(w,45)))return!1;switch(d.bra=d.cursor,e){case 1:if(!b())return!1;d.slice_del();break;case 2:if(!b())return!1;d.slice_from("log");break;case 3:if(!b())return!1;d.slice_from("u");break;case 4:if(!b())return!1;d.slice_from("ente");break;case 5:if(!(n<=d.cursor))return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(r,4))&&(d.bra=d.cursor,b()&&(d.slice_del(),1==e&&(d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,b()&&d.slice_del()))));break;case 6:if(!b())return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(t,3))&&(d.bra=d.cursor,1==e&&b()&&d.slice_del());break;case 7:if(!b())return!1;d.slice_del(),d.ket=d.cursor,(e=d.find_among_b(u,3))&&(d.bra=d.cursor,1==e&&b()&&d.slice_del());break;case 8:if(!b())return!1;d.slice_del(),d.ket=d.cursor,d.eq_s_b(2,"at")&&(d.bra=d.cursor,b()&&d.slice_del());break;case 9:if(!h()||!d.eq_s_b(1,"e"))return!1;d.slice_from("ir")}return!0}function k(e,r){if(d.eq_s_b(1,e)){d.bra=d.cursor;var s=d.limit-d.cursor;if(d.eq_s_b(1,r))return d.cursor=d.limit-s,h()&&d.slice_del(),!1}return!0}function q(){if(!g()&&(d.cursor=d.limit,!function(){var e,r;if(d.cursor>=i){if(r=d.limit_backward,d.limit_backward=i,d.ket=d.cursor,e=d.find_among_b(m,120))return d.bra=d.cursor,1==e&&d.slice_del(),d.limit_backward=r,!0;d.limit_backward=r}return!1}()))return d.cursor=d.limit,d.ket=d.cursor,void((e=d.find_among_b(c,7))&&(d.bra=d.cursor,1==e&&h()&&d.slice_del()));var e;d.cursor=d.limit,d.ket=d.cursor,d.eq_s_b(1,"i")&&(d.bra=d.cursor,d.eq_s_b(1,"c")&&(d.cursor=d.limit,h()&&d.slice_del()))}this.setCurrent=function(e){d.setCurrent(e)},this.getCurrent=function(){return d.getCurrent()},this.stem=function(){var e,r=d.cursor;return function(){for(var e;;){if(d.bra=d.cursor,e=d.find_among(o,3))switch(d.ket=d.cursor,e){case 1:d.slice_from("a~");continue;case 2:d.slice_from("o~");continue;case 3:if(d.cursor>=d.limit)break;d.cursor++;continue}break}}(),d.cursor=r,e=d.cursor,i=d.limit,s=n=i,p(),d.cursor=e,_()&&(n=d.cursor,_()&&(s=d.cursor)),d.limit_backward=r,d.cursor=d.limit,q(),d.cursor=d.limit,function(){var e;if(d.ket=d.cursor,e=d.find_among_b(l,4))switch(d.bra=d.cursor,e){case 1:h()&&(d.slice_del(),d.ket=d.cursor,d.limit,d.cursor,k("u","g")&&k("i","c"));break;case 2:d.slice_from("c")}}(),d.cursor=d.limit_backward,function(){for(var e;;){if(d.bra=d.cursor,e=d.find_among(a,3))switch(d.ket=d.cursor,e){case 1:d.slice_from("ã");continue;case 2:d.slice_from("õ");continue;case 3:if(d.cursor>=d.limit)break;d.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return r.setCurrent(e),r.stem(),r.getCurrent()}):(r.setCurrent(e),r.stem(),r.getCurrent())}),e.Pipeline.registerFunction(e.pt.stemmer,"stemmer-pt"),e.pt.stopWordFilter=e.generateStopWordFilter("a ao aos aquela aquelas aquele aqueles aquilo as até com como da das de dela delas dele deles depois do dos e ela elas ele eles em entre era eram essa essas esse esses esta estamos estas estava estavam este esteja estejam estejamos estes esteve estive estivemos estiver estivera estiveram estiverem estivermos estivesse estivessem estivéramos estivéssemos estou está estávamos estão eu foi fomos for fora foram forem formos fosse fossem fui fôramos fôssemos haja hajam hajamos havemos hei houve houvemos houver houvera houveram houverei houverem houveremos houveria houveriam houvermos houverá houverão houveríamos houvesse houvessem houvéramos houvéssemos há hão isso isto já lhe lhes mais mas me mesmo meu meus minha minhas muito na nas nem no nos nossa nossas nosso nossos num numa não nós o os ou para pela pelas pelo pelos por qual quando que quem se seja sejam sejamos sem serei seremos seria seriam será serão seríamos seu seus somos sou sua suas são só também te tem temos tenha tenham tenhamos tenho terei teremos teria teriam terá terão teríamos teu teus teve tinha tinham tive tivemos tiver tivera tiveram tiverem tivermos tivesse tivessem tivéramos tivéssemos tu tua tuas tém tínhamos um uma você vocês vos à às éramos".split(" ")),e.Pipeline.registerFunction(e.pt.stopWordFilter,"stopWordFilter-pt")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.ro.js b/assets/javascripts/lunr/lunr.ro.js
index 155cb56..c5ecc96 100644
--- a/assets/javascripts/lunr/lunr.ro.js
+++ b/assets/javascripts/lunr/lunr.ro.js
@@ -1 +1,17 @@
-!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i,r,n;e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=(i=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,n=new function(){var e,n,t,a,o=[new i("",-1,3),new i("I",0,1),new i("U",0,2)],s=[new i("ea",-1,3),new i("aţia",-1,7),new i("aua",-1,2),new i("iua",-1,4),new i("aţie",-1,7),new i("ele",-1,3),new i("ile",-1,5),new i("iile",6,4),new i("iei",-1,4),new i("atei",-1,6),new i("ii",-1,4),new i("ului",-1,1),new i("ul",-1,1),new i("elor",-1,3),new i("ilor",-1,4),new i("iilor",14,4)],c=[new i("icala",-1,4),new i("iciva",-1,4),new i("ativa",-1,5),new i("itiva",-1,6),new i("icale",-1,4),new i("aţiune",-1,5),new i("iţiune",-1,6),new i("atoare",-1,5),new i("itoare",-1,6),new i("ătoare",-1,5),new i("icitate",-1,4),new i("abilitate",-1,1),new i("ibilitate",-1,2),new i("ivitate",-1,3),new i("icive",-1,4),new i("ative",-1,5),new i("itive",-1,6),new i("icali",-1,4),new i("atori",-1,5),new i("icatori",18,4),new i("itori",-1,6),new i("ători",-1,5),new i("icitati",-1,4),new i("abilitati",-1,1),new i("ivitati",-1,3),new i("icivi",-1,4),new i("ativi",-1,5),new i("itivi",-1,6),new i("icităi",-1,4),new i("abilităi",-1,1),new i("ivităi",-1,3),new i("icităţi",-1,4),new i("abilităţi",-1,1),new i("ivităţi",-1,3),new i("ical",-1,4),new i("ator",-1,5),new i("icator",35,4),new i("itor",-1,6),new i("ător",-1,5),new i("iciv",-1,4),new i("ativ",-1,5),new i("itiv",-1,6),new i("icală",-1,4),new i("icivă",-1,4),new i("ativă",-1,5),new i("itivă",-1,6)],u=[new i("ica",-1,1),new i("abila",-1,1),new i("ibila",-1,1),new i("oasa",-1,1),new i("ata",-1,1),new i("ita",-1,1),new i("anta",-1,1),new i("ista",-1,3),new i("uta",-1,1),new i("iva",-1,1),new i("ic",-1,1),new i("ice",-1,1),new i("abile",-1,1),new i("ibile",-1,1),new i("isme",-1,3),new i("iune",-1,2),new i("oase",-1,1),new i("ate",-1,1),new i("itate",17,1),new i("ite",-1,1),new i("ante",-1,1),new i("iste",-1,3),new i("ute",-1,1),new i("ive",-1,1),new i("ici",-1,1),new i("abili",-1,1),new i("ibili",-1,1),new i("iuni",-1,2),new i("atori",-1,1),new i("osi",-1,1),new i("ati",-1,1),new i("itati",30,1),new i("iti",-1,1),new i("anti",-1,1),new i("isti",-1,3),new i("uti",-1,1),new i("işti",-1,3),new i("ivi",-1,1),new i("ităi",-1,1),new i("oşi",-1,1),new i("ităţi",-1,1),new i("abil",-1,1),new i("ibil",-1,1),new i("ism",-1,3),new i("ator",-1,1),new i("os",-1,1),new i("at",-1,1),new i("it",-1,1),new i("ant",-1,1),new i("ist",-1,3),new i("ut",-1,1),new i("iv",-1,1),new i("ică",-1,1),new i("abilă",-1,1),new i("ibilă",-1,1),new i("oasă",-1,1),new i("ată",-1,1),new i("ită",-1,1),new i("antă",-1,1),new i("istă",-1,3),new i("ută",-1,1),new i("ivă",-1,1)],w=[new i("ea",-1,1),new i("ia",-1,1),new i("esc",-1,1),new i("ăsc",-1,1),new i("ind",-1,1),new i("ând",-1,1),new i("are",-1,1),new i("ere",-1,1),new i("ire",-1,1),new i("âre",-1,1),new i("se",-1,2),new i("ase",10,1),new i("sese",10,2),new i("ise",10,1),new i("use",10,1),new i("âse",10,1),new i("eşte",-1,1),new i("ăşte",-1,1),new i("eze",-1,1),new i("ai",-1,1),new i("eai",19,1),new i("iai",19,1),new i("sei",-1,2),new i("eşti",-1,1),new i("ăşti",-1,1),new i("ui",-1,1),new i("ezi",-1,1),new i("âi",-1,1),new i("aşi",-1,1),new i("seşi",-1,2),new i("aseşi",29,1),new i("seseşi",29,2),new i("iseşi",29,1),new i("useşi",29,1),new i("âseşi",29,1),new i("işi",-1,1),new i("uşi",-1,1),new i("âşi",-1,1),new i("aţi",-1,2),new i("eaţi",38,1),new i("iaţi",38,1),new i("eţi",-1,2),new i("iţi",-1,2),new i("âţi",-1,2),new i("arăţi",-1,1),new i("serăţi",-1,2),new i("aserăţi",45,1),new i("seserăţi",45,2),new i("iserăţi",45,1),new i("userăţi",45,1),new i("âserăţi",45,1),new i("irăţi",-1,1),new i("urăţi",-1,1),new i("ârăţi",-1,1),new i("am",-1,1),new i("eam",54,1),new i("iam",54,1),new i("em",-1,2),new i("asem",57,1),new i("sesem",57,2),new i("isem",57,1),new i("usem",57,1),new i("âsem",57,1),new i("im",-1,2),new i("âm",-1,2),new i("ăm",-1,2),new i("arăm",65,1),new i("serăm",65,2),new i("aserăm",67,1),new i("seserăm",67,2),new i("iserăm",67,1),new i("userăm",67,1),new i("âserăm",67,1),new i("irăm",65,1),new i("urăm",65,1),new i("ârăm",65,1),new i("au",-1,1),new i("eau",76,1),new i("iau",76,1),new i("indu",-1,1),new i("ându",-1,1),new i("ez",-1,1),new i("ească",-1,1),new i("ară",-1,1),new i("seră",-1,2),new i("aseră",84,1),new i("seseră",84,2),new i("iseră",84,1),new i("useră",84,1),new i("âseră",84,1),new i("iră",-1,1),new i("ură",-1,1),new i("âră",-1,1),new i("ează",-1,1)],m=[new i("a",-1,1),new i("e",-1,1),new i("ie",1,1),new i("i",-1,1),new i("ă",-1,1)],l=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],f=new r;function p(e,i){f.eq_s(1,e)&&(f.ket=f.cursor,f.in_grouping(l,97,259)&&f.slice_from(i))}function d(){if(f.out_grouping(l,97,259)){for(;!f.in_grouping(l,97,259);){if(f.cursor>=f.limit)return!0;f.cursor++}return!1}return!0}function b(){var e,i,r=f.cursor;if(f.in_grouping(l,97,259)){if(e=f.cursor,!d())return void(a=f.cursor);if(f.cursor=e,!function(){if(f.in_grouping(l,97,259))for(;!f.out_grouping(l,97,259);){if(f.cursor>=f.limit)return!0;f.cursor++}return!1}())return void(a=f.cursor)}f.cursor=r,f.out_grouping(l,97,259)&&(i=f.cursor,d()&&(f.cursor=i,f.in_grouping(l,97,259)&&f.cursor<f.limit&&f.cursor++),a=f.cursor)}function v(){for(;!f.in_grouping(l,97,259);){if(f.cursor>=f.limit)return!1;f.cursor++}for(;!f.out_grouping(l,97,259);){if(f.cursor>=f.limit)return!1;f.cursor++}return!0}function _(){return t<=f.cursor}function g(){var i,r=f.limit-f.cursor;if(f.ket=f.cursor,(i=f.find_among_b(c,46))&&(f.bra=f.cursor,_())){switch(i){case 1:f.slice_from("abil");break;case 2:f.slice_from("ibil");break;case 3:f.slice_from("iv");break;case 4:f.slice_from("ic");break;case 5:f.slice_from("at");break;case 6:f.slice_from("it")}return e=!0,f.cursor=f.limit-r,!0}return!1}function k(){var i,r;for(e=!1;;)if(r=f.limit-f.cursor,!g()){f.cursor=f.limit-r;break}if(f.ket=f.cursor,(i=f.find_among_b(u,62))&&(f.bra=f.cursor,n<=f.cursor)){switch(i){case 1:f.slice_del();break;case 2:f.eq_s_b(1,"ţ")&&(f.bra=f.cursor,f.slice_from("t"));break;case 3:f.slice_from("ist")}e=!0}}function h(){var e;f.ket=f.cursor,(e=f.find_among_b(m,5))&&(f.bra=f.cursor,a<=f.cursor&&1==e&&f.slice_del())}this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var i,r=f.cursor;return function(){for(var e,i;e=f.cursor,f.in_grouping(l,97,259)&&(i=f.cursor,f.bra=i,p("u","U"),f.cursor=i,p("i","I")),f.cursor=e,!(f.cursor>=f.limit);)f.cursor++}(),f.cursor=r,i=f.cursor,a=f.limit,t=a,n=a,b(),f.cursor=i,v()&&(t=f.cursor,v()&&(n=f.cursor)),f.limit_backward=r,f.cursor=f.limit,function(){var e,i;if(f.ket=f.cursor,(e=f.find_among_b(s,16))&&(f.bra=f.cursor,_()))switch(e){case 1:f.slice_del();break;case 2:f.slice_from("a");break;case 3:f.slice_from("e");break;case 4:f.slice_from("i");break;case 5:i=f.limit-f.cursor,f.eq_s_b(2,"ab")||(f.cursor=f.limit-i,f.slice_from("i"));break;case 6:f.slice_from("at");break;case 7:f.slice_from("aţi")}}(),f.cursor=f.limit,k(),f.cursor=f.limit,e||(f.cursor=f.limit,function(){var e,i,r;if(f.cursor>=a){if(i=f.limit_backward,f.limit_backward=a,f.ket=f.cursor,e=f.find_among_b(w,94))switch(f.bra=f.cursor,e){case 1:if(r=f.limit-f.cursor,!f.out_grouping_b(l,97,259)&&(f.cursor=f.limit-r,!f.eq_s_b(1,"u")))break;case 2:f.slice_del()}f.limit_backward=i}}(),f.cursor=f.limit),h(),f.cursor=f.limit_backward,function(){for(var e;;){if(f.bra=f.cursor,e=f.find_among(o,3))switch(f.ket=f.cursor,e){case 1:f.slice_from("i");continue;case 2:f.slice_from("u");continue;case 3:if(f.cursor>=f.limit)break;f.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în  înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Romanian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var h,z,i;e.ro=function(){this.pipeline.reset(),this.pipeline.add(e.ro.trimmer,e.ro.stopWordFilter,e.ro.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ro.stemmer))},e.ro.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.ro.trimmer=e.trimmerSupport.generateTrimmer(e.ro.wordCharacters),e.Pipeline.registerFunction(e.ro.trimmer,"trimmer-ro"),e.ro.stemmer=(h=e.stemmerSupport.Among,z=e.stemmerSupport.SnowballProgram,i=new function(){var r,n,t,a,o=[new h("",-1,3),new h("I",0,1),new h("U",0,2)],s=[new h("ea",-1,3),new h("aţia",-1,7),new h("aua",-1,2),new h("iua",-1,4),new h("aţie",-1,7),new h("ele",-1,3),new h("ile",-1,5),new h("iile",6,4),new h("iei",-1,4),new h("atei",-1,6),new h("ii",-1,4),new h("ului",-1,1),new h("ul",-1,1),new h("elor",-1,3),new h("ilor",-1,4),new h("iilor",14,4)],c=[new h("icala",-1,4),new h("iciva",-1,4),new h("ativa",-1,5),new h("itiva",-1,6),new h("icale",-1,4),new h("aţiune",-1,5),new h("iţiune",-1,6),new h("atoare",-1,5),new h("itoare",-1,6),new h("ătoare",-1,5),new h("icitate",-1,4),new h("abilitate",-1,1),new h("ibilitate",-1,2),new h("ivitate",-1,3),new h("icive",-1,4),new h("ative",-1,5),new h("itive",-1,6),new h("icali",-1,4),new h("atori",-1,5),new h("icatori",18,4),new h("itori",-1,6),new h("ători",-1,5),new h("icitati",-1,4),new h("abilitati",-1,1),new h("ivitati",-1,3),new h("icivi",-1,4),new h("ativi",-1,5),new h("itivi",-1,6),new h("icităi",-1,4),new h("abilităi",-1,1),new h("ivităi",-1,3),new h("icităţi",-1,4),new h("abilităţi",-1,1),new h("ivităţi",-1,3),new h("ical",-1,4),new h("ator",-1,5),new h("icator",35,4),new h("itor",-1,6),new h("ător",-1,5),new h("iciv",-1,4),new h("ativ",-1,5),new h("itiv",-1,6),new h("icală",-1,4),new h("icivă",-1,4),new h("ativă",-1,5),new h("itivă",-1,6)],u=[new h("ica",-1,1),new h("abila",-1,1),new h("ibila",-1,1),new h("oasa",-1,1),new h("ata",-1,1),new h("ita",-1,1),new h("anta",-1,1),new h("ista",-1,3),new h("uta",-1,1),new h("iva",-1,1),new h("ic",-1,1),new h("ice",-1,1),new h("abile",-1,1),new h("ibile",-1,1),new h("isme",-1,3),new h("iune",-1,2),new h("oase",-1,1),new h("ate",-1,1),new h("itate",17,1),new h("ite",-1,1),new h("ante",-1,1),new h("iste",-1,3),new h("ute",-1,1),new h("ive",-1,1),new h("ici",-1,1),new h("abili",-1,1),new h("ibili",-1,1),new h("iuni",-1,2),new h("atori",-1,1),new h("osi",-1,1),new h("ati",-1,1),new h("itati",30,1),new h("iti",-1,1),new h("anti",-1,1),new h("isti",-1,3),new h("uti",-1,1),new h("işti",-1,3),new h("ivi",-1,1),new h("ităi",-1,1),new h("oşi",-1,1),new h("ităţi",-1,1),new h("abil",-1,1),new h("ibil",-1,1),new h("ism",-1,3),new h("ator",-1,1),new h("os",-1,1),new h("at",-1,1),new h("it",-1,1),new h("ant",-1,1),new h("ist",-1,3),new h("ut",-1,1),new h("iv",-1,1),new h("ică",-1,1),new h("abilă",-1,1),new h("ibilă",-1,1),new h("oasă",-1,1),new h("ată",-1,1),new h("ită",-1,1),new h("antă",-1,1),new h("istă",-1,3),new h("ută",-1,1),new h("ivă",-1,1)],w=[new h("ea",-1,1),new h("ia",-1,1),new h("esc",-1,1),new h("ăsc",-1,1),new h("ind",-1,1),new h("ând",-1,1),new h("are",-1,1),new h("ere",-1,1),new h("ire",-1,1),new h("âre",-1,1),new h("se",-1,2),new h("ase",10,1),new h("sese",10,2),new h("ise",10,1),new h("use",10,1),new h("âse",10,1),new h("eşte",-1,1),new h("ăşte",-1,1),new h("eze",-1,1),new h("ai",-1,1),new h("eai",19,1),new h("iai",19,1),new h("sei",-1,2),new h("eşti",-1,1),new h("ăşti",-1,1),new h("ui",-1,1),new h("ezi",-1,1),new h("âi",-1,1),new h("aşi",-1,1),new h("seşi",-1,2),new h("aseşi",29,1),new h("seseşi",29,2),new h("iseşi",29,1),new h("useşi",29,1),new h("âseşi",29,1),new h("işi",-1,1),new h("uşi",-1,1),new h("âşi",-1,1),new h("aţi",-1,2),new h("eaţi",38,1),new h("iaţi",38,1),new h("eţi",-1,2),new h("iţi",-1,2),new h("âţi",-1,2),new h("arăţi",-1,1),new h("serăţi",-1,2),new h("aserăţi",45,1),new h("seserăţi",45,2),new h("iserăţi",45,1),new h("userăţi",45,1),new h("âserăţi",45,1),new h("irăţi",-1,1),new h("urăţi",-1,1),new h("ârăţi",-1,1),new h("am",-1,1),new h("eam",54,1),new h("iam",54,1),new h("em",-1,2),new h("asem",57,1),new h("sesem",57,2),new h("isem",57,1),new h("usem",57,1),new h("âsem",57,1),new h("im",-1,2),new h("âm",-1,2),new h("ăm",-1,2),new h("arăm",65,1),new h("serăm",65,2),new h("aserăm",67,1),new h("seserăm",67,2),new h("iserăm",67,1),new h("userăm",67,1),new h("âserăm",67,1),new h("irăm",65,1),new h("urăm",65,1),new h("ârăm",65,1),new h("au",-1,1),new h("eau",76,1),new h("iau",76,1),new h("indu",-1,1),new h("ându",-1,1),new h("ez",-1,1),new h("ească",-1,1),new h("ară",-1,1),new h("seră",-1,2),new h("aseră",84,1),new h("seseră",84,2),new h("iseră",84,1),new h("useră",84,1),new h("âseră",84,1),new h("iră",-1,1),new h("ură",-1,1),new h("âră",-1,1),new h("ează",-1,1)],i=[new h("a",-1,1),new h("e",-1,1),new h("ie",1,1),new h("i",-1,1),new h("ă",-1,1)],m=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,2,32,0,0,4],l=new z;function f(e,i){l.eq_s(1,e)&&(l.ket=l.cursor,l.in_grouping(m,97,259)&&l.slice_from(i))}function p(){if(l.out_grouping(m,97,259)){for(;!l.in_grouping(m,97,259);){if(l.cursor>=l.limit)return!0;l.cursor++}return!1}return!0}function d(){var e,i,r=l.cursor;if(l.in_grouping(m,97,259)){if(e=l.cursor,!p())return void(a=l.cursor);if(l.cursor=e,!function(){if(l.in_grouping(m,97,259))for(;!l.out_grouping(m,97,259);){if(l.cursor>=l.limit)return!0;l.cursor++}return!1}())return void(a=l.cursor)}l.cursor=r,l.out_grouping(m,97,259)&&(i=l.cursor,p()&&(l.cursor=i,l.in_grouping(m,97,259)&&l.cursor<l.limit&&l.cursor++),a=l.cursor)}function b(){for(;!l.in_grouping(m,97,259);){if(l.cursor>=l.limit)return!1;l.cursor++}for(;!l.out_grouping(m,97,259);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function v(){return t<=l.cursor}function _(){var e,i=l.limit-l.cursor;if(l.ket=l.cursor,(e=l.find_among_b(c,46))&&(l.bra=l.cursor,v())){switch(e){case 1:l.slice_from("abil");break;case 2:l.slice_from("ibil");break;case 3:l.slice_from("iv");break;case 4:l.slice_from("ic");break;case 5:l.slice_from("at");break;case 6:l.slice_from("it")}return r=!0,l.cursor=l.limit-i,!0}return!1}function g(){var e,i;for(r=!1;;)if(i=l.limit-l.cursor,!_()){l.cursor=l.limit-i;break}if(l.ket=l.cursor,(e=l.find_among_b(u,62))&&(l.bra=l.cursor,n<=l.cursor)){switch(e){case 1:l.slice_del();break;case 2:l.eq_s_b(1,"ţ")&&(l.bra=l.cursor,l.slice_from("t"));break;case 3:l.slice_from("ist")}r=!0}}function k(){var e;l.ket=l.cursor,(e=l.find_among_b(i,5))&&(l.bra=l.cursor,a<=l.cursor&&1==e&&l.slice_del())}this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){var e,i=l.cursor;return function(){for(var e,i;e=l.cursor,l.in_grouping(m,97,259)&&(i=l.cursor,l.bra=i,f("u","U"),l.cursor=i,f("i","I")),l.cursor=e,!(l.cursor>=l.limit);)l.cursor++}(),l.cursor=i,e=l.cursor,a=l.limit,n=t=a,d(),l.cursor=e,b()&&(t=l.cursor,b()&&(n=l.cursor)),l.limit_backward=i,l.cursor=l.limit,function(){var e,i;if(l.ket=l.cursor,(e=l.find_among_b(s,16))&&(l.bra=l.cursor,v()))switch(e){case 1:l.slice_del();break;case 2:l.slice_from("a");break;case 3:l.slice_from("e");break;case 4:l.slice_from("i");break;case 5:i=l.limit-l.cursor,l.eq_s_b(2,"ab")||(l.cursor=l.limit-i,l.slice_from("i"));break;case 6:l.slice_from("at");break;case 7:l.slice_from("aţi")}}(),l.cursor=l.limit,g(),l.cursor=l.limit,r||(l.cursor=l.limit,function(){var e,i,r;if(l.cursor>=a){if(i=l.limit_backward,l.limit_backward=a,l.ket=l.cursor,e=l.find_among_b(w,94))switch(l.bra=l.cursor,e){case 1:if(r=l.limit-l.cursor,!l.out_grouping_b(m,97,259)&&(l.cursor=l.limit-r,!l.eq_s_b(1,"u")))break;case 2:l.slice_del()}l.limit_backward=i}}(),l.cursor=l.limit),k(),l.cursor=l.limit_backward,function(){for(var e;;){if(l.bra=l.cursor,e=l.find_among(o,3))switch(l.ket=l.cursor,e){case 1:l.slice_from("i");continue;case 2:l.slice_from("u");continue;case 3:if(l.cursor>=l.limit)break;l.cursor++;continue}break}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}),e.Pipeline.registerFunction(e.ro.stemmer,"stemmer-ro"),e.ro.stopWordFilter=e.generateStopWordFilter("acea aceasta această aceea acei aceia acel acela acele acelea acest acesta aceste acestea aceşti aceştia acolo acord acum ai aia aibă aici al ale alea altceva altcineva am ar are asemenea asta astea astăzi asupra au avea avem aveţi azi aş aşadar aţi bine bucur bună ca care caut ce cel ceva chiar cinci cine cineva contra cu cum cumva curând curînd când cât câte câtva câţi cînd cît cîte cîtva cîţi că căci cărei căror cărui către da dacă dar datorită dată dau de deci deja deoarece departe deşi din dinaintea dintr- dintre doi doilea două drept după dă ea ei el ele eram este eu eşti face fata fi fie fiecare fii fim fiu fiţi frumos fără graţie halbă iar ieri la le li lor lui lângă lîngă mai mea mei mele mereu meu mi mie mine mult multă mulţi mulţumesc mâine mîine mă ne nevoie nici nicăieri nimeni nimeri nimic nişte noastre noastră noi noroc nostru nouă noştri nu opt ori oricare orice oricine oricum oricând oricât oricînd oricît oriunde patra patru patrulea pe pentru peste pic poate pot prea prima primul prin puţin puţina puţină până pînă rog sa sale sau se spate spre sub sunt suntem sunteţi sută sînt sîntem sînteţi să săi său ta tale te timp tine toate toată tot totuşi toţi trei treia treilea tu tăi tău un una unde undeva unei uneia unele uneori unii unor unora unu unui unuia unul vi voastre voastră voi vostru vouă voştri vreme vreo vreun vă zece zero zi zice îi îl îmi împotriva în  înainte înaintea încotro încât încît între întrucât întrucît îţi ăla ălea ăsta ăstea ăştia şapte şase şi ştiu ţi ţie".split(" ")),e.Pipeline.registerFunction(e.ro.stopWordFilter,"stopWordFilter-ro")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.ru.js b/assets/javascripts/lunr/lunr.ru.js
index 078609a..104bc6e 100644
--- a/assets/javascripts/lunr/lunr.ru.js
+++ b/assets/javascripts/lunr/lunr.ru.js
@@ -1 +1,17 @@
-!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var n,r,t;e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=(n=e.stemmerSupport.Among,r=e.stemmerSupport.SnowballProgram,t=new function(){var e,t,w=[new n("в",-1,1),new n("ив",0,2),new n("ыв",0,2),new n("вши",-1,1),new n("ивши",3,2),new n("ывши",3,2),new n("вшись",-1,1),new n("ившись",6,2),new n("ывшись",6,2)],i=[new n("ее",-1,1),new n("ие",-1,1),new n("ое",-1,1),new n("ые",-1,1),new n("ими",-1,1),new n("ыми",-1,1),new n("ей",-1,1),new n("ий",-1,1),new n("ой",-1,1),new n("ый",-1,1),new n("ем",-1,1),new n("им",-1,1),new n("ом",-1,1),new n("ым",-1,1),new n("его",-1,1),new n("ого",-1,1),new n("ему",-1,1),new n("ому",-1,1),new n("их",-1,1),new n("ых",-1,1),new n("ею",-1,1),new n("ою",-1,1),new n("ую",-1,1),new n("юю",-1,1),new n("ая",-1,1),new n("яя",-1,1)],u=[new n("ем",-1,1),new n("нн",-1,1),new n("вш",-1,1),new n("ивш",2,2),new n("ывш",2,2),new n("щ",-1,1),new n("ющ",5,1),new n("ующ",6,2)],s=[new n("сь",-1,1),new n("ся",-1,1)],o=[new n("ла",-1,1),new n("ила",0,2),new n("ыла",0,2),new n("на",-1,1),new n("ена",3,2),new n("ете",-1,1),new n("ите",-1,2),new n("йте",-1,1),new n("ейте",7,2),new n("уйте",7,2),new n("ли",-1,1),new n("или",10,2),new n("ыли",10,2),new n("й",-1,1),new n("ей",13,2),new n("уй",13,2),new n("л",-1,1),new n("ил",16,2),new n("ыл",16,2),new n("ем",-1,1),new n("им",-1,2),new n("ым",-1,2),new n("н",-1,1),new n("ен",22,2),new n("ло",-1,1),new n("ило",24,2),new n("ыло",24,2),new n("но",-1,1),new n("ено",27,2),new n("нно",27,1),new n("ет",-1,1),new n("ует",30,2),new n("ит",-1,2),new n("ыт",-1,2),new n("ют",-1,1),new n("уют",34,2),new n("ят",-1,2),new n("ны",-1,1),new n("ены",37,2),new n("ть",-1,1),new n("ить",39,2),new n("ыть",39,2),new n("ешь",-1,1),new n("ишь",-1,2),new n("ю",-1,2),new n("ую",44,2)],c=[new n("а",-1,1),new n("ев",-1,1),new n("ов",-1,1),new n("е",-1,1),new n("ие",3,1),new n("ье",3,1),new n("и",-1,1),new n("еи",6,1),new n("ии",6,1),new n("ами",6,1),new n("ями",6,1),new n("иями",10,1),new n("й",-1,1),new n("ей",12,1),new n("ией",13,1),new n("ий",12,1),new n("ой",12,1),new n("ам",-1,1),new n("ем",-1,1),new n("ием",18,1),new n("ом",-1,1),new n("ям",-1,1),new n("иям",21,1),new n("о",-1,1),new n("у",-1,1),new n("ах",-1,1),new n("ях",-1,1),new n("иях",26,1),new n("ы",-1,1),new n("ь",-1,1),new n("ю",-1,1),new n("ию",30,1),new n("ью",30,1),new n("я",-1,1),new n("ия",33,1),new n("ья",33,1)],m=[new n("ост",-1,1),new n("ость",-1,1)],l=[new n("ейше",-1,1),new n("н",-1,2),new n("ейш",-1,1),new n("ь",-1,3)],f=[33,65,8,232],a=new r;function p(){for(;!a.in_grouping(f,1072,1103);){if(a.cursor>=a.limit)return!1;a.cursor++}return!0}function d(){for(;!a.out_grouping(f,1072,1103);){if(a.cursor>=a.limit)return!1;a.cursor++}return!0}function _(e,n){var r,t;if(a.ket=a.cursor,r=a.find_among_b(e,n)){switch(a.bra=a.cursor,r){case 1:if(t=a.limit-a.cursor,!a.eq_s_b(1,"а")&&(a.cursor=a.limit-t,!a.eq_s_b(1,"я")))return!1;case 2:a.slice_del()}return!0}return!1}function b(e,n){var r;return a.ket=a.cursor,!!(r=a.find_among_b(e,n))&&(a.bra=a.cursor,1==r&&a.slice_del(),!0)}function h(){return!!b(i,26)&&(_(u,8),!0)}function g(){var n;a.ket=a.cursor,(n=a.find_among_b(m,2))&&(a.bra=a.cursor,e<=a.cursor&&1==n&&a.slice_del())}this.setCurrent=function(e){a.setCurrent(e)},this.getCurrent=function(){return a.getCurrent()},this.stem=function(){return t=a.limit,e=t,p()&&(t=a.cursor,d()&&p()&&d()&&(e=a.cursor)),a.cursor=a.limit,!(a.cursor<t)&&(a.limit_backward=t,_(w,9)||(a.cursor=a.limit,b(s,2)||(a.cursor=a.limit),h()||(a.cursor=a.limit,_(o,46)||(a.cursor=a.limit,b(c,36)))),a.cursor=a.limit,a.ket=a.cursor,a.eq_s_b(1,"и")?(a.bra=a.cursor,a.slice_del()):a.cursor=a.limit,g(),a.cursor=a.limit,function(){var e;if(a.ket=a.cursor,e=a.find_among_b(l,4))switch(a.bra=a.cursor,e){case 1:if(a.slice_del(),a.ket=a.cursor,!a.eq_s_b(1,"н"))break;a.bra=a.cursor;case 2:if(!a.eq_s_b(1,"н"))break;case 3:a.slice_del()}}(),!0)}},function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}),e.Pipeline.registerFunction(e.ru.stemmer,"stemmer-ru"),e.ru.stopWordFilter=e.generateStopWordFilter("алло без близко более больше будем будет будете будешь будто буду будут будь бы бывает бывь был была были было быть в важная важное важные важный вам вами вас ваш ваша ваше ваши вверх вдали вдруг ведь везде весь вниз внизу во вокруг вон восемнадцатый восемнадцать восемь восьмой вот впрочем времени время все всегда всего всем всеми всему всех всею всю всюду вся всё второй вы г где говорил говорит год года году да давно даже далеко дальше даром два двадцатый двадцать две двенадцатый двенадцать двух девятнадцатый девятнадцать девятый девять действительно дел день десятый десять для до довольно долго должно другая другие других друго другое другой е его ее ей ему если есть еще ещё ею её ж же жизнь за занят занята занято заняты затем зато зачем здесь значит и из или им именно иметь ими имя иногда их к каждая каждое каждые каждый кажется как какая какой кем когда кого ком кому конечно которая которого которой которые который которых кроме кругом кто куда лет ли лишь лучше люди м мало между меля менее меньше меня миллионов мимо мира мне много многочисленная многочисленное многочисленные многочисленный мной мною мог могут мож может можно можхо мои мой мор мочь моя моё мы на наверху над надо назад наиболее наконец нам нами нас начала наш наша наше наши не него недавно недалеко нее ней нельзя нем немного нему непрерывно нередко несколько нет нею неё ни нибудь ниже низко никогда никуда ними них ничего но ну нужно нх о об оба обычно один одиннадцатый одиннадцать однажды однако одного одной около он она они оно опять особенно от отовсюду отсюда очень первый перед по под пожалуйста позже пока пор пора после посреди потом потому почему почти прекрасно при про просто против процентов пятнадцатый пятнадцать пятый пять раз разве рано раньше рядом с сам сама сами самим самими самих само самого самой самом самому саму свое своего своей свои своих свою сеаой себе себя сегодня седьмой сейчас семнадцатый семнадцать семь сих сказал сказала сказать сколько слишком сначала снова со собой собою совсем спасибо стал суть т та так такая также такие такое такой там твой твоя твоё те тебе тебя тем теми теперь тех то тобой тобою тогда того тоже только том тому тот тою третий три тринадцатый тринадцать ту туда тут ты тысяч у уж уже уметь хорошо хотеть хоть хотя хочешь часто чаще чего человек чем чему через четвертый четыре четырнадцатый четырнадцать что чтоб чтобы чуть шестнадцатый шестнадцать шестой шесть эта эти этим этими этих это этого этой этом этому этот эту я \ufeffа".split(" ")),e.Pipeline.registerFunction(e.ru.stopWordFilter,"stopWordFilter-ru")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Russian` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n():n()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var h,g,n;e.ru=function(){this.pipeline.reset(),this.pipeline.add(e.ru.trimmer,e.ru.stopWordFilter,e.ru.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ru.stemmer))},e.ru.wordCharacters="Ѐ-҄҇-ԯᴫᵸⷠ-ⷿꙀ-ꚟ︮︯",e.ru.trimmer=e.trimmerSupport.generateTrimmer(e.ru.wordCharacters),e.Pipeline.registerFunction(e.ru.trimmer,"trimmer-ru"),e.ru.stemmer=(h=e.stemmerSupport.Among,g=e.stemmerSupport.SnowballProgram,n=new function(){var n,e,r=[new h("в",-1,1),new h("ив",0,2),new h("ыв",0,2),new h("вши",-1,1),new h("ивши",3,2),new h("ывши",3,2),new h("вшись",-1,1),new h("ившись",6,2),new h("ывшись",6,2)],t=[new h("ее",-1,1),new h("ие",-1,1),new h("ое",-1,1),new h("ые",-1,1),new h("ими",-1,1),new h("ыми",-1,1),new h("ей",-1,1),new h("ий",-1,1),new h("ой",-1,1),new h("ый",-1,1),new h("ем",-1,1),new h("им",-1,1),new h("ом",-1,1),new h("ым",-1,1),new h("его",-1,1),new h("ого",-1,1),new h("ему",-1,1),new h("ому",-1,1),new h("их",-1,1),new h("ых",-1,1),new h("ею",-1,1),new h("ою",-1,1),new h("ую",-1,1),new h("юю",-1,1),new h("ая",-1,1),new h("яя",-1,1)],w=[new h("ем",-1,1),new h("нн",-1,1),new h("вш",-1,1),new h("ивш",2,2),new h("ывш",2,2),new h("щ",-1,1),new h("ющ",5,1),new h("ующ",6,2)],i=[new h("сь",-1,1),new h("ся",-1,1)],u=[new h("ла",-1,1),new h("ила",0,2),new h("ыла",0,2),new h("на",-1,1),new h("ена",3,2),new h("ете",-1,1),new h("ите",-1,2),new h("йте",-1,1),new h("ейте",7,2),new h("уйте",7,2),new h("ли",-1,1),new h("или",10,2),new h("ыли",10,2),new h("й",-1,1),new h("ей",13,2),new h("уй",13,2),new h("л",-1,1),new h("ил",16,2),new h("ыл",16,2),new h("ем",-1,1),new h("им",-1,2),new h("ым",-1,2),new h("н",-1,1),new h("ен",22,2),new h("ло",-1,1),new h("ило",24,2),new h("ыло",24,2),new h("но",-1,1),new h("ено",27,2),new h("нно",27,1),new h("ет",-1,1),new h("ует",30,2),new h("ит",-1,2),new h("ыт",-1,2),new h("ют",-1,1),new h("уют",34,2),new h("ят",-1,2),new h("ны",-1,1),new h("ены",37,2),new h("ть",-1,1),new h("ить",39,2),new h("ыть",39,2),new h("ешь",-1,1),new h("ишь",-1,2),new h("ю",-1,2),new h("ую",44,2)],s=[new h("а",-1,1),new h("ев",-1,1),new h("ов",-1,1),new h("е",-1,1),new h("ие",3,1),new h("ье",3,1),new h("и",-1,1),new h("еи",6,1),new h("ии",6,1),new h("ами",6,1),new h("ями",6,1),new h("иями",10,1),new h("й",-1,1),new h("ей",12,1),new h("ией",13,1),new h("ий",12,1),new h("ой",12,1),new h("ам",-1,1),new h("ем",-1,1),new h("ием",18,1),new h("ом",-1,1),new h("ям",-1,1),new h("иям",21,1),new h("о",-1,1),new h("у",-1,1),new h("ах",-1,1),new h("ях",-1,1),new h("иях",26,1),new h("ы",-1,1),new h("ь",-1,1),new h("ю",-1,1),new h("ию",30,1),new h("ью",30,1),new h("я",-1,1),new h("ия",33,1),new h("ья",33,1)],o=[new h("ост",-1,1),new h("ость",-1,1)],c=[new h("ейше",-1,1),new h("н",-1,2),new h("ейш",-1,1),new h("ь",-1,3)],m=[33,65,8,232],l=new g;function f(){for(;!l.in_grouping(m,1072,1103);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function a(){for(;!l.out_grouping(m,1072,1103);){if(l.cursor>=l.limit)return!1;l.cursor++}return!0}function p(e,n){var r,t;if(l.ket=l.cursor,r=l.find_among_b(e,n)){switch(l.bra=l.cursor,r){case 1:if(t=l.limit-l.cursor,!l.eq_s_b(1,"а")&&(l.cursor=l.limit-t,!l.eq_s_b(1,"я")))return!1;case 2:l.slice_del()}return!0}return!1}function d(e,n){var r;return l.ket=l.cursor,!!(r=l.find_among_b(e,n))&&(l.bra=l.cursor,1==r&&l.slice_del(),!0)}function _(){return!!d(t,26)&&(p(w,8),!0)}function b(){var e;l.ket=l.cursor,(e=l.find_among_b(o,2))&&(l.bra=l.cursor,n<=l.cursor&&1==e&&l.slice_del())}this.setCurrent=function(e){l.setCurrent(e)},this.getCurrent=function(){return l.getCurrent()},this.stem=function(){return e=l.limit,n=e,f()&&(e=l.cursor,a()&&f()&&a()&&(n=l.cursor)),l.cursor=l.limit,!(l.cursor<e)&&(l.limit_backward=e,p(r,9)||(l.cursor=l.limit,d(i,2)||(l.cursor=l.limit),_()||(l.cursor=l.limit,p(u,46)||(l.cursor=l.limit,d(s,36)))),l.cursor=l.limit,l.ket=l.cursor,l.eq_s_b(1,"и")?(l.bra=l.cursor,l.slice_del()):l.cursor=l.limit,b(),l.cursor=l.limit,function(){var e;if(l.ket=l.cursor,e=l.find_among_b(c,4))switch(l.bra=l.cursor,e){case 1:if(l.slice_del(),l.ket=l.cursor,!l.eq_s_b(1,"н"))break;l.bra=l.cursor;case 2:if(!l.eq_s_b(1,"н"))break;case 3:l.slice_del()}}(),!0)}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.ru.stemmer,"stemmer-ru"),e.ru.stopWordFilter=e.generateStopWordFilter("алло без близко более больше будем будет будете будешь будто буду будут будь бы бывает бывь был была были было быть в важная важное важные важный вам вами вас ваш ваша ваше ваши вверх вдали вдруг ведь везде весь вниз внизу во вокруг вон восемнадцатый восемнадцать восемь восьмой вот впрочем времени время все всегда всего всем всеми всему всех всею всю всюду вся всё второй вы г где говорил говорит год года году да давно даже далеко дальше даром два двадцатый двадцать две двенадцатый двенадцать двух девятнадцатый девятнадцать девятый девять действительно дел день десятый десять для до довольно долго должно другая другие других друго другое другой е его ее ей ему если есть еще ещё ею её ж же жизнь за занят занята занято заняты затем зато зачем здесь значит и из или им именно иметь ими имя иногда их к каждая каждое каждые каждый кажется как какая какой кем когда кого ком кому конечно которая которого которой которые который которых кроме кругом кто куда лет ли лишь лучше люди м мало между меля менее меньше меня миллионов мимо мира мне много многочисленная многочисленное многочисленные многочисленный мной мною мог могут мож может можно можхо мои мой мор мочь моя моё мы на наверху над надо назад наиболее наконец нам нами нас начала наш наша наше наши не него недавно недалеко нее ней нельзя нем немного нему непрерывно нередко несколько нет нею неё ни нибудь ниже низко никогда никуда ними них ничего но ну нужно нх о об оба обычно один одиннадцатый одиннадцать однажды однако одного одной около он она они оно опять особенно от отовсюду отсюда очень первый перед по под пожалуйста позже пока пор пора после посреди потом потому почему почти прекрасно при про просто против процентов пятнадцатый пятнадцать пятый пять раз разве рано раньше рядом с сам сама сами самим самими самих само самого самой самом самому саму свое своего своей свои своих свою сеаой себе себя сегодня седьмой сейчас семнадцатый семнадцать семь сих сказал сказала сказать сколько слишком сначала снова со собой собою совсем спасибо стал суть т та так такая также такие такое такой там твой твоя твоё те тебе тебя тем теми теперь тех то тобой тобою тогда того тоже только том тому тот тою третий три тринадцатый тринадцать ту туда тут ты тысяч у уж уже уметь хорошо хотеть хоть хотя хочешь часто чаще чего человек чем чему через четвертый четыре четырнадцатый четырнадцать что чтоб чтобы чуть шестнадцатый шестнадцать шестой шесть эта эти этим этими этих это этого этой этом этому этот эту я \ufeffа".split(" ")),e.Pipeline.registerFunction(e.ru.stopWordFilter,"stopWordFilter-ru")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.stemmer.support.js b/assets/javascripts/lunr/lunr.stemmer.support.js
index d574fb3..ae2c66a 100644
--- a/assets/javascripts/lunr/lunr.stemmer.support.js
+++ b/assets/javascripts/lunr/lunr.stemmer.support.js
@@ -1 +1,9 @@
-!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var r;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(t){r=t,this.cursor=0,this.limit=t.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var t=r;return r=null,t},in_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&t[(e-=i)>>3]&1<<(7&e))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursor<this.limit){var e=r.charCodeAt(this.cursor);if(e>s||e<i)return this.cursor++,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e<i)return this.cursor--,!0;if(!(t[(e-=i)>>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor+s)!=i.charCodeAt(s))return!1;return this.cursor+=t,!0},eq_s_b:function(t,i){if(this.cursor-this.limit_backward<t)return!1;for(var s=0;s<t;s++)if(r.charCodeAt(this.cursor-t+s)!=i.charCodeAt(s))return!1;return this.cursor-=t,!0},find_among:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=t[a],m=l;m<_.s_size;m++){if(n+l==u){f=-1;break}if(f=r.charCodeAt(n+l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){if(o>=(_=t[s]).s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o<h?o:h,_=(m=t[a]).s_size-1-l;_>=0;_--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-m.s[_])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var m;if(o>=(m=t[s]).s_size){if(this.cursor=n-m.s_size,!m.method)return m.result;var b=m.method();if(this.cursor=n-m.s_size,b)return m.result}if((s=m.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});
\ No newline at end of file
+/*!
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s<t;s++)i[s]=r.charCodeAt(s);return i},!r&&""!=r||!t&&0!=t||!i)throw"Bad Among initialisation: s:"+r+", substring_i: "+t+", result: "+i;this.s_size=r.length,this.s=this.toCharArray(r),this.substring_i=t,this.result=i,this.method=s},SnowballProgram:function(){var b;return{bra:0,ket:0,limit:0,cursor:0,limit_backward:0,setCurrent:function(r){b=r,this.cursor=0,this.limit=r.length,this.limit_backward=0,this.bra=this.cursor,this.ket=this.limit},getCurrent:function(){var r=b;return b=null,r},in_grouping:function(r,t,i){if(this.cursor<this.limit){var s=b.charCodeAt(this.cursor);if(s<=i&&t<=s&&r[(s-=t)>>3]&1<<(7&s))return this.cursor++,!0}return!1},in_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(s<=i&&t<=s&&r[(s-=t)>>3]&1<<(7&s))return this.cursor--,!0}return!1},out_grouping:function(r,t,i){if(this.cursor<this.limit){var s=b.charCodeAt(this.cursor);if(i<s||s<t)return this.cursor++,!0;if(!(r[(s-=t)>>3]&1<<(7&s)))return this.cursor++,!0}return!1},out_grouping_b:function(r,t,i){if(this.cursor>this.limit_backward){var s=b.charCodeAt(this.cursor-1);if(i<s||s<t)return this.cursor--,!0;if(!(r[(s-=t)>>3]&1<<(7&s)))return this.cursor--,!0}return!1},eq_s:function(r,t){if(this.limit-this.cursor<r)return!1;for(var i=0;i<r;i++)if(b.charCodeAt(this.cursor+i)!=t.charCodeAt(i))return!1;return this.cursor+=r,!0},eq_s_b:function(r,t){if(this.cursor-this.limit_backward<r)return!1;for(var i=0;i<r;i++)if(b.charCodeAt(this.cursor-r+i)!=t.charCodeAt(i))return!1;return this.cursor-=r,!0},find_among:function(r,t){for(var i=0,s=t,e=this.cursor,n=this.limit,u=0,o=0,h=!1;;){for(var c=i+(s-i>>1),a=0,f=u<o?u:o,l=r[c],_=f;_<l.s_size;_++){if(e+f==n){a=-1;break}if(a=b.charCodeAt(e+f)-l.s[_])break;f++}if(a<0?(s=c,o=f):(i=c,u=f),s-i<=1){if(0<i||s==i||h)break;h=!0}}for(;;){if(u>=(l=r[i]).s_size){if(this.cursor=e+l.s_size,!l.method)return l.result;var m=l.method();if(this.cursor=e+l.s_size,m)return l.result}if((i=l.substring_i)<0)return 0}},find_among_b:function(r,t){for(var i=0,s=t,e=this.cursor,n=this.limit_backward,u=0,o=0,h=!1;;){for(var c=i+(s-i>>1),a=0,f=u<o?u:o,l=(_=r[c]).s_size-1-f;0<=l;l--){if(e-f==n){a=-1;break}if(a=b.charCodeAt(e-1-f)-_.s[l])break;f++}if(a<0?(s=c,o=f):(i=c,u=f),s-i<=1){if(0<i||s==i||h)break;h=!0}}for(;;){var _;if(u>=(_=r[i]).s_size){if(this.cursor=e-_.s_size,!_.method)return _.result;var m=_.method();if(this.cursor=e-_.s_size,m)return _.result}if((i=_.substring_i)<0)return 0}},replace_s:function(r,t,i){var s=i.length-(t-r);return b=b.substring(0,r)+i+b.substring(t),this.limit+=s,this.cursor>=t?this.cursor+=s:this.cursor>r&&(this.cursor=r),s},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>b.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),b.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.sv.js b/assets/javascripts/lunr/lunr.sv.js
index 4bb0f9f..a46a4e7 100644
--- a/assets/javascripts/lunr/lunr.sv.js
+++ b/assets/javascripts/lunr/lunr.sv.js
@@ -1 +1,17 @@
-!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,n,t;e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=(r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){var e,t,i=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],s=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],m=new n;this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var r,n=m.cursor;return function(){var r,n=m.cursor+3;if(t=m.limit,0<=n||n<=m.limit){for(e=n;;){if(r=m.cursor,m.in_grouping(o,97,246)){m.cursor=r;break}if(m.cursor=r,m.cursor>=m.limit)return;m.cursor++}for(;!m.out_grouping(o,97,246);){if(m.cursor>=m.limit)return;m.cursor++}(t=m.cursor)<e&&(t=e)}}(),m.limit_backward=n,m.cursor=m.limit,function(){var e,r=m.limit_backward;if(m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(i,37),m.limit_backward=r,e))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.in_grouping_b(u,98,121)&&m.slice_del()}}(),m.cursor=m.limit,r=m.limit_backward,m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.find_among_b(s,7)&&(m.cursor=m.limit,m.ket=m.cursor,m.cursor>m.limit_backward&&(m.bra=--m.cursor,m.slice_del())),m.limit_backward=r),m.cursor=m.limit,function(){var e,r;if(m.cursor>=t){if(r=m.limit_backward,m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(a,5))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.slice_from("lös");break;case 3:m.slice_from("full")}m.limit_backward=r}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Swedish` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r,l,n;e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=(r=e.stemmerSupport.Among,l=e.stemmerSupport.SnowballProgram,n=new function(){var n,t,i=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],s=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],a=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],o=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],u=[119,127,149],m=new l;this.setCurrent=function(e){m.setCurrent(e)},this.getCurrent=function(){return m.getCurrent()},this.stem=function(){var e,r=m.cursor;return function(){var e,r=m.cursor+3;if(t=m.limit,0<=r||r<=m.limit){for(n=r;;){if(e=m.cursor,m.in_grouping(o,97,246)){m.cursor=e;break}if(m.cursor=e,m.cursor>=m.limit)return;m.cursor++}for(;!m.out_grouping(o,97,246);){if(m.cursor>=m.limit)return;m.cursor++}(t=m.cursor)<n&&(t=n)}}(),m.limit_backward=r,m.cursor=m.limit,function(){var e,r=m.limit_backward;if(m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(i,37),m.limit_backward=r,e))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.in_grouping_b(u,98,121)&&m.slice_del()}}(),m.cursor=m.limit,e=m.limit_backward,m.cursor>=t&&(m.limit_backward=t,m.cursor=m.limit,m.find_among_b(s,7)&&(m.cursor=m.limit,m.ket=m.cursor,m.cursor>m.limit_backward&&(m.bra=--m.cursor,m.slice_del())),m.limit_backward=e),m.cursor=m.limit,function(){var e,r;if(m.cursor>=t){if(r=m.limit_backward,m.limit_backward=t,m.cursor=m.limit,m.ket=m.cursor,e=m.find_among_b(a,5))switch(m.bra=m.cursor,e){case 1:m.slice_del();break;case 2:m.slice_from("lös");break;case 3:m.slice_from("full")}m.limit_backward=r}}(),!0}},function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.th.js b/assets/javascripts/lunr/lunr.th.js
new file mode 100644
index 0000000..7f9887f
--- /dev/null
+++ b/assets/javascripts/lunr/lunr.th.js
@@ -0,0 +1,17 @@
+/*!
+ * Lunr languages, `Thai` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2017, Keerati Thiwanruk
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(t){if(void 0===t)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===t.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==t.version[0];t.th=function(){this.pipeline.reset(),this.pipeline.add(t.th.trimmer),i?this.tokenizer=t.th.tokenizer:(t.tokenizer&&(t.tokenizer=t.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=t.th.tokenizer))},t.th.wordCharacters="[฀-๿]",t.th.trimmer=t.trimmerSupport.generateTrimmer(t.th.wordCharacters),t.Pipeline.registerFunction(t.th.trimmer,"trimmer-th");var n=t.wordcut;n.init(),t.th.tokenizer=function(e){if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return i?new t.Token(e):e});var r=e.toString().replace(/^\s+/,"");return n.cut(r).split("|")}}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.tr.js b/assets/javascripts/lunr/lunr.tr.js
index c42b349..64ba95c 100644
--- a/assets/javascripts/lunr/lunr.tr.js
+++ b/assets/javascripts/lunr/lunr.tr.js
@@ -1 +1,17 @@
-!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i,e,n;r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=(i=r.stemmerSupport.Among,e=r.stemmerSupport.SnowballProgram,n=new function(){var r,n=[new i("m",-1,-1),new i("n",-1,-1),new i("miz",-1,-1),new i("niz",-1,-1),new i("muz",-1,-1),new i("nuz",-1,-1),new i("müz",-1,-1),new i("nüz",-1,-1),new i("mız",-1,-1),new i("nız",-1,-1)],t=[new i("leri",-1,-1),new i("ları",-1,-1)],u=[new i("ni",-1,-1),new i("nu",-1,-1),new i("nü",-1,-1),new i("nı",-1,-1)],o=[new i("in",-1,-1),new i("un",-1,-1),new i("ün",-1,-1),new i("ın",-1,-1)],s=[new i("a",-1,-1),new i("e",-1,-1)],c=[new i("na",-1,-1),new i("ne",-1,-1)],l=[new i("da",-1,-1),new i("ta",-1,-1),new i("de",-1,-1),new i("te",-1,-1)],a=[new i("nda",-1,-1),new i("nde",-1,-1)],m=[new i("dan",-1,-1),new i("tan",-1,-1),new i("den",-1,-1),new i("ten",-1,-1)],d=[new i("ndan",-1,-1),new i("nden",-1,-1)],f=[new i("la",-1,-1),new i("le",-1,-1)],b=[new i("ca",-1,-1),new i("ce",-1,-1)],w=[new i("im",-1,-1),new i("um",-1,-1),new i("üm",-1,-1),new i("ım",-1,-1)],_=[new i("sin",-1,-1),new i("sun",-1,-1),new i("sün",-1,-1),new i("sın",-1,-1)],k=[new i("iz",-1,-1),new i("uz",-1,-1),new i("üz",-1,-1),new i("ız",-1,-1)],p=[new i("siniz",-1,-1),new i("sunuz",-1,-1),new i("sünüz",-1,-1),new i("sınız",-1,-1)],g=[new i("lar",-1,-1),new i("ler",-1,-1)],y=[new i("niz",-1,-1),new i("nuz",-1,-1),new i("nüz",-1,-1),new i("nız",-1,-1)],z=[new i("dir",-1,-1),new i("tir",-1,-1),new i("dur",-1,-1),new i("tur",-1,-1),new i("dür",-1,-1),new i("tür",-1,-1),new i("dır",-1,-1),new i("tır",-1,-1)],h=[new i("casına",-1,-1),new i("cesine",-1,-1)],v=[new i("di",-1,-1),new i("ti",-1,-1),new i("dik",-1,-1),new i("tik",-1,-1),new i("duk",-1,-1),new i("tuk",-1,-1),new i("dük",-1,-1),new i("tük",-1,-1),new i("dık",-1,-1),new i("tık",-1,-1),new i("dim",-1,-1),new i("tim",-1,-1),new i("dum",-1,-1),new i("tum",-1,-1),new i("düm",-1,-1),new i("tüm",-1,-1),new i("dım",-1,-1),new i("tım",-1,-1),new i("din",-1,-1),new i("tin",-1,-1),new i("dun",-1,-1),new i("tun",-1,-1),new i("dün",-1,-1),new i("tün",-1,-1),new i("dın",-1,-1),new i("tın",-1,-1),new i("du",-1,-1),new i("tu",-1,-1),new i("dü",-1,-1),new i("tü",-1,-1),new i("dı",-1,-1),new i("tı",-1,-1)],q=[new i("sa",-1,-1),new i("se",-1,-1),new i("sak",-1,-1),new i("sek",-1,-1),new i("sam",-1,-1),new i("sem",-1,-1),new i("san",-1,-1),new i("sen",-1,-1)],C=[new i("miş",-1,-1),new i("muş",-1,-1),new i("müş",-1,-1),new i("mış",-1,-1)],P=[new i("b",-1,1),new i("c",-1,2),new i("d",-1,3),new i("ğ",-1,4)],F=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],S=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],W=[65],L=[65],x=[["a",[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["e",[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],101,252],["ı",[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["i",[17],101,105],["o",W,111,117],["ö",L,246,252],["u",W,111,117]],A=new e;function E(r,i,e){for(;;){var n=A.limit-A.cursor;if(A.in_grouping_b(r,i,e)){A.cursor=A.limit-n;break}if(A.cursor=A.limit-n,A.cursor<=A.limit_backward)return!1;A.cursor--}return!0}function j(){var r,i;r=A.limit-A.cursor,E(F,97,305);for(var e=0;e<x.length;e++){i=A.limit-A.cursor;var n=x[e];if(A.eq_s_b(1,n[0])&&E(n[1],n[2],n[3]))return A.cursor=A.limit-r,!0;A.cursor=A.limit-i}return A.cursor=A.limit-i,!(!A.eq_s_b(1,"ü")||!E(L,246,252))&&(A.cursor=A.limit-r,!0)}function T(r,i){var e,n=A.limit-A.cursor;return r()&&(A.cursor=A.limit-n,A.cursor>A.limit_backward&&(A.cursor--,e=A.limit-A.cursor,i()))?(A.cursor=A.limit-e,!0):(A.cursor=A.limit-n,r()?(A.cursor=A.limit-n,!1):(A.cursor=A.limit-n,!(A.cursor<=A.limit_backward)&&(A.cursor--,!!i()&&(A.cursor=A.limit-n,!0))))}function Z(r){return T(r,function(){return A.in_grouping_b(F,97,305)})}function B(){return Z(function(){return A.eq_s_b(1,"n")})}function D(){return Z(function(){return A.eq_s_b(1,"y")})}function G(){return A.find_among_b(n,10)&&T(function(){return A.in_grouping_b(S,105,305)},function(){return A.out_grouping_b(F,97,305)})}function H(){return j()&&A.in_grouping_b(S,105,305)&&Z(function(){return A.eq_s_b(1,"s")})}function I(){return A.find_among_b(t,2)}function J(){return j()&&A.find_among_b(o,4)&&B()}function K(){return j()&&A.find_among_b(l,4)}function M(){return j()&&A.find_among_b(a,2)}function N(){return j()&&A.find_among_b(w,4)&&D()}function O(){return j()&&A.find_among_b(_,4)}function Q(){return j()&&A.find_among_b(k,4)&&D()}function R(){return A.find_among_b(p,4)}function U(){return j()&&A.find_among_b(g,2)}function V(){return j()&&A.find_among_b(z,8)}function X(){return j()&&A.find_among_b(v,32)&&D()}function Y(){return A.find_among_b(q,8)&&D()}function $(){return j()&&A.find_among_b(C,4)&&D()}function rr(){var r=A.limit-A.cursor;return!($()||(A.cursor=A.limit-r,X()||(A.cursor=A.limit-r,Y()||(A.cursor=A.limit-r,A.eq_s_b(3,"ken")&&D()))))}function ir(){if(A.find_among_b(h,2)){var r=A.limit-A.cursor;if(R()||(A.cursor=A.limit-r,U()||(A.cursor=A.limit-r,N()||(A.cursor=A.limit-r,O()||(A.cursor=A.limit-r,Q()||(A.cursor=A.limit-r))))),$())return!1}return!0}function er(){if(!j()||!A.find_among_b(y,4))return!0;var r=A.limit-A.cursor;return!X()&&(A.cursor=A.limit-r,!Y())}function nr(){var i,e,n,t=A.limit-A.cursor;if(A.ket=A.cursor,r=!0,rr()&&(A.cursor=A.limit-t,ir()&&(A.cursor=A.limit-t,function(){if(U()){A.bra=A.cursor,A.slice_del();var i=A.limit-A.cursor;return A.ket=A.cursor,V()||(A.cursor=A.limit-i,X()||(A.cursor=A.limit-i,Y()||(A.cursor=A.limit-i,$()||(A.cursor=A.limit-i)))),r=!1,!1}return!0}()&&(A.cursor=A.limit-t,er()&&(A.cursor=A.limit-t,n=A.limit-A.cursor,!(R()||(A.cursor=A.limit-n,Q()||(A.cursor=A.limit-n,O()||(A.cursor=A.limit-n,N()))))||(A.bra=A.cursor,A.slice_del(),e=A.limit-A.cursor,A.ket=A.cursor,$()||(A.cursor=A.limit-e),0)))))){if(A.cursor=A.limit-t,!V())return;A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,i=A.limit-A.cursor,R()||(A.cursor=A.limit-i,U()||(A.cursor=A.limit-i,N()||(A.cursor=A.limit-i,O()||(A.cursor=A.limit-i,Q()||(A.cursor=A.limit-i))))),$()||(A.cursor=A.limit-i)}A.bra=A.cursor,A.slice_del()}function tr(){var r,i,e,n;if(A.ket=A.cursor,A.eq_s_b(2,"ki")){if(r=A.limit-A.cursor,K())return A.bra=A.cursor,A.slice_del(),i=A.limit-A.cursor,A.ket=A.cursor,U()?(A.bra=A.cursor,A.slice_del(),tr()):(A.cursor=A.limit-i,G()&&(A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr()))),!0;if(A.cursor=A.limit-r,J()){if(A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,e=A.limit-A.cursor,I())A.bra=A.cursor,A.slice_del();else{if(A.cursor=A.limit-e,A.ket=A.cursor,!G()&&(A.cursor=A.limit-e,!H()&&(A.cursor=A.limit-e,!tr())))return!0;A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr())}return!0}if(A.cursor=A.limit-r,M()){if(n=A.limit-A.cursor,I())A.bra=A.cursor,A.slice_del();else if(A.cursor=A.limit-n,H())A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr());else if(A.cursor=A.limit-n,!tr())return!1;return!0}}return!1}function ur(r){if(A.ket=A.cursor,!M()&&(A.cursor=A.limit-r,!j()||!A.find_among_b(c,2)))return!1;var i=A.limit-A.cursor;if(I())A.bra=A.cursor,A.slice_del();else if(A.cursor=A.limit-i,H())A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr());else if(A.cursor=A.limit-i,!tr())return!1;return!0}function or(r){if(A.ket=A.cursor,!(j()&&A.find_among_b(d,2)||(A.cursor=A.limit-r,j()&&A.find_among_b(u,4))))return!1;var i=A.limit-A.cursor;return!(!H()&&(A.cursor=A.limit-i,!I()))&&(A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr()),!0)}function sr(){var r,i=A.limit-A.cursor;return A.ket=A.cursor,!!(J()||(A.cursor=A.limit-i,j()&&A.find_among_b(f,2)&&D()))&&(A.bra=A.cursor,A.slice_del(),r=A.limit-A.cursor,A.ket=A.cursor,!(!U()||(A.bra=A.cursor,A.slice_del(),!tr()))||(A.cursor=A.limit-r,A.ket=A.cursor,!(G()||(A.cursor=A.limit-r,H()||(A.cursor=A.limit-r,tr())))||(A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr()),!0)))}function cr(){var r,i,e=A.limit-A.cursor;if(A.ket=A.cursor,!(K()||(A.cursor=A.limit-e,j()&&A.in_grouping_b(S,105,305)&&D()||(A.cursor=A.limit-e,j()&&A.find_among_b(s,2)&&D()))))return!1;if(A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,r=A.limit-A.cursor,G())A.bra=A.cursor,A.slice_del(),i=A.limit-A.cursor,A.ket=A.cursor,U()||(A.cursor=A.limit-i);else if(A.cursor=A.limit-r,!U())return!0;return A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,tr(),!0}function lr(){var r,i,e=A.limit-A.cursor;if(A.ket=A.cursor,U())return A.bra=A.cursor,A.slice_del(),void tr();if(A.cursor=A.limit-e,A.ket=A.cursor,j()&&A.find_among_b(b,2)&&B())if(A.bra=A.cursor,A.slice_del(),r=A.limit-A.cursor,A.ket=A.cursor,I())A.bra=A.cursor,A.slice_del();else{if(A.cursor=A.limit-r,A.ket=A.cursor,!G()&&(A.cursor=A.limit-r,!H())){if(A.cursor=A.limit-r,A.ket=A.cursor,!U())return;if(A.bra=A.cursor,A.slice_del(),!tr())return}A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr())}else if(A.cursor=A.limit-e,!ur(e)&&(A.cursor=A.limit-e,!or(e))){if(A.cursor=A.limit-e,A.ket=A.cursor,j()&&A.find_among_b(m,4))return A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,i=A.limit-A.cursor,void(G()?(A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr())):(A.cursor=A.limit-i,U()?(A.bra=A.cursor,A.slice_del(),tr()):(A.cursor=A.limit-i,tr())));if(A.cursor=A.limit-e,!sr()){if(A.cursor=A.limit-e,I())return A.bra=A.cursor,void A.slice_del();A.cursor=A.limit-e,tr()||(A.cursor=A.limit-e,cr()||(A.cursor=A.limit-e,A.ket=A.cursor,(G()||(A.cursor=A.limit-e,H()))&&(A.bra=A.cursor,A.slice_del(),A.ket=A.cursor,U()&&(A.bra=A.cursor,A.slice_del(),tr()))))}}}function ar(r,i,e){if(A.cursor=A.limit-r,function(){for(;;){var r=A.limit-A.cursor;if(A.in_grouping_b(F,97,305)){A.cursor=A.limit-r;break}if(A.cursor=A.limit-r,A.cursor<=A.limit_backward)return!1;A.cursor--}return!0}()){var n=A.limit-A.cursor;if(!A.eq_s_b(1,i)&&(A.cursor=A.limit-n,!A.eq_s_b(1,e)))return!0;A.cursor=A.limit-r;var t=A.cursor;return A.insert(A.cursor,A.cursor,e),A.cursor=t,!1}return!0}function mr(r,i,e){for(;!A.eq_s(i,e);){if(A.cursor>=A.limit)return!0;A.cursor++}return i!=A.limit||(A.cursor=r,!1)}function dr(){var r,i,e=A.cursor;return!(!mr(r=A.cursor,2,"ad")||(A.cursor=r,!mr(r,5,"soyad")))&&(A.limit_backward=e,A.cursor=A.limit,i=A.limit-A.cursor,(A.eq_s_b(1,"d")||(A.cursor=A.limit-i,A.eq_s_b(1,"g")))&&ar(i,"a","ı")&&ar(i,"e","i")&&ar(i,"o","u")&&ar(i,"ö","ü"),A.cursor=A.limit,function(){var r;if(A.ket=A.cursor,r=A.find_among_b(P,4))switch(A.bra=A.cursor,r){case 1:A.slice_from("p");break;case 2:A.slice_from("ç");break;case 3:A.slice_from("t");break;case 4:A.slice_from("k")}}(),!0)}this.setCurrent=function(r){A.setCurrent(r)},this.getCurrent=function(){return A.getCurrent()},this.stem=function(){return!!(function(){for(var r,i=A.cursor,e=2;;){for(r=A.cursor;!A.in_grouping(F,97,305);){if(A.cursor>=A.limit)return A.cursor=r,!(e>0||(A.cursor=i,0));A.cursor++}e--}}()&&(A.limit_backward=A.cursor,A.cursor=A.limit,nr(),A.cursor=A.limit,r&&(lr(),A.cursor=A.limit_backward,dr())))}},function(r){return"function"==typeof r.update?r.update(function(r){return n.setCurrent(r),n.stem(),n.getCurrent()}):(n.setCurrent(r),n.stem(),n.getCurrent())}),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}});
\ No newline at end of file
+/*!
+ * Lunr languages, `Turkish` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2014, Mihai Valentin
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(r,i){"function"==typeof define&&define.amd?define(i):"object"==typeof exports?module.exports=i():i()(r.lunr)}(this,function(){return function(r){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var mr,dr,i;r.tr=function(){this.pipeline.reset(),this.pipeline.add(r.tr.trimmer,r.tr.stopWordFilter,r.tr.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(r.tr.stemmer))},r.tr.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",r.tr.trimmer=r.trimmerSupport.generateTrimmer(r.tr.wordCharacters),r.Pipeline.registerFunction(r.tr.trimmer,"trimmer-tr"),r.tr.stemmer=(mr=r.stemmerSupport.Among,dr=r.stemmerSupport.SnowballProgram,i=new function(){var t,r=[new mr("m",-1,-1),new mr("n",-1,-1),new mr("miz",-1,-1),new mr("niz",-1,-1),new mr("muz",-1,-1),new mr("nuz",-1,-1),new mr("müz",-1,-1),new mr("nüz",-1,-1),new mr("mız",-1,-1),new mr("nız",-1,-1)],i=[new mr("leri",-1,-1),new mr("ları",-1,-1)],e=[new mr("ni",-1,-1),new mr("nu",-1,-1),new mr("nü",-1,-1),new mr("nı",-1,-1)],n=[new mr("in",-1,-1),new mr("un",-1,-1),new mr("ün",-1,-1),new mr("ın",-1,-1)],u=[new mr("a",-1,-1),new mr("e",-1,-1)],o=[new mr("na",-1,-1),new mr("ne",-1,-1)],s=[new mr("da",-1,-1),new mr("ta",-1,-1),new mr("de",-1,-1),new mr("te",-1,-1)],c=[new mr("nda",-1,-1),new mr("nde",-1,-1)],l=[new mr("dan",-1,-1),new mr("tan",-1,-1),new mr("den",-1,-1),new mr("ten",-1,-1)],a=[new mr("ndan",-1,-1),new mr("nden",-1,-1)],m=[new mr("la",-1,-1),new mr("le",-1,-1)],d=[new mr("ca",-1,-1),new mr("ce",-1,-1)],f=[new mr("im",-1,-1),new mr("um",-1,-1),new mr("üm",-1,-1),new mr("ım",-1,-1)],b=[new mr("sin",-1,-1),new mr("sun",-1,-1),new mr("sün",-1,-1),new mr("sın",-1,-1)],w=[new mr("iz",-1,-1),new mr("uz",-1,-1),new mr("üz",-1,-1),new mr("ız",-1,-1)],_=[new mr("siniz",-1,-1),new mr("sunuz",-1,-1),new mr("sünüz",-1,-1),new mr("sınız",-1,-1)],k=[new mr("lar",-1,-1),new mr("ler",-1,-1)],p=[new mr("niz",-1,-1),new mr("nuz",-1,-1),new mr("nüz",-1,-1),new mr("nız",-1,-1)],g=[new mr("dir",-1,-1),new mr("tir",-1,-1),new mr("dur",-1,-1),new mr("tur",-1,-1),new mr("dür",-1,-1),new mr("tür",-1,-1),new mr("dır",-1,-1),new mr("tır",-1,-1)],y=[new mr("casına",-1,-1),new mr("cesine",-1,-1)],z=[new mr("di",-1,-1),new mr("ti",-1,-1),new mr("dik",-1,-1),new mr("tik",-1,-1),new mr("duk",-1,-1),new mr("tuk",-1,-1),new mr("dük",-1,-1),new mr("tük",-1,-1),new mr("dık",-1,-1),new mr("tık",-1,-1),new mr("dim",-1,-1),new mr("tim",-1,-1),new mr("dum",-1,-1),new mr("tum",-1,-1),new mr("düm",-1,-1),new mr("tüm",-1,-1),new mr("dım",-1,-1),new mr("tım",-1,-1),new mr("din",-1,-1),new mr("tin",-1,-1),new mr("dun",-1,-1),new mr("tun",-1,-1),new mr("dün",-1,-1),new mr("tün",-1,-1),new mr("dın",-1,-1),new mr("tın",-1,-1),new mr("du",-1,-1),new mr("tu",-1,-1),new mr("dü",-1,-1),new mr("tü",-1,-1),new mr("dı",-1,-1),new mr("tı",-1,-1)],h=[new mr("sa",-1,-1),new mr("se",-1,-1),new mr("sak",-1,-1),new mr("sek",-1,-1),new mr("sam",-1,-1),new mr("sem",-1,-1),new mr("san",-1,-1),new mr("sen",-1,-1)],v=[new mr("miş",-1,-1),new mr("muş",-1,-1),new mr("müş",-1,-1),new mr("mış",-1,-1)],q=[new mr("b",-1,1),new mr("c",-1,2),new mr("d",-1,3),new mr("ğ",-1,4)],C=[17,65,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,8,0,0,0,0,0,0,1],P=[1,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,1],F=[65],S=[65],W=[["a",[1,64,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["e",[17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130],101,252],["ı",[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],97,305],["i",[17],101,105],["o",F,111,117],["ö",S,246,252],["u",F,111,117]],L=new dr;function x(r,i,e){for(;;){var n=L.limit-L.cursor;if(L.in_grouping_b(r,i,e)){L.cursor=L.limit-n;break}if(L.cursor=L.limit-n,L.cursor<=L.limit_backward)return!1;L.cursor--}return!0}function A(){var r,i;r=L.limit-L.cursor,x(C,97,305);for(var e=0;e<W.length;e++){i=L.limit-L.cursor;var n=W[e];if(L.eq_s_b(1,n[0])&&x(n[1],n[2],n[3]))return L.cursor=L.limit-r,!0;L.cursor=L.limit-i}return L.cursor=L.limit-i,!(!L.eq_s_b(1,"ü")||!x(S,246,252))&&(L.cursor=L.limit-r,!0)}function E(r,i){var e,n=L.limit-L.cursor;return r()&&(L.cursor=L.limit-n,L.cursor>L.limit_backward&&(L.cursor--,e=L.limit-L.cursor,i()))?(L.cursor=L.limit-e,!0):(L.cursor=L.limit-n,r()?(L.cursor=L.limit-n,!1):(L.cursor=L.limit-n,!(L.cursor<=L.limit_backward)&&(L.cursor--,!!i()&&(L.cursor=L.limit-n,!0))))}function j(r){return E(r,function(){return L.in_grouping_b(C,97,305)})}function T(){return j(function(){return L.eq_s_b(1,"n")})}function Z(){return j(function(){return L.eq_s_b(1,"y")})}function B(){return L.find_among_b(r,10)&&E(function(){return L.in_grouping_b(P,105,305)},function(){return L.out_grouping_b(C,97,305)})}function D(){return A()&&L.in_grouping_b(P,105,305)&&j(function(){return L.eq_s_b(1,"s")})}function G(){return L.find_among_b(i,2)}function H(){return A()&&L.find_among_b(n,4)&&T()}function I(){return A()&&L.find_among_b(s,4)}function J(){return A()&&L.find_among_b(c,2)}function K(){return A()&&L.find_among_b(f,4)&&Z()}function M(){return A()&&L.find_among_b(b,4)}function N(){return A()&&L.find_among_b(w,4)&&Z()}function O(){return L.find_among_b(_,4)}function Q(){return A()&&L.find_among_b(k,2)}function R(){return A()&&L.find_among_b(g,8)}function U(){return A()&&L.find_among_b(z,32)&&Z()}function V(){return L.find_among_b(h,8)&&Z()}function X(){return A()&&L.find_among_b(v,4)&&Z()}function Y(){var r=L.limit-L.cursor;return!(X()||(L.cursor=L.limit-r,U()||(L.cursor=L.limit-r,V()||(L.cursor=L.limit-r,L.eq_s_b(3,"ken")&&Z()))))}function $(){if(L.find_among_b(y,2)){var r=L.limit-L.cursor;if(O()||(L.cursor=L.limit-r,Q()||(L.cursor=L.limit-r,K()||(L.cursor=L.limit-r,M()||(L.cursor=L.limit-r,N()||(L.cursor=L.limit-r))))),X())return!1}return!0}function rr(){if(!A()||!L.find_among_b(p,4))return!0;var r=L.limit-L.cursor;return!U()&&(L.cursor=L.limit-r,!V())}function ir(){var r,i,e,n=L.limit-L.cursor;if(L.ket=L.cursor,t=!0,Y()&&(L.cursor=L.limit-n,$()&&(L.cursor=L.limit-n,function(){if(Q()){L.bra=L.cursor,L.slice_del();var r=L.limit-L.cursor;return L.ket=L.cursor,R()||(L.cursor=L.limit-r,U()||(L.cursor=L.limit-r,V()||(L.cursor=L.limit-r,X()||(L.cursor=L.limit-r)))),t=!1}return!0}()&&(L.cursor=L.limit-n,rr()&&(L.cursor=L.limit-n,e=L.limit-L.cursor,!(O()||(L.cursor=L.limit-e,N()||(L.cursor=L.limit-e,M()||(L.cursor=L.limit-e,K()))))||(L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,X()||(L.cursor=L.limit-i),0)))))){if(L.cursor=L.limit-n,!R())return;L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,r=L.limit-L.cursor,O()||(L.cursor=L.limit-r,Q()||(L.cursor=L.limit-r,K()||(L.cursor=L.limit-r,M()||(L.cursor=L.limit-r,N()||(L.cursor=L.limit-r))))),X()||(L.cursor=L.limit-r)}L.bra=L.cursor,L.slice_del()}function er(){var r,i,e,n;if(L.ket=L.cursor,L.eq_s_b(2,"ki")){if(r=L.limit-L.cursor,I())return L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,Q()?(L.bra=L.cursor,L.slice_del(),er()):(L.cursor=L.limit-i,B()&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()))),!0;if(L.cursor=L.limit-r,H()){if(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,e=L.limit-L.cursor,G())L.bra=L.cursor,L.slice_del();else{if(L.cursor=L.limit-e,L.ket=L.cursor,!B()&&(L.cursor=L.limit-e,!D()&&(L.cursor=L.limit-e,!er())))return!0;L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())}return!0}if(L.cursor=L.limit-r,J()){if(n=L.limit-L.cursor,G())L.bra=L.cursor,L.slice_del();else if(L.cursor=L.limit-n,D())L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er());else if(L.cursor=L.limit-n,!er())return!1;return!0}}return!1}function nr(r){if(L.ket=L.cursor,!J()&&(L.cursor=L.limit-r,!A()||!L.find_among_b(o,2)))return!1;var i=L.limit-L.cursor;if(G())L.bra=L.cursor,L.slice_del();else if(L.cursor=L.limit-i,D())L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er());else if(L.cursor=L.limit-i,!er())return!1;return!0}function tr(r){if(L.ket=L.cursor,!(A()&&L.find_among_b(a,2)||(L.cursor=L.limit-r,A()&&L.find_among_b(e,4))))return!1;var i=L.limit-L.cursor;return!(!D()&&(L.cursor=L.limit-i,!G()))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()),!0)}function ur(){var r,i=L.limit-L.cursor;return L.ket=L.cursor,!!(H()||(L.cursor=L.limit-i,A()&&L.find_among_b(m,2)&&Z()))&&(L.bra=L.cursor,L.slice_del(),r=L.limit-L.cursor,L.ket=L.cursor,!(!Q()||(L.bra=L.cursor,L.slice_del(),!er()))||(L.cursor=L.limit-r,L.ket=L.cursor,(B()||(L.cursor=L.limit-r,D()||(L.cursor=L.limit-r,er())))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())),!0))}function or(){var r,i,e=L.limit-L.cursor;if(L.ket=L.cursor,!(I()||(L.cursor=L.limit-e,A()&&L.in_grouping_b(P,105,305)&&Z()||(L.cursor=L.limit-e,A()&&L.find_among_b(u,2)&&Z()))))return!1;if(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,r=L.limit-L.cursor,B())L.bra=L.cursor,L.slice_del(),i=L.limit-L.cursor,L.ket=L.cursor,Q()||(L.cursor=L.limit-i);else if(L.cursor=L.limit-r,!Q())return!0;return L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,er(),!0}function sr(){var r,i,e=L.limit-L.cursor;if(L.ket=L.cursor,Q())return L.bra=L.cursor,L.slice_del(),void er();if(L.cursor=L.limit-e,L.ket=L.cursor,A()&&L.find_among_b(d,2)&&T())if(L.bra=L.cursor,L.slice_del(),r=L.limit-L.cursor,L.ket=L.cursor,G())L.bra=L.cursor,L.slice_del();else{if(L.cursor=L.limit-r,L.ket=L.cursor,!B()&&(L.cursor=L.limit-r,!D())){if(L.cursor=L.limit-r,L.ket=L.cursor,!Q())return;if(L.bra=L.cursor,L.slice_del(),!er())return}L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())}else if(L.cursor=L.limit-e,!nr(e)&&(L.cursor=L.limit-e,!tr(e))){if(L.cursor=L.limit-e,L.ket=L.cursor,A()&&L.find_among_b(l,4))return L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,i=L.limit-L.cursor,void(B()?(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er())):(L.cursor=L.limit-i,Q()?(L.bra=L.cursor,L.slice_del()):L.cursor=L.limit-i,er()));if(L.cursor=L.limit-e,!ur()){if(L.cursor=L.limit-e,G())return L.bra=L.cursor,void L.slice_del();L.cursor=L.limit-e,er()||(L.cursor=L.limit-e,or()||(L.cursor=L.limit-e,L.ket=L.cursor,(B()||(L.cursor=L.limit-e,D()))&&(L.bra=L.cursor,L.slice_del(),L.ket=L.cursor,Q()&&(L.bra=L.cursor,L.slice_del(),er()))))}}}function cr(r,i,e){if(L.cursor=L.limit-r,function(){for(;;){var r=L.limit-L.cursor;if(L.in_grouping_b(C,97,305)){L.cursor=L.limit-r;break}if(L.cursor=L.limit-r,L.cursor<=L.limit_backward)return!1;L.cursor--}return!0}()){var n=L.limit-L.cursor;if(!L.eq_s_b(1,i)&&(L.cursor=L.limit-n,!L.eq_s_b(1,e)))return!0;L.cursor=L.limit-r;var t=L.cursor;return L.insert(L.cursor,L.cursor,e),L.cursor=t,!1}return!0}function lr(r,i,e){for(;!L.eq_s(i,e);){if(L.cursor>=L.limit)return!0;L.cursor++}return i!=L.limit||(L.cursor=r,!1)}function ar(){var r,i,e=L.cursor;return!(!lr(r=L.cursor,2,"ad")||!lr(L.cursor=r,5,"soyad"))&&(L.limit_backward=e,L.cursor=L.limit,i=L.limit-L.cursor,(L.eq_s_b(1,"d")||(L.cursor=L.limit-i,L.eq_s_b(1,"g")))&&cr(i,"a","ı")&&cr(i,"e","i")&&cr(i,"o","u")&&cr(i,"ö","ü"),L.cursor=L.limit,function(){var r;if(L.ket=L.cursor,r=L.find_among_b(q,4))switch(L.bra=L.cursor,r){case 1:L.slice_from("p");break;case 2:L.slice_from("ç");break;case 3:L.slice_from("t");break;case 4:L.slice_from("k")}}(),!0)}this.setCurrent=function(r){L.setCurrent(r)},this.getCurrent=function(){return L.getCurrent()},this.stem=function(){return!!(function(){for(var r,i=L.cursor,e=2;;){for(r=L.cursor;!L.in_grouping(C,97,305);){if(L.cursor>=L.limit)return L.cursor=r,!(0<e||(L.cursor=i,0));L.cursor++}e--}}()&&(L.limit_backward=L.cursor,L.cursor=L.limit,ir(),L.cursor=L.limit,t&&(sr(),L.cursor=L.limit_backward,ar())))}},function(r){return"function"==typeof r.update?r.update(function(r){return i.setCurrent(r),i.stem(),i.getCurrent()}):(i.setCurrent(r),i.stem(),i.getCurrent())}),r.Pipeline.registerFunction(r.tr.stemmer,"stemmer-tr"),r.tr.stopWordFilter=r.generateStopWordFilter("acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir biri birkaç birkez birçok birşey birşeyi biz bizden bize bizi bizim bu buna bunda bundan bunlar bunları bunların bunu bunun burada böyle böylece da daha dahi de defa değil diye diğer doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor elli en etmesi etti ettiği ettiğini eğer gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir iki ile ilgili ise itibaren itibariyle için işte kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduklarını olduğu olduğunu olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin tarafından trilyon tüm var vardı ve veya ya yani yapacak yapmak yaptı yaptıkları yaptığı yaptığını yapılan yapılması yapıyor yedi yerine yetmiş yine yirmi yoksa yüz zaten çok çünkü öyle üzere üç şey şeyden şeyi şeyler şu şuna şunda şundan şunları şunu şöyle".split(" ")),r.Pipeline.registerFunction(r.tr.stopWordFilter,"stopWordFilter-tr")}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/lunr.vi.js b/assets/javascripts/lunr/lunr.vi.js
new file mode 100644
index 0000000..111bc00
--- /dev/null
+++ b/assets/javascripts/lunr/lunr.vi.js
@@ -0,0 +1,17 @@
+/*!
+ * Lunr languages, `Vietnamese` language
+ * https://github.com/MihaiValentin/lunr-languages
+ *
+ * Copyright 2017, Keerati Thiwanruk
+ * http://www.mozilla.org/MPL/
+ */
+/*!
+ * based on
+ * Snowball JavaScript Library v0.3
+ * http://code.google.com/p/urim/
+ * http://snowball.tartarus.org/
+ *
+ * Copyright 2010, Oleg Mazko
+ * http://www.mozilla.org/MPL/
+ */
+!function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/tinyseg.js b/assets/javascripts/lunr/tinyseg.js
index f7ec603..e3663a5 100644
--- a/assets/javascripts/lunr/tinyseg.js
+++ b/assets/javascripts/lunr/tinyseg.js
@@ -1 +1 @@
-!function(_,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(_.lunr)}(this,function(){return function(_){function t(){var _={"[一二三四五六七八九十百千万億兆]":"M","[一-龠々〆ヵヶ]":"H","[ぁ-ん]":"I","[ァ-ヴーア-ン゙ー]":"K","[a-zA-Za-zA-Z]":"A","[0-90-9]":"N"};for(var t in this.chartype_=[],_){var H=new RegExp;H.compile(t),this.chartype_.push([H,_[t]])}return this.BIAS__=-332,this.BC1__={HH:6,II:2461,KH:406,OH:-1378},this.BC2__={AA:-3267,AI:2744,AN:-878,HH:-4070,HM:-1711,HN:4012,HO:3761,IA:1327,IH:-1184,II:-1332,IK:1721,IO:5492,KI:3831,KK:-8741,MH:-3132,MK:3334,OO:-2920},this.BC3__={HH:996,HI:626,HK:-721,HN:-1307,HO:-836,IH:-301,KK:2762,MK:1079,MM:4034,OA:-1652,OH:266},this.BP1__={BB:295,OB:304,OO:-125,UB:352},this.BP2__={BO:60,OO:-1762},this.BQ1__={BHH:1150,BHM:1521,BII:-1158,BIM:886,BMH:1208,BNH:449,BOH:-91,BOO:-2597,OHI:451,OIH:-296,OKA:1851,OKH:-1020,OKK:904,OOO:2965},this.BQ2__={BHH:118,BHI:-1159,BHM:466,BIH:-919,BKK:-1720,BKO:864,OHH:-1139,OHM:-181,OIH:153,UHI:-1146},this.BQ3__={BHH:-792,BHI:2664,BII:-299,BKI:419,BMH:937,BMM:8335,BNN:998,BOH:775,OHH:2174,OHM:439,OII:280,OKH:1798,OKI:-793,OKO:-2242,OMH:-2402,OOO:11699},this.BQ4__={BHH:-3895,BIH:3761,BII:-4654,BIK:1348,BKK:-1806,BMI:-3385,BOO:-12396,OAH:926,OHH:266,OHK:-2036,ONN:-973},this.BW1__={",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682},this.BW2__={"..":-11822,11:-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669},this.BW3__={"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1e3,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990},this.TC1__={AAA:1093,HHH:1029,HHM:580,HII:998,HOH:-390,HOM:-331,IHI:1169,IOH:-142,IOI:-1015,IOM:467,MMH:187,OOI:-1832},this.TC2__={HHO:2088,HII:-1023,HMM:-1154,IHI:-1965,KKH:703,OII:-2649},this.TC3__={AAA:-294,HHH:346,HHI:-341,HII:-1088,HIK:731,HOH:-1486,IHH:128,IHI:-3041,IHO:-1935,IIH:-825,IIM:-1035,IOI:-542,KHH:-1216,KKA:491,KKH:-1217,KOK:-1009,MHH:-2694,MHM:-457,MHO:123,MMH:-471,NNH:-1689,NNO:662,OHO:-3393},this.TC4__={HHH:-203,HHI:1344,HHK:365,HHM:-122,HHN:182,HHO:669,HIH:804,HII:679,HOH:446,IHH:695,IHO:-2324,IIH:321,III:1497,IIO:656,IOO:54,KAK:4845,KKA:3386,KKK:3065,MHH:-405,MHI:201,MMH:-241,MMM:661,MOM:841},this.TQ1__={BHHH:-227,BHHI:316,BHIH:-132,BIHH:60,BIII:1595,BNHH:-744,BOHH:225,BOOO:-908,OAKK:482,OHHH:281,OHIH:249,OIHI:200,OIIH:-68},this.TQ2__={BIHH:-1401,BIII:-1033,BKAK:-543,BOOO:-5591},this.TQ3__={BHHH:478,BHHM:-1073,BHIH:222,BHII:-504,BIIH:-116,BIII:-105,BMHI:-863,BMHM:-464,BOMH:620,OHHH:346,OHHI:1729,OHII:997,OHMH:481,OIHH:623,OIIH:1344,OKAK:2792,OKHH:587,OKKA:679,OOHH:110,OOII:-685},this.TQ4__={BHHH:-721,BHHM:-3604,BHII:-966,BIIH:-607,BIII:-2181,OAAA:-2763,OAKK:180,OHHH:-294,OHHI:2446,OHHO:480,OHIH:-1573,OIHH:1935,OIHI:-493,OIIH:626,OIII:-4007,OKAK:-8156},this.TW1__={"につい":-4681,"東京都":2026},this.TW2__={"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216},this.TW3__={"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287},this.TW4__={"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865},this.UC1__={A:484,K:93,M:645,O:-505},this.UC2__={A:819,H:1059,I:409,M:3987,N:5775,O:646},this.UC3__={A:-1370,I:2311},this.UC4__={A:-2643,H:1809,I:-1032,K:-3450,M:3565,N:3876,O:6646},this.UC5__={H:313,I:-1238,K:-799,M:539,O:-831},this.UC6__={H:-506,I:-253,K:87,M:247,O:-387},this.UP1__={O:-214},this.UP2__={B:69,O:935},this.UP3__={B:189},this.UQ1__={BH:21,BI:-12,BK:-99,BN:142,BO:-56,OH:-95,OI:477,OK:410,OO:-2422},this.UQ2__={BH:216,BI:113,OK:1759},this.UQ3__={BA:-479,BH:42,BI:1913,BK:-7198,BM:3160,BN:6427,BO:14761,OI:-827,ON:-3212},this.UW1__={",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135},this.UW2__={",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568},this.UW3__={",":4889,1:-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278},this.UW4__={",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1e3,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637},this.UW5__={",":465,".":-299,1:-514,E2:-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343},this.UW6__={",":227,".":808,1:-270,E1:306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496},this}t.prototype.ctype_=function(_){for(var t in this.chartype_)if(_.match(this.chartype_[t][0]))return this.chartype_[t][1];return"O"},t.prototype.ts_=function(_){return _||0},t.prototype.segment=function(_){if(null==_||null==_||""==_)return[];var t=[],H=["B3","B2","B1"],s=["O","O","O"],h=_.split("");for(K=0;K<h.length;++K)H.push(h[K]),s.push(this.ctype_(h[K]));H.push("E1"),H.push("E2"),H.push("E3"),s.push("O"),s.push("O"),s.push("O");for(var i=H[3],I="U",O="U",B="U",K=4;K<H.length-3;++K){var M=this.BIAS__,e=H[K-3],U=H[K-2],r=H[K-1],n=H[K],A=H[K+1],p=H[K+2],u=s[K-3],C=s[K-2],W=s[K-1],o=s[K],T=s[K+1],Q=s[K+2];M+=this.ts_(this.UP1__[I]),M+=this.ts_(this.UP2__[O]),M+=this.ts_(this.UP3__[B]),M+=this.ts_(this.BP1__[I+O]),M+=this.ts_(this.BP2__[O+B]),M+=this.ts_(this.UW1__[e]),M+=this.ts_(this.UW2__[U]),M+=this.ts_(this.UW3__[r]),M+=this.ts_(this.UW4__[n]),M+=this.ts_(this.UW5__[A]),M+=this.ts_(this.UW6__[p]),M+=this.ts_(this.BW1__[U+r]),M+=this.ts_(this.BW2__[r+n]),M+=this.ts_(this.BW3__[n+A]),M+=this.ts_(this.TW1__[e+U+r]),M+=this.ts_(this.TW2__[U+r+n]),M+=this.ts_(this.TW3__[r+n+A]),M+=this.ts_(this.TW4__[n+A+p]),M+=this.ts_(this.UC1__[u]),M+=this.ts_(this.UC2__[C]),M+=this.ts_(this.UC3__[W]),M+=this.ts_(this.UC4__[o]),M+=this.ts_(this.UC5__[T]),M+=this.ts_(this.UC6__[Q]),M+=this.ts_(this.BC1__[C+W]),M+=this.ts_(this.BC2__[W+o]),M+=this.ts_(this.BC3__[o+T]),M+=this.ts_(this.TC1__[u+C+W]),M+=this.ts_(this.TC2__[C+W+o]),M+=this.ts_(this.TC3__[W+o+T]),M+=this.ts_(this.TC4__[o+T+Q]),M+=this.ts_(this.UQ1__[I+u]),M+=this.ts_(this.UQ2__[O+C]),M+=this.ts_(this.UQ3__[B+W]),M+=this.ts_(this.BQ1__[O+C+W]),M+=this.ts_(this.BQ2__[O+W+o]),M+=this.ts_(this.BQ3__[B+C+W]),M+=this.ts_(this.BQ4__[B+W+o]),M+=this.ts_(this.TQ1__[O+u+C+W]),M+=this.ts_(this.TQ2__[O+C+W+o]),M+=this.ts_(this.TQ3__[B+u+C+W]);var N="O";(M+=this.ts_(this.TQ4__[B+C+W+o]))>0&&(t.push(i),i="",N="B"),I=O,O=B,B=N,i+=H[K]}return t.push(i),t},_.TinySegmenter=t}});
\ No newline at end of file
+!function(_,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(_.lunr)}(this,function(){return function(_){function t(){var _={"[一二三四五六七八九十百千万億兆]":"M","[一-龠々〆ヵヶ]":"H","[ぁ-ん]":"I","[ァ-ヴーア-ン゙ー]":"K","[a-zA-Za-zA-Z]":"A","[0-90-9]":"N"};for(var t in this.chartype_=[],_){var H=new RegExp(t);this.chartype_.push([H,_[t]])}return this.BIAS__=-332,this.BC1__={HH:6,II:2461,KH:406,OH:-1378},this.BC2__={AA:-3267,AI:2744,AN:-878,HH:-4070,HM:-1711,HN:4012,HO:3761,IA:1327,IH:-1184,II:-1332,IK:1721,IO:5492,KI:3831,KK:-8741,MH:-3132,MK:3334,OO:-2920},this.BC3__={HH:996,HI:626,HK:-721,HN:-1307,HO:-836,IH:-301,KK:2762,MK:1079,MM:4034,OA:-1652,OH:266},this.BP1__={BB:295,OB:304,OO:-125,UB:352},this.BP2__={BO:60,OO:-1762},this.BQ1__={BHH:1150,BHM:1521,BII:-1158,BIM:886,BMH:1208,BNH:449,BOH:-91,BOO:-2597,OHI:451,OIH:-296,OKA:1851,OKH:-1020,OKK:904,OOO:2965},this.BQ2__={BHH:118,BHI:-1159,BHM:466,BIH:-919,BKK:-1720,BKO:864,OHH:-1139,OHM:-181,OIH:153,UHI:-1146},this.BQ3__={BHH:-792,BHI:2664,BII:-299,BKI:419,BMH:937,BMM:8335,BNN:998,BOH:775,OHH:2174,OHM:439,OII:280,OKH:1798,OKI:-793,OKO:-2242,OMH:-2402,OOO:11699},this.BQ4__={BHH:-3895,BIH:3761,BII:-4654,BIK:1348,BKK:-1806,BMI:-3385,BOO:-12396,OAH:926,OHH:266,OHK:-2036,ONN:-973},this.BW1__={",と":660,",同":727,"B1あ":1404,"B1同":542,"、と":660,"、同":727,"」と":1682,"あっ":1505,"いう":1743,"いっ":-2055,"いる":672,"うし":-4817,"うん":665,"から":3472,"がら":600,"こう":-790,"こと":2083,"こん":-1262,"さら":-4143,"さん":4573,"した":2641,"して":1104,"すで":-3399,"そこ":1977,"それ":-871,"たち":1122,"ため":601,"った":3463,"つい":-802,"てい":805,"てき":1249,"でき":1127,"です":3445,"では":844,"とい":-4915,"とみ":1922,"どこ":3887,"ない":5713,"なっ":3015,"など":7379,"なん":-1113,"にし":2468,"には":1498,"にも":1671,"に対":-912,"の一":-501,"の中":741,"ませ":2448,"まで":1711,"まま":2600,"まる":-2155,"やむ":-1947,"よっ":-2565,"れた":2369,"れで":-913,"をし":1860,"を見":731,"亡く":-1886,"京都":2558,"取り":-2784,"大き":-2604,"大阪":1497,"平方":-2314,"引き":-1336,"日本":-195,"本当":-2423,"毎日":-2113,"目指":-724,"B1あ":1404,"B1同":542,"」と":1682},this.BW2__={"..":-11822,11:-669,"――":-5730,"−−":-13175,"いう":-1609,"うか":2490,"かし":-1350,"かも":-602,"から":-7194,"かれ":4612,"がい":853,"がら":-3198,"きた":1941,"くな":-1597,"こと":-8392,"この":-4193,"させ":4533,"され":13168,"さん":-3977,"しい":-1819,"しか":-545,"した":5078,"して":972,"しな":939,"その":-3744,"たい":-1253,"たた":-662,"ただ":-3857,"たち":-786,"たと":1224,"たは":-939,"った":4589,"って":1647,"っと":-2094,"てい":6144,"てき":3640,"てく":2551,"ては":-3110,"ても":-3065,"でい":2666,"でき":-1528,"でし":-3828,"です":-4761,"でも":-4203,"とい":1890,"とこ":-1746,"とと":-2279,"との":720,"とみ":5168,"とも":-3941,"ない":-2488,"なが":-1313,"など":-6509,"なの":2614,"なん":3099,"にお":-1615,"にし":2748,"にな":2454,"によ":-7236,"に対":-14943,"に従":-4688,"に関":-11388,"のか":2093,"ので":-7059,"のに":-6041,"のの":-6125,"はい":1073,"はが":-1033,"はず":-2532,"ばれ":1813,"まし":-1316,"まで":-6621,"まれ":5409,"めて":-3153,"もい":2230,"もの":-10713,"らか":-944,"らし":-1611,"らに":-1897,"りし":651,"りま":1620,"れた":4270,"れて":849,"れば":4114,"ろう":6067,"われ":7901,"を通":-11877,"んだ":728,"んな":-4115,"一人":602,"一方":-1375,"一日":970,"一部":-1051,"上が":-4479,"会社":-1116,"出て":2163,"分の":-7758,"同党":970,"同日":-913,"大阪":-2471,"委員":-1250,"少な":-1050,"年度":-8669,"年間":-1626,"府県":-2363,"手権":-1982,"新聞":-4066,"日新":-722,"日本":-7068,"日米":3372,"曜日":-601,"朝鮮":-2355,"本人":-2697,"東京":-1543,"然と":-1384,"社会":-1276,"立て":-990,"第に":-1612,"米国":-4268,"11":-669},this.BW3__={"あた":-2194,"あり":719,"ある":3846,"い.":-1185,"い。":-1185,"いい":5308,"いえ":2079,"いく":3029,"いた":2056,"いっ":1883,"いる":5600,"いわ":1527,"うち":1117,"うと":4798,"えと":1454,"か.":2857,"か。":2857,"かけ":-743,"かっ":-4098,"かに":-669,"から":6520,"かり":-2670,"が,":1816,"が、":1816,"がき":-4855,"がけ":-1127,"がっ":-913,"がら":-4977,"がり":-2064,"きた":1645,"けど":1374,"こと":7397,"この":1542,"ころ":-2757,"さい":-714,"さを":976,"し,":1557,"し、":1557,"しい":-3714,"した":3562,"して":1449,"しな":2608,"しま":1200,"す.":-1310,"す。":-1310,"する":6521,"ず,":3426,"ず、":3426,"ずに":841,"そう":428,"た.":8875,"た。":8875,"たい":-594,"たの":812,"たり":-1183,"たる":-853,"だ.":4098,"だ。":4098,"だっ":1004,"った":-4748,"って":300,"てい":6240,"てお":855,"ても":302,"です":1437,"でに":-1482,"では":2295,"とう":-1387,"とし":2266,"との":541,"とも":-3543,"どう":4664,"ない":1796,"なく":-903,"など":2135,"に,":-1021,"に、":-1021,"にし":1771,"にな":1906,"には":2644,"の,":-724,"の、":-724,"の子":-1e3,"は,":1337,"は、":1337,"べき":2181,"まし":1113,"ます":6943,"まっ":-1549,"まで":6154,"まれ":-793,"らし":1479,"られ":6820,"るる":3818,"れ,":854,"れ、":854,"れた":1850,"れて":1375,"れば":-3246,"れる":1091,"われ":-605,"んだ":606,"んで":798,"カ月":990,"会議":860,"入り":1232,"大会":2217,"始め":1681,"市":965,"新聞":-5055,"日,":974,"日、":974,"社会":2024,"カ月":990},this.TC1__={AAA:1093,HHH:1029,HHM:580,HII:998,HOH:-390,HOM:-331,IHI:1169,IOH:-142,IOI:-1015,IOM:467,MMH:187,OOI:-1832},this.TC2__={HHO:2088,HII:-1023,HMM:-1154,IHI:-1965,KKH:703,OII:-2649},this.TC3__={AAA:-294,HHH:346,HHI:-341,HII:-1088,HIK:731,HOH:-1486,IHH:128,IHI:-3041,IHO:-1935,IIH:-825,IIM:-1035,IOI:-542,KHH:-1216,KKA:491,KKH:-1217,KOK:-1009,MHH:-2694,MHM:-457,MHO:123,MMH:-471,NNH:-1689,NNO:662,OHO:-3393},this.TC4__={HHH:-203,HHI:1344,HHK:365,HHM:-122,HHN:182,HHO:669,HIH:804,HII:679,HOH:446,IHH:695,IHO:-2324,IIH:321,III:1497,IIO:656,IOO:54,KAK:4845,KKA:3386,KKK:3065,MHH:-405,MHI:201,MMH:-241,MMM:661,MOM:841},this.TQ1__={BHHH:-227,BHHI:316,BHIH:-132,BIHH:60,BIII:1595,BNHH:-744,BOHH:225,BOOO:-908,OAKK:482,OHHH:281,OHIH:249,OIHI:200,OIIH:-68},this.TQ2__={BIHH:-1401,BIII:-1033,BKAK:-543,BOOO:-5591},this.TQ3__={BHHH:478,BHHM:-1073,BHIH:222,BHII:-504,BIIH:-116,BIII:-105,BMHI:-863,BMHM:-464,BOMH:620,OHHH:346,OHHI:1729,OHII:997,OHMH:481,OIHH:623,OIIH:1344,OKAK:2792,OKHH:587,OKKA:679,OOHH:110,OOII:-685},this.TQ4__={BHHH:-721,BHHM:-3604,BHII:-966,BIIH:-607,BIII:-2181,OAAA:-2763,OAKK:180,OHHH:-294,OHHI:2446,OHHO:480,OHIH:-1573,OIHH:1935,OIHI:-493,OIIH:626,OIII:-4007,OKAK:-8156},this.TW1__={"につい":-4681,"東京都":2026},this.TW2__={"ある程":-2049,"いった":-1256,"ころが":-2434,"しょう":3873,"その後":-4430,"だって":-1049,"ていた":1833,"として":-4657,"ともに":-4517,"もので":1882,"一気に":-792,"初めて":-1512,"同時に":-8097,"大きな":-1255,"対して":-2721,"社会党":-3216},this.TW3__={"いただ":-1734,"してい":1314,"として":-4314,"につい":-5483,"にとっ":-5989,"に当た":-6247,"ので,":-727,"ので、":-727,"のもの":-600,"れから":-3752,"十二月":-2287},this.TW4__={"いう.":8576,"いう。":8576,"からな":-2348,"してい":2958,"たが,":1516,"たが、":1516,"ている":1538,"という":1349,"ました":5543,"ません":1097,"ようと":-4258,"よると":5865},this.UC1__={A:484,K:93,M:645,O:-505},this.UC2__={A:819,H:1059,I:409,M:3987,N:5775,O:646},this.UC3__={A:-1370,I:2311},this.UC4__={A:-2643,H:1809,I:-1032,K:-3450,M:3565,N:3876,O:6646},this.UC5__={H:313,I:-1238,K:-799,M:539,O:-831},this.UC6__={H:-506,I:-253,K:87,M:247,O:-387},this.UP1__={O:-214},this.UP2__={B:69,O:935},this.UP3__={B:189},this.UQ1__={BH:21,BI:-12,BK:-99,BN:142,BO:-56,OH:-95,OI:477,OK:410,OO:-2422},this.UQ2__={BH:216,BI:113,OK:1759},this.UQ3__={BA:-479,BH:42,BI:1913,BK:-7198,BM:3160,BN:6427,BO:14761,OI:-827,ON:-3212},this.UW1__={",":156,"、":156,"「":-463,"あ":-941,"う":-127,"が":-553,"き":121,"こ":505,"で":-201,"と":-547,"ど":-123,"に":-789,"の":-185,"は":-847,"も":-466,"や":-470,"よ":182,"ら":-292,"り":208,"れ":169,"を":-446,"ん":-137,"・":-135,"主":-402,"京":-268,"区":-912,"午":871,"国":-460,"大":561,"委":729,"市":-411,"日":-141,"理":361,"生":-408,"県":-386,"都":-718,"「":-463,"・":-135},this.UW2__={",":-829,"、":-829,"〇":892,"「":-645,"」":3145,"あ":-538,"い":505,"う":134,"お":-502,"か":1454,"が":-856,"く":-412,"こ":1141,"さ":878,"ざ":540,"し":1529,"す":-675,"せ":300,"そ":-1011,"た":188,"だ":1837,"つ":-949,"て":-291,"で":-268,"と":-981,"ど":1273,"な":1063,"に":-1764,"の":130,"は":-409,"ひ":-1273,"べ":1261,"ま":600,"も":-1263,"や":-402,"よ":1639,"り":-579,"る":-694,"れ":571,"を":-2516,"ん":2095,"ア":-587,"カ":306,"キ":568,"ッ":831,"三":-758,"不":-2150,"世":-302,"中":-968,"主":-861,"事":492,"人":-123,"会":978,"保":362,"入":548,"初":-3025,"副":-1566,"北":-3414,"区":-422,"大":-1769,"天":-865,"太":-483,"子":-1519,"学":760,"実":1023,"小":-2009,"市":-813,"年":-1060,"強":1067,"手":-1519,"揺":-1033,"政":1522,"文":-1355,"新":-1682,"日":-1815,"明":-1462,"最":-630,"朝":-1843,"本":-1650,"東":-931,"果":-665,"次":-2378,"民":-180,"気":-1740,"理":752,"発":529,"目":-1584,"相":-242,"県":-1165,"立":-763,"第":810,"米":509,"自":-1353,"行":838,"西":-744,"見":-3874,"調":1010,"議":1198,"込":3041,"開":1758,"間":-1257,"「":-645,"」":3145,"ッ":831,"ア":-587,"カ":306,"キ":568},this.UW3__={",":4889,1:-800,"−":-1723,"、":4889,"々":-2311,"〇":5827,"」":2670,"〓":-3573,"あ":-2696,"い":1006,"う":2342,"え":1983,"お":-4864,"か":-1163,"が":3271,"く":1004,"け":388,"げ":401,"こ":-3552,"ご":-3116,"さ":-1058,"し":-395,"す":584,"せ":3685,"そ":-5228,"た":842,"ち":-521,"っ":-1444,"つ":-1081,"て":6167,"で":2318,"と":1691,"ど":-899,"な":-2788,"に":2745,"の":4056,"は":4555,"ひ":-2171,"ふ":-1798,"へ":1199,"ほ":-5516,"ま":-4384,"み":-120,"め":1205,"も":2323,"や":-788,"よ":-202,"ら":727,"り":649,"る":5905,"れ":2773,"わ":-1207,"を":6620,"ん":-518,"ア":551,"グ":1319,"ス":874,"ッ":-1350,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278,"・":-3794,"一":-1619,"下":-1759,"世":-2087,"両":3815,"中":653,"主":-758,"予":-1193,"二":974,"人":2742,"今":792,"他":1889,"以":-1368,"低":811,"何":4265,"作":-361,"保":-2439,"元":4858,"党":3593,"全":1574,"公":-3030,"六":755,"共":-1880,"円":5807,"再":3095,"分":457,"初":2475,"別":1129,"前":2286,"副":4437,"力":365,"動":-949,"務":-1872,"化":1327,"北":-1038,"区":4646,"千":-2309,"午":-783,"協":-1006,"口":483,"右":1233,"各":3588,"合":-241,"同":3906,"和":-837,"員":4513,"国":642,"型":1389,"場":1219,"外":-241,"妻":2016,"学":-1356,"安":-423,"実":-1008,"家":1078,"小":-513,"少":-3102,"州":1155,"市":3197,"平":-1804,"年":2416,"広":-1030,"府":1605,"度":1452,"建":-2352,"当":-3885,"得":1905,"思":-1291,"性":1822,"戸":-488,"指":-3973,"政":-2013,"教":-1479,"数":3222,"文":-1489,"新":1764,"日":2099,"旧":5792,"昨":-661,"時":-1248,"曜":-951,"最":-937,"月":4125,"期":360,"李":3094,"村":364,"東":-805,"核":5156,"森":2438,"業":484,"氏":2613,"民":-1694,"決":-1073,"法":1868,"海":-495,"無":979,"物":461,"特":-3850,"生":-273,"用":914,"町":1215,"的":7313,"直":-1835,"省":792,"県":6293,"知":-1528,"私":4231,"税":401,"立":-960,"第":1201,"米":7767,"系":3066,"約":3663,"級":1384,"統":-4229,"総":1163,"線":1255,"者":6457,"能":725,"自":-2869,"英":785,"見":1044,"調":-562,"財":-733,"費":1777,"車":1835,"軍":1375,"込":-1504,"通":-1136,"選":-681,"郎":1026,"郡":4404,"部":1200,"金":2163,"長":421,"開":-1432,"間":1302,"関":-1282,"雨":2009,"電":-1045,"非":2066,"駅":1620,"1":-800,"」":2670,"・":-3794,"ッ":-1350,"ア":551,"グ":1319,"ス":874,"ト":521,"ム":1109,"ル":1591,"ロ":2201,"ン":278},this.UW4__={",":3930,".":3508,"―":-4841,"、":3930,"。":3508,"〇":4999,"「":1895,"」":3798,"〓":-5156,"あ":4752,"い":-3435,"う":-640,"え":-2514,"お":2405,"か":530,"が":6006,"き":-4482,"ぎ":-3821,"く":-3788,"け":-4376,"げ":-4734,"こ":2255,"ご":1979,"さ":2864,"し":-843,"じ":-2506,"す":-731,"ず":1251,"せ":181,"そ":4091,"た":5034,"だ":5408,"ち":-3654,"っ":-5882,"つ":-1659,"て":3994,"で":7410,"と":4547,"な":5433,"に":6499,"ぬ":1853,"ね":1413,"の":7396,"は":8578,"ば":1940,"ひ":4249,"び":-4134,"ふ":1345,"へ":6665,"べ":-744,"ほ":1464,"ま":1051,"み":-2082,"む":-882,"め":-5046,"も":4169,"ゃ":-2666,"や":2795,"ょ":-1544,"よ":3351,"ら":-2922,"り":-9726,"る":-14896,"れ":-2613,"ろ":-4570,"わ":-1783,"を":13150,"ん":-2352,"カ":2145,"コ":1789,"セ":1287,"ッ":-724,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637,"・":-4371,"ー":-11870,"一":-2069,"中":2210,"予":782,"事":-190,"井":-1768,"人":1036,"以":544,"会":950,"体":-1286,"作":530,"側":4292,"先":601,"党":-2006,"共":-1212,"内":584,"円":788,"初":1347,"前":1623,"副":3879,"力":-302,"動":-740,"務":-2715,"化":776,"区":4517,"協":1013,"参":1555,"合":-1834,"和":-681,"員":-910,"器":-851,"回":1500,"国":-619,"園":-1200,"地":866,"場":-1410,"塁":-2094,"士":-1413,"多":1067,"大":571,"子":-4802,"学":-1397,"定":-1057,"寺":-809,"小":1910,"屋":-1328,"山":-1500,"島":-2056,"川":-2667,"市":2771,"年":374,"庁":-4556,"後":456,"性":553,"感":916,"所":-1566,"支":856,"改":787,"政":2182,"教":704,"文":522,"方":-856,"日":1798,"時":1829,"最":845,"月":-9066,"木":-485,"来":-442,"校":-360,"業":-1043,"氏":5388,"民":-2716,"気":-910,"沢":-939,"済":-543,"物":-735,"率":672,"球":-1267,"生":-1286,"産":-1101,"田":-2900,"町":1826,"的":2586,"目":922,"省":-3485,"県":2997,"空":-867,"立":-2112,"第":788,"米":2937,"系":786,"約":2171,"経":1146,"統":-1169,"総":940,"線":-994,"署":749,"者":2145,"能":-730,"般":-852,"行":-792,"規":792,"警":-1184,"議":-244,"谷":-1e3,"賞":730,"車":-1481,"軍":1158,"輪":-1433,"込":-3370,"近":929,"道":-1291,"選":2596,"郎":-4866,"都":1192,"野":-1100,"銀":-2213,"長":357,"間":-2344,"院":-2297,"際":-2604,"電":-878,"領":-1659,"題":-792,"館":-1984,"首":1749,"高":2120,"「":1895,"」":3798,"・":-4371,"ッ":-724,"ー":-11870,"カ":2145,"コ":1789,"セ":1287,"ト":-403,"メ":-1635,"ラ":-881,"リ":-541,"ル":-856,"ン":-3637},this.UW5__={",":465,".":-299,1:-514,E2:-32768,"]":-2762,"、":465,"。":-299,"「":363,"あ":1655,"い":331,"う":-503,"え":1199,"お":527,"か":647,"が":-421,"き":1624,"ぎ":1971,"く":312,"げ":-983,"さ":-1537,"し":-1371,"す":-852,"だ":-1186,"ち":1093,"っ":52,"つ":921,"て":-18,"で":-850,"と":-127,"ど":1682,"な":-787,"に":-1224,"の":-635,"は":-578,"べ":1001,"み":502,"め":865,"ゃ":3350,"ょ":854,"り":-208,"る":429,"れ":504,"わ":419,"を":-1264,"ん":327,"イ":241,"ル":451,"ン":-343,"中":-871,"京":722,"会":-1153,"党":-654,"務":3519,"区":-901,"告":848,"員":2104,"大":-1296,"学":-548,"定":1785,"嵐":-1304,"市":-2991,"席":921,"年":1763,"思":872,"所":-814,"挙":1618,"新":-1682,"日":218,"月":-4353,"査":932,"格":1356,"機":-1508,"氏":-1347,"田":240,"町":-3912,"的":-3149,"相":1319,"省":-1052,"県":-4003,"研":-997,"社":-278,"空":-813,"統":1955,"者":-2233,"表":663,"語":-1073,"議":1219,"選":-1018,"郎":-368,"長":786,"間":1191,"題":2368,"館":-689,"1":-514,"E2":-32768,"「":363,"イ":241,"ル":451,"ン":-343},this.UW6__={",":227,".":808,1:-270,E1:306,"、":227,"。":808,"あ":-307,"う":189,"か":241,"が":-73,"く":-121,"こ":-200,"じ":1782,"す":383,"た":-428,"っ":573,"て":-1014,"で":101,"と":-105,"な":-253,"に":-149,"の":-417,"は":-236,"も":-206,"り":187,"る":-135,"を":195,"ル":-673,"ン":-496,"一":-277,"中":201,"件":-800,"会":624,"前":302,"区":1792,"員":-1212,"委":798,"学":-960,"市":887,"広":-695,"後":535,"業":-697,"相":753,"社":-507,"福":974,"空":-822,"者":1811,"連":463,"郎":1082,"1":-270,"E1":306,"ル":-673,"ン":-496},this}t.prototype.ctype_=function(_){for(var t in this.chartype_)if(_.match(this.chartype_[t][0]))return this.chartype_[t][1];return"O"},t.prototype.ts_=function(_){return _||0},t.prototype.segment=function(_){if(null==_||null==_||""==_)return[];var t=[],H=["B3","B2","B1"],s=["O","O","O"],h=_.split("");for(K=0;K<h.length;++K)H.push(h[K]),s.push(this.ctype_(h[K]));H.push("E1"),H.push("E2"),H.push("E3"),s.push("O"),s.push("O"),s.push("O");for(var i=H[3],I="U",O="U",B="U",K=4;K<H.length-3;++K){var M=this.BIAS__,U=H[K-3],e=H[K-2],r=H[K-1],n=H[K],A=H[K+1],p=H[K+2],u=s[K-3],C=s[K-2],W=s[K-1],T=s[K],o=s[K+1],Q=s[K+2];M+=this.ts_(this.UP1__[I]),M+=this.ts_(this.UP2__[O]),M+=this.ts_(this.UP3__[B]),M+=this.ts_(this.BP1__[I+O]),M+=this.ts_(this.BP2__[O+B]),M+=this.ts_(this.UW1__[U]),M+=this.ts_(this.UW2__[e]),M+=this.ts_(this.UW3__[r]),M+=this.ts_(this.UW4__[n]),M+=this.ts_(this.UW5__[A]),M+=this.ts_(this.UW6__[p]),M+=this.ts_(this.BW1__[e+r]),M+=this.ts_(this.BW2__[r+n]),M+=this.ts_(this.BW3__[n+A]),M+=this.ts_(this.TW1__[U+e+r]),M+=this.ts_(this.TW2__[e+r+n]),M+=this.ts_(this.TW3__[r+n+A]),M+=this.ts_(this.TW4__[n+A+p]),M+=this.ts_(this.UC1__[u]),M+=this.ts_(this.UC2__[C]),M+=this.ts_(this.UC3__[W]),M+=this.ts_(this.UC4__[T]),M+=this.ts_(this.UC5__[o]),M+=this.ts_(this.UC6__[Q]),M+=this.ts_(this.BC1__[C+W]),M+=this.ts_(this.BC2__[W+T]),M+=this.ts_(this.BC3__[T+o]),M+=this.ts_(this.TC1__[u+C+W]),M+=this.ts_(this.TC2__[C+W+T]),M+=this.ts_(this.TC3__[W+T+o]),M+=this.ts_(this.TC4__[T+o+Q]),M+=this.ts_(this.UQ1__[I+u]),M+=this.ts_(this.UQ2__[O+C]),M+=this.ts_(this.UQ3__[B+W]),M+=this.ts_(this.BQ1__[O+C+W]),M+=this.ts_(this.BQ2__[O+W+T]),M+=this.ts_(this.BQ3__[B+C+W]),M+=this.ts_(this.BQ4__[B+W+T]),M+=this.ts_(this.TQ1__[O+u+C+W]),M+=this.ts_(this.TQ2__[O+C+W+T]),M+=this.ts_(this.TQ3__[B+u+C+W]);var N="O";0<(M+=this.ts_(this.TQ4__[B+C+W+T]))&&(t.push(i),i="",N="B"),I=O,O=B,B=N,i+=H[K]}return t.push(i),t},_.TinySegmenter=t}});
\ No newline at end of file
diff --git a/assets/javascripts/lunr/wordcut.js b/assets/javascripts/lunr/wordcut.js
new file mode 100644
index 0000000..179792a
--- /dev/null
+++ b/assets/javascripts/lunr/wordcut.js
@@ -0,0 +1 @@
+!function(n){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var t;((t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).lunr||(t.lunr={})).wordcut=n()}}(function(){return function o(s,a,c){function u(e,n){if(!a[e]){if(!s[e]){var t="function"==typeof require&&require;if(!n&&t)return t(e,!0);if(l)return l(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[e]={exports:{}};s[e][0].call(i.exports,function(n){var t=s[e][1][n];return u(t||n)},i,i.exports,o,s,a,c)}return a[e].exports}for(var l="function"==typeof require&&require,n=0;n<c.length;n++)u(c[n]);return u}({1:[function(n,t,e){var r=n("underscore"),i={creators:null,current:null,tag:null,init:function(){this.creators=[],this.current=[],this.tag={}},reset:function(){this.current=[],this.tag={}},transit:function(n){var e=this;e.creators.forEach(function(n){var t=n.createAcceptor(e.tag);t&&e.current.push(t)});var t=[];e.tag={};for(var r=0;r<e.current.length;r++){var i=e.current[r].transit(n);i.isError||(t.push(i),e.tag[i.tag]=i)}e.current=t},getFinalAcceptors:function(){return this.current.filter(function(n){return n.isFinal})}};t.exports=function(){var n=r.clone(i);return n.init(),n}},{underscore:25}],2:[function(t,e,n){(function(o){var s=t("path"),n=(t("glob"),{init:function(n,t,e){t=t||!1,defaultDict=s.normalize(o+"/..")+"/data/tdict-*.txt",this.dict=[];var r=void 0!==n,i=t||!r?[defaultDict]:[];n=n||defaultDict;r&&(Array.isArray(n)?i.concat.apply(i,n):i.push(n)),this.addFiles(i,!1),void 0!==e&&this.addWords(e,!1),this.finalizeDict()},addWords:function(n,t){t=void 0===t||t,this.dict.push.apply(this.dict,n),t&&this.finalizeDict()},finalizeDict:function(){this.dict=this.sortuniq(this.dict)},addFiles:function(n,t){t=void 0===t||t;for(var e=0;e<1;e++)words="ก.ก.\nก.ก.น.\nก.ข.ค.\nก.ค.\nก.จ.\nก.ช.น.\nก.ฌ.\nก.ต.\nก.ต.ง.\nก.ต.ช.\nก.ตร.\nก.ท.\nก.น.ช.\nก.บช.\nก.บถ.\nก.ป.ส.\nก.พ.\nก.ม.\nก.ย.\nก.ร.\nก.ล.ต.\nก.ว.\nก.ศ.ว.\nก.ส.ท.\nก.ส.ธ.\nก.ส.อ.\nก.อ.\nกก.ตชด.\nกก.ตร.น.\nกก.ภ.จว.\nกก.รสช.\nกกบ.ขส.ทบ.\nกกล.รพน.\nกง.กห.\nกง.ทบ.\nกง.ทร.\nกซข.ป.\nกซม.ป.\nกทม.กรุงเทพมหานคร\nกบ.ทบ.\nกป.สป.\nกพ.ทบ.\nกพ.ทร.\nกพ.ทหาร\nกร.ทบ.\nกรป.กลาง\nกรอ.พอ.\nกศ.ด.\nกศ.บ.\nกศ.บป.\nกศ.ม.\nกษ.ด.\nกษ.บ.\nกษ.ม.\nกส.ด.\nกส.ทบ.\nกส.บ.\nกส.ม.\nกอ.ปค.\nกอ.รพน.\nกอ.รมน.\nกอ.รสต.\nข.ต.ว.\nขว.ทบ.\nขว.ทร.\nขว.ทหาร\nขส.ทบ.\nขส.ทร.\nขส.ทอ.\nค.ด.\nค.บ.\nค.พ.ศ.\nค.ม.\nค.ร.น.\nค.ร.ฟ.\nค.ร.ม.\nค.ศ.\nค.อ.ด.\nค.อ.บ.\nค.อ.ม.\nคศ.ด.\nคศ.บ.\nคศ.ม.\nง.ด.\nจ.จ.\nจ.จ.จ.\nจ.ช.\nจ.ต.\nจ.ท.\nจ.ป.ร.\nจ.ม.\nจ.ศ.\nจ.ส.ต.\nจ.ส.ท.\nจ.ส.อ.\nจ.อ.\nจ.อ.ร.\nจ.๑๘\nจก.ธน.\nจก.สน.\nช.ค.\nช.ค.บ.\nช.พ.ค.\nช.ส.\nช.ส.ค.\nฌ.ป.ค.\nฌ.ศ.ร.\nฌ.ส.อ.\nฐท.สห.\nด.ช.\nด.ญ.\nด.ต.\nด.ศ.ค.\nด.ศ.ร.\nดย.ทร.\nต.ก.\nต.ค.\nต.จ.\nต.จ.ว.\nต.ช.\nต.ต.\nต.บ.\nต.ม.\nต.ร.\nต.ศ.ร.\nต.ห.\nต.อ.\nต.อ.จ.\nตร.กม.\nตร.ซม.\nตร.ต.\nตร.ทล.\nตร.น.\nตร.ปม.\nตร.ภ.\nตร.ม.\nตร.รฟ.\nตร.ว.\nตร.ส.\nตร.สข.\nท.จ.\nท.จ.ว.\nท.ช.\nท.ญ.\nท.ด.\nท.ท.ท.\nท.ทบ.\nท.บ.\nท.พ.\nท.ม.\nท.ศ.\nทก.ด.\nทก.บ.\nทก.ม.\nทส.ปช.\nทส.รมว.กห.\nทุ.ส.นิ.ม.\nธ.ก.ส.\nธ.ค.\nธ.ญ\nธ.บ.\nน.ช.\nน.ญ.\nน.ด.\nน.ต.\nน.ท.\nน.น.\nน.บ.\nน.บ.ท.\nน.ป.ท.\nน.พ.\nน.ม.\nน.ร.\nน.ว.\nน.ศ.\nน.ส.\nน.ส.พ.\nน.ส.๓\nน.สพ.\nน.อ.\nนปพ.ภ.\nนศ.ด.\nนศ.บ.\nนศ.ม.\nบ.ก.\nบ.ข.ส.\nบ.ช.\nบ.ด.ท.\nบ.ตร.\nบ.ภ.\nบ.ม.\nบก.จร.\nบก.ตชด.\nบก.ตม.\nบก.ทล.\nบก.น.\nบก.ป.\nบก.ปค.\nบก.ปม.\nบก.ภ.เขต\nบก.รน.\nบก.รฟ.\nบก.ร้อย.ตชด.\nบก.ส.\nบกข.ป.\nบจพ.ป.\nบช.ก.\nบช.ด.\nบช.ตชด.\nบช.น.\nบช.บ.\nบช.ปส.\nบช.ภ.\nบช.ม.\nบชท.ป.\nบชน.ป.\nบชส.ป.\nบธ.ด.\nบธ.บ.\nบธ.ม.\nบนท.ป.\nบนอ.ป.\nบปช.ป.\nป.กท.\nป.กศ.\nป.กศ.สูง\nป.จ.\nป.จ.ว.\nป.ช.\nป.ธ.\nป.ป.\nป.ป.ก.\nป.ป.ช.\nป.ป.ป.\nป.ป.ร.\nป.ป.ส.\nป.พ.\nป.พ.พ.\nป.พย.\nป.ม.\nป.ม.ก.\nป.ม.ช.\nป.ม.ธ.\nป.ม.ศ.\nป.ม.อ.\nป.ร.ร.๔\nป.ร.ร.๕\nป.ร.ร.๖\nป.ล.\nป.ว.พ.\nป.วิ.อ.\nป.ส.ส.\nป.อ.\nป.อ.ร.ส.\nป.๑\nปม.วส.\nปอ.พ.\nผกก.ภ.\nผช.ผอ.\nผต.มท.\nผบ.ตร.\nผบ.ทบ.\nผบ.ทร.\nผบ.ทสส.\nผบ.ทอ.\nผบก.น.\nผบก.ป.\nผบก.ปค.\nผบก.ปม.\nผบก.ภ.\nผบช.ก.\nผบช.ตชด.\nผบช.น.\nผบช.ภ.\nผว.กทม.\nผอ.ปจ.\nพ.ก.ง.\nพ.กศ.\nพ.ข.ต.\nพ.ค.\nพ.ค.ช.\nพ.ค.ว.\nพ.ค.ศ.\nพ.จ.ต.\nพ.จ.ท.\nพ.จ.อ.\nพ.ช.\nพ.ช.ค.\nพ.ด.\nพ.ต.\nพ.ต.ต.\nพ.ต.ท.\nพ.ต.อ.\nพ.ต.อ.พิเศษ\nพ.ท.\nพ.บ.\nพ.ป.\nพ.ภ.ม.\nพ.ม.\nพ.ม.ช.\nพ.ย.\nพ.ร.ก.\nพ.ร.ฎ.\nพ.ร.ต.\nพ.ร.ธ.\nพ.ร.บ.\nพ.ศ.\nพ.ศ.บ.\nพ.ส.ร.\nพ.ส.ล.\nพ.อ.\nพ.อ.ต.\nพ.อ.ท.\nพ.อ.พิเศษ\nพ.อ.อ.\nพณ.ด.\nพณ.บ.\nพณ.ม.\nพธ.ด.\nพธ.บ.\nพธ.ม.\nพบ.ด.\nพบ.บ.\nพบ.ม.\nพย.ด.\nพย.บ.\nพย.ม.\nพล.จ.\nพล.ต.\nพล.ต.จ.\nพล.ต.ต.\nพล.ต.ท.\nพล.ต.อ.\nพล.ท.\nพล.ปตอ.\nพล.ม.\nพล.ม.๒\nพล.ร.จ.\nพล.ร.ต.\nพล.ร.ท.\nพล.ร.อ.\nพล.อ.\nพล.อ.จ.\nพล.อ.ต.\nพล.อ.ท.\nพล.อ.อ.\nพลา.ทร.\nพศ.ด.\nพศ.บ.\nพศ.ม.\nพอ.สว.\nภ.ง.ด.\nภ.ง.ด.๙\nภ.ด.\nภ.บ.\nภ.บ.ท.๕\nภ.ป.ร.\nภ.พ.\nภ.ม.\nภ.สถ.บ.\nม.ค.\nม.จ.\nม.ป.ท.\nม.ป.ป.\nม.ป.พ.\nม.ร.ว.\nม.ศ.\nม.อ.\nม.อ.ปัตตานี\nมิ.ย.\nมี.ค.\nยศ.ทบ.\nยศ.ทร.\nยศ.ทอ.\nร.ง.\nร.ด.\nร.ต.\nร.ต.ต.\nร.ต.ท.\nร.ต.อ.\nร.ท.\nร.น.\nร.บ.\nร.พ.\nร.ฟ.ล.\nร.ย.ล.\nร.ย.ส.ท.\nร.ล.\nร.ศ.\nร.ส.พ.\nร.อ.\nรป.ม.\nรร.จปร.\nรร.จอ.\nรร.ชท.\nรร.ตท.\nรร.นร.\nรร.นรต.\nรร.นอ.\nล.ญ.\nล.ว.\nลส.ชบ.\nว.ค.\nว.ฉ.\nว.ช.\nว.ด.ป.\nว.ป.ถ.\nวท.บ.\nศ.บ.\nศ.ป.ก.\nศ.ศ.ป.\nศฝร.ภ.\nศศ.บ.\nศษ.บ.\nศส.บ.\nส.ก.\nส.ก.ศ.ท.\nส.ค.\nส.ค.1\nส.ค.ร.\nส.ค.ส.\nส.ต.\nส.ต.ต.\nส.ต.ท.\nส.ต.อ.\nส.ท.\nส.ทร.\nส.ป.ช.\nส.ป.ส.ท.\nส.ป.อ.\nส.ร.\nส.ล.น.\nส.ว.\nส.ว.ท.\nส.ว.ส.ท.\nส.ส.\nส.ส.ท.\nส.ส.ร.\nส.ห.\nส.อ.\nสถ.บ.\nสนง.สสอ.\nสพ.ญ.\nสพ.บ.\nสว.จร.\nสว.ธร.\nสว.ส.\nสว.สป.\nสว.สส.\nสว.อก.\nสส.บ.\nสุ.จิ.ปุ.ลิ.\nห.ร.ม.\nอ.ก.ค.\nอ.ก.จ.\nอ.จ.\nอ.ช.พ.\nอ.ตร.\nอ.บ.\nอ.ส.ท.\nอ.ส.ม.ท.\nอ.ส.ย.\nอ.อ.ป.\nอส.รด.\nอุ.อา.ก.ส.\nฮ.จ.\nฮ.ท.\nฮ.ฝ.\nฮ.ล.\nฮ.ศ.\nเม.ย.\n\nกรีนิช\nกลันตัน\nกัลกัตตา\nกัวลาลัมเปอร์\nกัศมีร์\nกาฐมาณฑุ\nโกลกาตา\nควิเบก\nคอนเนตทิคัต\nคาบูล\nคุชราต\nคุนหมิง\nเคนตักกี\nเคนทักกี\nเคมบริดจ์\nแคชเมียร์\nแคนซัส\nแคนเบอร์รา\nแคโรไลนา\nแคลิฟอร์เนีย\nโคเปนเฮเกน\nโคลัมโบ\nโคโลราโด\nไครสต์เชิร์ช\nไคโร\nจาการ์ตา\nจำปาศักดิ์\nเจนไน\nเจนีวา\nเจ้อเจียง\nฉงชิ่ง\nเฉิงตู\nชานตง\nชิคาโก\nเชนไน\nเชอร์โนบิล\nซัปโปโร\nซานมารีโน\nซาบาห์\nซาราเยโว\nซาราวัก\nซิดนีย์\nซีอาน\nซีแอตเทิล\nซูริก\nซูริค\nเซเชลส์\nเซนได\nเซี่ยงไฮ้\nโซเฟีย\nโซล\nโซโลมอน\nไซ่ง่อน\nไซบีเรีย\nดัลลัส\nดาโคตา\nดานัง\nดีทรอยต์\nดูไบ\nเดนเวอร์\nเดลาแวร์\nเดียนเบียนฟู\nโดเวอร์\nโดฮา\nไดฟุกุ\nไดฟูกุ\nตรังกานู\nตริโปลี\nตูวาลู\nเตหะราน\nโตเกียว\nโตรอนโต\nทมิฬนาฑู\nทริโปลี\nทิเบต\nเทกซัส\nเท็กซัส\nเทนเนสซี\nเทลอาวีฟ\nแทสเมเนีย\nโทรอนโต\nไทเป\nธากา\nนางาซากิ\nนาริตะ\nนิวเจอร์ซีย์\nนิวเดลี\nนิวยอร์ก\nนิวยอร์ค\nนิวแฮมป์เชียร์\nเนบราสกา\nเนแบรสกา\nเนวาดา\nบรัสเซลส์\nบราซิเลีย\nบอมเบย์\nบอสตัน\nบังกาลอร์\nบังคาลอร์\nบูคาเรสต์\nบูดาเปสต์\nเบงกาซี\nเบนกาซี\nเบรุต\nเบลเกรด\nเบอร์ลิน\nแบกแดด\nปอยเปต\nปะลิส\nปะหัง\nปักกิ่ง\nปัญจาบ\nปัฏนา\nปารีส\nปีนัง\nเประ\nเปียงยาง\nพนมเปญ\nพระตะบอง\nพะโค\nพะสิม\nพาราณสี\nพิหารี\nเพนซิลวาเนีย\nเพนซิลเวเนีย\nฟรานซ์\nฟลอริดา\nฟิลาเดลเฟีย\nฟุกุชิมะ\nฟุกุชิมา\nฟุกุโอกะ\nฟูกูโอกะ\nแฟรงก์เฟิร์ต\nมอสโก\nมะนิลา\nมะละแหม่ง\nมัณฑะเลย์\nมัทราส\nมาดริด\nมิชิแกน\nมินนิโซตา\nมิยางิ\nมิลาน\nมิวนิก\nมิสซูรี\nมุมไบ\nเมน\nเมลเบิร์น\nเมาะตะมะ\nเมาะลำเลิง\nแมนจูเรีย\nแมนเชสเตอร์\nแมนฮัตตัน\nแมริแลนด์\nแมรีแลนด์\nแมสซาชูเซตส์\nยะไข่\nย่างกุ้ง\nยูทาห์\nยูนนาน\nเยรูซาเล็ม\nโยโกฮามา\nริยาด\nรีโอเดจาเนโร\nโรดไอแลนด์\nลอนดอน\nลอสแองเจลิส\nลาปาซ\nลาสเวกัส\nลิสบอน\nลุยเซียนา\nโลซาน\nโลซานน์\nวอชิงตัน\nวอร์ซอ\nวิสคอนซิน\nเวนิส\nเวลส์\nเวอร์จิเนีย\nเวอร์มอนต์\nเวียงจันทน์\nเวียนนา\nแวนคูเวอร์\nไวโอมิง\nสกอตแลนด์\nสก็อตแลนด์\nสตอกโฮล์ม\nสลังงอร์\nเสฉวน\nเสียมราฐ\nเสียมเรียบ\nหงสา\nหงสาวดี\nหนานไห่\nหลวงพระบาง\nหูเป่ย\nหูเป่ย์\nหูหนาน\nเหอเป่ย\nเหอเป่ย์\nเหอหนาน\nอชันตา\nอลาสกา\nอวันตี\nออริกอน\nออสโล\nอะแลสกา\nอัตตะปือ\nอัมมาน\nอัมสเตอร์ดัม\nอัสสัม\nอาบูดาบี\nอาร์คันซอ\nอินเดียนา\nอิบารากิ\nอิลลินอยส์\nอิสตันบูล\nอิสลามาบัด\nอุรุมชี\nอูลานบาตอร์\nเอดินบะระ\nเอเธนส์\nแอตแลนตา\nแอริโซนา\nแอลเจียร์\nโอคลาโฮมา\nโอค็อตสค์\nโอกินาวา\nโอซากา\nโอริสสา\nโอเรกอน\nโอไฮโอ\nไอดาโฮ\nไอโอวา\nฮอนโนลูลู\nฮานอย\nฮาเนดะ\nฮาราเร\nฮาวาย\nฮิโรชิมา\nฮุสตัน\nเฮลซิงกิ\n\nมกรา\nกุมภา\nมีนา\nเมษา\nพฤษภา\nมิถุนา\nกรกฎา\nสิงหา\nกันยา\nตุลา\nพฤศจิกา\nธันวา\nเอ\nบี\nซี\nดี\nอี\nเอฟ\nจี\nเอช\nไอ\nเจ\nเค\nแอล\nเอ็ม\nเอ็น\nโอ\nพี\nคิว\nอาร์\nเอส\nที\nยู\nวี\nดับเบิล\nดับบลิว\nเอ็กซ์\nเอ๊กซ์\nวาย\nแซด\nแอลฟา\nแอลฟ่า\nเบตา\nเบต้า\nแกมมา\nแกมม่า\nเดลตา\nเดลต้า\nโอเมกา\nโอเมก้า\nเมกะ\nกิกะ\nนาโน\nไมโคร\n\nกรรมาชน\nกรอบรูป\nกระดี๊กระด๊า\nกระบับ\nกราวนด์\nกรีน\nกรุ๊ป\nกฤษณ์\nกลาส\nก๊วน\nกษัตริยา\nกษัตริยาธิราช\nก่อนหน้า\nกะบับ\nกับดัก\nกัมมันตะ\nก๊าก\nก๋ากั่น\nกาญจน์\nกาญจนาภิเษก\nกามิกาเซ่\nการันตี\nกาหลิบ\nกิฟท์\nกิมจิ\nกีวี\nกึ๊ก\nกึ๋ย\nกุนซือ\nกุมภาพันธ์\nกู๋\nเกจิ\nเกมส์\nเกย์\nเกรด\nเกรย์\nเกสต์เฮาส์\nเก๊ะ\nเก๋ากี้\nเกิร์ล\nแกงค์\nแกรนด์\nแกสโซฮอล์\nแก๊สโซฮอล์\nโกเต็กซ์\nโกลด์\nโกะ\nโก๊ะ\nไกด์\nขั้นตอน\nเขวี้ยง\nคณาญาติ\nครัวซอง\nครัวซองต์\nคร่ำครวญ\nครีเอทีฟ\nครูเสด\nคลับ\nคลาสสิก\nคลิตอริส\nคลิป\nความหมาย\nควิก\nควีน\nคองเกรส\nคอนซูเมอร์\nคอนเซปต์\nคอนเซ็ปต์\nคอนโด\nคอนโดมิเนียม\nคอนเทนเนอร์\nคอนแทค\nคอนแท็ค\nคอนโทรล\nคอนเฟิร์ม\nคอปเตอร์\nคอมพ์\nคอมเพล็กซ์\nคอมมอนส์\nคอมเมนท์\nคอมเมนต์\nคอร์ป\nคอร์ปอเรชั่น\nคอร์รัปชัน\nคอร์รัปชั่น\nคอรัปชัน\nคอรัปชั่น\nคอร์ส\nคอลเล็กชั่น\nคอลัมน์\nคอลัมนิสต์\nคัตเอาต์\nคันคาก\nคันถธุระ\nคันธาระ\nคันยิ\nคัสตาร์ด\nคาราโอเกะ\nคีตกวี\nคีตปฏิภาณ\nคีตราชัน\nคาปูชิโน\nคามิคาเซ่\nคาเฟ่\nคาร์\nคาร์โก้\nคาราเมล\nคาแรกเตอร์\nคาแร็กเตอร์\nคาแรคเตอร์\nคาแร็คเตอร์\nคาวบอย\nคาสิโน\nคิกขุ\nคิวบิก\nคูลเลอร์\nเคบับ\nเครป\nเคลม\nเคลียร์\nเคลื่อนย้าย\nเคส\nเคอร์ฟิว\nแคชเชียร์\nแคทวอล์ค\nแคนดิเดต\nแคนตาลูป\nแคนยอน\nแคนู\nแคป\nแคมป์\nแคมปัส\nแคมเปญ\nแคร์\nแครกเกอร์\nแคร็กเกอร์\nแครอท\nแคสต์\nแคสติง\nแคสติ้ง\nโค้ก\nโค้ช\nโคโยตี\nโคโยตี้\nโครนา\nโคอะล่า\nโคอาลา\nโคอาล่า\nไคลแมกซ์\nไคลแม็กซ์\nงั้น\nง่าว\nงี้\nเง็ง\nโง่เขลา\nไง\nจตุคาม\nจ๊อกกี้\nจอหงวน\nจังโก้\nจัมโบ้\nจ๊าบ\nจารกรรม\nจารชน\nจิ๊ก\nจิ๊กโก๋\nจิ๊กซอว์\nจิตพิสัย\nจิตเภท\nจีดีพี\nจึ๊ก\nจุ๊ย\nจูน\nจูเนียร์\nเจ๊\nเจได\nเจ็ต\nเจล\nเจ๊าะแจ๊ะ\nเจี๊ยว\nแจ็กเก็ต\nแจ๊กเก็ต\nแจ็กพอต\nแจ็กพ็อต\nแจ๊กพอต\nแจ๊กพ็อต\nแจม\nแจ๊ส\nโจ๋\nฉลุย\nเฉิ่ม\nชนะเลิศ\nช็อค\nช็อต\nช็อป\nช็อปปิ้ง\nช็อปเปอร์\nชะโนด\nชัตเตอร์\nชัวร์\nชาร์จ\nชาร์ต\nชาร์ป\nชินบัญชร\nชิฟฟอน\nชีส\nชีอะห์\nเช็ก\nเช็งเม้ง\nเชฟ\nเชลียร์\nเชอร์รี่\nแชเชือน\nแช่แข็ง\nแชมป์\nแชมปิยอง\nแชมเปญ\nแชมเปี้ยน\nแชมพู\nโชว์รูม\nโชห่วย\nใช้งาน\nไชน่า\nซ้อ\nซอมบี้\nซะ\nซังเต\nซันตาคลอส\nซัพพลาย\nซัพพลายเออร์\nซัมเมอร์\nซากุระ\nซาดิสต์\nซาดิสม์\nซาตาน\nซานตาคลอส\nซาฟารี\nซาบะ\nซามูไร\nซาร์\nซาร์ดีน\nซาเล้ง\nซิง\nซิ่ง\nซิงเกิล\nซิตี\nซิตี้\nซินโดรม\nซิม\nซิ้ม\nซิมโฟนี\nซิมโฟนี่\nซิลเวอร์\nซี้\nซี้ซั้ว\nซีดาน\nซีน\nซีนีเพล็กซ์\nซีเนียร์\nซีร็อกซ์\nซีรีส์\nซีเรียส\nซีอีโอ\nซื่อบื้อ\nซุนหนี่\nซุปเปอร์\nซูชิ\nซูเปอร์\nซูม\nซูโม่\nซูเอี๋ย\nซูฮก\nเซ็กซ์\nเซ็กซี่\nเซ็กส์\nเซนเซอร์\nเซ็นเซอร์\nเซนเตอร์\nเซ็นเตอร์\nเซ็นทรัล\nเซนส์\nเซ่นไหว้\nเซฟตี้\nเซรามิก\nเซลส์\nเซลส์แมน\nเซอร์\nเซอร์ไพรส์\nเซอร์วิส\nเซาท์\nเซี้ยว\nแซ็ก\nแซกโซโฟน\nแซ็กโซโฟน\nแซนด์วิช\nแซมบ้า\nแซลมอน\nแซว\nโซเชียล\nโซน\nโซนี่\nโซลาร์\nโซโล\nโซโล่\nญาณทัสสนะ\nดยุก\nดยุค\nดร็อป\nดรัมเมเยอร์\nดรามา\nดราม่า\nดอกเตอร์\nด็อกเตอร์\nดัมพ์\nดั๊มพ์\nดาวน์\nดิกชันนารี\nดิสเครดิต\nดีกรี\nดีเจ\nดีไซน์\nดีไซน์เนอร์\nดีไซเนอร์\nดีเบต\nดีพาร์ตเมนต์\nดีพาร์ตเมนท์\nดีพาร์ทเมนต์\nดีพาร์ทเมนท์\nดีมานด์\nดีล\nดีลเลอร์\nดีเลย์\nเดชานุภาพ\nเดบิต\nเดโม\nเดย์\nเด้อ\nเดอะ\nเด๊ะ\nเดี้ยง\nเดี๊ยะ\nแดนซ์\nแดนเซอร์\nแดรี่\nโดนัท\nโดมิโน\nโดรายากิ\nไดเอ็ต\nตถตา\nตนเอง\nตรวจทาน\nตรวจสอบ\nตอกย้ำ\nต๊อง\nต่อยอด\nต่อรอง\nตะหงิด\nตังค์\nตันเถียน\nตัวตน\nตัวเอง\nตาปรือ\nต้าอ่วย\nติงต๊อง\nติ๋ม\nติ่มซำ\nติว\nติวเตอร์\nตี๋\nตื้บ\nตุ๊ก\nตุ๊กตุ๊ก\nตุ๊ด\nตุ๋ย\nตู้เซฟ\nเต๊ะ\nเตี๊ยม\nแตงกวา\nแตงโม\nแต๋ว\nโต๋เต๋\nโต๊ะจีน\nไตรมาส\nถ่ายทำ\nถูกต้อง\nทงคัตสึ\nทริป\nทรู\nทอม\nท็อป\nทอร์นาโด\nทอล์ค\nทักซิโด\nทันตกรรม\nทันตแพทยศาสตร์\nทับซ้อน\nทัวร์\nทัวร์นาเมนต์\nทัวร์นาเมนท์\nทัวริสต์\nทาเลนต์\nทาวน์\nทาวน์เฮาส์\nทำงาน\nทิป\nทิพยสมบัติ\nทิวลิป\nทีรามิสุ\nทีวี\nทูน่า\nเท็กซ์\nเทค\nเทคโน\nเทคโนแครต\nเทควันโด\nเทป\nเทรด\nเทรนด์\nเทรนเนอร์\nเทรลเลอร์\nเทรลเล่อร์\nเทเลกราฟ\nเทวบัญชา\nเทวบุตร\nเทวา\nเทวาธิราช\nเทโวโรหนะ\nเทอร์โบ\nเที่ยงคืน\nเที่ยงวัน\nเทียมทาน\nแทกติค\nแทคติค\nแทงกั๊ก\nแทงโก้\nโทมาฮอก\nโทมาฮอว์ก\nโทมาฮอว์ค\nโทร\nโทรโข่ง\nไทม์\nไทยแลนด์\nไทเฮา\nธรรมา\nธรรมาภิบาล\nธัมโม\nธีม\nธุรกรรม\nธุหร่ำ\nเธค\nนพมาศ\nนรีแพทย์\nน็อก\nน็อค\nน้องใหม่\nนอมินี\nนอร์ท\nน่ะ\nนางแบบ\nนาฏยศาลา\nนายแบบ\nนายพราน\nนินจา\nนิรันดร์\nนิว\nนิวส์\nนู้ด\nเนอะ\nเนิร์สเซอรี\nเนิร์สเซอรี่\nเนี้ยบ\nโนติส\nไนท์\nไนน์\nบรรพชน\nบร็อกโคลี\nบร็อคโคลี\nบรา\nบริกร\nบริวเวอรี่ส์\nบลอนด์\nบลูเบอร์รี\nบลูเบอร์รี่\nบ๊วย\nบอกซ์\nบ็อกซ์\nบ๊อกซ์\nบอดี้\nบอนด์\nบ๊อบ\nบอมบ์\nบ๋อย\nบอยคอต\nบอยคอตต์\nบอร์ด\nบังเกอร์\nบัตเตอร์\nบัลลาสต์\nบัส\nบาบูน\nบาร์บีคิว\nบาร์บี้\nบาลานซ์\nบิ๊ก\nบิล\nบึม\nบึ้ม\nบุญคุณ\nบุ๋น\nบุปผา\nบู๊\nบูชิโด\nบูติก\nบูติค\nบูม\nเบเกอรี่\nเบญจมบพิตร\nเบตาดีน\nเบนโตะ\nเบนโล\nเบบี้\nเบลอ\nเบอร์เกอร์\nเบอร์รี\nเบิร์ด\nเบิร์น\nแบ็กโฮ\nแบคโฮ\nแบด\nแบต\nแบนเนอร์\nแบรนด์\nแบล็ก\nแบล็ค\nไบโอ\nโบกี้\nโบตั๋น\nโบ้ย\nโบรกเกอร์\nโบรชัวร์\nโบว์\nโบว์ลิ่ง\nไบเบิล\nปฏิสัมพันธ์\nป๊อก\nปอดแหก\nป๊อป\nป๋อหลอ\nปักขคณนา\nปัจเจกชน\nปัจฉิมนิเทศ\nป๊า\nป๋า\nป่าไม้\nปาร์ตี้\nปาสกาล\nปาสคาล\nปาสเตอร์\nปิกอัพ\nปิ๊ง\nปิโตรเคมี\nปิยมิตร\nปึ้ก\nปูอัด\nเปโซ\nเป็นไง\nเปปเปอร์มินต์\nเปเปอร์\nเปราะบาง\nเป๊ะ\nเป่ายิงฉุบ\nเป่ายิ้งฉุบ\nเปียโน\nแป้ก\nแป๋ว\nแป๊ะเจี๊ยะ\nโปร\nโปรเจกต์\nโปรเจ็กต์\nโปรเจกเตอร์\nโปรเจ็กเตอร์\nโปรเจคท์\nโปรเจ็คท์\nโปรดักชั่น\nโปรดิวเซอร์\nโปรโมชั่น\nโปรโมต\nโปรโมเตอร์\nโปรโมท\nโปลิศ\nโปสเตอร์\nผลไม้\nผลักดัน\nผ้าห่ม\nผิดพลาด\nผู้นำ\nแผดเผา\nเฝอ\nพงษ์\nพริตตี้\nพรีเซนต์\nพรีเซ็นเตอร์\nพรีเมียม\nพรีเมียร์\nพฤหัส\nพล็อต\nพลาซ่า\nพลานุภาพ\nพ่อค้า\nพอเพียง\nพะเรอ\nพันธกิจ\nพันธุวิศวกรรม\nพาร์\nพาร์ตเนอร์\nพาร์ทเนอร์\nพาวเวอร์\nพาสเจอร์ไรส์\nพาสตา\nพาสต้า\nพาสปอร์ต\nพาเหรด\nพิซซ่า\nพีเรียด\nพุดดิ้ง\nพุทธภูมิ\nพุทธศตวรรษ\nพุทโธ\nพูล\nเพทนาการ\nเพนกวิน\nเพนตากอน\nเพรส\nเพรียวบาง\nเพลซ\nเพลท\nเพลย์บอย\nเพียบแปร้\nเพียว\nเพาเวอร์\nแพกเกจ\nแพ็ค\nแพตเทิร์น\nแพทเทิร์น\nแพทยสภา\nแพนงเชิญ\nแพนดา\nแพนด้า\nแพลน\nโพลล์\nโพลารอยด์\nโพสต์\nไพลิน\nฟยอร์ด\nฟรังก์\nฟรุต\nฟลอร์\nฟลุก\nฟลุค\nฟลุต\nฟลุท\nฟอยล์\nฟอร์ม\nฟันด์\nฟาวล์\nฟาสต์ฟู้ด\nฟินิกซ์\nฟิวเจอร์\nฟีด\nฟีเวอร์\nฟุตบาท\nเฟรช\nเฟรชชี่\nเฟรม\nเฟมินิสต์\nเฟส\nเฟอร์นิเจอร์\nเฟอร์รี่\nเฟิร์ม\nเฟี้ยวฟ้าว\nแฟกซ์\nแฟ็กซ์\nแฟนซี\nแฟนตาซี\nแฟ้บ\nแฟร์\nแฟรนไชส์\nแฟรี\nแฟรี่\nแฟลช\nแฟล็ต\nโฟน\nโฟม\nโฟล์ค\nไฟต์\nไฟแนนซ์\nไฟลต์\nไฟลท์\nภควัทคีตา\nภควัมบดี\nภควัมปติ\nภคันทลาพาธ\nภววิสัย\nภารตะ\nภูมิทัศน์\nม้ง\nมวลชน\nมยุราภิรมย์\nมลภาวะ\nมหภาค\nมหาอุปราชา\nมอคคา\nมอคค่า\nมอนสเตอร์\nม็อบ\nมอบตัว\nมอยส์เจอไรเซอร์\nมอลล์\nมะกัน\nมั้ง\nมัฟฟิน\nมั้ย\nม้านั่ง\nมาเฟีย\nมาม่า\nมายองเนส\nมายาคติ\nมาร์ก\nมาร์เก็ต\nมาร์เก็ตติ้ง\nมาร์ค\nมาร์จิน\nมาร์ช\nมาร์ต\nมาร์ท\nมาราธอน\nม้าหินอ่อน\nมินต์\nมินท์\nมินิ\nมิลค์\nมิวสิค\nมิสซัง\nมิสไซล์\nมิสเตอร์\nมือถือ\nมุมมอง\nเมคอัพ\nเมจิก\nเมจิค\nเมทัล\nเมเปิล\nเมาท์\nเมี่ยงคำ\nแมกกาซีน\nแม็กกาซีน\nแมคเคอเรล\nแม่ค้า\nแมชชีน\nแมชีน\nแมนชั่น\nแมมบ้า\nแมมโบ้\nโมจิ\nโมเดล\nโมเดิร์น\nโมเต็ล\nโมโนเรล\nโมหจริต\nไมค์\nไมเกรน\nยนตรกรรม\nยอมรับ\nยะเยือก\nยังไง\nยากูซ่า\nยาวี\nยิม\nยิว\nยุวทูต\nยูโทเปีย\nยูโร\nยูวี\nเยน\nเยลลี่\nเย้ว\nเยอบีรา\nเยอบีร่า\nเยอร์บีรา\nเยอร์บีร่า\nแยมโรล\nโยเกิร์ต\nโยโย่\nรวมมิตร\nร็อค\nร็อคเก็ต\nรองรับ\nรอมฎอน\nรอยัลตี้\nระโงก\nรันเวย์\nรัม\nรากหญ้า\nราชบัณฑิตยสถาน\nราชานุญาต\nราชานุสาวรีย์\nรามเทพ\nรามาธิบดี\nรามายณะ\nราเม็ง\nราเมน\nรายชื่อ\nราสเบอร์รี\nริกเตอร์\nริคเตอร์\nรีไซเคิล\nรีดไถ\nรีทัช\nรีเทิร์น\nรีไทร์\nรีแบรนด์\nรีพอร์ท\nรีโมต\nรีโมท\nรีวิว\nรีสอร์ต\nรีสอร์ท\nรีเสิร์ช\nรุมบ้า\nรุสโซ\nรูบิก\nรูบิค\nเรซิน\nเรซิ่น\nเรดิโอ\nเรต\nเรตติ้ง\nแรงใจ\nแรงดูด\nแรงผลัก\nแรลลี\nแรลลี่\nโรดแมป\nโรเนียว\nโรแมนติก\nโรแมนติค\nโรล\nโรลออน\nไรเฟิล\nล็อกเกอร์\nลอจิสติกส์\nล็อต\nล็อบบี้\nลอร์ด\nล้มเหลว\nละติน\nละอ่อน\nลาซานญ่า\nลาติน\nลาเต้\nลานีญา\nลามะ\nลิมิต\nลิมูซีน\nลิสต์\nลีก\nลีด\nลีดเดอร์\nลีเมอร์\nลีลาวดี\nลุค\nลูกชาย\nลูกสาว\nเลกเชอร์\nเลคเชอร์\nเลดี้\nเลสเบี้ยน\nเลิฟ\nแลนด์\nแล็บ\nโลโก้\nโลชั่น\nไลท์\nไลน์\nไลฟ์\nวนาราม\nวราราม\nวโรกาส\nว้อดก้า\nวอเตอร์\nวอฟเฟิล\nว้อย\nวอร์ม\nวอร์มอัพ\nวอร์รูม\nวอล์ก\nวอล์ค\nวอลซ์\nวอลนัต\nวอลนัท\nวอลล์\nว่ะ\nวันเวย์\nวัสสา\nวาซาบิ\nวาทกรรม\nวาทะ\nวานิลลา\nวานิลา\nวาฟเฟิล\nวาริชศาสตร์\nว้าว\nวัคค์\nวัจนะ\nวาไรตี้\nวิก\nวิดีโอ\nวิทย์\nวิน\nวิป\nวิปปิ้ง\nวิภัชภาค\nวิว\nวิลล์\nวิลเลจ\nวีเจ\nวีซ่า\nวีดิทัศน์\nวีน\nวีไอพี\nวืด\nเวณิกา\nเวเฟอร์\nเวสต์\nเวอร์\nเวิร์ก\nเวิร์กช็อป\nเวิร์ค\nเวิร์ลด์\nเวิลด์\nแวมไพร์\nไวกิ้ง\nไวเบรเตอร์\nไวอะกร้า\nไวอากร้า\nศากยบุตร\nศิรินทร์\nศิลปวัฒนธรรม\nศิลปากร\nศิวิไลซ์\nศึกษาศาสตร์\nสกรัม\nสกาย\nสกู๊ป\nสเกตช์\nสเก็ตช์\nสคริปต์\nสแควร์\nสงบสุข\nสจ๊วต\nสตรอเบอร์รี\nสตรอเบอรี\nสตรอว์เบอร์รี\nสตริง\nสต็อก\nสต๊อก\nสต็อค\nสต๊อค\nสตอรี\nสตาร์\nสตาร์ท\nสติกเกอร์\nสติ๊กเกอร์\nสตีล\nสตูดิโอ\nสเตชัน\nสเตชั่น\nสเตเดียม\nสเตนเลส\nสเต็ป\nสเตย์\nสเตริโอ\nสเตอริโอ\nสแตนดาร์ด\nสแตนเลส\nสโตน\nสโตร์\nสไตรค์\nสไตล์\nสถาปัตย์\nสไนเปอร์\nสปอต\nสป็อต\nสปอนเซอร์\nสปอร์ต\nสปา\nสปาย\nสปิริต\nสเปก\nสเปค\nสไปเดอร์\nสมณพราหมณ์\nสมาพันธ์\nสมิติเวช\nสโรชา\nสลัม\nสแล็ก\nสโลแกน\nสโลว์\nสไลด์\nสวีท\nสหรัฐ\nสหัชญาณ\nสหัสวรรษ\nสะกอม\nสะเด่า\nสะบึม\nสะบึมส์\nสะออน\nสังโฆ\nสะโหลสะเหล\nสันทนาการ\nสัมนา\nสามช่า\nสามแยก\nสารขัณฑ์\nสี่แยก\nสึนามิ\nสุนทรีย์\nสุริยยาตร\nสุริยยาตร์\nสุหนี่\nเสกสรรค์\nเสพติด\nเสือโคร่ง\nหงวน\nหน่อมแน้ม\nหมวย\nหมั่นโถว\nหม่านโถว\nหมายปอง\nหมิง\nหยวน\nหลวงตา\nหลวงปู่\nหลวงพี่\nหล่อฮังก้วย\nหลินจือ\nห่วย\nเห็นด้วย\nเหมย\nเห่ย\nเหี่ยวย่น\nแหม็บ\nแหวว\nโหงว\nโหงวเฮ้ง\nโหลน\nโหลยโท่ย\nไหง\nไหร่\nอพาร์ตเมนต์\nอพาร์ตเมนท์\nอพาร์ทเมนต์\nอพาร์ทเมนท์\nอมาตยาธิปไตย\nอยุติธรรม\nอริยสงฆ์\nอ่วม\nอวอร์ด\nออกแบบ\nออดิชั่น\nออดิทอเรียม\nออเดอร์\nออโต้\nออทิสติก\nอ่อนด้อย\nออฟ\nออยล์\nออร์แกน\nออร์แกนิก\nออร์แกนิค\nออร์เดอร์\nออรัล\nออสซี่\nอะ\nอัตลักษณ์\nอัตวิสัย\nอันเดอร์\nอันตรกิริยา\nอัลตรา\nอัลไซเมอร์\nอัลบัม\nอัลบั้ม\nอัลมอนด์\nอาข่า\nอาโนเนะ\nอาฟเตอร์\nอาร์ติสต์\nอาร์พีจี\nอาว์\nอาสวะ\nอิกัวนา\nอินดอร์\nอินดัสตรีส์\nอินเตอร์\nอิ่มแปร้\nอิมพีเรียล\nอิเล็กทริก\nอิเล็กทริค\nอิเลียด\nอิสรชน\nอิเหนา\nอิออน\nอีแต๋น\nอีโรติก\nอีเวนท์\nอีสต์\nอีสเตอร์\nอึ๊บ\nอึ้ม\nอึ๋ม\nอึมครึม\nอุด้ง\nอุตสาหการ\nอุเทน\nอุปการคุณ\nอุปทาน\nอุปนายก\nอุปนายิกา\nอุปสงค์\nอุปัทวเหตุ\nอุรังคธาตุ\nอูคูเลเล่\nอู้ฟู่\nเอ๋\nเอ็กซ์โป\nเอ็กซ์เพรส\nเอ็กโซเซต์\nเอ็กโซเซ่ต์\nเอเซีย\nเอ็นจีโอ\nเอ็นเตอร์เทน\nเอนทรานซ์\nเอ็นทรานซ์\nเอฟเฟ็กต์\nเอเยนต์\nเอลนีโญ\nเอสเปรสโซ\nเอสเพรสโซ\nเอ๋อ\nเอาต์\nเอาท์\nเอาท์ดอร์\nเอ๊าะ\nแอ็กชั่น\nแอ็คชั่น\nแอคทีฟ\nแอดมิชชั่น\nแอดมิสชัน\nแอนด์\nแอ๊บแบ๊ว\nแอปเปิล\nแอปเปิ้ล\nแอปพริคอท\nแอพพริคอท\nแอพริคอต\nแอร์\nแอโรบิก\nแอโรบิค\nแอลมอนด์\nแอสเตอร์\nโอเค\nโอเปอเรเตอร์\nโอเปร่า\nโอเพ่น\nโอ้ย\nโอยัวะ\nโอรสาธิราช\nโอเลี้ยง\nโอวัลติน\nโอเวอร์\nไอซ์\nไอซียู\nไอดอล\nไอเดีย\nไอติม\nฮวงจุ้ย\nฮ่องเต้\nฮองเฮา\nฮอต\nฮ็อต\nฮอตดอก\nฮ็อตด็อก\nฮันนีมูน\nฮัม\nฮัลโลวีน\nฮัลโหล\nฮากกา\nฮาร์ด\nฮาราคีรี\nฮาลาล\nฮาโลวีน\nฮิ\nฮิต\nฮิบรู\nฮิปโป\nฮิปฮอป\nฮีโร่\nฮูลาฮูป\nฮูล่าฮูป\nเฮฟวี\nเฮฟวี่\nเฮอร์ริเคน\nเฮีย\nแฮนด์\nแฮปปี้\nแฮมเบอร์เกอร์\nโฮป\nโฮม\nโฮลดิงส์\nโฮลวีต\nโฮสเตส\nไฮกุ\nไฮแจ็ค\nไฮโซ\nไฮเทค\nไฮบริด\nไฮเปอร์\nไฮไลต์\nไฮไลท์\nไฮเวย์\nไฮสคูล\nไฮเอนด์\n\nกรีซ\nกัมพูชา\nกัวเตมาลา\nกาตาร์\nกานา\nกาบอง\nกายอานา\nกินี\nเกรนาดีนส์\nเกรเนดา\nเกาหลี\nแกมเบีย\nโกตดิวัวร์\nคองโก\nคอโมโรส\nคอสตาริกา\nคาซัคสถาน\nคิตส์\nคิริบาตี\nคิริบาส\nคิวบา\nคีร์กีซสถาน\nคูเวต\nเคนยา\nเคปเวิร์ด\nเคย์แมน\nแคนาดา\nแคเมอรูน\nโครเอเชีย\nโคลอมเบีย\nจอร์เจีย\nจอร์แดน\nจาเมกา\nจิบูตี\nจีน\nชาด\nชิลี\nเช็ก\nซามัว\nซาอุ\nซิมบับเว\nซีเรีย\nซูดาน\nซูรินาเม\nเซนต์\nเซเนกัล\nเซอร์เบีย\nเซาตูเม\nเซียร์รา\nแซมเบีย\nโซมาเลีย\nโซเวียต\nไซปรัส\nญี่ปุ่น\nดารุสซาลาม\nเดนมาร์ก\nโดมินิกัน\nโดมินิกา\nตรินิแดด\nตองกา\nติมอร์\nตุรกี\nตูนิเซีย\nเติร์กเมนิสถาน\nโตโก\nโตเบโก\nไต้หวัน\nทาจิกิสถาน\nแทนซาเนีย\nนอร์เวย์\nนามิเบีย\nนาอูรู\nนิการากัว\nนิวซีแลนด์\nเนเธอร์แลนด์\nเนปาล\nเนวิส\nไนจีเรีย\nไนเจอร์\nบราซิล\nบริติช\nบริเตน\nบรูไน\nบอตสวานา\nบอสเนีย\nบังกลาเทศ\nบังคลาเทศ\nบัลแกเรีย\nบาร์บูดา\nบาร์เบโดส\nบาห์เรน\nบาฮามาส\nบิสเซา\nบุรุนดี\nบูร์กินาฟาโซ\nเบนิน\nเบลเยียม\nเบลารุส\nเบลีซ\nเบอร์มิวดา\nโบลิเวีย\nปรินซิปี\nปากีสถาน\nปานามา\nปาปัวนิวกินี\nปารากวัย\nปาเลสไตน์\nปาเลา\nเปรู\nเปอร์เซีย\nเปอร์โตริโก\nโปรตุเกส\nโปแลนด์\nฝรั่งเศส\nพม่า\nฟิจิ\nฟินแลนด์\nฟิลิปปินส์\nเฟรนช์\nภูฏาน\nภูฐาน\nมองโกเลีย\nมอนเตเนโกร\nมอนแทนา\nมอริเชียส\nมอริเตเนีย\nมอลโดวา\nมอลตา\nมัลดีฟส์\nมาเก๊า\nมาซิโดเนีย\nมาดากัสการ์\nมาร์แชลล์\nมาลาวี\nมาลี\nมาเลเซีย\nเม็กซิโก\nเมียนมาร์\nโมซัมบิก\nโมนาโก\nโมนาโค\nโมร็อกโก\nไมโครนีเซีย\nยูกันดา\nยูโกสลาเวีย\nยูเครน\nเยเมน\nเยอรมนี\nรวันดา\nรัสเซีย\nโรมาเนีย\nลักเซมเบิร์ก\nลัตเวีย\nลาว\nลิกเตนสไตน์\nลิทัวเนีย\nลิเบีย\nลีโอน\nลูเซีย\nเลโซโท\nเลบานอน\nเลสเต\nไลบีเรีย\nวาติกัน\nวานูอาตู\nวินเซนต์\nเวเนซุเอลา\nเวียดนาม\nศรีลังกา\nสเปน\nสโลวะเกีย\nสโลวัก\nสโลวีเนีย\nสวาซิแลนด์\nสวิตเซอร์แลนด์\nสวีเดน\nสหรัฐ\nสหราชอาณาจักร\nสิกขิม\nสิงคโปร์\nอเมริกา\nออสเตรเลีย\nออสเตรีย\nอันดอร์รา\nอัฟกานิสถาน\nอาเซอร์ไบจาน\nอาร์เจนตินา\nอาร์เมเนีย\nอาระเบีย\nอิเควทอเรียล\nอิตาลี\nอินเดีย\nอินโดนีเซีย\nอิรัก\nอิสราเอล\nอิหร่าน\nอียิปต์\nอุซเบกิสถาน\nอุรุกวัย\nเอกวาดอร์\nเอธิโอเปีย\nเอมิเรตส์\nเอริเทรีย\nเอลซัลวาดอร์\nเอสโตเนีย\nแองโกลา\nแอนติกา\nแอลจีเรีย\nแอลเบเนีย\nโอมาน\nไอซ์แลนด์\nไอร์แลนด์\nฮ่องกง\nฮอนดูรัส\nฮังการี\nเฮติ\nเฮอร์เซโกวีนา\n\nกระบี่\nกรุงเทพ\nกาญจนบุรี\nกาฬสินธุ์\nกำแพงเพชร\nขอนแก่น\nจันทบุรี\nฉะเชิงเทรา\nชลบุรี\nชัยนาท\nชัยภูมิ\nชุมพร\nเชียงราย\nเชียงใหม่\nตรัง\nตราด\nตาก\nนครนายก\nนครปฐม\nนครพนม\nนครราชสีมา\nนครศรีธรรมราช\nนครสวรรค์\nนนทบุรี\nนราธิวาส\nน่าน\nบึงกาฬ\nบุรีรัมย์\nปทุมธานี\nประจวบคีรีขันธ์\nปราจีนบุรี\nปัตตานี\nพะเยา\nพังงา\nพัทลุง\nพิจิตร\nพิษณุโลก\nเพชรบุรี\nเพชรบูรณ์\nแพร่\nภูเก็ต\nมหาสารคาม\nมุกดาหาร\nแม่ฮ่องสอน\nยโสธร\nยะลา\nร้อยเอ็ด\nระนอง\nระยอง\nราชบุรี\nลพบุรี\nลำปาง\nลำพูน\nเลย\nศรีสะเกษ\nสกลนคร\nสงขลา\nสตูล\nสมุทรปราการ\nสมุทรสงคราม\nสมุทรสาคร\nสระแก้ว\nสระบุรี\nสิงห์บุรี\nสุโขทัย\nสุพรรณบุรี\nสุราษฎร์\nสุราษฎร์ธานี\nสุรินทร์\nหนองคาย\nหนองบัวลำภู\nอยุธยา\nอ่างทอง\nอำนาจเจริญ\nอุดรธานี\nอุตรดิตถ์\nอุทัยธานี\nอุบลราชธานี\nกันทรลักษ์\nจตุจักร\nไชยา\nซีคอน\nดอนเมือง\nถลาง\nไทรโยค\nธนบุรี\nธัญบุรี\nบางกอก\nบางปะกง\nบางระจัน\nปะทิว\nปาย\nพญาไท\nพัฒน์พงษ์\nพัทยา\nพารากอน\nภูมิซรอล\nรัตนาธิเบศร์\nรังสิต\nลันตา\nลาดพร้าว\nวโรรส\nวิภาวดี\nสตึก\nสมุย\nสัตหีบ\nสิมิลัน\nสุขุมวิท\nสุไหง\nเสลภูมิ\nอังรีดูนังต์\nอ่างขาง\nอินทนนท์\nเอ็มโพเรียม\n\nคิวชู\nแคริบเบียน\nแคสเปียน\nดานูบ\nตะนาวศรี\nนอร์วีเจียน\nนิโคบาร์\nเนรัญชรา\nไนล์\nบอร์เนียว\nบอลติก\nเบงกอล\nปิง\nแปซิฟิก\nมะละกา\nมินดาเนา\nมิสซิสซิปปี\nเมดิเตอร์เรเนียน\nเมโสโปเตเมีย\nยมุนา\nยุโรป\nยูเรเชีย\nยูเรเซีย\nแยงซี\nแยงซีเกียง\nสแกนดิเนเวีย\nสะโตง\nสาละวิน\nสุมาตรา\nสุเอซ\nอะเมซอน\nอันดามัน\nอัลไต\nอาร์กติก\nอาหรับ\nอินโดจีน\nอิรวดี\nอิระวดี\nอีเจียน\nอุษาคเณย์\nอูราล\nเอเชีย\nเอเดรียติก\nเอเวอเรสต์\nแอตแลนติก\nแอนตาร์กติก\nแอนตาร์กติกา\nแอฟริกา\nโอลิมปัส\nไอโอเนียน\nฮวงโห\nฮอกไกโด\nฮอนชู\n\nกบิลพัสดุ์\nกุสินารา\nโกลิยะ\nโกสัมพี\nโคตรบอง\nโคตรบูรณ์\nตองอู\nทรอย\nทวารวดี\nทวาราวดี\nเทวทหะ\nไทรบุรี\nนาลันทา\nไบแซนไทน์\nปรัสเซีย\nปัลลวะ\nปาฏลีบุตร\nพุทธคยา\nมถุรา\nมายัน\nมิถิลา\nราชคฤห์\nล้านช้าง\nล้านนา\nลุมพินี\nวัชชี\nเวสาลี\nสารนาถ\nสาวัตถี\nหริภุญชัย\nอโยธยา\nออตโตมัน\nอังวะ\nอินทปัตถ์\nอุชเชนี\n\nกราฟิก\nกราฟิกส์\nกราฟิค\nกริด\nกิกะไบต์\nกูเกิล\nกูเกิ้ล\nเกตเวย์\nโกลบอล\nคลัสเตอร์\nคลาส\nคลิก\nคลิปอาร์ต\nคอนโซล\nคอนเทนต์\nคอมพิวติ้ง\nคอมไพล์\nคอมไพเลอร์\nคอมมูนิเคชั่น\nคอร์\nคีย์\nคีย์บอร์ด\nเครือข่าย\nเคอร์เซอร์\nเคอร์เนล\nแคช\nแคมฟรอก\nแคมฟร็อก\nแคร็ก\nโค้ด\nจาวา\nจีพีเอส\nชิป\nชิพ\nเชลล์\nแช็ต\nแชนเนล\nแชนแนล\nซ็อกเก็ต\nซอฟต์แวร์\nซอฟท์แวร์\nซอร์ส\nซัพพอร์ต\nซัพพอร์ท\nซีดี\nซีดีรอม\nซีเนอร์\nเซิร์ฟเวอร์\nโซลูชัน\nโซลูชั่น\nไซต์\nไซเบอร์\nทรานแซกชัน\nทรานแซกชั่น\nทรานแซ็กชัน\nทรานแซ็กชั่น\nทรานแซคชัน\nทรานแซคชั่น\nทรานแซ็คชัน\nทรานแซ็คชั่น\nทวิตเตอร์\nทวีต\nทัชแพด\nเทมเพลต\nเทอร์มินัล\nแท็ก\nแท็บ\nแทบเล็ต\nโทรจัน\nเน็ต\nเน็ตบุ๊ก\nเน็ตบุค\nเน็ตบุ๊ค\nเน็ตเวิร์ก\nเน็ตเวิร์ค\nโน้ตบุ๊ก\nโน้ตบุค\nโน้ตบุ๊ค\nดอส\nดาวน์เกรด\nดาวน์โหลด\nดิจิตอล\nดิจิทัล\nดีบั๊ก\nดีวีดี\nดีไวซ์\nเดเบียน\nเดลไฟ\nเดสก์ท็อป\nโดเมน\nไดรว์\nไดรเวอร์\nไดเรกทอรี\nไดโอด\nเทเลคอม\nบล็อกเกอร์\nบรอดแบนด์\nบราวเซอร์\nบลูทูท\nบลูทูธ\nบลูเรย์\nบั๊ก\nบัฟเฟอร์\nบิต\nบิท\nบูต\nเบราว์เซอร์\nแบนด์วิดท์\nไบต์\nไบนารี\nโปรแกรมเมอร์\nโปรเซส\nโปรเซสเซอร์\nโปรโตคอล\nพร็อกซี\nพอร์ต\nพอร์ท\nพาเนล\nพาร์ทิชัน\nพารามิเตอร์\nพาสเวิร์ด\nพิกเซล\nเพจ\nเพจเจอร์\nแพกเก็ต\nแพตช์\nแพลตฟอร์ม\nโพรเซส\nโพรเซสเซอร์\nโพรโทคอล\nไพธอน\nฟล็อปส์\nฟอนต์\nฟอร์แมต\nฟอร์เวิร์ด\nฟอรัม\nฟีเจอร์\nเฟซบุ๊ก\nเฟิร์มแวร์\nแฟล็ก\nโฟลเดอร์\nไฟร์ฟอกซ์\nไฟร์วอลล์\nไฟล์\nมอดูล\nมอนิเตอร์\nมัลติ\nมัลติทัช\nมัลติเพล็กซ์\nมัลแวร์\nมาสเตอร์\nมีเดีย\nเมนู\nเมมโมรี\nเมล\nเมาส์\nแมค\nโมดูล\nโมเด็ม\nโมบาย\nโมบายล์\nโมไบล์\nไมโครซอฟท์\nยูนิกซ์\nยูนิโคด\nยูนิโค้ด\nริงโทน\nรีเฟรช\nรีเลย์\nเราเตอร์\nเรียลไทม์\nลิงก์\nลินุกซ์\nลีนุกซ์\nลูป\nเลเยอร์\nแล็ปท็อป\nไลเซนส์\nไลบรารี\nวิกิ\nวิกิพีเดีย\nวินโดวส์\nวินโดว์ส\nเว็บ\nเวอร์ชวล\nเวอร์ชัน\nเวอร์ชั่น\nเวิร์กสเตชัน\nเวิร์กสเตชั่น\nเวิร์คสเตชัน\nเวิร์คสเตชั่น\nเวิร์ด\nเวิร์ม\nไวแมกซ์\nสกรีน\nสแกน\nสแกนเนอร์\nสแต็ก\nสนิฟเฟอร์\nสปายแวร์\nสเปซ\nสแปม\nสมาร์ท\nสล็อต\nเสิร์ช\nโหลด\nออนไลน์\nออปติก\nออปติคอล\nออปติคัล\nออฟไลน์\nออราเคิล\nอัพเกรด\nอัพเดต\nอัพโหลด\nอัปเกรด\nอัปเดต\nอัปโหลด\nอัลกอริทึม\nอาร์กิวเมนต์\nอินเตอร์เน็ต\nอินทิเกรเตอร์\nอินเทอร์เน็ต\nอินเทอร์เฟซ\nอินเทล\nอินพุต\nอินพุท\nอีเมล\nอีเมล์\nอูบุนตู\nอูบันตู\nเอนจิน\nเอ็นจิน\nเอาต์พุต\nเอาต์พุท\nเอาท์พุต\nเอาท์พุท\nแอนะล็อก\nแอนิเมชัน\nแอนิเมชั่น\nแอปพลิเคชัน\nแอปพลิเคชั่น\nแอพพลิเคชัน\nแอพพลิเคชั่น\nแอสเซมบลี\nแอสเซมเบลอร์\nโอเพน\nไอคอน\nไอซี\nไอพอด\nไอพ็อด\nไอแพด\nไอโฟน\nฮับ\nฮาร์ดดิสก์\nฮาร์ดแวร์\nแฮกเกอร์\nแฮ็กเกอร์\nแฮนด์เฮลด์\nโฮสต์\n\nกรีก\nกัณณาฑ\nกัศมีรี\nคันจิ\nคาตาคานะ\nคุชราตี\nคุรุมุขี\nซีริลลิก\nซูลู\nเซลติก\nเซิร์บ\nตากาล็อก\nเตลุคู\nเติร์ก\nทราวิฑ\nเบงกาลี\nปัญจาบี\nพินอิน\nมลยาฬัม\nมองโกล\nมาราฐี\nมาเลย์\nเม็กซิกัน\nแมนจู\nแมนดาริน\nไมถิลี\nเยอรมัน\nรัสเซียน\nสวาฮิลี\nสวิส\nสินธี\nอูรดู\nอัสสมี\nอารบิก\nอิตาเลียน\nอุยกูร์\nแอฟริกัน\nโอริยา\nไอริช\nฮันกึล\nฮินดี\nฮิรางานะ\nฮีบรู\n\nกรีนพีซ\nกรือเซะ\nกวนอิม\nกวนอู\nกัดดาฟี\nกัลยาณวัตร\nกัสสปะ\nกาลิเลโอ\nกินเนส\nกุมภกรรณ\nกูเตนเบิร์ก\nเกตส์\nเกษมณี\nโกณฑัญญะ\nขงเบ้ง\nคริสโตเฟอร์\nคองคอร์ด\nคอลเกต\nคานธี\nคาเบรียล\nคาร์ฟูร์\nคาร์สัน\nคาราบาว\nคาสิโอ\nคิริน\nคุนลุ้น\nคูโบต้า\nเครมลิน\nแคทรีนา\nโคตมะ\nโคตมี\nโคลัมบัส\nไคฟง\nไครสเลอร์\nง้อไบ๊\nจตุพร\nจ็อบส์\nจอห์น\nจิ้น\nจิม\nจิ๋ม\nจิว\nจุฬาภรณ์\nจุฬาลงกรณ์\nเจมส์\nแจ็กสัน\nโจเซฟ\nโจว\nชมัยมรุเชฐ\nชมัยมรุเชษฐ์\nชเวดากอง\nชาร์ลส์\nชินราช\nชินวัตร\nชุนชิว\nเช็ง\nเชตวัน\nเชฟรอน\nเชฟโรเลต\nเชลซี\nไชยานุชิต\nซ่ง\nซังฮี้\nซัดดัม\nซันซิล\nซัมซุง\nซัวเจ๋ง\nซินหัว\nซีซาร์\nซีแพค\nซูซาน\nซูซูกิ\nซูบารุ\nเซ็นทารา\nเซเวน\nเซเว่น\nโซฟิเทล\nโซยุซ\nโซยูซ\nณัฐวุฒิ\nดาร์ลี่\nดาวโจนส์\nดิสนีย์\nดีแทค\nดูปองท์\nเดโมแครต\nเดลล์\nเดลินิวส์\nเดวิด\nแดวู\nโดนัลด์\nโดราเอมอน\nโดเรมอน\nต๋อง\nตั๊กม้อ\nตากสิน\nตาเมือน\nตาลีบัน\nตูน\nเตมีย์\nโต๋\nโตชิบา\nโตโยต้า\nถังซัมจั๋ง\nถังซำจั๋ง\nทรพา\nทราเวล\nทรูมูฟ\nทีปังกร\nเทปโก\nเทพรัตน\nเทวทัต\nเทสโก้\nโทมัส\nไททานิก\nไททานิค\nไทยรัฐ\nธีออส\nนครินทรา\nนโปเลียน\nนพดล\nนราดูร\nนเรนทร\nนอสตราดามุส\nนาซา\nนาซ่า\nนาซี\nนาโต\nนาโต้\nนาลแก\nนิคอน\nนิโคลัส\nนิด้า\nนินเทนโด\nนิปปอน\nนิวตัน\nนิสสัน\nเนคเทค\nเนชั่น\nเนชันแนล\nเนชั่นแนล\nเนวิน\nเนสเล่\nเนสาด\nแนท\nแนสแดค\nโนเกีย\nโนเบล\nโนเวลล์\nโนโวเทล\nไนเม็กซ์\nบรอดเวย์\nบรัดเลย์\nบรู๊ซ\nบัลเมอร์\nบารัก\nบารัค\nบู๊ตึ๊ง\nเบญกาย\nเบนซ์\nเบ็นซ์\nเบนจามิน\nโบตัน\nไบโอเทค\nประชาธิปัตย์\nปวีณา\nปอเต็กตึ๊ง\nปอเต๊กตึ๊ง\nป่อเต็กตึ๊ง\nปัตตะโชติ\nปารุสก์\nปีเตอร์\nปูติน\nเป๊ปซี่\nเป้ย\nเปอร์โยต์\nเปาบุ้นจิ้น\nโปเกมอน\nโป๊ยก่าย\nพรหมทัต\nพลาโต\nพอลล่า\nพานาโซนิค\nพานาโซนิก\nพิทยานุกูล\nพิมพิสาร\nเพนแทกซ์\nเพลโต\nไพโอเนียร์\nฟรอยด์\nฟรังซิส\nฟรานซิส\nฟลอเรนซ์\nฟอร์ด\nฟิลิปส์\nฟูจิ\nแฟซ่า\nโฟร์โมสต์\nภูมิพล\nภูริทัต\nมงฟอร์ต\nมณโฑ\nมติชน\nมหิตลาธิเบศร\nมโหสถ\nมัจฉานุ\nมาร์กาเร็ต\nมาร์ติน\nมาสด้า\nมิตซูบิชิ\nมิราเคิล\nมุสโสลินี\nเม้ง\nเมจิ\nเมอร์ซีเดส\nเมอร์เซเดส\nแมกซ์เวลล์\nแมกไซไซ\nแมคอินทอช\nแมชีนเนอรี่\nโมคคัลลานะ\nโมโตโรลา\nโมโตโรล่า\nโมเนีย\nไมเคิล\nไมยราพณ์\nยโสธรา\nยะโฮวา\nยะโฮวาห์\nยามาฮ่า\nยาเวห์\nยาฮู\nยูนิเซฟ\nยูเนสโก\nยูไล\nเยโฮวาห์\nรอยเตอร์\nรอยัล\nรัชดา\nรัสปูติน\nราฟาเอล\nรามาวตาร\nราเมศวร\nราหุล\nริชาร์ด\nรีพับลิกัน\nรูนีย์\nเรนโบว์\nแรมโบ้\nโรตารี\nโรนัลโด\nโรนัลโด้\nโรบินสัน\nโรเบิร์ต\nล็อกซเล่ย์\nลิงคอล์น\nลิจฉวี\nลิไท\nลิไทย\nลินคอล์น\nลิเวอร์พูล\nเลโนโว\nเลียดก๊ก\nโลตัส\nวชิราลงกรณ์\nวลาดิเมียร์\nวอลล์สตรีท\nวาเลนไทน์\nวิกตอเรีย\nวิทยานุสรณ์\nวิทยายน\nวิมเบิลดัน\nวิลเลียม\nวีระ\nวุฒิชัย\nเวียดกง\nไวตามิลค์\nศกุนตลา\nศรีวิชัย\nศิริพงษ์\nศิริราช\nศุภชลาศัย\nสดกก๊อกธม\nสดายุ\nสตาลิน\nสตีฟ\nสแตนฟอร์ด\nสวรินทิรา\nสังกัจจายน์\nสาทิตย์\nสารีบุตร\nสิริกิติ์\nสิรินธร\nสิหิงค์\nสีวลี\nสีหนุ\nสีหมุนี\nสีหโมนี\nสุครีพ\nสุทโธทนะ\nสุเทพ\nสุนทราภรณ์\nสุนีย์\nสุรนารี\nสุรยุทธ์\nสุริยาสน์\nเส้าหลิน\nโสกราตีส\nโสภิต\nหนุมาน\nหลินฮุ่ย\nหลุยส์\nเห้งเจีย\nไหหม่า\nองคต\nองคุลิมาล\nอชาตศัตรู\nอดุลยเดช\nอพอลโล\nอริสโตเติล\nอริสมันต์\nอลิซาเบธ\nอ๋อม\nออร์คิด\nออสการ์\nอะพอลโล\nอับราฮัม\nอั้ม\nอัลกออิดะห์\nอัลคาเทล\nอัลจาซีราห์\nอัลเฟรด\nอัลเลาะห์\nอัสซุส\nอัสสชิ\nอัสสัมชัญ\nอาเซม\nอาเซ็ม\nอาเซียน\nอาฟต้า\nอาร์เซนอล\nอินทรชิต\nอินทราทิตย์\nอีซูซุ\nอีเลฟเวน\nอีเลฟเว่น\nอุณรุท\nอุบลรัตน์\nอุบาลี\nอุ๋ย\nเอกทัศน์\nเอเซอร์\nเอ็ดเวิร์ด\nเอดิสัน\nเอแบค\nเอลิซาเบธ\nเอสพลานาด\nเอสพลานาร์ด\nแอคคอร์\nแอคคอร์ด\nแองเจลิน่า\nแอตแลนติส\nแอน\nแอ๋ม\nแอมบาสซาเดอร์\nแอมบาสเดอร์\nแอมเวย์\nแอ๋ว\nโอดีสซีย์\nโอเดียน\nโอบามา\nโอรสาราม\nโอลิมเปีย\nโออิชิ\nไอน์สไตน์\nฮอนด้า\nฮอปกินส์\nฮอลลีวูด\nฮอลลีวู้ด\nฮานามิ\nฮามาส\nฮิตเลอร์\nฮิตาชิ\nฮุนเซน\nฮุนเซ็น\nฮุนได\nฮุสเซ็น\nเฮนรี\nเฮนรี่\nเฮเลน\nโฮจิมินห์\nโฮปเวลล์\nโฮเมอร์\n\nกลีเซอรีน\nกำทอน\nแกนีมีด\nครอส\nคริสตัล\nคลอโรพลาสต์\nคลอไรด์\nควอนตัม\nคอนดักเตอร์\nคอปเปอร์\nคอลลาเจน\nคอเลสเตอรอล\nคอสมิก\nคูลอมบ์\nเคอราติน\nแคโรทีน\nแคสสินี\nโครมาโทกราฟี\nไคโตซาน\nจีโนม\nจุลชีววิทยา\nชิคุนกุนยา\nซัลฟิวริก\nซัลเฟต\nซัลไฟด์\nซิงค์\nซิริอุส\nซิลิกา\nซิลิเกต\nซิลิโคน\nซีเทน\nซีเวิร์ต\nเซ็กเตอร์\nเซ็กเมนต์\nเซมิ\nโซนาร์\nไซบอร์ก\nดอปเปลอร์\nดอปเพลอร์\nไดนามิก\nไดนามิกส์\nไดนามิค\nไดนามิคส์\nไดออกไซด์\nทรานส์\nทามิฟลู\nเทฟลอน\nเทสโทสเตอโรน\nเทอร์โม\nแทนนิน\nไททัน\nไทฟอยด์\nไทรอยด์\nธาลัสซีเมีย\nเนกาตีฟ\nโนวา\nบอแรกซ์\nโบทอกซ์\nโบท็อกซ์\nไบโอติน\nปฏิยานุพันธ์\nโปรเจสเตอโรน\nพอลิเมอร์\nพันธุศาสตร์\nพัลซาร์\nพาร์กินสัน\nพาราเซตามอล\nพาราโบลา\nเพอร์ออกไซด์\nโพรเจสเทอโรน\nโพลาไรซ์\nโพลิเมอร์\nโพลีเอทิลีน\nไพรเมต\nฟลาโวนอยด์\nฟลูออเรสเซนซ์\nฟลูออไรด์\nฟอสซิล\nฟิชชัน\nฟิวชัน\nฟีโรโมน\nไฟเบอร์\nมอนอกไซด์\nมิราจ\nเมตริกซ์\nเมทริกซ์\nเมลานิน\nเมลามีน\nโมเมนตัม\nไมโตคอนเดรีย\nไมโทคอนเดรีย\nยีสต์\nยูริก\nยูเรีย\nรูมาตอยด์\nวีก้า\nเวกเตอร์\nเวก้า\nเวสิเคิล\nโวลต์\nสเกล\nสเกลาร์\nสเต็ม\nสเตียรอยด์\nสปีชีส์\nสเปิร์ม\nสัมพัทธภาพ\nสุริยจักรวาล\nออกเทน\nออโรรา\nออโรร่า\nอะคริลิก\nอะครีลิก\nอะซีติก\nอะซีโตน\nอะมิโน\nอะลูมินา\nอันโดรเมดา\nอัลคาไลน์\nอัลตราซาวด์\nอัลตราซาวนด์\nอัลลอยด์\nอินทิกรัล\nอินทิเกรต\nอีโบลา\nอีโบล่า\nเอ็กซ์โพเนนเชียล\nเอทานอล\nเอทิลีน\nเอนโทรปี\nเอสเตอร์\nเอสโตรเจน\nเอสโทรเจน\nแอนดรอยด์\nแอนแทร็กซ์\nแอมพลิจูด\nแอมโมเนียม\nแอลกอฮอลิซึม\nแอสพาร์แตม\nโอเซลทามิเวียร์\nฮับเบิล\nฮิวมัส\nไฮดรอกไซด์\nไฮดรอลิก\nไฮโดรลิก\nไฮเพอร์โบลา\n\nกงเต็ก\nกฎุมพี\nกฏ\nกฏหมาย\nกบฎ\nกราไฟต์\nก๊อปปี้\nกะทะ\nกังวาล\nกุฎฐัง\nกุฏุมพี\nฃวด\nคฑา\nคลินิค\nคลีนิก\nคลีนิค\nคาทอลิค\nคึ่นฉ่าย\nแคตตาล็อก\nโควต้า\nฅน\nจุมพฎ\nช็อคโกแลต\nแซ่ด\nดัทช์\nทนง\nทรมาณ\nทราก\nทะแยง\nทิฏฐิ\nบล็อค\nบ๊องแบ๊ว\nบัลเล่ต์\nเบรค\nแบงค์\nปรากฎ\nปัคคหะ\nปาฏิโมกข์\nปิติ\nปิรามิด\nโปรเตสแตนท์\nพนิช\nพยักเพยิด\nพริ้ว\nพลูโตเนียม\nพากษ์\nเฟิร์น\nยากี้\nเยภุยยสิกา\nรุสเซีย\nฤาษี\nล็อค\nล็อคเกอร์\nวันทยาหัตถ์\nวานิช\nวิญญาน\nวิศิษฐ์\nศรีษะ\nสเปกโทรสโคป\nสฤษฎ์\nสลิ่ม\nสัตตสดก\nสาราณียากร\nสุกี้\nสุกี้ยากี้\nสูญญากาศ\nหยอมแหยม\nหยอย\nหล่ะ\nอะดรีนาลีน\nอะหลั่ย\nอัตคัต\nอัฟริกา\nอานิสงค์\nอาฟริกา\nอิริยาบท\nอิเลคโทรนิคส์\nอีรุงตุงนัง\nอุตรายัน\nอุลตรา\nอุลตร้า\nโอกาศ\n\nกกหู\nกงการ\nกงจักร\nกฎเกณฑ์\nกฎบัตร\nกฎหมาย\nกฎหมู่\nกดขี่\nกดดัน\nก้นกบ\nก้นบึ้ง\nก้นปล่อง\nกนิษฐภคินี\nกนิษฐภาดา\nกรงเล็บ\nกรมการ\nกรมท่า\nกรมธรรม์\nกรมนา\nกรมวัง\nกรรมกร\nกรรมการ\nกรรมฐาน\nกรรมบถ\nกรรมพันธุ์\nกรรมวิธี\nกรรมสิทธิ์\nกระจกเงา\nกระจกตา\nกระจกนูน\nกระจกเว้า\nกระจอกชวา\nกระจอกเทศ\nกระจ้อยร่อย\nกระจับบก\nกระจับปิ้ง\nกระจับปี่\nกระโชกโฮกฮาก\nกระดานดำ\nกระดานหก\nกระดาษแก้ว\nกระดาษไข\nกระดาษทราย\nกระดาษสา\nกระดูกงู\nกระทาชาย\nกระเท่เร่\nกระบวนการ\nกระบองเพชร\nกระผีกริ้น\nกระยาทิพย์\nกระยาสารท\nกระยาหาร\nกระสอบทราย\nกระสุนปืน\nกระแสจิต\nกระแสน้ำ\nกระแสลม\nกรับคู่\nกรับพวง\nกรับเสภา\nกราดเกรี้ยว\nกราวรูด\nกริ่งเกรง\nกรีฑาสถาน\nกรีดกราย\nกรี๊ดกร๊าด\nกลไก\nกลบท\nกลเม็ด\nกลยุทธ์\nกลวิธี\nกลศาสตร์\nกลอักษร\nกลบเกลื่อน\nกลมกล่อม\nกลมกลืน\nกลมเกลียว\nกล้วยแขก\nกล้วยไม้\nกล่องเสียง\nกล่อมเกลา\nกล่อมเกลี้ยง\nกลัดกลุ้ม\nกลัดมัน\nกลั่นกรอง\nกลั่นแกล้ง\nกลับกลอก\nกลางคน\nกลางคัน\nกลางค่ำ\nกลางคืน\nกลางแจ้ง\nกลางแปลง\nกลางวัน\nกลาดเกลื่อน\nกล่าวขวัญ\nกล่าวโทษ\nกล่าวหา\nกล้ำกราย\nกล้ำกลืน\nกลิ้งกลอก\nกลิ้งเกลือก\nกลิ่นอาย\nกลียุค\nกวดขัน\nกวัดแกว่ง\nกวัดไกว\nกวีนิพนธ์\nก่อกวน\nก่อการ\nก่อตั้ง\nก่อสร้าง\nก่อหวอด\nก้อร่อก้อติก\nกองกลาง\nกองเกิน\nกองโจร\nกองทัพ\nกองทุน\nกองพล\nกองพัน\nกองฟอน\nกองร้อย\nกองหนุน\nกอบโกย\nกะเกณฑ์\nกะบังลม\nกักกัน\nกักขัง\nกักตัว\nกักตุน\nกัณฑ์เทศน์\nกัดฟัน\nกันชน\nกันท่า\nกันสาด\nกันเอง\nกับแกล้ม\nกับข้าว\nกับระเบิด\nกากเพชร\nกากหมู\nกาชาด\nกาญจนาภิเษก\nก้านคอ\nกาฝาก\nก้ามกราม\nกามกิจ\nกามคุณ\nกามเทพ\nกามโรค\nก้ามปู\nกายกรรม\nกายบริหาร\nกายภาพ\nกายวิภาค\nกายสิทธิ์\nก่ายกอง\nการคลัง\nการเงิน\nการบ้าน\nการเปรียญ\nการเมือง\nการเรือน\nการละเล่น\nกาลกิริยา\nกาลเทศะ\nก้าวก่าย\nก้าวร้าว\nก้าวหน้า\nกาสาวพัสตร์\nกาฬพฤกษ์\nกาฬโรค\nกำปั้น\nกำมือ\nกำแพงขาว\nกำลังใจ\nกำลังม้า\nกี่งอำเภอ\nกิจกรรม\nกิจการ\nกิจวัตร\nกิจจะลักษณะ\nกิตติคุณ\nกิตติศัพท์\nกินขาด\nกินใจ\nกินดอง\nกินโต๊ะ\nกินแบ่ง\nกินเปล่า\nกินเลี้ยง\nกินเส้น\nกินแหนง\nกิโลกรัม\nกิโลเมตร\nกิโลลิตร\nกิโลเฮิรตซ์\nกีดกัน\nกีดกั้น\nกีดขวาง\nกึกก้อง\nกึกกัก\nกึกกือ\nกึ่งกลาง\nกุกกัก\nกุ๊กกิ๊ก\nกุ้งฝอย\nกุ้งมังกร\nกุ้งแห้ง\nกุ้งเต้น\nกุ้งยิง\nกุญแจผี\nกุญแจมือ\nกุญแจเลื่อน\nกุญแจเสียง\nกุลธิดา\nกุลบุตร\nกุลสตรี\nกู้ยืม\nเก้งก้าง\nเก็บกวาด\nเก็บเกี่ยว\nเก็บงำ\nเก็บตก\nเกรงกลัว\nเกรงใจ\nเกรงขาม\nเกรียงไกร\nเกรียมกรม\nเกรี้ยวกราด\nเกล็ดเลือด\nเกลี้ยกล่อม\nเกลี้ยงเกลา\nเกลือกกลั้ว\nเกลือกกลิ้ง\nเกลื่อนกล่น\nเกลื่อนกลาด\nเกศธาตุ\nเกษตรกร\nเกษตรกรรม\nเกษตรศาสตร์\nเกษมสันต์\nเกษียรสมุทร\nเก้อเขิน\nเกาะแกะ\nเกี่ยงงอน\nเกียจคร้าน\nเกียรติคุณ\nเกียรตินิยม\nเกียรติประวัติ\nเกียรติภูมิ\nเกียรติยศ\nเกียรติศักดิ์\nเกียรติมุข\nเกี่ยวข้อง\nเกี่ยวดอง\nเกี่ยวพัน\nเกี่ยวโยง\nเกี้ยวพาน\nเกี้ยวพาราสี\nแก่แดด\nแก้ขัด\nแก้ไข\nแก้ตัว\nแก้เผ็ด\nแก้ลำ\nแกงคั่ว\nแกงจืด\nแกงบวด\nแกงป่า\nแกงเผ็ด\nแกงส้ม\nแก่งแย่ง\nแก่นแก้ว\nแก่นสาร\nแก้วตา\nแก้วหู\nแกว่งกวัด\nแกว่งไกว\nแกะรอย\nโก้เก๋\nโกรธเกรี้ยว\nโกรธขึ้ง\nไก่เขี่ย\nไก่ชน\nไก่บ้าน\nไก่ป่า\nไก่ฟ้า\nไกล่เกลี่ย\nขจัดขจาย\nขนเพชร\nขนสัตว์\nขนหนู\nขนส่ง\nขนมจีน\nขบขัน\nขบวนการ\nข่มขี่\nข่มขู่\nข่มขืน\nข่มเหง\nขมหิน\nขมิ้นชัน\nขมุบขมิบ\nขยะแขยง\nขยักขย่อน\nขยักขย้อน\nขยับขยาย\nขยับเขยื้อน\nขวดโหล\nขวยเขิน\nขวัญใจ\nขวัญตา\nขวัญอ่อน\nขวากหนาม\nขวางโลก\nของ้าว\nขอสับ\nขอขมา\nขอทาน\nขอโทษ\nขอร้อง\nขออภัย\nข้อเขียน\nข้อความ\nข้อเท็จจริง\nของกลาง\nของขวัญ\nของแข็ง\nของชำ\nของลับ\nของเล่น\nของว่าง\nของเหลว\nของไหล\nของไหว้\nข้องใจ\nข้องแวะ\nขอบข่าย\nขอบเขต\nขอบคุณ\nขอบใจ\nขอบพระคุณ\nข้อมูล\nข้อแม้\nข้อหา\nข้อสังเกต\nขัดข้อง\nขัดขืน\nขัดเขิน\nขัดจังหวะ\nขัดดอก\nขัดแตะ\nขัดยอก\nขัดแย้ง\nขัดสมาธิ\nขันหมาก\nขันอาสา\nขับขี่\nขับเคี่ยว\nขั้วโลก\nขาจร\nขาประจำ\nข้าราชการ\nข้าศึก\nข้าหลวง\nขาดแคลน\nขาดใจ\nขาดตอน\nขาดตัว\nขาดทุน\nขาดเหลือ\nขายหน้า\nข่าวกรอง\nข่าวคราว\nข่าวล่า\nข่าวลือ\nข่าวสาร\nข้าวเกรียบ\nข้าวแกง\nข้าวของ\nข้าวจี่\nข้าวเจ้า\nข้าวซอย\nข้าวต้ม\nข้าวตอก\nข้าวตัง\nข้าวแตน\nข้าวทิพย์\nข้าวบิณฑ์\nข้าวเปลือก\nข้าวโพด\nข้าวฟ่าง\nข้าวเม่า\nข้าวสวย\nข้าวสาร\nข้าวเหนียว\nข้าวหมาก\nข้าวหลาม\nขี้เกียจ\nขี้ข้า\nขี้ครอก\nขี้คร้าน\nขี้คุก\nขี้ไคล\nขี้เซา\nขีดขั้น\nขีดคร่อม\nขีดคั่น\nขีดฆ่า\nขี้ตา\nขี้ตืด\nขี้เถ้า\nขี้ทูด\nขี้ปะติ๋ว\nขี้ผึ้ง\nขี้มูก\nขี้ยา\nขี้แย\nขี้ริ้ว\nขี้เรื้อน\nขี้เล็บ\nขี้หู\nขี้หน้า\nขี้เหนียว\nขี้เหล็ก\nขี้เหร่\nขึงขัง\nขึงพืด\nขึ้งโกรธ\nขึ้นใจ\nขึ้นชื่อ\nขึ้นมือ\nขืนใจ\nขื่นขม\nขุดคุ้ย\nขุนทอง\nขุนนาง\nขุนพล\nขุนศึก\nขุนหลวง\nขูดรีด\nเข็มกลัด\nเข็มขัด\nเข้มข้น\nเข้มแข็ง\nเข้มงวด\nเข็มทิศ\nเข็มหมุด\nเข้าขา\nเข้าเค้า\nเข้าใจ\nเข้าชื่อ\nเข้าตัว\nเข้าถึง\nเข้าทรง\nเข้าท่า\nเข้าที\nเข้าเนื้อ\nเข้าเล่ม\nเขียวเสวย\nเขียวหวาน\nแขกเต้า\nแข็งกร้าว\nแข็งกล้า\nแข็งแกร่ง\nแข็งข้อ\nแข็งขัน\nแข่งขัน\nแข็งใจ\nแข็งตัว\nแข็งเมือง\nแข็งแรง\nแขวนลอย\nโขกสับ\nโขยกเขยก\nไขข้อ\nไขควง\nไขมัน\nไข่มุก\nไขว่ห้าง\nไขสันหลัง\nไขสือ\nไข่เค็ม\nไข่เยี่ยวม้า\nไข่หงส์\nไข่เหี้ย\nคงกระพัน\nคงตัว\nคงทน\nคงที่\nคชลักษณ์\nคชสาร\nคชสีห์\nคชราช\nคณิตศาสตร์\nคดเคี้ยว\nคติธรรม\nคติพจน์\nคนกลาง\nคนไข้\nคนใช้\nคนทรง\nคบไฟ\nคบเพลิง\nคบค้า\nคบคิด\nคบหา\nคมคาย\nครบครัน\nครบถ้วน\nครอบครอง\nครอบคลุม\nครอบครัว\nครอบงำ\nครอบจักรวาล\nคริสตกาล\nคริสตจักร\nคริสต์มาส\nคริสต์ศตวรรษ\nคริสต์ศักราช\nคริสตัง\nคริสเตียน\nครุกรรม\nครุภัณฑ์\nครุศาสตร์\nครุฑพ่าห์\nครุ่นคิด\nคลอเคลีย\nคล่องแคล่ว\nคล่องตัว\nคล่องมือ\nคลั่งไคล้\nคลาคล่ำ\nคลาไคล\nคลาดเคลื่อน\nคลาดแคล้ว\nคลี่คลาย\nคลึงเคล้น\nคลึงเคล้า\nคลื่นไส้\nคลื่นเหียน\nคลุกคลี\nคลุกคลาน\nคลุมเครือ\nคลุมโปง\nคลุ้มคลั่ง\nควงสว่าน\nควบคุม\nควบคู่\nควบแน่น\nควันหลง\nความคิด\nความหลัง\nความเห็น\nคอหอย\nคอห่าน\nคอแห้ง\nค่อนขอด\nค่อนแคะ\nค้อนควัก\nคั่งค้าง\nคั่งแค้น\nคัดค้าน\nคัดง้าง\nคัดท้าย\nคัดเลือก\nคันจาม\nคันฉ่อง\nคันฉาย\nคันชัก\nคันชั่ง\nคันไถ\nคันนา\nคันเร่ง\nคับขัน\nคับคั่ง\nคับแค้น\nคับแคบ\nคางทูม\nคางหมู\nค้างคืน\nค้างปี\nคาดคั้น\nคาดเชือก\nคาดโทษ\nคาดหมาย\nคานหาม\nคาบเกี่ยว\nคาบศิลา\nคาบสมุทร\nคำขาด\nคำนำ\nคิดค้น\nคืนดี\nคืนตัว\nคุกเข่า\nคุณค่า\nคุณชาย\nคุณธรรม\nคุณนาย\nคุณภาพ\nคุณลักษณะ\nคุณวุฒิ\nคุณศัพท์\nคุณสมบัติ\nคุณหญิง\nคุณากร\nคุณูปการ\nคุโณปการ\nคุมเชิง\nคุ้มกัน\nคุยเขื่อง\nคุยโต\nคุ้ยเขี่ย\nคุ้มครอง\nคู่กรณี\nคู่กัด\nคู่ขา\nคู่แข่ง\nคู่ครอง\nคู่ควร\nคู่คิด\nคู่คี่\nคู่ใจ\nคู่ชีพ\nคู่ชีวิต\nคู่บารมี\nคู่บุญ\nคู่ปรปักษ์\nคู่ปรับ\nคู่ผสม\nคู่มือ\nคู่รัก\nคู่ลำดับ\nคู่สาย\nคู่หมั้น\nคู่หู\nคู่อริ\nคู่อาฆาต\nเคมีภัณฑ์\nเคยตัว\nเคร่งขรึม\nเคร่งครัด\nเคร่งเครียด\nเครดิตฟองซิเอร์\nเครื่องกล\nเครื่องกัณฑ์\nเครื่องแกง\nเครื่องเขิน\nเครื่องครัว\nเครื่องเคียง\nเครื่องเงิน\nเครื่องจักร\nเครื่องเซ่น\nเครื่องดนตรี\nเครื่องต้น\nเครื่องทุ่นแรง\nเครื่องเทศ\nเครื่องใน\nเครื่องบิน\nเครื่องบูชา\nเครื่องแบบ\nเครื่องประดับ\nเครื่องปรุง\nเครื่องปรุงรส\nเครื่องมือ\nเครื่องยนต์\nเครื่องร่อน\nเครื่องราง\nเครื่องเรือน\nเครื่องล่าง\nเครื่องเล่น\nเครื่องสาย\nเครื่องสำอาง\nเครื่องสุกำศพ\nเครื่องหมาย\nเครือรัฐ\nเคลียคลอ\nเคลื่อนที่\nเคลื่อนไหว\nเคลือบแคลง\nเคลือบแฝง\nเคลือบฟัน\nเคว้งคว้าง\nเคหสถาน\nเค้าโครง\nเคียดแค้น\nเคี่ยวเข็ญ\nเคี้ยวเอื้อง\nเคืองขุ่น\nโคนม\nโคบาล\nโคมูตร\nโคมลอย\nโครงการ\nโครงเรื่อง\nโครงงาน\nโครงสร้าง\nโครมคราม\nโคลงเคลง\nฆ้องกระแต\nฆ้องชัย\nฆ้องวง\nฆ้องหุ่ย\nฆ้องเหม่ง\nฆ้องโหม่ง\nฆาตกร\nฆาตกรรม\nฆานประสาท\nงงงวย\nงงงัน\nงดเว้น\nงบดุล\nงบประมาณ\nงมโข่ง\nงมงาย\nง่วงงุน\nง่วงเหงา\nงอหาย\nง้องอน\nงอนง้อ\nงอมแงม\nงาช้าง\nง่าเงย\nงานการ\nง่ายดาย\nงึมงำ\nเงินเดือน\nเงินตรา\nเงินยวง\nเงียบกริบ\nเงียบเชียบ\nเงียบเหงา\nเงื่องหงอย\nเงื่อนไข\nเงื่อนงำ\nเงื่อนเวลา\nเงื้อมมือ\nแง่งอน\nจงใจ\nจงรัก\nจดจ่อ\nจดจำ\nจดหมาย\nจดหมายเหตุ\nจรจัด\nจรรยาบรรณ\nจริงจัง\nจริงใจ\nจอมขวัญ\nจอมใจ\nจอมทัพ\nจอมปลวก\nจอมพล\nจ๊ะเอ๋\nจักสาน\nจักรพรรดิ\nจักรภพ\nจักรยาน\nจักรยานยนต์\nจักรราศี\nจักรวรรดิ\nจักรวรรดินิยม\nจักรวาล\nจังหนับ\nจัดการ\nจัดจ้าน\nจัดเจน\nจัดแจง\nจัดตั้ง\nจัดสรร\nจับกุม\nจับจด\nจับเจ่า\nจ่าหน้า\nจาตุทสี\nจาตุมหาราช\nจาตุมหาราชิก\nจาตุมหาราชิกา\nจาตุรงคสันนิบาต\nจาตุรราชการ\nจานเชิง\nจานบิน\nจานผี\nจานเสียง\nจาบจ้วง\nจำเป็น\nจำพรรษา\nจำวัด\nจ้ำจี้จ้ำไช\nจำเลาะตา\nจิงโจ้น้ำ\nจิตใจ\nจิตตภาวนา\nจิตตัง\nจิตตานุปัสสนา\nจิตนิยม\nจิตบำบัด\nจิตแพทย์\nจิตวิสัย\nจิตรกร\nจิตรกรรม\nจิตรลดา\nจิตวิทยา\nจิตเวช\nจิตเวชศาสตร์\nจินตกวี\nจินตนา\nจินตนาการ\nจินตภาพ\nจุฑามณี\nจุฑามาศ\nจุฑารัตน์\nจุนเจือ\nจุ้นจ้าน\nจุลชีพ\nจุลชีวัน\nจุลชีวิน\nจุลทรรศน์\nจุลภาค\nจุลวรรค\nจุลศักราช\nจุลสาร\nจุลินทรีย์\nจุฬามณี\nจุฬาลักษณ์\nเจตคติ\nเจตจำนง\nเจตนารมณ์\nเจตภูต\nเจริญพร\nเจ้ากรม\nเจ้ากรรม\nเจ้าของ\nเจ้าขา\nเจ้าข้า\nเจ้าคณะ\nเจ้าค่ะ\nเจ้าจอม\nเจ้าชู้\nเจ้าตัว\nเจ้าถิ่น\nเจ้าท่า\nเจ้าที่\nเจ้าทุกข์\nเจ้านาย\nเจ้าเนื้อ\nเจ้าบ้าน\nเจ้าบ่าว\nเจ้าประคุณ\nเจ้าประคู้น\nเจ้าพนักงาน\nเจ้าพระคุณ\nเจ้าพระยา\nเจ้าพ่อ\nเจ้าพายุ\nเจ้าฟ้า\nเจ้าภาพ\nเจ้ามือ\nเจ้าแม่\nเจ้าเรือน\nเจ้าสังกัด\nเจ้าสัว\nเจ้าสาว\nเจ้าหน้าที่\nเจ้าหนี้\nเจ้าอาวาส\nเจาะจง\nเจือจาง\nเจือจาน\nเจือปน\nเจื้อยแจ้ว\nแจกจ่าย\nแจ่มแจ้ง\nแจ่มใส\nโจงกระเบน\nโจมตี\nโจรกรรม\nโจรสลัด\nใจความ\nใจคอ\nฉกฉวย\nฉกชิง\nฉลองได\nฉ้อฉล\nฉัตรมงคล\nฉันทลักษณ์\nฉายาลักษณ์\nฉิบหาย\nฉุกเฉิน\nฉุกละหุก\nฉุนเฉียว\nฉุปศาสตร์\nเฉไฉ\nเฉยเมย\nเฉาโฉด\nเฉิดฉัน\nเฉิดฉาย\nเฉิดฉิน\nเฉียบขาด\nเฉียบพลัน\nเฉียบแหลม\nเฉื่อยชา\nแฉะแบะ\nโฉดเฉา\nโฉมงาม\nโฉมฉาย\nโฉมเฉลา\nโฉมตรู\nโฉมยง\nโฉมศรี\nโฉมหน้า\nชดช้อย\nชดเชย\nชดใช้\nชนบท\nชนินทร์\nชนกกรรม\nชนมพรรษา\nชนมายุ\nชมเชย\nชมพูทวีป\nชมพูนท\nชมพูนุท\nชราธรรม\nชราภาพ\nชลจร\nชลธาร\nชลธี\nชลนัยน์\nชลนา\nชลเนตร\nชลประทาน\nชลมารค\nชลาธาร\nชลาลัย\nชลาศัย\nชลาสินธุ์\nชโลทร\nช่วงชิง\nช่วงใช้\nชวนชม\nชวนหัว\nช่วยเหลือ\nช่อฟ้า\nช่อม่วง\nชอกช้ำ\nช่องเขา\nช่องแคบ\nช่องไฟ\nช่องว่าง\nช้องนาง\nชอบกล\nชอบใจ\nชอบธรรม\nชอบพอ\nชักโครก\nชักเงา\nชักจูง\nชักชวน\nชักนำ\nชักเนื้อ\nชักพระ\nชักเย่อ\nชักใย\nชั่งใจ\nชังฆวิหาร\nชัดเจน\nชั้นเชิง\nชั่วคน\nชั่วคราว\nชั่วช้า\nชั่วโมง\nชั่วแล่น\nชาเย็น\nช้านาน\nช่างเครื่อง\nช่างฝีมือ\nช่างฟิต\nช่างไฟ\nช้างน้ำ\nช้างเผือก\nช้างพลาย\nช้างพัง\nช้างสาร\nช้างสีดอ\nชาติธรรม\nชาตินิยม\nชาติพันธุ์\nชาติพันธุ์วิทยา\nชาติภูมิ\nชานชาลา\nชายชาตรี\nชายคา\nชายฝั่ง\nชายทะเล\nชาวเล\nชาววัง\nช้ำใจ\nช้ำชอก\nชิงชัง\nชิงพลบ\nชินชา\nชินบุตร\nชิ้นเอก\nชิมลาง\nชีเปลือย\nชี้ขาด\nชี้แจง\nชี้นำ\nชี้แนะ\nชี้ฟ้า\nชีพจร\nชีพิตักษัย\nชื่นชม\nชื่นบาน\nชื่นมื่น\nชื่อย่อ\nชื่อรอง\nชื่อเล่น\nชื่อเสียง\nชุกชุม\nชุติมา\nชุบตัว\nชุบเลี้ยง\nชุมชน\nชุมทาง\nชุมสาย\nชุ่มใจ\nชุ่มชื่น\nชุ่มชื้น\nชุมนุมชน\nชูชีพ\nชูโรง\nชู้สาว\nเชยชม\nเชลยศักดิ์\nเชลยศึก\nเช่าซื้อ\nเช้าตรู่\nเช้ามืด\nเชิงกราน\nเชิงกล\nเชิงชั้น\nเชิงชาย\nเชิงซ้อน\nเชิงเดียว\nเชิงเดี่ยว\nเชิงตะกอน\nเชิงเทิน\nเชิงมุม\nเชิดชู\nเชิงอรรถ\nเชี่ยนหมาก\nเชี่ยวชาญ\nเชื่องช้า\nเชื่อใจ\nเชื่อถือ\nเชื่อฟัง\nเชื่อมือ\nเชื้อชาติ\nเชื้อเพลิง\nเชื้อไฟ\nเชื้อโรค\nเชื้อสาย\nเชื้อเชิญ\nเชื่องช้า\nเชือนแช\nเชื่อวัน\nแช่เย็น\nแช่อิ่ม\nแช่มช้อย\nแช่มชื่น\nโชกโชน\nโชติช่วง\nโชติรส\nใช้สอย\nซบเซา\nซมซาน\nซวนเซ\nซอกซอน\nซอกแซก\nซ่องสุม\nซ่องเสพ\nซ่องแซ่ง\nซ่อนรูป\nซ่อนเร้น\nซ่อนหา\nซ่อนกลิ่น\nซ่อนทราย\nซ่อมแซม\nซักค้าน\nซักซ้อม\nซักไซ้\nซักฟอก\nซักแห้ง\nซังกะตาย\nซังตาย\nซัดเซ\nซัดทอด\nซับซ้อน\nซับใน\nซับพระพักตร์\nซากศพ\nซ่านเซ็น\nซ้ำซ้อน\nซ้ำซาก\nซ้ำเติม\nซ้ำร้าย\nซี่โครง\nซีดเซียว\nซึมกะทือ\nซึมซาบ\nซึมเซา\nซึมทราบ\nซึมเศร้า\nซื่อตรง\nซื่อสัตย์\nซื้อขาย\nซุกซน\nซุกซ่อน\nซุบซิบ\nซู่ซ่า\nเซซัง\nเซ่อซ่า\nแซ่ซ้อง\nโซดาไฟ\nญาณทัสนะ\nญาณวิทยา\nญาณศาสตร์\nญาติกา\nฐานราก\nดกดื่น\nดงดิบ\nดลใจ\nดลบันดาล\nดวงแก้ว\nดวงใจ\nดวงเดือน\nดวงตรา\nดวงตา\nดวงสมร\nดอกจัน\nดอกจิก\nดอกบัว\nดอกเบี้ย\nดอกฟ้า\nดอกไม้\nดอกยาง\nดอกเล็บ\nดอกทอง\nดอกสร้อย\nดองยา\nดักคอ\nดักฟัง\nดังนั้น\nดังนี้\nดังหนึ่ง\nดั้งเดิม\nดัดจริต\nดัดแปลง\nดันทุรัง\nดับขันธ์\nดับจิต\nดับชีพ\nด่าทอ\nด่างทับทิม\nด่างพร้อย\nดาดฟ้า\nดาราศาสตร์\nดาลเดือด\nดาวกระจาย\nดาวเคราะห์\nดาวตก\nดาวเทียม\nดาวรุ่ง\nดาวเรือง\nดาวฤกษ์\nดาวหาง\nดาวเหนือ\nดาษดื่น\nดินขาว\nดินดาน\nดินดำ\nดินประสิว\nดินปืน\nดินระเบิด\nดินสอ\nดินสอพอง\nดิ้นรน\nดิบดี\nดีเกลือ\nดีใจ\nดีซ่าน\nดีดัก\nดีเดือด\nดีฝ่อ\nดีดดิ้น\nดึกดำบรรพ์\nดึกดื่น\nดึงดัน\nดึงดูด\nดื่มด่ำ\nดื้อด้าน\nดื้อดึง\nดื้อแพ่ง\nดื้อยา\nดื้อรั้น\nดุดัน\nดุเดือด\nดุร้าย\nดุลการค้า\nดุลพินิจ\nดุลภาค\nดุลยพินิจ\nดุลยภาพ\nดุษฎีนิพนธ์\nดุษฎีบัณฑิต\nดุษณีภาพ\nดูแคลน\nดูถูก\nดูดาย\nดูเบา\nดูแล\nดูหมิ่น\nดูเหมือน\nดูดดื่ม\nเด็ดขาด\nเด็ดดวง\nเด็ดเดี่ยว\nเดนตาย\nเดาสวด\nเดาสุ่ม\nเดินทาง\nเดินสะพัด\nเดินสาย\nเดินเหิน\nเดิมพัน\nเดียงสา\nเดียดฉันท์\nเดียวกัน\nเดียวดาย\nเดี๋ยวเดียว\nเดี๋ยวนี้\nเดือดดาล\nเดือดร้อน\nเดือนมืด\nเดือนหงาย\nแดดาล\nแดดิ้น\nแดกดัน\nโด่เด่\nโด่งดัง\nโดดเดี่ยว\nโดยสาร\nได้การ\nได้แก่\nได้ใจ\nได้ที\nได้ยิน\nได้เสีย\nตกเขียว\nตกค้าง\nตกใจ\nตกต่ำ\nตกแต่ง\nตกทอด\nตกฟาก\nตกมัน\nตกยาก\nตกลง\nตกหล่น\nต้นขั้ว\nต้นคิด\nต้นฉบับ\nต้นตอ\nต้นตำรับ\nต้นทุน\nต้นแบบ\nต้นเพลิง\nต้นมือ\nต้นไม้\nต้นร่าง\nต้นเรื่อง\nต้นสังกัด\nต้นหน\nต้นเหตุ\nตบตา\nตบแต่ง\nตบแผละ\nตบมือ\nต้มข่า\nต้มโคล้ง\nต้มยำ\nต้มส้ม\nตรมตรอม\nตรรกวิทยา\nตรรกศาสตร์\nตรวจการ\nตรวจการณ์\nตรวจตรา\nตระบัดสัตย์\nตรัสรู้\nตราตั้ง\nตราบาป\nตรายาง\nตราสาร\nตริตรอง\nตรีกฏุก\nตรีกาย\nตรีโกณ\nตรีโกณมิติ\nตรีคูณ\nตรีทูต\nตรีปิฎก\nตรีภพ\nตรีมูรติ\nตรึกตรอง\nตรึงตรา\nตรุษจีน\nตฤณชาติ\nตฤณมัย\nตลกบาตร\nตลบตะแลง\nตลบหลัง\nตลาดนัด\nตลาดน้ำ\nตลาดมืด\nตลาดสด\nต่อตี\nต่อเติม\nต่อว่า\nต่อสู้\nต่อกร\nต่อต้าน\nต่อแย้ง\nต้องการ\nต้องโทษ\nต้องหา\nต้อนรับ\nตอบโต้\nตอบแทน\nต่อยหอย\nตะพาบน้ำ\nตักตวง\nตักบาตร\nตั้งเข็ม\nตั้งไข่\nตั้งเค้า\nตั้งแง่\nตั้งใจ\nตั้งต้น\nตั้งแต่\nตั้งท้อง\nตัดขาด\nตัดใจ\nตัดเชือก\nตัดตอน\nตัดทอน\nตัดบท\nตัดพ้อ\nตัดรอน\nตัดสิน\nตับเต่า\nตับแลบ\nตับอ่อน\nตัวกลาง\nตัวการ\nตัวเก็ง\nตัวดี\nตัวตั้ง\nตัวเต็ง\nตัวถัง\nตัวแทน\nตัวประกอบ\nตัวประกัน\nตัวแปร\nตัวผู้\nตัวพิมพ์\nตัวเมีย\nตัวยืน\nตัวเลข\nตัวอย่าง\nตั๋วเงิน\nตั๋วแลกเงิน\nตากล้อง\nตาไก่\nตาข่าย\nตาชั่ง\nตาตุ่ม\nตาทวด\nตาปลา\nตาราง\nต่างหาก\nต้านทาน\nตามใจ\nตายใจ\nตายซาก\nตายด้าน\nตายตัว\nตายทั้งกลม\nตายห่า\nตายโหง\nตาลปัตร\nต่ำช้า\nต่ำต้อย\nตำส้ม\nติเตียน\nติณชาติ\nติดขัด\nติดใจ\nติดต่อ\nติดตั้ง\nติดตาม\nติดตื้น\nติดพัน\nติดลม\nติดอ่าง\nตีเกลียว\nตีขลุม\nตีความ\nตีคู่\nตีจาก\nตีตื้น\nตีแผ่\nตีรวน\nตีลังกา\nตีวง\nตีเสมอ\nตีนกา\nตีนคู้\nตีนจก\nตีนตะขาบ\nตีนผี\nตีนเหยียด\nตึกแถว\nตึกระฟ้า\nตึงเครียด\nตึงตัง\nตื้นตัน\nตื่นตัว\nตื่นตูม\nตื่นเต้น\nตุ๊ต๊ะ\nตุ้บตั้บ\nตุ้มหู\nตุลาการ\nตุลาคม\nตู้นิรภัย\nตูมตาม\nตู้เสบียง\nเตโชธาตุ\nเตร็ดเตร่\nเต้นรำ\nเตาแก๊ส\nเตาผิง\nเตาฟู่\nเตาไฟ\nเตารีด\nเตาสูบ\nเต่าทอง\nเต้ารับ\nเต้าส่วน\nเต้าเสียบ\nเต้าหู้ยี้\nแต่ละ\nแตกคอ\nแตกคอก\nแตกฉาน\nแตกดับ\nแตกตื่น\nแตกพาน\nแตกแยก\nแตกร้าว\nแตกหัก\nแต่งงาน\nแต่งตั้ง\nแต้มคู\nแต้มต่อ\nแตรงอน\nแตรเดี่ยว\nแตรฝรั่ง\nแตรฟันฟาร์\nแตรวง\nโต้ตอบ\nโต้เถียง\nโต้แย้ง\nโต๊ะหมู่\nโต๊ะอิหม่าม\nใต้ถุน\nไต้ก๋ง\nไต่คู้\nไต่เต้า\nไต่ถาม\nไต้ฝุ่น\nไตรจักร\nไตรจีวร\nไตรตรึงษ์\nไตรทวาร\nไตรปิฎก\nไตรเพท\nไตรภพ\nไตรภูมิ\nไตรภาคี\nไตรยางศ์\nไตรรงค์\nไตรรัตน์\nไตรลักษณ์\nไตรโลก\nไตรสรณคมน์\nไตรสิกขา\nไต่สวน\nถกเถียง\nถดถอย\nถนัดถนี่\nถนิมสร้อย\nถมถืด\nถมเถ\nถมไป\nถลากไถล\nถ้วนถี่\nถ้วยฟู\nถ่องแท้\nถอดถอน\nถ้อยคำ\nถ้อยแถลง\nถากถาง\nถ่านไฟฉาย\nถ่านหิน\nถามไถ่\nถ่ายทอด\nถ่ายทุกข์\nถ่ายเท\nถาวรวัตถุ\nถ้ำมอง\nถี่ถ้วน\nถึงใจ\nถูกใจ\nถูกชะตา\nเถรวาท\nเถ้าแก่\nเถ้าแก่เนี้ย\nแถมพก\nแถลงการณ์\nไถ่ถอน\nไถ่ถาม\nทดแทน\nทดรอง\nทดลอง\nทดสอบ\nทนทาน\nทนายความ\nทบทวน\nทแยงมุม\nทรงกลด\nทรงเครื่อง\nทรงเจ้า\nทรัพย์สิน\nทรามชม\nทรามเชย\nทรามวัย\nทรามสงวน\nทรามสวาท\nทรุดโทรม\nทฤษฎีบท\nท้วงติง\nท่วมท้น\nทวาทศ\nทวาทศมาส\nทวาบรยุค\nทวารบาล\nทวิบถ\nทวิบท\nทวิบาท\nทวิภาค\nทวิภาคี\nทวีคูณ\nทศกัณฐ์\nทศชาติ\nทศทิศ\nทศนิยม\nทศพร\nทศพล\nทศพิธราชธรรม\nทศมาส\nทศวรรษ\nท่อไอเสีย\nท้อถอย\nท้อแท้\nทองขาว\nทองคำ\nทองคำขาว\nทองคำเปลว\nทองเค\nทองแดง\nทองบรอนซ์\nทองม้วน\nทองย้อย\nทองสัมฤทธิ์\nทองหยอด\nทองหยิบ\nทองเหลือง\nทองเอก\nท่องเที่ยว\nท้องตรา\nท้องถิ่น\nท้องที่\nท้องน้อย\nท้องร่อง\nท้องเรื่อง\nทอดมัน\nทอดทิ้ง\nทอดน่อง\nทอดยอด\nทอดหุ่ย\nทอยกอง\nทะเบียนบ้าน\nทะเลทราย\nทะเลสาบ\nทะเลหลวง\nทักขิณาวัฏ\nทักท้วง\nทักทาย\nทักษิณาวรรต\nทักษิณาทาน\nทักษิณานุประทาน\nทั้งกลม\nทั้งคน\nทั้งดุ้น\nทั้งที\nทั้งนั้น\nทั้งนี้\nทั้งปวง\nทั้งผอง\nทั้งเพ\nทั้งมวล\nทั้งสิ้น\nทั้งหมด\nทั้งหลาย\nทัณฑ์บน\nทัดทาน\nทัดเทียม\nทันควัน\nทันใจ\nทันใด\nทันตา\nทันสมัย\nทันที\nทับถม\nทับทรวง\nทับศัพท์\nทั่วถึง\nทั่วไป\nท่าทาง\nท่าที\nท้าทาย\nทางการ\nทางข้าม\nทางด่วน\nทางเท้า\nทางโท\nทางใน\nทางผ่าน\nทางม้าลาย\nทางหลวง\nทางออก\nทางเอก\nทานกัณฑ์\nทานตะวัน\nท่านชาย\nทานบารมี\nท่านผู้หญิง\nท่านหญิง\nทาบทาม\nท้ายทอย\nทารุณกรรม\nทำคลอด\nทำใจ\nทำซ้ำ\nทำท่า\nทำที\nทำแท้ง\nทำโทษ\nทำบาป\nทำบุญ\nทำพิษ\nทำฟัน\nทำร้าย\nทำวัตร\nทำสาว\nทำเสน่ห์\nทำหมัน\nทำให้\nทิ้งขว้าง\nทิ้งทวน\nทิ้งท้าย\nทินกร\nทิพจักขุ\nทิพโสต\nทิพยจักษุ\nทิพยญาณ\nทิพยเนตร\nทิพยรส\nทิพากร\nทิ่มตำ\nทิ่มแทง\nทิวากร\nทิวากาล\nทิศทาง\nทีเด็ด\nทีท่า\nทีนี้\nทีหลัง\nทีฆนิกาย\nทีฆสระ\nที่ดิน\nที่นอน\nที่นั่ง\nที่ปรึกษา\nที่พึ่ง\nที่มั่น\nที่ราบ\nที่ว่าการ\nที่สุด\nที่หมาย\nที่ไหน\nทุกที\nทุกเมื่อ\nทุกข์สุข\nทุนทรัพย์\nทุนนิยม\nทุนรอน\nทุนสำรอง\nทุ่มเถียง\nทุ่มเท\nทูนหัว\nทูลกระหม่อม\nเทกระจาด\nเทครัว\nเทพเจ้า\nเทพดา\nเทพธิดา\nเทพนม\nเทพนิยม\nเทพนิยาย\nเทพบุตร\nเทพสังหรณ์\nเทศกาล\nเทศนาโวหาร\nเทศบัญญัติ\nเทศบาล\nเทศมนตรี\nเทห์ฟากฟ้า\nเท่ากับ\nเท่าใด\nเท่าตัว\nเท่าทัน\nเท่าทุน\nเท่าเทียม\nเท่านั้น\nเท่าไร\nเท้าช้าง\nเทิดทูน\nเที่ยงตรง\nเที่ยงแท้\nเที่ยงธรรม\nเทียนชนวน\nเทียนพรรษา\nเทียบเคียง\nเทียบเท่า\nเทือกเขา\nเทือกเถา\nแท็งก์น้ำ\nแท่นพิมพ์\nแท่นมณฑล\nแท่นหมึก\nแทรกซอน\nแทรกซ้อน\nแทรกซึม\nแทรกแซง\nแทะโลม\nไทยดำ\nไทยทาน\nไทยธรรม\nไทยน้อย\nไทยใหญ่\nธงชัย\nธงชาติ\nธงทิว\nธรณีวิทยา\nธรณีสงฆ์\nธรรมกาย\nธรรมการ\nธรรมเกษตร\nธรรมขันธ์\nธรรมคุณ\nธรรมจรรยา\nธรรมจริยา\nธรรมจักร\nธรรมจักษุ\nธรรมจาคะ\nธรรมจารี\nธรรมชาติ\nธรรมดา\nธรรมเนียม\nธรรมราชา\nธรรมศาสตร์\nธรรมสภา\nธรรมสังเวช\nธัญพืช\nธารพระกร\nธีรภาพ\nธีรราช\nนกเขา\nนกต่อ\nนกยูง\nนกรู้\nนกหวีด\nนครบาล\nนครรัฐ\nนงคราญ\nนงนุช\nนงพะงา\nนงเยาว์\nนงราม\nนงลักษณ์\nนบนอบ\nนพเก้า\nนพคุณ\nนพเคราะห์\nนพปฎล\nนพพล\nนพรัตน์\nนพศก\nนพศูล\nนมข้น\nนมผง\nนมไม้\nนมนาน\nนมหนู\nนมแมว\nนรีเวช\nนรีเวชวิทยา\nนวดฟั้น\nนวยนาด\nนวลระหง\nนวลลออ\nนวลละออง\nนวลจันทร์\nนอกครู\nนอกคอก\nนอกจาก\nนอกใจ\nนอกชาน\nนอกรีต\nนอกเหนือ\nนองเนือง\nนองเลือด\nนอนก้น\nนอนใจ\nนอบนบ\nนอนเล่น\nนอบน้อม\nน้อมนำ\nน้อยใจ\nน้อยหน้า\nนักการ\nนักการเมือง\nนักกีฬา\nนักข่าว\nนักท่องเที่ยว\nนักเทศน์\nนักโทษ\nนักธรรม\nนักบวช\nนักบิน\nนักบุญ\nนักปราชญ์\nนักพรต\nนักรบ\nนักเรียน\nนักเลง\nนักวิชาการ\nนักศึกษา\nนักสิทธิ์\nนักสืบ\nนักหนา\nนั่งเทียน\nนั่งร้าน\nนัดแนะ\nนัดหมาย\nนั่นแหละ\nนั่นเอง\nนับถือ\nนับประสา\nนัยน์ตา\nนาดำ\nนาปรัง\nนาปี\nนาสวน\nนาหว่าน\nนาคบาศ\nนาคปรก\nนาคราช\nนางกวัก\nนางกำนัล\nนางงาม\nนางใน\nนางบำเรอ\nนางแบบ\nนางพญา\nนางฟ้า\nนางไม้\nนางโลม\nนางสาว\nนางห้าม\nนางเอก\nนาฏกรรม\nนาฏดนตรี\nนาฏศิลป์\nนานนม\nน่านน้ำ\nน่านฟ้า\nนามกร\nนามธรรม\nนามไธย\nนามบัตร\nนามปากกา\nนามแฝง\nนามสกุล\nนามสงเคราะห์\nนามสมญา\nนายทะเบียน\nนายท่า\nนายท้าย\nนายทุน\nนายประกัน\nนายหน้า\nนายอำเภอ\nนารายณ์หัตถ์\nนารีผล\nนาวิกโยธิน\nนำจับ\nนำพา\nนำทาง\nนำร่อง\nนำสืบ\nนำแสดง\nน้ำกรด\nน้ำกาม\nน้ำเกลือ\nน้ำข้าว\nน้ำแข็ง\nน้ำแข็งไส\nน้ำแข็งแห้ง\nน้ำครำ\nน้ำคร่ำ\nน้ำค้าง\nน้ำค้างแข็ง\nน้ำคาวปลา\nน้ำคำ\nน้ำเค็ม\nน้ำเคย\nน้ำเงิน\nน้ำเงี้ยว\nน้ำจัณฑ์\nน้ำจิ้ม\nน้ำใจ\nน้ำเชื้อ\nน้ำเชื่อม\nน้ำซาวข้าว\nน้ำดอกไม้\nน้ำดี\nน้ำตก\nน้ำตา\nน้ำตาล\nน้ำท่า\nน้ำนม\nน้ำนวล\nน้ำบาดาล\nน้ำประสานทอง\nน้ำประปา\nน้ำปลา\nน้ำป่า\nน้ำผึ้ง\nน้ำพริก\nน้ำพริกเผา\nน้ำพี้\nน้ำพุ\nน้ำมนต์\nน้ำมนตร์\nน้ำมัน\nน้ำมือ\nน้ำมูก\nน้ำเมา\nน้ำย่อย\nน้ำยา\nน้ำรัก\nน้ำแร่\nน้ำลาย\nน้ำเลี้ยง\nน้ำสต๊อก\nน้ำส้ม\nน้ำส้มสายชู\nน้ำสังข์\nน้ำสาบาน\nน้ำเสียง\nน้ำหนวก\nน้ำหนอง\nน้ำหนัก\nน้ำหน้า\nน้ำหนึ่ง\nน้ำหมึก\nน้ำหอม\nน้ำเหลือง\nน้ำอบ\nน้ำอ้อย\nน้ำอัดลม\nนิ่งเฉย\nนิจศีล\nนิดเดียว\nนิดหน่อย\nนิติกร\nนิติกรรม\nนิติธรรม\nนิตินัย\nนิติบัญญัติ\nนิติบุคคล\nนิติภาวะ\nนิติวิทยาศาสตร์\nนิติเวช\nนิติเวชศาสตร์\nนิติศาสตร์\nนิเทศศาสตร์\nนิ่มนวล\nนิรุกติศาสตร์\nนิเวศวิทยา\nนิศากร\nนิศากาล\nนิศาชล\nนิศารัตน์\nนี่แน่ะ\nนี่แหละ\nนี่เอง\nนึกคิด\nนุงถุง\nนุ่งห่ม\nนุ่มนวล\nนุ่มนิ่ม\nเนตรนารี\nเนติบัณฑิต\nเนยเทียม\nเนยใส\nเนิ่นนาน\nเนิบนาบ\nเนื้อความ\nเนื้อคู่\nเนื้อเค็ม\nเนื้องอก\nเนื้อตัว\nเนื้อตาย\nเนื้อที่\nเนื้อแท้\nเนื้อเปื่อย\nเนื้อผ้า\nเนื้อเพลง\nเนื้อไม้\nเนื้อเยื่อ\nเนื้อร้อง\nเนื้อร้าย\nเนื้อเรื่อง\nเนื้อหา\nเนืองนอง\nเนืองนิตย์\nเนืองแน่น\nแน่ใจ\nแน่ชัด\nแน่แท้\nแน่นอน\nแน่นิ่ง\nแน่แน่ว\nแน่นแฟ้น\nแน่นหนา\nแนบเนียน\nแนบแน่น\nแนวคิด\nแนวทาง\nแนวโน้ม\nแนวป่า\nแนวรบ\nแนวร่วม\nแนวหน้า\nแนวหลัง\nแน่วแน่\nแนะนำ\nแนะแนว\nโน้มน้าว\nในหลวง\nบกพร่อง\nบงกช\nบงการ\nบดบัง\nบทกลอน\nบทกวี\nบทความ\nบทคัดย่อ\nบทเฉพาะกาล\nบทนำ\nบทบัญญัติ\nบทบาท\nบทประพันธ์\nบทเพลง\nบทร้อง\nบทเรียน\nบทลงโทษ\nบทสนทนา\nบทอัศจรรย์\nบทจร\nบทบงสุ์\nบทมาลย์\nบทรัช\nบทเรศ\nบทวลัญช์\nบนบาน\nบรมครู\nบรมธาตุ\nบรมบพิตร\nบรมวงศานุวงศ์\nบรมอัฐิ\nบรรณพิภพ\nบรรณศาลา\nบรรณาการ\nบรรณาธิการ\nบรรณานุกรม\nบรรณารักษ์\nบรรณารักษศาสตร์\nบรรดามี\nบรรดาศักดิ์\nบรรทัดฐาน\nบรรพบุรุษ\nบรรลัยกัลป์\nบรรลัยจักร\nบริคณห์สนธิ\nบวงสรวง\nบ่วงบาศ\nบ้วนพระโอษฐ์\nบ่อเกิด\nบอกกล่าว\nบอกบท\nบอกบุญ\nบอกใบ้\nบอกปัด\nบ้องกัญชา\nบ้องตื้น\nบ้องไฟ\nบ้องหู\nบอดสี\nบ่อนทำลาย\nบอบช้ำ\nบอบบาง\nบอบแบบ\nบังโกลน\nบังโคลน\nบังใบ\nบั้งไฟ\nบังคับการ\nบังคับบัญชา\nบัญชาการ\nบัณฑุกัมพล\nบัดดล\nบัดเดี๋ยว\nบัดนั้น\nบัดนี้\nบัดสีบัดเถลิง\nบัตรเครดิต\nบัตรพลี\nบัตรสนเท่ห์\nบัตรสินเชื่อ\nบั่นทอน\nบั้นท้าย\nบั้นปลาย\nบั้นพระองค์\nบั้นเอว\nบันไดลิง\nบันไดเลื่อน\nบันเทิงคดี\nบัวลอย\nบัวบก\nบ้าจี้\nบ้าดีเดือด\nบ้าน้ำลาย\nบ้าบิ่น\nบ้าระห่ำ\nบ้าเลือด\nบ้าหอบฟาง\nบากบั่น\nบากหน้า\nบางตา\nบางเบา\nบางที\nบาดเจ็บ\nบาดแผล\nบาดหมาง\nบาตรใหญ่\nบาทบงกช\nบาทบงสุ์\nบาทบริจาริกา\nบาทวิถี\nบานเกล็ด\nบานตะเกียง\nบานตะไท\nบานเบอะ\nบานปลาย\nบานแผละ\nบานพับ\nบ้านจัดสรร\nบ้านช่อง\nบ้านนอก\nบ้านพัก\nบ้านเมือง\nบ้านรับรอง\nบ้านเรือน\nบาปกรรม\nบายศรี\nบ่ายเบี่ยง\nบ่ายหน้า\nบ่าวไพร่\nบิดเบี้ยว\nบิดเบือน\nบิดพลิ้ว\nบี้แบน\nบีบคั้น\nบีบรัด\nบึ้งตึง\nบึ้งบูด\nบุกบั่น\nบุกเบิก\nบุกรุก\nบุคลิกภาพ\nบุคลิกลักษณะ\nบุญธรรม\nบุญนิธิ\nบุญฤทธิ์\nบุบสลาย\nบุ้ยใบ้\nบุรุษเพศ\nบุหงารำไป\nบู้บี้\nบูชายัญ\nบูดบึ้ง\nบูดเบี้ยว\nเบาความ\nเบาใจ\nเบาบาง\nเบาปัญญา\nเบามือ\nเบาแรง\nเบาสมอง\nเบาหวาน\nเบาโหวง\nเบ้าตา\nเบาะแส\nเบิกความ\nเบิกบาน\nเบี้ยล่าง\nเบี้ยเลี้ยง\nเบี้ยหวัด\nเบี่ยงบ่าย\nเบียดบัง\nเบียดเบียน\nเบียดเสียด\nเบื้องต้น\nเบื้องบน\nเบื้องหน้า\nเบื้องหลัง\nแบกะดิน\nแบเบาะ\nแบ่งเบา\nแบ่งปัน\nแบ่งแยก\nแบบฉบับ\nแบบแปลน\nแบบแผน\nแบบฝึกหัด\nแบบพิมพ์\nแบบสอบถาม\nแบบอย่าง\nแบะแฉะ\nแบะท่า\nโบแดง\nโบราณคดี\nโบราณวัตถุ\nโบราณสถาน\nใบขับขี่\nใบจอง\nใบตอง\nใบแทรก\nใบบอก\nใบบุญ\nใบเบิกทาง\nใบปลิว\nใบพัด\nใบโพ\nใบไม้\nใบระกา\nใบรับรอง\nใบลา\nใบเลี้ยง\nใบสั่ง\nใบสำคัญ\nใบสุทธิ\nใบเสร็จ\nใบหน้า\nใบอนุญาต\nใบระกา\nปกครอง\nปกคลุม\nปกป้อง\nปกปิด\nปฏิบัติการ\nปฏิบัติบูชา\nปฐพีวิทยา\nปฐมฌาน\nปฐมทัศน์\nปฐมเทศนา\nปฐมนิเทศ\nปฐมพยาบาล\nปฐมยาม\nปฐมฤกษ์\nปฐมวัย\nปฐมสมโพธิ\nปนเป\nป่นปี้\nปมเขื่อง\nปมเด่น\nปมด้อย\nปรนเปรอ\nปรบไก่\nปรบมือ\nปรสิตวิทยา\nประโปรย\nประพรม\nประกันชีวิต\nประกันภัย\nประจักษ์พยาน\nประจัญบาน\nประจันหน้า\nประจำการ\nประจำเดือน\nประจำเมือง\nประจำยาม\nประชดประชัน\nประชากร\nประชากรศาสตร์\nประชาคม\nประชาชน\nประชาราษฎร์\nประชาชาติ\nประชาชี\nประชาทัณฑ์\nประชาบาล\nประชาพิจารณ์\nประชาภิบาล\nประชามติ\nประชาสงเคราะห์\nประชาสัมพันธ์\nประดับประดา\nประดามี\nประดาน้ำ\nประเดี๋ยวเดียว\nประเดี๋ยวนี้\nประทับใจ\nประทุษร้าย\nประเทศราช\nประพาสต้น\nประเพณีนิยม\nประลัยกัลป์\nประวัติการณ์\nประวัติศาสตร์\nประสบการณ์\nประสบการณ์นิยม\nประสาทการ\nประสูติการ\nประสูติกาล\nประเส\nปรับทุกข์\nปรับโทษ\nปรับปรุง\nปรากฏการณ์\nปราดเปรียว\nปราดเปรื่อง\nปราบปราม\nปริญญาบัตร\nปรัยัติธรรม\nปรุโปร่ง\nปลงใจ\nปลงตก\nปลดทุกข์\nปลดปลง\nปลดปล่อย\nปลดเปลื้อง\nปลดระวาง\nปลดแอก\nปล้นสะดม\nปลอกกระสุน\nปลอกคอ\nปลอดโปร่ง\nปลอดภัย\nปลอมปน\nปลอมแปลง\nปลอบโยน\nปล่อยใจ\nปล่อยตัว\nปล่อยปละ\nปลั๊กไฟ\nปลากริม\nปลาเค็ม\nปลาจ่อม\nปลาเจ่า\nปลาแดก\nปลาตู้\nปลาทอง\nปลาร้า\nปลาส้ม\nปลาดาว\nปลาบิน\nปลาฝา\nปลาวาฬ\nปลาหมึก\nปลาบปลื้ม\nปลายข้าว\nปลายแถว\nปลายทาง\nปลิ้นปลอก\nปลิ้นปล้อน\nปลีกตัว\nปลีกย่อย\nปลุกใจ\nปลุกปล้ำ\nปลุกปั่น\nปลุกระดม\nปลุกเสก\nปลูกฝัง\nปลูกสร้าง\nปวดถ่วง\nปวดมวน\nปวดร้าว\nป่วนปั่น\nป่วยการ\nปอกลอก\nป้องกัน\nปักใจ\nปักดำ\nปักหลัก\nปัจเจกบุคคล\nปัจเจกพุทธะ\nปัจเจกโพธิ\nปัจฉิมชน\nปัจฉิมทิศ\nปัจฉิมภาค\nปัจฉิมยาม\nปัจฉิมลิขิต\nปัจฉิมวัย\nปัจฉิมวาจา\nปัญญาชน\nปัญญาวิมุติ\nปัญญาอ่อน\nปัดเป่า\nปันส่วน\nปั่นป่วน\nปั่นแปะ\nปั่นหัว\nปั้นจิ้ม\nปั้นเจ๋อ\nปั้นปึ่ง\nปั้นสิบ\nปั๊มน้ำมัน\nป่าช้า\nป่าชายเลน\nป่าดง\nป่าดงดิบ\nป่าดิบ\nป่าเถื่อน\nป่าเบญจพรรณ\nป่าละเมาะ\nปากกา\nปากขอ\nปากแข็ง\nปากคอ\nปากคำ\nปากคีบ\nปากจัด\nปากน้ำ\nปากเปล่า\nปากเสียง\nปานกลาง\nป่านนี้\nป้านลม\nป้ายสี\nป่าวร้อง\nปิดฉาก\nปิดบัง\nปิตุฆาต\nปิตุภูมิ\nปีมะโว้\nปีแสง\nปี่กลาง\nปี่ไฉน\nปี่ชวา\nปี่นอก\nปี่ใน\nปี่พาทย์\nปี่อ้อ\nปีกกา\nปีนเกลียว\nปีนป่าย\nปึกแผ่น\nปึงปัง\nปืนกล\nปืนครก\nปืนพก\nปืนยา\nปืนยาว\nปืนลม\nปืนเล็ก\nปืนเล็กยาว\nปืนสั้น\nปืนใหญ่\nปุบปับ\nปุ๊บปั๊บ\nปุ่มเปือก\nปุยฝ้าย\nปุ๋ยคอก\nปุ๋ยเคมี\nปุ๋ยวิทยาศาสตร์\nปุ๋ยหมัก\nปุ๋ยอินทรีย์\nปูจ๋า\nปูเสฉวน\nปู่เจ้า\nปู่ทวด\nปูนขาว\nปูนซีเมนต์\nปูนดิบ\nปูนแดง\nปูนปลาสเตอร์\nปูนปั้น\nเป็ดเทศ\nเป็ดน้ำ\nเป็นกลาง\nเป็นใจ\nเป็นต้น\nเป็นต่อ\nเป็นรอง\nเป็นไร\nเป็นลม\nเป็นห่วง\nเป็นอยู่\nเปรมปรีดิ์\nเปรอะเปื้อน\nเปรียบเทียบ\nเปรียบเปรย\nเปรี้ยวปาก\nเปรี้ยวหวาน\nเปรื่องปราด\nเปลญวน\nเปล่งปลั่ง\nเปล่าดาย\nเปล่าเปลี่ยว\nเปลี่ยนใจ\nเปลี่ยนตัว\nเปลี่ยนแปลง\nเปลี่ยนมือ\nเปลี่ยนหน้า\nเป๋อเหลอ\nเปะปะ\nเป่ากบ\nเป้านิ่ง\nเป้าหมาย\nเปิดฉาก\nเปิดเปิง\nเปิดโปง\nเปิดผนึก\nเปิดเผย\nเปียกปูน\nแป้งสาลี\nแป้งนวล\nแป้งเปียก\nแป้งมัน\nแป้งฝุ่น\nแป้งร่ำ\nแป้งสิงคโปร์\nแป้งหมี่\nแปดปน\nแปดเปื้อน\nแปรปรวน\nแปรผัน\nแปรพักตร์\nแปรรูป\nแปรอักษร\nแปลกปลอม\nแปะโป้ง\nโป้ปด\nโปร่งแสง\nโปร่งใส\nโปรดปราน\nโปรยทาน\nโปรยปราย\nโปโลน้ำ\nผกผัน\nผกากรอง\nผงขาว\nผงชูรส\nผงซักฟอก\nผงฟู\nผดุงครรภ์\nผมไฟ\nผลพลอยได้\nผลลัพธ์\nผลัดเปลี่ยน\nผลิตผล\nผลิตภัณฑ์\nผลุบโผล่\nผสมเทียม\nผสมผสาน\nผสมผเส\nผสมพันธุ์\nผสมโรง\nผสมเสร็จ\nผ่องแผ้ว\nผ่องใส\nผ่อนคลาย\nผ่อนชำระ\nผ่อนปรน\nผ่อนผัน\nผ่อนส่ง\nผอมโซ\nผอมแห้ง\nผักชี\nผักตบชวา\nผักบุ้ง\nผังเมือง\nผัดผ่อน\nผันแปร\nผันผวน\nผ่าตัด\nผ่าเผย\nผ่าหมาก\nผ่าเหล่า\nผ้าขนหนู\nผ้าขาวม้า\nผ้าขี้ริ้ว\nผ้าเช็ดตัว\nผ้าเช็ดปาก\nผ้าเช็ดมือ\nผ้าเช็ดหน้า\nผ้าดิบ\nผ้าต่วน\nผ้าไตร\nผ้าถุง\nผ้าแถบ\nผ้านวม\nผ้านุ่ง\nผ้าใบ\nผ้าป่า\nผ้าป่าน\nผ้าผ่อน\nผ้าพันคอ\nผ้าพันแผล\nผ้าแพร\nผ้าโพกหัว\nผ้ามัดหมี่\nผ้ายาง\nผ้าลูกไม้\nผ้าเหลือง\nผ้าอนามัย\nผ้าอ้อม\nผาดโผน\nผาติกรรม\nผิดหวัง\nผิวเผิน\nผิวพรรณ\nผิวหนัง\nผีกระสือ\nผีกระหัง\nผีกองกอย\nผีโขมด\nผีดิบ\nผีตองเหลือง\nผีถ้วยแก้ว\nผีแถน\nผีทะเล\nผีบุญ\nผีปอบ\nผีพุ่งไต้\nผีฟ้า\nผีเรือน\nผีสาง\nผีเสื้อ\nผีห่า\nผึ่งผาย\nผุดผ่อง\nผุดผาด\nผู้คน\nผู้คุม\nผู้จัดการ\nผู้ชาย\nผู้เชี่ยวชาญ\nผู้ดี\nผู้โดยสาร\nผู้ต้องขัง\nผู้ต้องหา\nผู้แทน\nผู้น้อย\nผู้บริโภค\nผู้บังคับบัญชา\nผู้ปกครอง\nผู้ประกอบการ\nผู้ป่วย\nผู้พิพากษา\nผู้เยาว์\nผู้ร้าย\nผู้วิเศษ\nผู้สื่อข่าว\nผู้เสียหาย\nผู้หญิง\nผู้ใหญ่\nผู้ใหญ่บ้าน\nผูกขวัญ\nผูกขาด\nผูกพัน\nผูกมัด\nเผชิญหน้า\nเผด็จการ\nเผด็จศึก\nเผยแผ่\nเผยแพร่\nเผละผละ\nเผ่าพันธุ์\nเผื่อแผ่\nแผงลอย\nแผนการ\nแผนงาน\nแผนที่\nแผนผัง\nแผนภาพ\nแผนภูมิ\nแผ่นดิน\nแผ่นเสียง\nแผ้วพาน\nโผงผาง\nฝนทอง\nฝอยทอง\nฝักแค\nฝักบัว\nฝักฝ่าย\nฝักใฝ่\nฝังใจ\nฝังหัว\nฝาชี\nฝาแฝด\nฝาละมี\nฝ่าพระบาท\nฝ่าฝืน\nฝ่าฟัน\nฝ้าฟาง\nฝากตัว\nฝากฝัง\nฝีดาษ\nฝีมะม่วง\nฝีจักร\nฝีเท้า\nฝีปาก\nฝีพาย\nฝีมือ\nฝีเย็บ\nฝึกงาน\nฝึกปรือ\nฝึกฝน\nฝึกสอน\nฝึกหัด\nฝืดเคือง\nใฝ่ฝัน\nพงพี\nพงศ์พันธุ์\nพญาโศก\nพญาไฟ\nพบปะ\nพบพาน\nพรสวรรค์\nพรมคด\nพรมแดน\nพรมมิ\nพรรคพวก\nพรรณราย\nพรวดพราด\nพรหมชาติ\nพรหมลิขิต\nพรหมโลก\nพรหมวิหาร\nพร้อมใจ\nพร้อมพรั่ง\nพร้อมเพรียง\nพร้อมมูล\nพร้อมสรรพ\nพร้อมหน้า\nพระครู\nพระคุณ\nพระเคราะห์\nพระเครื่อง\nพระเจ้า\nพระเจ้าอยู่หัว\nพระชายา\nพระทัย\nพระนาง\nพระนางเจ้า\nพระเป็นเจ้า\nพระผู้เป็นเจ้า\nพระพิมพ์\nพระพุทธเจ้า\nพระพุทธองค์\nพระภูมิ\nพระยา\nพระรอง\nพระสนม\nพระสนมเอก\nพระองค์\nพระองค์เจ้า\nพระเอก\nพรั่งพร้อม\nพรั่งพรู\nพรั่นพรึง\nพร่างพราว\nพรายน้ำ\nพรายแพรว\nพราวแพรว\nพร่ำพลอด\nพร่ำเพรื่อ\nพร่ำเพ้อ\nพริกไทย\nพริ้งพราย\nพริ้งเพรา\nพริ้งเพริศ\nพริบตา\nพริ้มพราย\nพริ้มเพรา\nพรุ่งนี้\nพฤติกรรม\nพฤติการณ์\nพฤตินัย\nพลการ\nพลขับ\nพลความ\nพลเมือง\nพลรบ\nพลร่ม\nพลเรือน\nพลโลก\nพลศึกษา\nพลบค่ำ\nพลอดรัก\nพลังงาน\nพลังเงียบ\nพลังจิต\nพลั้งปาก\nพลั้งเผลอ\nพลั้งพลาด\nพลัดถิ่น\nพลัดพราก\nพลาดท่า\nพลาดพลั้ง\nพลิกแพลง\nพลีกรรม\nพลุ่งพล่าน\nพวกพ้อง\nพวงมาลัย\nพวงมาลา\nพวงหรีด\nพวงคราม\nพวงชมพู\nพวงแสด\nพ่วงพี\nพวยน้ำ\nพวยพุ่ง\nพสกนิกร\nพหุคูณ\nพหุภาคี\nพหูพจน์\nพหูสูต\nพอควร\nพอใจ\nพอใช้\nพอใช้ได้\nพอดี\nพอตัว\nพอทำเนา\nพอประมาณ\nพอเพียง\nพอแรง\nพอสมควร\nพอเหมาะ\nพ่อขุน\nพ่อครัว\nพ่อตา\nพ่อบ้าน\nพ่อพันธุ์\nพ่อม่าย\nพ่อเมือง\nพ่อเลี้ยง\nพ่อสื่อ\nพอกพูน\nพ้องพาน\nพักผ่อน\nพักพิง\nพักฟื้น\nพักร้อน\nพักแรม\nพัดยศ\nพัดลม\nพันพัว\nพับฐาน\nพับเพียบ\nพัวพัน\nพาซื่อ\nพาดพิง\nพิณพาทย์\nพิธีกร\nพิธีกรรม\nพิธีการ\nพิธีรีตอง\nพิธีสาร\nพินัยกรรม\nพิมพ์เขียว\nพิมพ์ใจ\nพิมพ์ดีด\nพิษสง\nพี่น้อง\nพี่เบิ้ม\nพี่เลี้ยง\nพึงใจ\nพึงพอใจ\nพึ่งพา\nพึ่งพิง\nพืชพันธุ์\nพืชมงคล\nพื้นฐาน\nพื้นที่\nพื้นบ้าน\nพื้นเพ\nพื้นเมือง\nพื้นเสีย\nพุพอง\nพุทธกาล\nพุทธคุณ\nพุทธจักร\nพุทธเจดีย์\nพุทธฎีกา\nพุทธปฏิมา\nพุทธปฏิมากร\nพุทธมามกะ\nพุทธศักราช\nพุทธศาสนิกชน\nพุทธองค์\nพุทธชาด\nพุทธรักษา\nพุ่มพวง\nพุ่มไม้\nพู่กัน\nพูดจา\nเพ่งเล็ง\nเพดานบิน\nเพดานปาก\nเพริศพราย\nเพริศพริ้ง\nเพริศแพร้ว\nเพรียกพร้อง\nเพรียวลม\nเพลงเชิด\nเพลงยาว\nเพลิงกัลป์\nเพลินใจ\nเพลินตา\nเพลี่ยงพล้ำ\nเพ้อฝัน\nเพาะกาย\nเพาะชำ\nเพาะปลูก\nเพิกถอน\nเพิกเฉย\nเพิ่มเติม\nเพิ่มพูน\nเพียงตา\nเพียงพอ\nเพียบแประ\nเพียบพร้อม\nเพื่อนเกลอ\nเพื่อนตาย\nเพื่อนบ้าน\nเพื่อนฝูง\nเพื่อนยาก\nแพ้ท้อง\nแพร่หลาย\nแพร่งพราย\nแพรวพราว\nโพธิญาณ\nโพธิบัลลังก์\nโพธิสมภาร\nโพธิสัตว์\nโพ้นทะเล\nโพยภัย\nไพ่ตาย\nไพ่ป๊อก\nไพรวัน\nไพรสณฑ์\nไพรสัณฑ์\nไพร่พล\nไพร่ฟ้า\nไพร่สม\nไพร่ส่วย\nไพร่หลวง\nฟกช้ำ\nฟองเต้าหู้\nฟองน้ำ\nฟองมัน\nฟ้องกลับ\nฟ้องร้อง\nฟอนเฟะ\nฟักทอง\nฟัดเฟียด\nฟันดาบ\nฟันฝ่า\nฟันแท้\nฟันน้ำนม\nฟันปลา\nฟันฟาง\nฟันเฟือง\nฟันม้า\nฟันเลื่อย\nฟันหนู\nฟั่นเฝือ\nฟั่นเฟือน\nฟื้นตัว\nฟื้นฝอย\nฟื้นฟู\nฟุ้งซ่าน\nฟุ้งเฟ้อ\nฟุ้งเฟื่อง\nฟุตบอล\nฟูฟ่อง\nฟูเฟื่อง\nฟูมฟัก\nฟูมฟาย\nเฟะฟะ\nเฟื่องฟ้า\nเฟื่องฟุ้ง\nเฟื่องฟู\nไฟฉาย\nไฟแช็ก\nไฟธาตุ\nไฟฟ้า\nภัตกิจ\nภาคทัณฑ์\nภาคพื้น\nภาคเรียน\nภาคภูมิ\nภาพถ่าย\nภาพนิ่ง\nภาพประกอบ\nภาพพจน์\nภาพยนตร์\nภาพลวงตา\nภาพลักษณ์\nภายนอก\nภายใน\nภายหน้า\nภายหลัง\nภารกิจ\nภารธุระ\nภารโรง\nภารตวิทยา\nภาษาศาสตร์\nภาสกร\nภิญโญภาพ\nภินชาติ\nภูธร\nภูธเรศ\nภูบาล\nภูเบศ\nภูเบศวร์\nภูเขา\nภูเขาไฟ\nภูผา\nภูตคาม\nภูตบดี\nภูตรูป\nภูเตศวร\nภูมินทร์\nภูมิบาล\nภูมิประเทศ\nภูมิภาค\nภูมิรัฐศาสตร์\nภูมิลำเนา\nภูมิศาสตร์\nภูมิอากาศ\nภูมิธรรม\nภูมิปัญญา\nภูมิรู้\nภูมิใจ\nภูมิฐาน\nภูมิคุ้มกัน\nภูมิแพ้\nภูษาโยง\nเภทภัย\nเภสัชกร\nเภสัชกรรม\nเภสัชวิทยา\nเภสัชศาสตร์\nโภคทรัพย์\nโภคภัณฑ์\nโภชนากร\nโภชนาการ\nมกุฎราชกุมาร\nมงคลแฝด\nมงคลสูตร\nมงคลหัตถี\nมณเฑียรบาล\nมดดำ\nมดแดง\nมดเท็จ\nมดยอบ\nมดลูก\nมธุปายาส\nมธุรส\nมนเทียรบาล\nมนุษย์กบ\nมโนกรรม\nมโนคติ\nมโนทุจริต\nมโนธรรม\nมโนภาพ\nมโนมัย\nมโนรถ\nมโนรมย์\nมโนสุจริต\nมรรคนายก\nมรรคผล\nมฤคชาติ\nมฤคทายวัน\nมฤคราช\nมลทิน\nมลพิษ\nมลสาร\nมวกเหล็ก\nม้วนหน้า\nมวยไทย\nมวยปล้ำ\nมวยล้ม\nมวยวัด\nมวยสากล\nมวยหมู่\nมวลสาร\nมอคราม\nมอซอ\nมอหมึก\nมองเมียง\nมอบตัว\nมอบหมาย\nมอมเมา\nมะขามเทศ\nมะขามป้อม\nมะขามเปียก\nมะเขือเทศ\nมะเขือพวง\nมะพร้าวแก้ว\nมักคุ้น\nมักจี่\nมักง่าย\nมักน้อย\nมักมาก\nมักใหญ่\nมั่งคั่ง\nมั่งมี\nมัจจุราช\nมัชฌิมนิกาย\nมัชฌิมประเทศ\nมัชฌิมยาม\nมัชฌิมวัย\nมัดจำ\nมัดหมี่\nมัธยมกาล\nมัธยมศึกษา\nมันแกว\nมันเทศ\nมันฝรั่ง\nมันเปลว\nมันสมอง\nมั่นคง\nมั่นใจ\nมั่นหมาย\nมั่นเหมาะ\nมัวเมา\nมัวหมอง\nมั่วสุม\nม้าเทศ\nม้าน้ำ\nม้ามืด\nม้าเร็ว\nม้าล่อ\nม้าลาย\nมากมาย\nมาตรการ\nมาตรฐาน\nมาตราส่วน\nมาตุคาม\nมาตุฆาต\nมาตุภูมิ\nม่านตา\nม่านบังตา\nมายากร\nมายากล\nมายาการ\nมายาวี\nมารผจญ\nมารวิชัย\nมารสังคม\nมารหัวขน\nมาลาการ\nมิ่งขวัญ\nมิ่งมิตร\nมิจฉาจาร\nมิจฉาชีพ\nมิดชิด\nมิดเมี้ยน\nมิดหมี\nมิตรจิต\nมิตรภาพ\nมิตรสหาย\nมิน่า\nมีหน้า\nมีดโกน\nมีดดาบ\nมีดโต้\nมีดพก\nมีดพับ\nมีดสั้น\nมึนงง\nมึนชา\nมึนตึง\nมึนเมา\nมืดครึ้ม\nมืดมน\nมืดมัว\nมือจับ\nมือดี\nมือเติบ\nมือปืน\nมือเปล่า\nมือมืด\nมือสอง\nมือเสือ\nมือหนึ่ง\nมือใหม่\nมุกตลก\nมุขปาฐะ\nมุขมนตรี\nมุ่งมั่น\nมุ่งมาด\nมุ่งหน้า\nมุ่งหมาย\nมุ่งหวัง\nมุ้งลวด\nมุ้งสายบัว\nมุมก้ม\nมุมกลับ\nมุมเงย\nมุมฉาก\nมุมตรง\nมุมป้าน\nมุมมืด\nมุมแย้ง\nมุมสะท้อน\nมุมหักเห\nมุมแหลม\nมุสาวาท\nมูกเลือด\nมูกมัน\nมูกหลวง\nมูนดิน\nมูลฐาน\nมูลนาย\nมูลนิธิ\nมูลเหตุ\nมูลค่า\nมูลฝอย\nเม็ดเงิน\nเม็ดเลือด\nเม็ดโลหิต\nเม่นทะเล\nเมรุมาศ\nเมรุราช\nเมล์อากาศ\nเมาดิบ\nเมามัน\nเมามัว\nเมามาย\nเมินเฉย\nเมียน้อย\nเมียหลวง\nเมียงมอง\nเมี่ยงลาว\nเมี่ยงส้ม\nเมื่อกี้\nเมื่อตะกี้\nเมื่อใด\nเมื่อไร\nเมื่อไหร่\nเมื่อนั้น\nเมืองขึ้น\nเมืองท่า\nเมืองนอก\nเมืองหลวง\nเมื่อยขบ\nเมื่อยล้า\nแม่กอง\nแม่กุญแจ\nแม่คุณ\nแม่งาน\nแม่เจ้า\nแม่ชี\nแม่ทัพ\nแม่นม\nแม่น้ำ\nแม่บท\nแม่บ้าน\nแม่เบี้ย\nแม่พระ\nแม่พิมพ์\nแม่เพลง\nแม่มด\nแม่ม่าย\nแม่ไม้\nแม่ยก\nแม่ยาย\nแม่ร้าง\nแม่เรือน\nแม่แรง\nแม่เล้า\nแม่เลี้ยง\nแม่สี\nแม่สื่อ\nแม่เหล็ก\nแมงมุม\nแม่นยำ\nแมลงช้าง\nแมลงวัน\nแมลงปอ\nแมลงภู่\nแมลงเม่า\nแมวเซา\nแมวน้ำ\nแมวป่า\nแมวมอง\nไม้กลัด\nไม้กวาด\nไม้กางเขน\nไม้เกาหลัง\nไม้ขีดไฟ\nไม้จิ้มฟัน\nไม้เด็ด\nไม้ตาย\nไม้ตีพริก\nไม้ที\nไม้เท้า\nไม้บรรทัด\nไม้เมตร\nไม้ระแนง\nไม้เรียว\nไม้หมอน\nไม้อัด\nไม้จัตวา\nไม้ตรี\nไม้ไต่คู้\nไม้โท\nไม้ผัด\nไม้มลาย\nไม้ม้วน\nไม้ยมก\nไม้หน้า\nไม้หันอากาศ\nไม้เอก\nยกกลีบ\nยกครู\nยกเครื่อง\nยกเค้า\nยกทรง\nยกฟ้อง\nยกเมฆ\nยกยอ\nยกย่อง\nยกเลิก\nยกเว้น\nย่นย่อ\nยมทูต\nยมบาล\nยมราช\nยมโลก\nยวดยิ่ง\nยวดยาน\nยวนยี\nยวบยาบ\nย่อท้อ\nย่อส่วน\nย่อหน้า\nย่อหย่อน\nยอกย้อน\nยองใย\nย่องเบา\nย่องแย่ง\nยอดเยี่ยม\nยอดอก\nย้อนยอก\nย้อนรอย\nย้อนศร\nย้อนแสง\nย้อนหลัง\nยอบแยบ\nยอมความ\nย่อมเยา\nย่อยยับ\nยักยอก\nยักย้าย\nยักเยื้อง\nยัญกรรม\nยัญพิธี\nยัดเยียด\nยับเยิน\nยับยั้ง\nยั่วยวน\nยั่วยุ\nยั่วเย้า\nยากวาด\nยากันยุง\nยาเขียว\nยาใจ\nยาฉุน\nยาชา\nยาซัด\nยาดอง\nยาแดง\nยาถ่าย\nยาธาตุ\nยานัตถุ์\nยาเบื่อ\nยาโป๊\nยาแฝด\nยาพิษ\nยาระบาย\nยาสลบ\nยาสั่ง\nยาสีฟัน\nยาสูบ\nยาเส้น\nยาเสพติด\nยาหม่อง\nยาเหลือง\nย่าทวด\nย่านาง\nยากแค้น\nยากจน\nยากเย็น\nยากไร้\nยางนอก\nยางใน\nยางมะตอย\nยางมะตูม\nยางลบ\nยางสน\nยางอาย\nย่างกราย\nย่างเยื้อง\nย่างสด\nย่างสามขุม\nย่างเหยียบ\nยานเกราะ\nยานพาหนะ\nยานอวกาศ\nยานคาง\nยายทวด\nยาวเฟื้อย\nยาวยืด\nยาวเหยียด\nยำทวาย\nยำใหญ่\nยำเกรง\nยำเยง\nย่ำต๊อก\nย่ำยี\nย่ำแย่\nยิงเป้า\nยิ่งนัก\nยิ่งยวด\nยิ่งใหญ่\nยินดี\nยินยอม\nยินร้าย\nยิ้มกริ่ม\nยิ้มแฉ่ง\nยิ้มแต้\nยิ้มแป้น\nยิ้มเผล่\nยิ้มเยาะ\nยิ้มแย้ม\nยียวน\nยึดครอง\nยึดถือ\nยึดมั่น\nยึดเหนี่ยว\nยืดยาด\nยืดยาว\nยืดเยื้อ\nยืดหยุ่น\nยืดอก\nยืนกราน\nยืนต้น\nยืนพื้น\nยืนยง\nยืนยัน\nยืนหยัด\nยื้อยุด\nยุยง\nยุแยง\nยุแหย่\nยุคลบาท\nยุคเข็ญ\nยุคทอง\nยุคมืด\nยุ่งขิง\nยุ่งยาก\nยุ่งเหยิง\nยุติธรรม\nยุทธการ\nยุทธนาวี\nยุทธปัจจัย\nยุทธภัณฑ์\nยุทธภูมิ\nยุทธวิธี\nยุทธศาสตร์\nยุทธหัตถี\nยุทธนาการ\nยุทธนาธิการ\nยุบยับ\nยุบยิบ\nยุพราช\nยู่ยี่\nเย็นเจี๊ยบ\nเย็นใจ\nเย็นฉ่ำ\nเย็นเฉียบ\nเย็นชา\nเย็นชืด\nเย็นตา\nเย็นเยียบ\nเย็นเยือก\nเย็นวาบ\nเย็นวูบ\nเย็บกี่\nเย็บจักร\nเย็บด้าย\nเย้ยหยัน\nเย้าหยอก\nเยาะเย้ย\nเยี่ยมกราย\nเยี่ยมเยียน\nเยี่ยมเยือน\nเยี่ยมยอด\nเยื่อเคย\nเยื่อใย\nเยือกเย็น\nเยื้องกราย\nเยื้องยัก\nเยื้องย่าง\nแยกย้าย\nแยกแยะ\nแย่งชิง\nแยบคาย\nแยบยล\nแย้มพราย\nแย้มยิ้ม\nแย้มสรวล\nโยเย\nโย้เย้\nโยกโคลง\nโยกย้าย\nโยกโย้\nโยนกลอง\nใยหิน\nรกชัฏ\nรกร้าง\nรกเรี้ยว\nรกเรื้อ\nรกราก\nรงควัตถุ\nรชนีกร\nรถกระบะ\nรถเก๋ง\nรถเข็น\nรถแข่ง\nรถจักร\nรถจี๊ป\nรถตู้\nรถทัวร์\nรถบรรทุก\nรถพ่วง\nรถพยาบาล\nรถไฟ\nรถไฟฟ้า\nรถม้า\nรถเมล์\nรถยนต์\nรถราง\nรถลาก\nรถสปอร์ต\nรถสิบล้อ\nรบกวน\nรบรา\nรบเร้า\nรมดำ\nร่มเกล้า\nร่มชูชีพ\nร่มเย็น\nร่มรื่น\nร่วงโรย\nรวงผึ้ง\nรวงรัง\nรวดเร็ว\nรวนเร\nรวบยอด\nรวบรวม\nรวบรัด\nรวมพล\nรวมหัว\nร่วมใจ\nร่วมเพศ\nร่วมมือ\nร่วมรัก\nร่วมสมัย\nรวยริน\nรวยรื่น\nรสชาติ\nรสนิยม\nรองท้อง\nรองเท้า\nรองพื้น\nร่องน้ำ\nร่องรอย\nร้องขอ\nร้องทุกข์\nร้องเรียน\nร้องห่ม\nร้องไห้\nรองช้ำ\nรองทรง\nรอดชีวิต\nรอดตัว\nรอดตาย\nรอนแรม\nร่อนเร่\nร้อนใจ\nร้อนตัว\nร้อนรน\nร้อนรุ่ม\nร้อนวิชา\nร้อนอาสน์\nรอบจัด\nรอบเดือน\nรอบรู้\nรอยร้าว\nร่อยหรอ\nร้อยละ\nร้อยกรอง\nร้อยแก้ว\nร้อยหวาย\nระนาดทุ้ม\nระนาดเอก\nระเบิดขวด\nระเบิดมือ\nระเบียบการ\nรักใคร่\nรักษาการ\nรักษาการณ์\nรังไข่\nรังแตน\nรังนก\nรังผึ้ง\nรังเพลิง\nรังมด\nรังสรรค์\nรังสฤษฏ์\nรั้งรอ\nรังสีแพทย์\nรังสีวิทยา\nรัชกาล\nรัชทายาท\nรัชนีกร\nรัฐธรรมนูญ\nรัฐบาล\nรัฐบุรุษ\nรัฐประศาสน์\nรัฐประหาร\nรัฐพิธี\nรัฐมนตรี\nรัฐวิสาหกิจ\nรัฐศาสตร์\nรัฐสภา\nรัดกุม\nรัดเกล้า\nรัดตัว\nรัดประคด\nรัดรึง\nรัดรูป\nรัตติกาล\nรับขวัญ\nรับจ้าง\nรับช่วง\nรับใช้\nรับซื้อ\nรับทราบ\nรับประกัน\nรับประทาน\nรับปาก\nรับผิด\nรับผิดชอบ\nรับฟ้อง\nรับฟัง\nรับมือ\nรับรอง\nรับรู้\nรับสมัคร\nรับสั่ง\nรับหน้า\nรับเหมา\nรั่วไหล\nรามือ\nร่าเริง\nรากแก้ว\nรากขวัญ\nรากฐาน\nรากฟัน\nรากศัพท์\nรากเหง้า\nร่างกาย\nร่างแห\nร้างรา\nราชกรณียกิจ\nราชการ\nราชกิจ\nราชครู\nราชฐาน\nราชทัณฑ์\nราชทินนาม\nราชทูต\nราชธานี\nราชนาวี\nราชบัณฑิต\nราชบัลลังก์\nราชบาตร\nราชบุตร\nราชปะแตน\nราชภัฏ\nราชมัล\nราชยาน\nราชรถ\nราชลัญจกร\nราชเลขาธิการ\nราชเลขานุการ\nราชวงศ์\nราชวัติ\nราชสกุล\nราชสมบัติ\nราชสาส์น\nราชหัตถเลขา\nราชองครักษ์\nราชโองการ\nราชาคณะ\nราชาศัพท์\nราชินีนาถ\nร้านชำ\nร้านรวง\nราบคาบ\nราบรื่น\nราบเรียบ\nรายการ\nรายงาน\nรายจ่าย\nรายได้\nรายทาง\nรายรับ\nรายล้อม\nรายละเอียด\nรายวิชา\nร่ายยาว\nร่ายรำ\nร้ายกาจ\nร้ายแรง\nราวนม\nราวป่า\nร้าวฉาน\nร้าวราน\nรำพัด\nรำแพน\nรำวง\nร่ำไป\nร่ำร้อง\nร่ำเรียน\nร่ำไร\nร่ำลา\nร่ำไห้\nริเริ่ม\nริอ่าน\nริมฝีปาก\nริ้วรอย\nรีบร้อน\nรีบรุด\nรีบเร่ง\nรื่นรมย์\nรื่นเริง\nรื้อถอน\nรื้อฟื้น\nรุกฆาต\nรุกราน\nรุกล้ำ\nรุกไล่\nรุ่งขึ้น\nรุ่งแจ้ง\nรุ่งเช้า\nรุ่งเรือง\nรุ่งโรจน์\nรุ่งสว่าง\nรุ่งสาง\nรุ่งอรุณ\nรุจิเรข\nรุดหน้า\nรุนแรง\nรุมเร้า\nรุมล้อม\nรุ่มรวย\nรุ่มร้อน\nรุ่ยร่าย\nรู้แกว\nรู้ความ\nรู้คุณ\nรู้งาน\nรู้จัก\nรู้แจ้ง\nรู้ใจ\nรู้เชิง\nรู้ตัว\nรู้ทัน\nรู้เท่า\nรู้เรื่อง\nรู้สำนึก\nรู้สึก\nรู้เห็น\nรูปการณ์\nรูปโฉม\nรูปฌาน\nรูปถ่าย\nรูปทรง\nรูปธรรม\nรูปแบบ\nรูปพรรณ\nรูปพรหม\nรูปภพ\nรูปภาพ\nรูปร่าง\nรูปสมบัติ\nเร่ร่อน\nเร่งด่วน\nเร่งมือ\nเร่งรัด\nเร่งรีบ\nเร่งเร้า\nเร้นลับ\nเร่อร่า\nเร่าร้อน\nเราะราย\nเราะร้าย\nเริงใจ\nเริงรมย์\nเริดร้าง\nเริ่มต้น\nเริ่มแรก\nเรี่ยราด\nเรี่ยไร\nเรียกคืน\nเรียกตัว\nเรียกร้อง\nเรียกหา\nเรียบร้อย\nเรียงความ\nเรียงตัว\nเรียงเบอร์\nเรียงพิมพ์\nเรียงเม็ด\nเรียงราย\nเรียนรู้\nเรียบร้อย\nเรียบเรียง\nเรียบวุธ\nเรี่ยมเร้\nเรี่ยวแรง\nเรือกลไฟ\nเรือกอและ\nเรือกำปั่น\nเรือจ้าง\nเรือดำน้ำ\nเรือโดยสาร\nเรือตรวจการณ์\nเรือตังเก\nเรือธง\nเรือนำร่อง\nเรือบด\nเรือบิน\nเรือใบ\nเรือประมง\nเรือพ่วง\nเรือพิฆาต\nเรือยนต์\nเรือยาว\nเรือโยง\nเรือรบ\nเรือลากจูง\nเรือสำปั้น\nเรือสำเภา\nเรือหลวง\nเรือหางยาว\nเรืออีโปง\nเรือเอี้ยมจุ๊น\nเรื้อรัง\nเรือกสวน\nเรืองนาม\nเรืองรอง\nเรืองแสง\nเรื่องราว\nเรื่องสั้น\nเรือนแก้ว\nเรือนจำ\nเรือนเบี้ย\nเรือนแพ\nเรือนหอ\nเรื่อยเจื้อย\nเรื่อยเฉื่อย\nเรื่อยเปื่อย\nแรเงา\nแรกนา\nแรกนาขวัญ\nแรงงาน\nแรงดึงดูด\nแรงเทียน\nแรงม้า\nแรงเหวี่ยง\nแรมรอน\nแรมรา\nแรมโรย\nโรคจิต\nโรงครัว\nโรงงาน\nโรงเจ\nโรงเตี๊ยม\nโรงทาน\nโรงนา\nโรงพยาบาล\nโรงพัก\nโรงพิมพ์\nโรงเรียน\nโรงเรือน\nโรงแรม\nโรงเลี้ยง\nโรงเลื่อย\nโรงสี\nโรงสีข้าว\nโรงอาหาร\nโรมรัน\nโรยรา\nฤชากร\nฤดูกาล\nลงขัน\nลงแขก\nลงคอ\nลงตัว\nลงท้าย\nลงทุน\nลงโทษ\nลงพุง\nลงมือ\nลงรัก\nลงรอย\nลงแรง\nลงโรง\nลงเอย\nลดตัว\nลดละ\nลดเลี้ยว\nลดหย่อน\nลดหลั่น\nลนลาน\nล้นพ้น\nล้นหลาม\nล้นเหลือ\nลบล้าง\nลบเลือน\nลบหลู่\nลมกรด\nลมค้า\nลมงวง\nลมแดด\nลมทะเล\nลมบก\nลมบน\nลมบ้าหมู\nลมปราณ\nลมปาก\nลมพิษ\nลมว่าว\nลมเสีย\nลมหนาว\nลมหายใจ\nล่มจม\nล่มสลาย\nล้มละลาย\nล้มลุก\nล้มเลิก\nล่วงเกิน\nล่วงรู้\nล่วงละเมิด\nล่วงลับ\nล่วงล้ำ\nล่วงเลย\nล่วงหน้า\nลวดลาย\nลวดสปริง\nลวดหนาม\nล้วนแล้ว\nลหุโทษ\nล่อลวง\nล่อหลอก\nล่อแหลม\nล้อต๊อก\nล้อเลื่อน\nล้อเล่น\nล้อเลียน\nล้อหลอก\nลองเชิง\nลองดี\nลองภูมิ\nล่องหน\nลอดช่อง\nล่อนจ้อน\nลอบกัด\nล้อมวง\nลอยแก้ว\nลอยชาย\nลอยตัว\nลอยนวล\nลอยแพ\nลอยลำ\nละทิ้ง\nละเลย\nละเว้น\nละครนอก\nละครใน\nละครเพลง\nละครร้อง\nละครรำ\nละครลิง\nละครสัตว์\nละเอียดอ่อน\nลักไก่\nลักพา\nลักเพศ\nลักยิ้ม\nลักลอบ\nลักลั่น\nลักหลับ\nลัดเลาะ\nลับตา\nลับแล\nลับหลัง\nลาออก\nล่าช้า\nล่าทัพ\nล้าสมัย\nล้าหลัง\nลากข้าง\nล้างบาง\nล้างผลาญ\nลาดเขา\nลาดตระเวน\nลาดเท\nลาดยาง\nลานบิน\nลาภปาก\nลาภลอย\nลามปาม\nลามเลีย\nลายคราม\nลายเซ็น\nลายแทง\nลายน้ำ\nลายพร้อย\nลายมือ\nลายลักษณ์\nลายเส้น\nลำกล้อง\nลำแข้ง\nลำธาร\nลำแสง\nลำไส้\nลำตัด\nลำนำ\nล่ำสัน\nล้ำยุค\nล้ำสมัย\nล้ำลึก\nล้ำเลิศ\nล้ำเส้น\nล้ำหน้า\nลิงจุ่น\nลิงลม\nลิงโลด\nลิดรอน\nลิ้นไก่\nลิ้นชัก\nลิ้นปี่\nลิ้นควาย\nลิ้นงูเห่า\nลิ้นหมา\nลิบลับ\nลิบลิ่ว\nลิ่มเลือด\nลี้ภัย\nลี้ลับ\nลึกซึ้ง\nลึกลับ\nลึกล้ำ\nลืมตน\nลืมต้น\nลืมตัว\nลืมตา\nลืมเลือน\nลือชา\nลือชื่อ\nลือลั่น\nลุล่วง\nลุกลน\nลุกลาม\nลุกลี้ลุกลน\nลุกฮือ\nลุ่มน้ำ\nลุ่มลึก\nลุ่มหลง\nลุ่ทาง\nลูกกรง\nลูกกรอก\nลูกกรุง\nลูกกลอน\nลูกกลิ้ง\nลูกกวาด\nลูกกะจ๊อก\nลูกกุญแจ\nลูกเกด\nลูกแก้ว\nลูกขนไก่\nลูกข่าง\nลูกขุน\nลูกเขย\nลูกครึ่ง\nลูกคลื่น\nลูกความ\nลูกคอ\nลูกค้า\nลูกคิด\nลูกคู่\nลูกจ้าง\nลูกช้าง\nลูกชิด\nลูกชิ้น\nลูกชุบ\nลูกซอง\nลูกโซ่\nลูกดอก\nลูกดิ่ง\nลูกตะกั่ว\nลูกตุ้ม\nลูกเต้า\nลูกเต๋า\nลูกถ้วย\nลูกทุ่ง\nลูกเธอ\nลูกน้อง\nลูกน้ำ\nลูกนิมิต\nลูกบอล\nลูกบ้าน\nลูกบาศก์\nลูกบิด\nลูกเบี้ยว\nลูกประคบ\nลูกประคำ\nลูกปัด\nลูกปืน\nลูกโป่ง\nลูกผสม\nลูกผู้ชาย\nลูกผู้หญิง\nลูกพรรค\nลูกพี่\nลูกฟูก\nลูกไฟ\nลูกมือ\nลูกโม่\nลูกไม้\nลูกยาเธอ\nลูกรอก\nลูกรัง\nลูกเรือ\nลูกล้อ\nลูกลอย\nลูกเล่น\nลูกเลี้ยง\nลูกโลก\nลูกวัด\nลูกศร\nลูกศิษย์\nลูกสมุน\nลูกสะใภ้\nลูกสูบ\nลูกเสือ\nลูกหนัง\nลูกหนี้\nลูกหนู\nลูกหมาก\nลูกหลง\nลูกหลาน\nลูกหาบ\nลูกหิน\nลูกเห็บ\nลูกเหม็น\nลูกแหง่\nลูกอม\nลูกหม้อ\nลูบคม\nลูบคลำ\nลูบไล้\nเล็กน้อย\nเลขคณิต\nเลขผา\nเลขหมาย\nเล็ดลอด\nเล่นงาน\nเล่นแง่\nเล่นชู้\nเล่นตัว\nเล่นลิ้น\nเล่นหัว\nเลนส์นูน\nเลนส์เว้า\nเล็บครุฑ\nเลยเถิด\nเลศนัย\nเล่ห์กล\nเล่ห์เหลี่ยม\nเลอโฉม\nเลอมาน\nเลอเลิศ\nเลอสรวง\nเล่อล่า\nเลอะเลือน\nเล่าเรียน\nเล่าลือ\nเลาะลัด\nเลิกรา\nเลิกร้าง\nเลิกล้ม\nเลิศเลอ\nเลี้ยงชีพ\nเลี้ยงดู\nเลี้ยงต้อย\nเลียบเคียง\nเลี้ยวลด\nเลือกตั้ง\nเลือกเฟ้น\nเลือกสรร\nเลื่องลือ\nเลือดกำเดา\nเลือดเนื้อ\nเลือดฝาด\nเลือดเย็น\nเลือดร้อน\nเลือดหมู\nเลือดอุ่น\nเลือนราง\nเลื่อนเปื้อน\nเลื่อนลอย\nเลื่อมพราย\nเลื่อมใส\nเลื่อยฉลุ\nเลื่อยลันดา\nเลื่อยวงเดือน\nเลื้อยคลาน\nแลเหลียว\nแลกเปลี่ยน\nแล้วกัน\nและเล็ม\nโล่งใจ\nโล่งโถง\nโล่งอก\nโลดเต้น\nโลดโผน\nโลดลิ่ว\nโลดแล่น\nไล่ที่\nไล่เบี้ย\nไล่เลี่ย\nไล่เลียง\nไล่หลัง\nไล่ออก\nวกวน\nวงกบ\nวงกลม\nวงการ\nวงแขน\nวงเงิน\nวงจร\nวงนอก\nวงใน\nวงรี\nวงเล็บ\nวงเวียน\nวงแหวน\nวงศ์วาน\nวจีกรรม\nวจีเภท\nวจีภาค\nวนเวียน\nวอดวาย\nว็อบแว็บ\nวังวน\nวังหน้า\nวังหลวง\nวังหลัง\nวัดราษฎร์\nวัดวา\nวัดหลวง\nวัดผล\nวัดพื้น\nวัตถุนิยม\nวัตถุประสงค์\nวัตรปฏิบัติ\nวันโกน\nวันพระ\nวันเพ็ญ\nวัยรุ่น\nวัยวุฒิ\nว่ากล่าว\nว่าจ้าง\nว่าด้วย\nว่าที่\nวางก้าม\nวางใจ\nวางตัว\nวางตา\nวางโต\nวางท่า\nวางมวย\nวางมาด\nวางมือ\nวางวาย\nว่างเปล่า\nว่างเว้น\nวาดเขียน\nว่านเครือ\nวาบหวาม\nวายชนม์\nวายปราณ\nวายวาง\nวายวอด\nวายร้าย\nวายุภักษ์\nวาววับ\nวาววาม\nวาวแวว\nวาวแสง\nวิกฤตการณ์\nวิกฤติการณ์\nวิกฤตกาล\nวิกฤติกาล\nวิกลจริต\nวิงเวียน\nวิ่งเต้น\nวิ่งผลัด\nวิ่งรอก\nวิ่งราว\nวิจิตรศิลป์\nวิชาการ\nวิชาชีพ\nวิชาธร\nวิญญูชน\nวิดพื้น\nวิตกจริต\nวิถีทาง\nวิทยากร\nวิทยากล\nวิทยาการ\nวิทยาเขต\nวิทยาทาน\nวิทยาธร\nวิทยานิพนธ์\nวิทยาศาสตร์\nวิเทศสัมพันธ์\nวิธีการ\nวินัยธร\nวินัยปิฎก\nวินาศกรรม\nวินาศภัย\nวินาศสันตะโร\nวิภัชพยากรณ์\nวิภัชวาที\nวิไลวรรณ\nวิสัญญีแพทย์\nวิสัญญีภาพ\nวิสัญญีวิทยา\nวุฒิบัตร\nวุฒิสภา\nวุฒิสมาชิก\nวุ่นวาย\nวุ้นเส้น\nวูบวาบ\nเวจกุฎี\nเวจมรรค\nเวชกรรม\nเวชภัณฑ์\nเวชศาสตร์\nเวทมนตร์\nเวนคืน\nเวรกรรม\nเวฬุการ\nเวฬุวัน\nเว้าวอน\nเวิ้งว้าง\nเวียงวัง\nเวียนเทียน\nแว้งกัด\nแวดล้อม\nแวดวง\nแว่นขยาย\nแว่นแคว้น\nแว่นตา\nแวบวับ\nแววตา\nแวววาม\nแวววาว\nแวะเวียน\nโวยวาย\nไวไฟ\nไว้ใจ\nไว้ชื่อ\nไว้ตัว\nไว้ทุกข์\nไว้ลาย\nไว้หน้า\nไว้อาลัย\nศนิวาร\nศอกกลับ\nศอกกำ\nศอกกำมา\nศักดิ์ศรี\nศักดิ์สิทธิ์\nศารทวิษุวัติ\nศาลแขวง\nศาลจังหวัด\nศาลชั้นต้น\nศาลฎีกา\nศาลเตี้ย\nศาลทหาร\nศาลปกครอง\nศาลพระภูมิ\nศาลเพียงตา\nศาลแพ่ง\nศาลรัฐธรรมนูญ\nศาลแรงงาน\nศาลล้มละลาย\nศาลโลก\nศาลสูง\nศาลสูงสุด\nศาลอาญา\nศาลอุทธรณ์\nศาลากลาง\nศาลาดิน\nศาลาราย\nศาลาวัด\nศิลาฤกษ์\nศิลาแลง\nศิษย์เก่า\nศิษย์เอก\nศีลจุ่ม\nศีลธรรม\nศีลวัต\nศีลอด\nศูนย์กลาง\nศูนย์การค้า\nศูนย์ถ่วง\nศูนย์สูตร\nศูนย์หน้า\nเศร้าใจ\nเศร้าโศก\nเศร้าสร้อย\nเศร้าสลด\nเศร้าหมอง\nเศวตฉัตร\nเศษเกิน\nเศษซ้อน\nเศษวรรค\nเศษส่วน\nเศษเหล็ก\nโศกนาฏกรรม\nโศกศัลย์\nโศกเศร้า\nโศกสลด\nสกลโลก\nส่งเดช\nส่งท้าย\nส่งเสริม\nส่งเสีย\nส่งเสียง\nสงบเงียบ\nสงบเสงี่ยม\nสง่างาม\nสง่าราศี\nสดชื่น\nสดใส\nสตรีเพศ\nสติปัญญา\nสถลมารค\nสถานกงสุล\nสถานที่\nสถานทูต\nสถานการณ์\nสถานภาพ\nสถิติศาสตร์\nสนตะพาย\nสนใจ\nส้นตีน\nสนธิสัญญา\nสนนราคา\nสนับแข้ง\nสนับเพลา\nสนับมือ\nสนามบิน\nสนามเพลาะ\nสนิทสนม\nสนิมขุม\nสนิมสร้อย\nสนุกสนาน\nสบประมาท\nสบายใจ\nสภาพธรรม\nสมควร\nสมจริง\nสมใจ\nสมนัย\nสมน้ำหน้า\nสมประกอบ\nสมส่วน\nสมหวัง\nสมคบ\nสมทบ\nสมยอม\nสมรัก\nสมรู้\nสมสู่\nส้มฉุน\nส้มตำ\nส้มลิ้ม\nส้มกุ้ง\nส้มเช้า\nสมญานาม\nสมมติฐาน\nสมมุติฐาน\nสมมติเทพ\nสมรภูมิ\nสมัครใจ\nสมัยนิยม\nสมุทรศาสตร์\nสมุทรเสนา\nสยดสยอง\nสยองขวัญ\nสยามรัฐ\nสรรหา\nสรวมชีพ\nสรวลเส\nสร้อยเศร้า\nสร้างสรรค์\nสร้างเสริม\nสลดใจ\nสลบไสล\nสละสลวย\nสลาเหิน\nสลากภัต\nสวนครัว\nสวนป่า\nสวนสนุก\nสวนหย่อม\nส่วนกลาง\nส่วนเกิน\nส่วนตัว\nส่วนบุญ\nส่วนแบ่ง\nส่วนประกอบ\nส่วนพระองค์\nส่วนผสม\nส่วนรวม\nส่วนร่วม\nส่วนลด\nส่วนสัด\nสวมกอด\nสวมเขา\nสวมรอย\nสวยมภู\nสว่างไสว\nสวามิภักดิ์\nสวิงสวาย\nสสารนิยม\nส่อเสียด\nสอดคล้อง\nสอดแทรก\nสอดแนม\nสอบถาม\nสอบทาน\nสอบไล่\nสอบสวน\nส้อมเสียง\nสะสวย\nสะแกวัลย์\nสะแกแสง\nสะใจ\nสะเด็ดยาด\nสะเทือนใจ\nสะบัดช่อ\nสั่งสม\nสั่งสอน\nสั่งเสีย\nสังเกตการณ์\nสังคมนิยม\nสังคมวิทยา\nสังคมศาสตร์\nสังคมศึกษา\nสังคมสงเคราะห์\nสัญญาบัตร\nสัดส่วน\nสัตการ\nสัตบุรุษ\nสัตบริภัณฑ์\nสัตภัณฑ์\nสัตมหาสถาน\nสัตโลหะ\nสันเขา\nสันดอน\nสันหลัง\nสั่นเทา\nสั่นเทิ้ม\nสันติบาล\nสันติภาพ\nสันติวิธี\nสันติสุข\nสับเปลี่ยน\nสับสน\nสับหลีก\nสับหว่าง\nสัมมาคารวะ\nสัมมาชีพ\nส่าเหล้า\nสากกะเบือ\nสาทิสลักษณ์\nสาธุการ\nสาธุชน\nสาบเสือ\nสาปสรร\nสาปแช่ง\nสาปส่ง\nสามง่าม\nสามล้อ\nสามเหลี่ยม\nสามเวท\nสามัญชน\nสามัญสำนึก\nสายดิ่ง\nสายดิน\nสายตรวจ\nสายน้ำ\nสายบัว\nสายพาน\nสายฟ้า\nสายยาง\nสายยู\nสายใย\nสายรก\nสายรุ้ง\nสายล่อฟ้า\nสายลับ\nสายเลือด\nสายโลหิต\nสายวัด\nสายส่ง\nสายสวาท\nสายสะดือ\nสายสะพาย\nสายสัมพันธ์\nสายสิญจน์\nสายสืบ\nสายไหม\nสายอากาศ\nสายตา\nสายหยุด\nสารตรา\nสารประกอบ\nสารละลาย\nสารส้ม\nสารหนู\nสารทฤดู\nสาวใช้\nสาวน้อย\nสาวใหญ่\nสำนักงาน\nสำนักพิมพ์\nสำนักสงฆ์\nสำมะโนครัว\nสำเร็จรูป\nสิกขาบท\nสิงสถิต\nสิงสู่\nสิ่งก่อสร้าง\nสิ่งของ\nสิ่งปฏิกูล\nสิ่งพิมพ์\nสิ่งแวดล้อม\nสิ่งศักดิ์สิทธิ์\nสิทธิกร\nสิทธิ์ขาด\nสิทธิชัย\nสิทธิโชค\nสิทธิบัตร\nสินค้า\nสินจ้าง\nสินเชื่อ\nสินไถ่\nสินทรัพย์\nสินน้ำใจ\nสินบน\nสินแร่\nสินสมรส\nสินสอด\nสินไหม\nสิ้นเชิง\nสิ้นสุด\nสีผึ้ง\nสีลม\nสีชอล์ก\nสีถ่าน\nสีเทียน\nสีน้ำ\nสีน้ำมัน\nสีโปสเตอร์\nสีฝุ่น\nสี่เหลี่ยม\nสีหน้า\nสึกหรอ\nสืบทอด\nสืบค้น\nสืบสวน\nสืบสาว\nสืบเสาะ\nสื่อผสม\nสื่อมวลชน\nสื่อสาร\nสุกงอม\nสุกดิบ\nสุกปลั่ง\nสุกใส\nสุขนาฏกรรม\nสุขภัณฑ์\nสุขภาพ\nสุขลักษณะ\nสุขวิทยา\nสุขศาลา\nสุขศึกษา\nสุดท้าย\nสุตกวี\nสุนทรพจน์\nสุภาพชน\nสู่ขอ\nสู่รู้\nสู่สม\nสูงส่ง\nสูญเปล่า\nสูญสิ้น\nสูญเสีย\nสูญหาย\nเสสรวล\nเสแสร้ง\nเสกสรร\nเสถียรภาพ\nเส้นชัย\nเส้นตรง\nเส้นตาย\nเส้นทาง\nเส้นใย\nเส้นรุ้ง\nเส้นเลือด\nเส้นแวง\nเส้นสาย\nเส้นเสียง\nเส้นหมี่\nเส้นเอ็น\nเสบียงกรัง\nเสมอภาค\nเสมอหน้า\nเสมอเหมือน\nเสมียนตรา\nเสร็จสรรพ\nเสร็จสิ้น\nเสริมส่ง\nเสริมสร้าง\nเสริมสวย\nเสรีไทย\nเสรีธรรม\nเสรีนิยม\nเสรีภาพ\nเสาเข็ม\nเสาธง\nเสียใจ\nเสียเชิง\nเสียดาย\nเสียที\nเสียเที่ยว\nเสียเปรียบ\nเสียเปล่า\nเสียรู้\nเสียแรง\nเสียสละ\nเสียหลัก\nเสียหาย\nเสี่ยงทาย\nเสียดแทง\nเสียดแทรก\nเสียดสี\nเสี้ยนศึก\nเสี้ยนหนาม\nเสี้ยมสอน\nเสียวซ่าน\nเสียวไส้\nเสือดาว\nเสือดำ\nเสือปลา\nเสือป่า\nเสือไฟ\nเสื่อกก\nเสื่อกระจูด\nเสื่อน้ำมัน\nเสื่อลำแพน\nเสื้อกล้าม\nเสื้อกั๊ก\nเสื้อเกราะ\nเสื้อครุย\nเสื้อแสง\nเสื้อเมือง\nเสือกคลาน\nเสือกสน\nเสือกไส\nเสื่อมคลาย\nเสื่อมถอย\nเสื่อมทราม\nเสื่อมโทรม\nเสื่อมสลาย\nเสื่อมสูญ\nเสื่อมเสีย\nเสือหมอบ\nแสกหน้า\nแสดงออก\nแสเถา\nแสนกล\nแสนรู้\nแสร้งว่า\nใส่ความ\nใส่ไคล้\nใส่ใจ\nใส่ไฟ\nไส้กรอก\nไส้ไก่\nไส้ติ่ง\nไส้ศึก\nไส้อั่ว\nไส้เดือน\nไส้ตัน\nไสยเวท\nไสยศาสตร์\nหกล้ม\nหงส์หยก\nหงอนไก่\nหงอยก๋อย\nหงอยเหงา\nหงายท้อง\nหงายหลัง\nหงำเหงอะ\nหงำเหงือก\nหดหาย\nหดหู่\nหนทาง\nหนวกหู\nหน่วงเหนี่ยว\nหน่วยก้าน\nหน่อไม้\nหนองใน\nหนองแซง\nหนักข้อ\nหนักใจ\nหนักแน่น\nหนักหน่วง\nหนักหนา\nหนังกลับ\nหนังตะลุง\nหนังเรียด\nหนังสด\nหนังใหญ่\nหนังสือพิมพ์\nหนาแน่น\nหน้ากระดาน\nหน้ากาก\nหน้ากาฬ\nหน้าแข้ง\nหน้าจั่ว\nหน้าฉาน\nหน้าตัก\nหน้าตา\nหน้าต่าง\nหน้าท้อง\nหน้าทับ\nหน้าที่\nหน้าที่นั่ง\nหน้าบัน\nหน้าปัด\nหน้าผา\nหน้าผาก\nหน้าม้า\nหน้ามุข\nหน้าไม้\nหน้าเลือด\nหน้าอก\nหนามเตย\nหน่ายหนี\nหน่ายแหนง\nหนาวเหน็บ\nหนำใจ\nหนี้สิน\nหนี้สูญ\nหนุนเนื่อง\nหนุนหลัง\nหมกมุ่น\nหมดจด\nหมอขวัญ\nหมอความ\nหมอแคน\nหมองู\nหมอดู\nหมอตำแย\nหมอทำขวัญ\nหมอนวด\nหมอผี\nหมอยา\nหมอลำ\nหมอเสน่ห์\nหม้อแกง\nหม้อตาล\nหม้อน้ำ\nหม้อแปลง\nหมองใจ\nหมองมัว\nหมองหม่น\nหมองหมาง\nหมอนขวาน\nหมอนข้าง\nหมอนทอง\nหม่อมเจ้า\nหม่อมฉัน\nหม่อมราชวงศ์\nหม่อมหลวง\nหม่อมห้าม\nหมั่นไส้\nหมาป่า\nหมาหมู่\nหมากฝรั่ง\nหมากสง\nหมากหอม\nหมากเก็บ\nหมากรุก\nหมากเม่า\nหมางใจ\nหมางเมิน\nหมาไม้\nหมายเกณฑ์\nหมายขัง\nหมายค้น\nหมายความ\nหมายจับ\nหมายใจ\nหมายตา\nหมายปล่อย\nหมายมั่น\nหมายเรียก\nหมายเลข\nหมายเหตุ\nหมิ่นเหม่\nหมึกจีน\nหมุนเวียน\nหมูแดง\nหมูป่า\nหมูแผ่น\nหมูยอ\nหมูหย็อง\nหมูหัน\nหมูแฮม\nหมู่บ้าน\nหยดย้อย\nหยอกเย้า\nหยักรั้ง\nหยักศก\nหยั่งทราบ\nหยั่งรู้\nหยั่งเสียง\nหยาบคาย\nหยาบช้า\nหยาบโลน\nหยาบหยาม\nหยิบมือ\nหยิบยก\nหยิบยืม\nหยิบหย่ง\nหยิบโหย่ง\nหริรักษ์\nหริวงศ์\nหลงผิด\nหลบฉาก\nหลบมุม\nหลวงจีน\nหลวงพ่อ\nหลวมตัว\nหล่อลื่น\nหล่อเลี้ยง\nหล่อหลอม\nหลอกลวง\nหลอกล่อ\nหลอกล้อ\nหลอดลม\nหลอดเลือด\nหลอดอาหาร\nหลอมตัว\nหลอมเหลว\nหลักการ\nหลักเกณฑ์\nหลักชัย\nหลักฐาน\nหลักทรัพย์\nหลักเมือง\nหลักลอย\nหลักสูตร\nหลักแหล่ง\nหลักแหลม\nหลังคา\nหลังเต่า\nหลั่งไหล\nหลับนก\nหลับใน\nหลากใจ\nหลากหลาย\nหลาบจำ\nหลายหลาก\nหลายแหล่\nหลุดพ้น\nหลุดลอย\nหลุดลุ่ย\nหลุมโจน\nหลุมพราง\nหวงก้าง\nหวงห้าม\nหวงแหน\nห่วงใย\nห้วงน้ำ\nหวังใจ\nหวังดี\nหวั่นกลัว\nหวั่นเกรง\nหวั่นใจ\nหวั่นวิตก\nหวั่นหวาด\nหวั่นไหว\nหวาดกลัว\nหวาดเกรง\nหวาดผวา\nหวาดเสียว\nหวาดหวั่น\nหวาดไหว\nหวานเย็น\nหว่านล้อม\nหอคอย\nหอคำ\nหอฉัน\nหอไตร\nหอประชุม\nหอพัก\nห่อหมก\nห่อเหี่ยว\nหอกซัด\nห้องเครื่อง\nห้องชุด\nห้องแถว\nห้องโถง\nห้องน้ำ\nห้องสมุด\nหอสมุด\nหอมหวน\nห้อมล้อม\nห้อยโหน\nหักล้าง\nหักหาญ\nหักห้าม\nหักเห\nหักโหม\nหักมุก\nหันเห\nหับเผย\nหัวขโมย\nหัวข้อ\nหัวขั้ว\nหัวเข่า\nหัวโขน\nหัวคะแนน\nหัวค่ำ\nหัวคิด\nหัวจุก\nหัวโจก\nหัวใจ\nหัวเทียน\nหัวนม\nหัวนอน\nหัวป่า\nหัวมุม\nหัวเรื่อง\nหัวแร้ง\nหัวใส\nหัวหน้า\nหัวหน่าว\nหัวหอก\nหัวเห็ด\nหัวไหล่\nหัวอก\nหัสดนตรี\nหัสนาฏกรรม\nหัสนิยาย\nหัสดีลิงค์\nหางเครื่อง\nหางแถว\nหางเลข\nหางว่าว\nหางเสียง\nหางเสือ\nห่างเหิน\nหาบเร่\nห้ามปราม\nห้ามล้อ\nหายตัว\nหาวนอน\nห้าวหาญ\nห้ำหั่น\nหินงอก\nหินทราย\nหินปูน\nหินย้อย\nหินอ่อน\nหินชาติ\nหินยาน\nหีบเพลง\nหีบห่อ\nหุ่นกระบอก\nหุ่นยนต์\nหุ้นลม\nหุ้นส่วน\nหุบเขา\nหุบผา\nหุบเหว\nหูกระต่าย\nหูช้าง\nหูรูด\nหูกวาง\nเหงาหงอย\nเหงื่อกาฬ\nเหตุการณ์\nเหตุผล\nเห็นแก่\nเห็นใจ\nเหน็บแนม\nเหน็บชา\nเหนียวแน่น\nเหนี่ยวนำ\nเหนี่ยวรั้ง\nเหนื่อยหน่าย\nเหมาะเจาะ\nเหมาะสม\nเหมาะเหม็ง\nเหยเก\nเหยียดหยาม\nเหล็กกล้า\nเหล็กจาร\nเหล็กใน\nเหล็กส่ง\nเหล็กเส้น\nเหล็กหล่อ\nเหล็กไหล\nเหลวแหลก\nเหลวไหล\nเหลอหลา\nเหล่ากอ\nเหลียวแล\nเหลือเกิน\nเหลือขอ\nเหลือใจ\nเหลือเชื่อ\nเหลือเฟือ\nเหลือร้าย\nเหลือล้น\nเหลือหลาย\nเหลือแหล่\nเหลือแสน\nเหลือหลอ\nเหลื่อมล้ำ\nเห่อเหิม\nเหินห่าง\nเหิมเกริม\nเหิมหาญ\nเหี้ยมเกรียม\nเหี้ยมหาญ\nเหี้ยมโหด\nเหี่ยวแห้ง\nเหือดหาย\nเหือดแห้ง\nแห่แหน\nแหนงหน่าย\nแหลกลาญ\nแหลกเหลว\nแหวกแนว\nแหวกว่าย\nโหงพราย\nโหดร้าย\nโหดเหี้ยม\nโหยหวน\nโหวงเหวง\nให้การ\nให้ท่า\nให้ท้าย\nให้ร้าย\nให้หลัง\nไหมพรม\nไหวพริบ\nอกไก่\nอกร่อง\nองค์กร\nองค์การ\nอดกลั้น\nอดทน\nอดสู\nอดอยาก\nอดออม\nอดีตกาล\nอดีตชาติ\nอดีตภพ\nอติชาตบุตร\nอธิการบดี\nอนาคตกาล\nอนิจกรรม\nอนุชาตบุตร\nอเนกประสงค์\nอบรม\nอบอวล\nอบอ้าว\nอบอุ่น\nอบายภูมิ\nอบายมุข\nอภัพบุคคล\nอภัยทาน\nอภัยโทษ\nอภิชาตบุตร\nอมยิ้ม\nอมรรัตน์\nอมฤตบท\nอมฤตรส\nอย่างไร\nอรรถกร\nอรรถกวี\nอรรถคดี\nอรรถประโยชน์\nอรรถรส\nอรรธนิศา\nอรรธภาค\nอรรธสระ\nอรสุมพล\nอรูปฌาน\nอรูปพรหม\nอรูปภพ\nอรูปภูมิ\nอวชาตบุตร\nอวดดี\nอวดอ้าง\nอ้วนท้วน\nอ้วนพี\nอวบอั๋น\nอวยชัย\nอวยพร\nอสุภกรรมฐาน\nอสุภสัญญา\nอโหสิกรรม\nออเจ้า\nออกแขก\nออกตัว\nออกโรง\nออกฤทธิ์\nออกลาย\nออกหาก\nออดอ้อน\nออดแอด\nอ่อนข้อ\nอ่อนใจ\nอ่อนช้อย\nอ่อนน้อม\nอ่อนเปลี้ย\nอ่อนเพลีย\nอ่อนโยน\nอ่อนหวาน\nอ่อนหัด\nอ่อนไหว\nอ่อนแอ\nอ้อนวอน\nอ้อนออด\nอ้อมค้อม\nอักษรศาสตร์\nอักษรสาส์น\nอัคคีภัย\nอัญชนะศักราช\nอัดฉีด\nอัดอั้น\nอัตราส่วน\nอันโตชน\nอันโตนาที\nอับจน\nอับเฉา\nอับอาย\nอัสสุชล\nอัสสุธารา\nอากัปกิริยา\nอาการนาม\nอากาศธาตุ\nอากาศยาน\nอาคารชุด\nอ่างเก็บน้ำ\nอ้างอิง\nอาจหาญ\nอาจอง\nอาชญากร\nอาชญากรรม\nอาชญาบัตร\nอาชญาสิทธิ์\nอาญาสิทธิ์\nอาณาเขต\nอาณาจักร\nอาณานิคม\nอาณาประโยชน์\nอาโปกสิณ\nอาโปธาตุ\nอาภากร\nอายุขัย\nอายุวัฒนะ\nอาโลกกสิณ\nอาหารว่าง\nอำพราง\nอิดโรย\nอิดออด\nอิดเอื้อน\nอิตถีลิงค์\nอิทธิปาฏิหาริย์\nอิทธิพล\nอิทธิฤทธิ์\nอินังขังขอบ\nอิ่มตัว\nอิ่มหนำ\nอิ่มเอม\nอิ่มเอิบ\nอีฉัน\nอีตัว\nอึงคะนึง\nอึงมี่\nอึงอล\nอึ่งยาง\nอึ่งอ่าง\nอึดใจ\nอึดอัด\nอืดอาด\nอื้อฉาว\nอื้อซ่า\nอื้ออึง\nอุกฉกรรจ์\nอุกอาจ\nอุดอู้\nอุ่นเครื่อง\nอุ่นใจ\nอุบอิบ\nอุบัติภัย\nอุบัติเหตุ\nอุโบสถกรรม\nอุโบสถหัตถี\nอุปมาโวหาร\nอุ้มชู\nอุ้มสม\nอุ้ยอ้าย\nอู้อี้\nเอกจิต\nเอกฉันท์\nเอกชน\nเอกเทศ\nเอกนัย\nเอกบุคคล\nเอกบุรุษ\nเอกพจน์\nเอกภพ\nเอกภาพ\nเอกมัย\nเอกราช\nเอกรูป\nเอกลักษณ์\nเอกศก\nเอกสาร\nเอกสิทธิ์\nเอกอุ\nเอ็ดอึง\nเอนเอียง\nเอมอร\nเอออวย\nเออออ\nเอาการ\nเอางาน\nเอาจริง\nเอาใจ\nเอาเปรียบ\nเอาเยี่ยง\nเอิบอาบ\nเอียงอาย\nเอียงเอน\nเอื้อเฟื้อ\nโอ่โถง\nโอ้โถง\nโอ่อวด\nโอ้อวด\nโอ่อ่า\nโอ้โลม\nโอดครวญ\nโอดโอย\nโอนอ่อน\nโอนเอน\nโอบอ้อม\nโอบอุ้ม\nโอสถกรรม\nไอเสีย\nไอกรน\nฮวบฮาบ\nฮาป่า\nฮึกหาญ\nฮึกห้าว\nฮึกเหิม\nฮึกโหม\nฮึกฮัก\nเฮงซวย\nโฮกฮือ\nโฮกฮาก\n\nก็\nกก\nก๊ก\nกกุธภัณฑ์\nกง\nก่ง\nก้ง\nก๊ง\nก๋ง\nกงกอน\nกงไฉ่\nกงเต๊ก\nกงสี\nกงสุล\nกช\nกฎ\nกฏุก\nกฐิน\nกณิกนันต์\nกณิการ์\nกด\nกตเวทิตา\nกตเวที\nกตัญชลี\nกตัญญุตา\nกตัญญู\nกตาธิการ\nกตาภินิหาร\nกติกา\nกถา\nกถิกาจารย์\nกทลี\nกน\nก่น\nก้น\nกนก\nกนิษฐ์\nกนิษฐา\nกบ\nกบฏ\nกบดาน\nกบทู\nกบาล\nกบินทร์\nกบิล\nกบี่\nกบูร\nกเบนทร์\nกม\nก้ม\nกมณฑลาภิเษก\nกมณฑโลทก\nกมล\nกมลา\nกมลาศ\nกมลาสน์\nกมเลศ\nกมัณฑลุ\nกมุท\nกร\nกรกฎ\nกรกฎาคม\nกรกฏ\nกรง\nกรชกาย\nกรณฑ์\nกรณิการ์\nกรณี\nกรณีย์\nกรณียกิจ\nกรณียะ\nกรด\nกรน\nกรบ\nกรบูร\nกรพินธุ์\nกรม\nกรรกฎ\nกรรกศ\nกรรเกด\nกรรไกร\nกรรเจียก\nกรรชิง\nกรรเชียง\nกรรโชก\nกรรฐ์\nกรรฐา\nกรรณ\nกรรณา\nกรรณิกา\nกรรณิการ์\nกรรดิ\nกรรดิก\nกรรดึก\nกรรตุ\nกรรไตร\nกรรทบ\nกรรแทก\nกรรบิด\nกรรบูร\nกรรภิรมย์\nกรรม\nกรรม์\nกรรม์ภิรมย์\nกรรมชวาต\nกรรมัชวาต\nกรรมาชีพ\nกรรมาธิการ\nกรรมาร\nกรรษก\nกรรสะ\nกรรแสง\nกรวด\nกรวบ\nกรวม\nกร้วม\nกรวย\nกรวิก\nกรสาปน์\nกรสุทธิ์\nกรอ\nกร้อ\nกรอก\nกร็อกกร๋อย\nกรอกแกรก\nกรอง\nกรองกรอย\nกรอด\nกร่อน\nกรอบ\nกรอม\nกร่อย\nกระ\nกระกร\nกระกรุ่น\nกระกลับกลอก\nกระกี้\nกระเกรอก\nกระเกริก\nกระเกริ่น\nกระคน\nกระคาย\nกระงกกระเงิ่น\nกระง่องกระแง่ง\nกระง่อนกระแง่น\nกระเง้ากระงอด\nกระโงก\nกระจก\nกระจง\nกระจร\nกระจอก\nกระจองหง่อง\nกระจ๋องหง่อง\nกระจองอแง\nกระจ้อน\nกระจอนหู\nกระจ้อย\nกระจ๋อหวอ\nกระจะ\nกระจัก\nกระจัง\nกระจัด\nกระจับ\nกระจ่า\nกระจ่าง\nกระจาด\nกระจาน\nกระจาบ\nกระจาม\nกระจาย\nกระจาว\nกระจิก\nกระจิ๋ง\nกระจิด\nกระจิบ\nกระจิ๋ม\nกระจิริด\nกระจิ๋ว\nกระจี้\nกระจี๋\nกระจุก\nกระจุ๋งกระจิ๋ง\nกระจุบ\nกระจุ๊บ\nกระจุ๋มกระจิ๋ม\nกระจุย\nกระจู้\nกระจู๋กระจี๋\nกระจูด\nกระเจอะกระเจิง\nกระเจา\nกระเจ่า\nกระเจ้า\nกระเจาะ\nกระเจิง\nกระเจิดกระเจิง\nกระเจี้ยง\nกระเจี๊ยบ\nกระเจียว\nกระเจี๊ยว\nกระแจะ\nกระโจน\nกระโจม\nกระฉอก\nกระฉ่อน\nกระฉับกระเฉง\nกระฉิ่ง\nกระฉีก\nกระฉูด\nกระเฉก\nกระเฉด\nกระแฉก\nกระโฉกกระเฉก\nกระโฉม\nกระชดกระช้อย\nกระชอน\nกระชอมดอก\nกระช้อย\nกระชัง\nกระชั้น\nกระชับ\nกระชาก\nกระชาย\nกระชิง\nกระชิด\nกระชุ\nกระชุก\nกระชุ่มกระชวย\nกระเชอ\nกระเชา\nกระเช้า\nกระเชียง\nกระแชง\nกระแชะ\nกระโชก\nกระซ่องกระแซ่ง\nกระซับ\nกระซาบ\nกระซิก\nกระซิบ\nกระซี้\nกระซุง\nกระซุบกระซิบ\nกระซุ้ม\nกระซู่\nกระเซ็น\nกระเซอ\nกระเซอะกระเซอ\nกระเซอะกระเซิง\nกระเซ้า\nกระเซิง\nกระแซ\nกระแซะ\nกระโซกระเซ\nกระฎี\nกระฎุมพี\nกระดก\nกระด้ง\nกระดนโด่\nกระดวง\nกระดวน\nกระด้วมกระเดี้ยม\nกระดอ\nกระดอง\nกระดองหาย\nกระดอน\nกระดอม\nกระดักกระเดี้ย\nกระดังงัว\nกระดังงา\nกระดาก\nกระด้าง\nกระดางลาง\nกระดาด\nกระดาดขาว\nกระดาน\nกระดานพน\nกระดาษ\nกระดำกระด่าง\nกระดิก\nกระดิ่ง\nกระดิ้ง\nกระดิบ\nกระดี่\nกระดี้กระเดียม\nกระดึง\nกระดืบ\nกระดุ\nกระดุกกระดิก\nกระดุ้งกระดิ้ง\nกระดุบ\nกระดุบกระดิบ\nกระดุม\nกระดูก\nกระเดก\nกระเด้ง\nกระเด็น\nกระเด้า\nกระเดาะ\nกระเดิด\nกระเดี้ย\nกระเดียด\nกระเดือก\nกระเดื่อง\nกระแด็ก\nกระแด้ง\nกระแด้แร่\nกระแด่ว\nกระแดะ\nกระโดก\nกระโดง\nกระโดด\nกระโดน\nกระได\nกระตรับ\nกระตราก\nกระตรุด\nกระตรุม\nกระต้วมกระเตี้ยม\nกระต้อ\nกระต่องกระแต่ง\nกระต๊อบ\nกระต้อยตีวิด\nกระตัก\nกระตั้ว\nกระต่าย\nกระติก\nกระติ๊ด\nกระติบ\nกระตือรือร้น\nกระตุก\nกระตุ้งกระติ้ง\nกระตุ่น\nกระตุ้น\nกระตูบ\nกระเตง\nกระเต็น\nกระเตอะ\nกระเตาะ\nกระเตาะกระแตะ\nกระเตื้อง\nกระแต\nกระแตแต้แว้ด\nกระโตกกระตาก\nกระโตน\nกระถด\nกระถอบ\nกระถั่ว\nกระถาง\nกระถิก\nกระถิน\nกระเถิบ\nกระโถน\nกระทก\nกระทง\nกระทบ\nกระทรวง\nกระทอก\nกระท้อน\nกระท่อนกระแท่น\nกระท่อม\nกระท้อมกระแท้ม\nกระทะ\nกระทั่ง\nกระทั้น\nกระทา\nกระทาย\nกระทาสี\nกระทาหอง\nกระทำ\nกระทิกกระทวย\nกระทิง\nกระทึง\nกระทืบ\nกระทุ\nกระทุง\nกระทุ้ง\nกระทุ่ม\nกระทู้\nกระเท่\nกระเทียบ\nกระเทียม\nกระเทือน\nกระเทื้อม\nกระแทก\nกระแท่น\nกระแทะ\nกระไทชาย\nกระน่อง\nกระนั้น\nกระนี้\nกระแนะกระแหน\nกระโน้น\nกระไน\nกระบก\nกระบม\nกระบวน\nกระบวย\nกระบวร\nกระบอก\nกระบอง\nกระบะ\nกระบัด\nกระบั้วกระเบี้ย\nกระบ่า\nกระบ้า\nกระบาก\nกระบาย\nกระบาล\nกระบิ\nกระบิ้ง\nกระบิด\nกระบิล\nกระบี่\nกระบือ\nกระบุง\nกระบุ่มกระบ่าม\nกระบู้กระบี้\nกระบูน\nกระบูร\nกระเบง\nกระเบญ\nกระเบ็ดกระบวน\nกระเบน\nกระเบา\nกระเบิก\nกระเบียด\nกระเบียน\nกระเบื้อง\nกระแบก\nกระแบะ\nกระโบม\nกระปมกระปำ\nกระปมกระเปา\nกระปรอก\nกระปรอกว่าว\nกระปรี้กระเปร่า\nกระปอก\nกระป้อกระแป้\nกระป่อง\nกระป๋อง\nกระปอดกระแปด\nกระป๋อหลอ\nกระปั้วกระเปี้ย\nกระป่ำ\nกระปุก\nกระปุ๊กลุก\nกระปุ่ม\nกระปุ่มกระป่ำ\nกระปุ่มกระปิ่ม\nกระเป๋า\nกระเปาะ\nกระโปก\nกระโปรง\nกระผม\nกระผลีกระผลาม\nกระผาน\nกระผีก\nกระพรวน\nกระพริ้ม\nกระพอก\nกระพอง\nกระพ้อม\nกระพัก\nกระพัง\nกระพังเหิร\nกระพังโหม\nกระพัด\nกระพัตร\nกระพัน\nกระพั่น\nกระพา\nกระพาก\nกระพี้\nกระพือ\nกระพุ้ง\nกระพุ่ม\nกระเพาะ\nกระเพิง\nกระเพื่อม\nกระแพ้ง\nกระฟัดกระเฟียด\nกระฟูมกระฟาย\nกระมล\nกระมอบ\nกระมอมกระแมม\nกระมัง\nกระมัน\nกระมิดกระเมี้ยน\nกระมุท\nกระเมาะ\nกระย่อง\nกระย่องกระแย่ง\nกระย่อน\nกระย่อม\nกระยา\nกระยาง\nกระยาจก\nกระยาหงัน\nกระยิก\nกระยิ้มกระย่อง\nกระยึกกระยือ\nกระยืดกระยาด\nกระเย้อกระแหย่ง\nกระรอก\nกระเรียน\nกระโรกน้ำข้าว\nกระโรกใหญ่\nกระไร\nกระลด\nกระลบ\nกระลอก\nกระลอม\nกระละหล่ำ\nกระลัด\nกระลับ\nกระลัมพร\nกระลา\nกระลำ\nกระลำพัก\nกระลำพุก\nกระลิง\nกระลี\nกระลุมพาง\nกระลุมพุก\nกระลุมพู\nกระลูน\nกระลู่น์\nกระเล็น\nกระเลียด\nกระเลือก\nกระโลง\nกระวน\nกระวัด\nกระวาด\nกระวาน\nกระวาย\nกระวิน\nกระวี\nกระวีกระวาด\nกระวูดกระวาด\nกระเวน\nกระเวยกระวาย\nกระแวน\nกระโวยกระวาย\nกระษัย\nกระษาปณ์\nกระสง\nกระสบ\nกระสม\nกระสรวล\nกระสร้อย\nกระสวน\nกระสวย\nกระสอบ\nกระสะ\nกระสัง\nกระสัน\nกระสับกระส่าย\nกระสา\nกระสานติ์\nกระสาบ\nกระสาย\nกระสือ\nกระสุงกระสิง\nกระสุน\nกระสูทธิ์\nกระสูบ\nกระเสด\nกระเส็นกระสาย\nกระเส่า\nกระเสาะกระแสะ\nกระเสียน\nกระเสียร\nกระเสือกกระสน\nกระแส\nกระแสง\nกระแสะ\nกระโสง\nกระไส\nกระหนก\nกระหนาก\nกระหนาบ\nกระหน่ำ\nกระหมวด\nกระหมอบ\nกระหม่อม\nกระหมั่ง\nกระหมิบ\nกระหมุดกระหมิด\nกระหมุบ\nกระหย่ง\nกระหย่อม\nกระหยัง\nกระหยับ\nกระหยิ่ม\nกระหรอด\nกระหริ่ง\nกระหวน\nกระหวัด\nกระหอง\nกระหัง\nกระหัด\nกระหาง\nกระหาย\nกระหึม\nกระหึ่ม\nกระหืดกระหอบ\nกระเห็น\nกระเหนียด\nกระเหม็ดกระเหมียด\nกระเหม็ดกระแหม่\nกระเหม่น\nกระเหม่า\nกระเหว่า\nกระเห่อ\nกระเหิม\nกระเหี้ยนกระหือรือ\nกระแห\nกระแหทอง\nกระแหนบ\nกระแหนะ\nกระแหมบ\nกระแหม่ว\nกระแหย่ง\nกระแหร่ม\nกระแหล่ง\nกระโห้\nกระโหนด\nกระโหม\nกระโหย\nกระโหย่ง\nกระอวล\nกระอ้อกระแอ้\nกระออดกระแอด\nกระออบ\nกระออม\nกระอ้อมกระแอ้ม\nกระอัก\nกระอักกระอ่วน\nกระอั้วแทงควาย\nกระอ้า\nกระอาน\nกระอิด\nกระอิดกระเอื้อน\nกระอึก\nกระอืด\nกระอุ\nกระอุก\nกระเอา\nกระเอิก\nกระเอิบ\nกระแอก\nกระแอบ\nกระแอม\nกระไอ\nกรัก\nกรักขี\nกรัง\nกรัชกาย\nกรัณฑ์\nกรัณย์\nกรัน\nกรับ\nกรัม\nกราก\nกราง\nกร่าง\nกราด\nกราดวง\nกราน\nกร้าน\nกราบ\nกราฟ\nกราม\nกราย\nกร่าย\nกราว\nกร้าว\nกรำ\nกร่ำ\nกริก\nกริ๊ก\nกริกกริว\nกริกกรี\nกริ่ง\nกริ๊ง\nกริงกริว\nกริ้งกริ้ว\nกริช\nกริณี\nกริน\nกรินทร์\nกรินี\nกริบ\nกริม\nกริ่ม\nกริยา\nกริยานุเคราะห์\nกริว\nกริ้ว\nกรี\nกรีฑา\nกรีด\nกรี๊ด\nกรีธา\nกรีษ\nกรีส\nกรึ๊บ\nกรุ\nกรุง\nกรุ้งกริ่ง\nกรุณ\nกรุณา\nกรุณาธิคุณ\nกรุ่น\nกรุบ\nกรุ่ม\nกรุ้มกริ่ม\nกรุย\nกรุยเกรียว\nกรู\nกรูด\nกรูม\nกเรณุ\nกเรนทร\nกเรนทร์\nกฤช\nกฤดาภินิหาร\nกฤตติกา\nกฤษฎา\nกฤษฎาธาร\nกฤษฎาภินิหาร\nกฤษฎีกา\nกฤษณา\nกล\nกลด\nกล่น\nกลบ\nกลม\nกลละ\nกลวง\nกล้วย\nกลศ\nกล้อ\nกลอก\nกลอง\nกล่อง\nกล้อง\nกล้องแกล้ง\nกลอน\nกล่อน\nกล้อน\nกล่อม\nกล้อมแกล้ม\nกลอย\nกลัก\nกลัด\nกลั่น\nกลั้น\nกลันทก์\nกลันทะ\nกลับ\nกลัมพร\nกลัมพัก\nกลัว\nกลั้ว\nกลา\nกล้า\nกลาก\nกลากลาด\nกลาง\nกลาด\nกลาบาต\nกลาป\nกล้าม\nกลาย\nกล้าย\nกลายกลอก\nกล่าว\nกลาโหม\nกล่ำ\nกล้ำ\nกลิ้ง\nกลิงค์\nกลิ่น\nกลี\nกลีบ\nกลึง\nกลึงค์\nกลืน\nกลุ่ม\nกลุ้ม\nกลูโคส\nกเลวระ\nกวด\nกวน\nกวม\nกวย\nกวยจั๊บ\nกวยจี๊\nก๋วยเตี๋ยว\nกวัก\nกวัด\nกวา\nกว่า\nกวาง\nกว่าง\nกว้าง\nกว่างโซ้ง\nกวางตุ้ง\nกวาด\nกว้าน\nกว๊าน\nกว้าว\nกวาวเครือ\nกวี\nกษณะ\nกษมา\nกษัตร\nกษัตรา\nกษัตริย์\nกษัตรี\nกษัตรีย์\nกษัย\nกษาปณ์\nกษิดิ\nกษีร\nกษีรธารา\nกษีระ\nกสานติ์\nกสิกร\nกสิกรรม\nกสิณ\nกหังปายา\nกหาปณะ\nกเฬวราก\nกอ\nก่อ\nก้อ\nก๊อ\nกอก\nก๊อก\nกอแก\nกอง\nก่อง\nก้อง\nกองกอย\nก๊อซ\nกอด\nก่อน\nก้อน\nกอบ\nกอบนาง\nก๊อบปี้\nกอปร\nก้อม\nกอมก้อ\nก่อมก้อ\nกอย\nก้อย\nก๋อย\nกอริลลา\nกอล์ฟ\nกอและ\nกอเอี๊ยะ\nกะ\nกะกัง\nกะง้องกะแง้ง\nกะจัง\nกะแจะ\nกะชะ\nกะชัง\nกะชามาศ\nกะชิง\nกะชึ่กกะชั่ก\nกะแช่\nกะซวก\nกะซ้าหอย\nกะซี่\nกะโซ่\nกะโซ้\nกะดก\nกะดง\nกะดวน\nกะดอก\nกะดะ\nกะดังบาย\nกะดัด\nกะด้าง\nกะดำกะด่าง\nกะดี\nกะดี่\nกะดุ้ง\nกะเด้\nกะเดก\nกะเดี๋ยว\nกะตรุด\nกะตอก\nกะต่อย\nกะตัก\nกะตั้ก\nกะตัง\nกะตังกะติ้ว\nกะต๊าก\nกะต้ำ\nกะติ๊กริก\nกะติงกะแตง\nกะตีบ\nกะตึงกะแตง\nกะตุ๊ก\nกะตุด\nกะตูก\nกะเตง\nกะโต๊ก\nกะโตงกะเตง\nกะโต้งโห่ง\nกะถัว\nกะทกรก\nกะทอ\nกะทัง\nกะทังหัน\nกะทัดรัด\nกะทันหัน\nกะทับ\nกะทิ\nกะทือ\nกะทุน\nกะเทย\nกะเทาะ\nกะแท้\nกะแท่ง\nกะแทน\nกะนวล\nกะนัด\nกะบ่อนกะแบ่น\nกะบัง\nกะบั้ง\nกะบิ้ง\nกะบิล\nกะบึงกะบอน\nกะบุด\nกะเบ้อ\nกะเบียน\nกะเบือ\nกะปริดกะปรอย\nกะปริบ\nกะปริบกะปรอย\nกะปลกกะเปลี้ย\nกะปวกกะเปียก\nกะปอม\nกะปอมขาง\nกะปะ\nกะป้ำกะเป๋อ\nกะปิ\nกะปู\nกะปูด\nกะปูดหลูด\nกะเปะ\nกะเปิ๊บกะป๊าบ\nกะเปียด\nกะแป้น\nกะแปะ\nกะโปรง\nกะโปโล\nกะผลุบกะโผล่\nกะเผ่น\nกะเผลก\nกะโผลกกะเผลก\nกะพง\nกะพรวดกะพราด\nกะพร่องกะแพร่ง\nกะพริบ\nกะพรุน\nกะพรูดกะพราด\nกะพล้อ\nกะพ้อ\nกะเพรา\nกะเพียด\nกะเม็ง\nกะร่องกะแร่ง\nกะระตะ\nกะระหนะ\nกะรัง\nกะรัต\nกะราง\nกะริง\nกะรุงกะรัง\nกะรุ่งกะริ่ง\nกะรุน\nกะเร\nกะเรกะร่อน\nกะเร่กะร่อน\nกะเร่อ\nกะเรี่ยกะราด\nกะโรกะเร\nกะลวย\nกะลอ\nกะล่อกะแล่\nกะลอจี๊\nกะล่อน\nกะล่อมกะแล่ม\nกะล่อยกะหลิบ\nกะละปังหา\nกะละมัง\nกะละแม\nกะละออม\nกะลังตังไก่\nกะลัน\nกะลันทา\nกะลา\nกะลาง\nกะลาสี\nกะลำพอ\nกะลิง\nกะลิงปลิง\nกะลิ้มกะเหลี่ย\nกะลิอ่อง\nกะลุมพี\nกะเล็ง\nกะเล่อกะล่า\nกะเลิด\nกะเลียว\nกะแล\nกะโล่\nกะโลง\nกะวอกกะแวก\nกะวะ\nกะส้มชื่น\nกะสัง\nกะส้าหอย\nกะหนอกะแหน\nกะหน็องกะแหน็ง\nกะหนะ\nกะหนุงกะหนิง\nกะหร่อง\nกะหรอด\nกะหร็อมกะแหร็ม\nกะหราน\nกะหรี่\nกะหรี่ปั๊บ\nกะหลาป๋า\nกะหล่ำ\nกะหลี่\nกะหลีกะหลอ\nกะหลุกกะหลิก\nกะหำ\nกะหำแพะ\nกะหือ\nกะหูด\nกะเหรี่ยง\nกะเหลาะเปาะ\nกะแหยก\nกะแหะ\nกะโหลก\nกะโหล้ง\nกะไหล่\nกะอวม\nกะออม\nกะอาน\nกะอาม\nกะอูบ\nกัก\nกั๊ก\nกักกรา\nกักการุ\nกักขฬะ\nกัง\nกั้ง\nกังก้า\nกังเกียง\nกังขา\nกังฉิน\nกังฟู\nกังวล\nกังวาน\nกังสดาล\nกังไส\nกังหัน\nกัจฉปะ\nกัจฉะ\nกัจฉา\nกัญ\nกัญจุก\nกัญจุการา\nกัญชา\nกัญญา\nกัฐ\nกัณฏกะ\nกัณฐกะ\nกัณฐชะ\nกัณฐัศ\nกัณฐัศว์\nกัณฐา\nกัณฐี\nกัณฑ์\nกัณณ์\nกัณหา\nกัด\nกัตติกมาส\nกัตติกา\nกัตติเกยา\nกัตรา\nกัทลี\nกัน\nกั่น\nกั้น\nกันเกรา\nกันไกร\nกันชิง\nกันเชอ\nกันดาร\nกันดาล\nกันได\nกันต์\nกันตัง\nกันไตร\nกันทร\nกันทรากร\nกันภิรมย์\nกันเมียง\nกันย์\nกันยา\nกันยายน\nกันลง\nกันลอง\nกันแสง\nกั้นหยั่น\nกับ\nกับแก้\nกัป\nกัปตัน\nกัปปาสิก\nกัปปิยภัณฑ์\nกัปปิยะ\nกัมปนาท\nกัมประโด\nกัมปี\nกัมพล\nกัมพุช\nกัมพู\nกัมพูชา\nกัมโพช\nกัมมัชวาต\nกัมมัฏฐาน\nกัมมันตภาพรังสี\nกัมมันตรังสี\nกัมมาร\nกัมลาศ\nกัยวิกัย\nกัลชาญ\nกัลบก\nกัลป์\nกัลปนา\nกัลปพฤกษ์\nกัลปังหา\nกัลปาวสาน\nกัลปิต\nกัลเม็ด\nกัลยา\nกัลยาณมิตร\nกัลยาณี\nกัลออม\nกัศยป\nกัษณ\nกา\nก๋า\nกาก\nกากบาท\nกากะทิง\nกากะเยีย\nกากี\nกาง\nก้าง\nกางเกง\nกางเขน\nก๊าซ\nกาซะลอง\nกาญจนา\nกาฐ\nกาด\nก๊าด\nกาน\nก่าน\nก้าน\nก๊าน\nกานดา\nกานต์\nกานน\nก้านพร้าว\nกานพลู\nกาน้า\nกาบ\nก้าบ\nกาบู\nกาพย์\nกาเฟอีน\nกาแฟ\nกาม\nก้าม\nกามารมณ์\nกามินี\nกาเมสุมิจฉาจาร\nกาย\nก่าย\nกาเยน\nการ\nการณ์\nการ์ด\nการ์ตูน\nการบูร\nการย์\nการวิก\nการเวก\nการะเกด\nการะบุหนิง\nการัณย์\nการันต์\nการางหัวขวาน\nการิตการก\nการิตวาจก\nการุญ\nการุณย์\nกาเรการ่อน\nกาล\nกาลกรรณี\nกาลกิณี\nกาลจักร\nกาลัญญุตา\nกาลัญญู\nกาลัด\nกาลานุกาล\nกาลิก\nกาลี\nกาแล\nกาแล็กซี\nกาแล็กโทส\nกาว\nก้าว\nกาววาว\nกาวาง\nกาแวน\nกาศิก\nกาษฐะ\nกาษา\nกาสร\nกาสะ\nกาสา\nกาสาร\nกาสาวะ\nกาสิโน\nกาหล\nกาหลง\nกาหลา\nกาเหว่า\nกาไหล่\nกาฬ\nกาฬาวก\nกาฮัง\nกำ\nก่ำ\nกำกวม\nกำกัด\nกำกับ\nก้ำกึ่ง\nกำกูน\nก้ำเกิน\nกำเกียง\nกำคูน\nกำจร\nกำจัด\nกำจาย\nกำชับ\nกำชำ\nกำซาบ\nกำซำ\nกำด้น\nกำดัด\nกำดาล\nกำเดา\nกำธร\nกำนล\nกำนัน\nกำนัล\nกำเนิด\nกำบัง\nก่ำบึ้ง\nกำเบ้อ\nกำปอ\nกำปั่น\nกำผลา\nกำพง\nกำพด\nกำพต\nกำพร้า\nกำพราก\nกำพวด\nกำพอง\nกำพืด\nกำพุด\nกำพู\nกำเพลิง\nกำแพง\nกำภู\nกำมลาศน์\nกำมเลศ\nกำมะถัน\nกำมะลอ\nกำมะหยี่\nกำมะหริด\nกำมังละการ\nกำมังวิลิต\nกำมัชพล\nกำยาน\nกำยำ\nกำรอ\nกำราบ\nกำราล\nกำเริบ\nกำไร\nกำลัง\nกำลุง\nกำเลา\nกำไล\nกำสรด\nกำสรวล\nกำหนด\nกำหนัด\nกำเหน็จ\nกำแหง\nกิก\nกิ๊ก\nกิ่ง\nกิ้งก่า\nกิ้งกือ\nกิ้งโครง\nกิจ\nกิจจะ\nกิจจา\nกิดาการ\nกิดาหยัน\nกิตติ\nกิตติมศักดิ์\nกิน\nกินนร\nกินปลี\nกินเปี้ยว\nกินริน\nกินรี\nกิ๊บ\nกิมตึ๋ง\nกิมิชาติ\nกิมิวิทยา\nกิโมโน\nกิโยตีน\nกิระ\nกิริณี\nกิรินท\nกิริเนศวร\nกิริยา\nกิเลน\nกิเลส\nกิโล\nกิโลมกะ\nกิ่ว\nกิ๋ว\nกี\nกี่\nกี้\nกี๊\nกี๋\nกีฏวิทยา\nกีด\nกีตาร์\nกีบ\nกีรติ\nกีฬา\nกึก\nกึง\nกึ่ง\nกึ๋น\nกุ\nกุก\nกุ๊ก\nกุกกุฏ\nกุกกุร\nกุกรรม\nกุ้ง\nกุงอน\nกุงาน\nกุโงก\nกุจี\nกุญแจ\nกุญชร\nกุฎ\nกุฎา\nกุฎี\nกุฎุมพี\nกุฏฐัง\nกุฏิ\nกุณฑ์\nกุณฑล\nกุณฑี\nกุณโฑ\nกุณาล\nกุณี\nกุด\nกุดัง\nกุดั่น\nกุดา\nกุทัณฑ์\nกุน\nกุ๊น\nกุนเชียง\nกุนที\nกุโนกามอ\nกุบ\nกุบกับ\nกุม\nกุ่ม\nกุมฝอย\nกุมภ์\nกุมภนิยา\nกุมภัณฑ์\nกุมภา\nกุมภิล\nกุมภีล์\nกุมเหง\nกุมาร\nกุมารา\nกุมารี\nกุมุท\nกุย\nกุ๊ย\nกุ๋ย\nกุยช่าย\nกุยเฮง\nกุรระ\nกุรุพินท์\nกุเรา\nกุล\nกุลา\nกุลาหล\nกุลี\nกุลีกุจอ\nกุเลา\nกุแล\nกุเวร\nกุศราช\nกุศล\nกุศโลบาย\nกุสุม\nกุสุมภ์\nกุสุมา\nกุสุมาลย์\nกุสุมิตลดาเวลลิตา\nกุหนี\nกุหนุง\nกุหร่า\nกุหล่า\nกุหลาบ\nกุแหละ\nกู\nกู่\nกู้\nกู๊ก\nกูฏ\nกูฏา\nกูณฑ์\nกูด\nกูบ\nกูปรี\nกูรมะ\nกูรมาวตาร\nเก\nเก้\nเก๊\nเก๋\nเกก\nเก๊ก\nเกกมะเหรก\nเก๊กฮวย\nเก้กัง\nเก็ง\nเก่ง\nเก้ง\nเก๋ง\nเกงกอย\nเก่งกาจ\nเกงเขง\nเก๋งเคง\nเก็จ\nเกจิอาจารย์\nเกชา\nเกณฑ์\nเกด\nเก็ด\nเกตุ\nเกน\nเก็บ\nเกม\nเกย\nเกยูร\nเกรง\nเกร็ง\nเกร็ด\nเกรน\nเกร่อ\nเกรอะ\nเกราะ\nเกริก\nเกริน\nเกริ่น\nเกรียก\nเกรียง\nเกรียด\nเกรียน\nเกรียบ\nเกรียม\nเกรียว\nเกรี้ยว\nเกเร\nเกล็ด\nเกลศ\nเกลอ\nเกลา\nเกล้า\nเกลาะ\nเกลี่ย\nเกลี้ย\nเกลียง\nเกลี้ยง\nเกลียด\nเกลียว\nเกลือ\nเกลื้อ\nเกลือก\nเกลื่อน\nเกลื้อน\nเกวัฏ\nเกวียน\nเกศ\nเกศว\nเกศวะ\nเกศา\nเกศินี\nเกศี\nเกษตร\nเกษม\nเกษียณ\nเกษียน\nเกษียร\nเกส\nเกสร\nเกสรี\nเกสา\nเกสี\nเก้อ\nเกอิชา\nเกะ\nเกะกะ\nเกา\nเก่า\nเก้า\nเก๋า\nเกาต์\nเกาทัณฑ์\nเกาบิล\nเกาลัด\nเกาลิน\nเกาไศย\nเกาหลี\nเกาเหลา\nเกาเหลียง\nเก้าอี้\nเกาะ\nเกิ้ง\nเกิด\nเกิน\nเกิบ\nเกีย\nเกียกกาย\nเกียง\nเกี่ยง\nเกี๋ยง\nเกียจ\nเกียด\nเกียน\nเกี้ยมไฉ่\nเกี้ยมอี๋\nเกียร์\nเกียรติ\nเกียรติ์\nเกี่ยว\nเกี้ยว\nเกี๊ยว\nเกี๊ยะ\nเกื้อ\nเกือก\nเกื้อกูล\nเกือบ\nแก\nแก่\nแก้\nแกง\nแก่ง\nแก้ง\nแก๊ง\nแกงได\nแกงแนง\nแกโดลิเนียม\nแกน\nแก่น\nแก๊ป\nแกม\nแก้ม\nแกมมา\nแกรก\nแกร่ง\nแกร็น\nแกรนิต\nแกรไฟต์\nแกร่ว\nแกระ\nแกล\nแกล้ง\nแกลน\nแกลบ\nแกล้ม\nแกลลอน\nแกลเลียม\nแกล้ว\nแกละ\nแกแล\nแกว\nแก้ว\nแกว่ง\nแก๊ส\nแกะ\nโก\nโก่\nโก้\nโก๋\nโกก\nโกกนุท\nโกกิลา\nโกโก้\nโกง\nโก่ง\nโกงกาง\nโก้งเก้ง\nโกงโก้\nโก้งโค้ง\nโกเชาว์\nโกญจนาท\nโกญจา\nโกฏิ\nโกฐ\nโกฐาส\nโกณะ\nโกดัง\nโกทัณฑ์\nโกน\nโก่น\nโก๋น\nโกมล\nโกมุท\nโกเมน\nโกเมศ\nโกย\nโกรก\nโกรกกราก\nโกรง\nโกร่ง\nโกร่งกร่าง\nโกรงเกรง\nโกร๋งเกร๋ง\nโกรญจ\nโกรต๋น\nโกรธ\nโกรธา\nโกร๋น\nโกรม\nโกรย\nโกรศ\nโกโรโกเต\nโกโรโกโรก\nโกโรโกโส\nโกลน\nโกลาหล\nโกไล\nโกวิท\nโกศ\nโกศล\nโกษม\nโกสน\nโกสัช\nโกสินทร์\nโกสีย์\nโกสุม\nโกไสย\nโกหก\nใกล้\nไก\nไก่\nไก๊\nไก๋\nไก่กอม\nไกพัล\nไกร\nไกรพ\nไกรลาส\nไกรศร\nไกรศรี\nไกรสร\nไกรสรี\nไกรสิทธิ\nไกล\nไกล่\nไกลาส\nไกว\nไกวัล\nขงจื๊อ\nขจร\nขจรจบ\nขจัด\nขจ่าง\nขจาย\nขจาว\nขจิต\nขจี\nขจุย\nขเจา\nขณะ\nขด\nขน\nข้น\nขนง\nขนด\nขนบ\nขนม\nขนอง\nขนอน\nขนอบ\nขนัด\nขนัน\nขนาก\nขนาง\nขนาด\nขนาน\nขนาบ\nขนาย\nขนำ\nขนิษฐ\nขนิษฐา\nขนุน\nขนุนนก\nขบ\nขบถ\nขบวน\nขบวร\nขม\nข่ม\nขมงโกรย\nขมวด\nขมวน\nขมอง\nขม่อม\nขมัง\nขมับ\nขมา\nขม้ำ\nขมิ้น\nขมิบ\nขมีขมัน\nขมึง\nขมึงทึง\nขมุ\nขมุกขมัว\nขมุบ\nขโมย\nขยด\nขยม\nขย่ม\nขยอก\nขยอง\nขย่อน\nขย้อน\nขยะ\nขยัก\nขยัน\nขยั้น\nขยับ\nขยาด\nขยาย\nขยำ\nขย้ำ\nขยิก\nขยิบ\nขยิ่ม\nขยี้\nขยุกขยิก\nขยุกขยุย\nขยุบ\nขยุบขยิบ\nขยุม\nขยุ้ม\nขยุย\nขรม\nขรรค์\nขรัว\nขริบ\nขรี\nขรึม\nขรุขระ\nขลบ\nขล้อ\nขลัง\nขลับ\nขลาด\nขลาย\nขลิบ\nขลุก\nขลุกขลัก\nขลุกขลิก\nขลุบ\nขลุม\nขลุ่ย\nขลู\nขลู่\nขวง\nข่วง\nขวด\nข่วน\nขวนขวาย\nขวบ\nขวย\nขวักไขว่\nขวัญ\nขวั้น\nขวับ\nขวับเขวียว\nขวา\nขวาก\nขวาง\nขว้าง\nขวาด\nขวาน\nขวายขวน\nขวาว\nขว้าว\nขวิด\nขอ\nข่อ\nข้อ\nของ\nข้อง\nขอด\nขอน\nข้อน\nขอบ\nขอม\nข่อย\nข้อย\nข่อยหยอง\nขะแจะ\nขะเน็ด\nขะมอมขะแมม\nขะมักเขม้น\nขะมุกขะมอม\nขะยิก\nขะยุก\nขะเย้อแขย่ง\nขัค\nขัง\nขังขอก\nขัช\nขัณฑสกร\nขัณฑสีมา\nขัด\nขัดมอน\nขัตติยมานะ\nขัน\nขั้น\nขันติ\nขันตี\nขันโตก\nขันที\nขันธ์\nขันธาวาร\nขับ\nขัว\nขั้ว\nขา\nข่า\nข้า\nขาก\nขาก๊วย\nขาง\nข่าง\nข้าง\nขาณุ\nขาด\nขาทนียะ\nขาน\nขาบ\nข้าพเจ้า\nขาม\nข่าม\nข้าม\nขาย\nข่าย\nขาล\nขาว\nข่าว\nข้าว\nข้าวอังกุลี\nขำ\nขิก\nขิง\nขิงแกลง\nขิงแครง\nขิด\nขิปสัทโท\nขิม\nขี่\nขี้\nขี้เข็บ\nขีณาสพ\nขีด\nขี้ตังนี\nขีปนาวุธ\nขี้ยอก\nขีระ\nขึง\nขึ้ง\nขึ้น\nขึ้นฉ่าย\nขืน\nขื่น\nขื่อ\nขุก\nขุด\nขุน\nขุ่น\nขุนเพ็ด\nขุม\nขุย\nขู่\nขูด\nเข\nเข้\nเขก\nเข็ง\nเข่ง\nเขจร\nเข็ญ\nเข็ด\nเขดา\nเขต\nเขน\nเข็น\nเข่น\nเขนง\nเขน็ด\nเขนย\nเขบ็จขบวน\nเขบ็ต\nเขม\nเข็ม\nเข้ม\nเข้มขาบ\nเขม็ง\nเขม็ดแขม่\nเขม่น\nเขม้น\nเขม้นขะมัก\nเขมร\nเขมา\nเขม่า\nเขมือบ\nเขย\nเขยก\nเขย่ง\nเขย้อแขย่ง\nเขย่า\nเขยิน\nเขยิบ\nเขยื้อน\nเขรอะ\nเขลง\nเขลอะ\nเขละ\nเขลา\nเขลาะ\nเขว\nเขษม\nเขฬะ\nเขะขะ\nเขา\nเข่า\nเข้า\nเขิง\nเขิน\nเขิบ\nเขี่ย\nเขียง\nเขียด\nเขียดตะปาด\nเขียน\nเขี่ยน\nเขียม\nเขียว\nเขี้ยว\nเขียะ\nเขือ\nเขือง\nเขื่อง\nเขื่อน\nเขือม\nแข\nแข้\nแขก\nแข็ง\nแข่ง\nแข้ง\nแขน\nแข่น\nแข้น\nแขนง\nแขม\nแขม็บ\nแขม่ว\nแขยง\nแขย่ง\nแขวก\nแขวง\nแขวน\nแขวะ\nโข\nโขก\nโขง\nโข่ง\nโขด\nโขดง\nโขน\nโขนง\nโขม\nโขมง\nโขมด\nโขยก\nโขยง\nโขย่ง\nโขยด\nโขลก\nโขลง\nโขลน\nโขษม\nไข\nไข่\nไข้\nไขว่\nไขว้\nคคนะ\nคคนัมพร\nคคนางค์\nคคนานต์\nคง\nคงคา\nคงไคย\nคช\nคชาชาติ\nคชาชีพ\nคชาธาร\nคชาภรณ์\nคณนา\nคณบดี\nคณะ\nคณาจารย์\nคณาธิการ\nคณาธิปไตย\nคณานับ\nคณิกา\nคณิต\nคเณศ\nคด\nคดี\nคติ\nคทา\nคน\nค้น\nคนทา\nคนทิสอ\nคนที\nคนโท\nคนธ์\nคันธ์\nคนธรรพ์\nคเนจร\nคบ\nคม\nคมน์\nคมนาการ\nคมนาคม\nคมิกภัต\nครก\nครบ\nครรชิต\nครรภ\nครรภ์\nครรลอง\nครรโลง\nครรไล\nครวญ\nครวี\nครหา\nครอก\nครอง\nครองแครง\nคร่อเงาะ\nคร่อเทียน\nครอบ\nคร่อม\nคระเมิม\nคระแลง\nคระไล\nคระแวง\nคระหน\nคระหวน\nคระหาย\nคระโหย\nครั่ง\nครั้ง\nครัดเคร่ง\nครัน\nครั่น\nครั้น\nครับ\nครัว\nครา\nคร่า\nคราก\nคราง\nคราญ\nคราด\nคร้าน\nคราบ\nคราม\nคร้าม\nครามครัน\nคราว\nคร่าว\nคราส\nครำ\nคร่ำ\nคร่ำเคร่ง\nคริปทอน\nคริสต์\nครีบ\nครีม\nครีษมายัน\nครึ\nครึกครื้น\nครึกโครม\nครึ่ง\nครึ่ด\nครึน\nครึ้ม\nครืด\nครืน\nครื้น\nครืนครั่น\nครื้นครั่น\nครื้นครึก\nครื้นเครง\nครือ\nครุ\nครุคระ\nครุฑ\nครุ่น\nครุมเครือ\nครุย\nครุวนา\nครู\nครู่\nครูด\nคฤโฆษ\nคฤนถ์\nคฤหบดี\nคฤหัสถ์\nคฤหาสน์\nคลวง\nคลอ\nคล้อ\nคลอก\nคลอง\nคล่อง\nคล้อง\nคลอด\nคลอน\nคล้อย\nคลอรีน\nคลอโรฟอร์ม\nคลอโรฟีลล์\nคละ\nคละคลุ้ง\nคลัก\nคลั่ก\nคลัง\nคลั่ง\nคลัตช์\nคลับคล้าย\nคลับคลา\nคลา\nคล้า\nคลางแคลง\nคลาด\nคลาน\nคลาย\nคล้าย\nคล้ายคลึง\nคล่าว\nคลำ\nคล่ำ\nคล้ำ\nคลิ้งโคลง\nคลิด\nคลินิก\nคลี\nคลี่\nคลึง\nคลื่น\nคลุก\nคลุ้ง\nคลุบ\nคลุม\nคลุ่ม\nคลุ้ม\nควง\nควณ\nควน\nควบ\nควย\nควร\nควัก\nควั่ก\nควั่งคว้าง\nควัน\nควั่น\nคว้า\nควาก\nคว้าง\nควาญ\nควาน\nคว้าน\nความ\nควาย\nคว่าว\nคว่ำ\nควินิน\nควิวคว่าง\nคหกรรม\nคหกรรมศาสตร์\nคหบดี\nคหัฐ\nคอ\nค้อ\nคอก\nค็อกคัส\nค็อกเทล\nคอเคซอยด์\nค่องอ้อย\nคอด\nคอแดง\nคอน\nค่อน\nค้อน\nคอนกรีต\nคอนเดนเซอร์\nคอนแวนต์\nคอนเสิร์ต\nคอม\nค่อม\nค้อม\nคอมพิวเตอร์\nคอมมานโด\nคอมมิวนิสต์\nคอย\nค่อย\nค้อย\nคอยล์\nคอร์ด\nคอแลน\nคอสติกโซดา\nคะ\nค่ะ\nคะไขว่\nคะค้อย\nคะคาน\nคะนน\nคะนอง\nคะน้า\nคะนึง\nคะเน\nคะเนงร้าย\nคะเน็ด\nคะแนน\nคะมำ\nคะยั้นคะยอ\nคะเยอ\nคัก\nคั่ก\nคัคนะ\nคัคนัมพร\nคัคนางค์\nคัคนานต์\nคั่ง\nคังไคย\nคัจฉ\nคัณฑมาลา\nคัณฑสูตร\nคัด\nคัดเค้า\nคัดมอน\nคัดเม็ง\nคัทลียา\nคัน\nคั่น\nคั้น\nคันถรจนาจารย์\nคันธกุฎี\nคันธมาทน์\nคันธารราษฎร์\nคับ\nคับค้อน\nคับคา\nคับแค\nคัพภ์\nคัมภีร์\nคัมภีรภาพ\nคัล\nคั่ว\nคา\nค่า\nค้า\nค่าคบ\nคาง\nค่าง\nค้าง\nคางคก\nค้างคาว\nคาด\nคาถา\nคาทอลิก\nคาน\nค้าน\nคาบ\nคาพยุต\nคาม\nคามวาสี\nคามณีย์\nคามภีร์\nคาย\nค่าย\nคาร์บอน\nคาร์บอเนต\nคาร์บอลิก\nคาร์บูเรเตอร์\nคาร์โบรันดัม\nคาร์โบไฮเดรต\nคารม\nคารวะ\nคาราเต้\nคาราวาน\nคาว\nค่าว\nค้าว\nคาวตอง\nคาวี\nคาวุต\nคาส\nคำ\nค่ำ\nค้ำ\nคำนวณ\nคำนวร\nคำนับ\nคำนัล\nคำนึง\nคำนูณ\nคำฝอย\nคำเพลิง\nคำรน\nคำรบ\nคำราม\nคำแสด\nคำแหง\nคำโอง\nคิก\nคิง\nคิด\nคิมหันต์\nคิรี\nคิลาน\nคิลานะ\nคิว\nคิ้ว\nคี่\nคีต\nคีบ\nคีม\nคีรี\nคีรีบูน\nคึก\nคึ่ก\nคึกคัก\nคืน\nคืบ\nคือ\nคุ\nคุก\nคุกกี้\nคุกคาม\nคุกพาทย์\nคุ้ง\nคุณ\nคุด\nคุดทะราด\nคุต\nคุตติ\nคุ่น\nคุ้น\nคุป\nคุปต์\nคุปติ\nคุม\nคุ่ม\nคุ้ม\nคุย\nคุ้ย\nคุยหฐาน\nคุยหประเทศ\nคุรุ\nคุลา\nคุลิก่า\nคุลีการ\nคุหา\nคู\nคู่\nคู้\nคูณ\nคูถ\nคูน\nคูปอง\nคูเรียม\nคูหา\nเค้ก\nเค้เก้\nเค้ง\nเคณฑะ\nเคด\nเค็ด\nเคน\nเค้น\nเคเบิล\nเค็ม\nเคมี\nเคย\nเครง\nเคร่ง\nเครงครา\nเครงครำ\nเครดิต\nเครน\nเครา\nเคร่า\nเคราหณี\nเคราะห์\nเครียด\nเครียว\nเครือ\nเครื่อง\nเคล้ง\nเคล็ด\nเคล้น\nเคล้า\nเคล่าคล่อง\nเคลิบเคลิ้ม\nเคลิ้ม\nเคลีย\nเคลื่อน\nเคลือบ\nเคว้ง\nเคหะ\nเคหา\nเคอะ\nเค้า\nเคาน์เตอร์\nเคารพ\nเคาะ\nเคาะแคะ\nเคียง\nเคียด\nเคียน\nเคียม\nเคี่ยม\nเคียร\nเคียว\nเคี่ยว\nเคี้ยว\nเคือง\nแค\nแค่\nแค้\nแคแล\nแคดเมียม\nแค็ตตาล็อก\nแคแตร\nแคโทด\nแคน\nแค่น\nแค้น\nแคบ\nแคบหมู\nแคปซูล\nแคม\nแคร่\nแครก\nแครง\nแคระ\nแคลคูลัส\nแคลง\nแคลเซียม\nแคลน\nแคล้ว\nแคล่วคล่อง\nแคลอรี\nแคลิฟอร์เนียม\nแคว\nแควก\nแคว้น\nแคแสด\nแคะ\nโค\nโคก\nโคเคน\nโค่ง\nโค้ง\nโคจร\nโคเซแคนต์\nโคไซน์\nโคตร\nโคแทนเจนต์\nโคธา\nโคน\nโค่น\nโคบอลต์\nโคปผกะ\nโคม\nโคม่า\nโครก\nโครกคราก\nโครง\nโคร่ง\nโคร่งคร่าง\nโครม\nโครเมียม\nโครโมโซม\nโคราช\nโครำ\nโคล\nโคลง\nโคลน\nโควตา\nโคออร์ดิเนต\nใคร\nใคร่\nใคร่ครวญ\nไค\nไค้\nไคร้\nไคร้เครือ\nไคล\nไคล้\nฆนะ\nฆราวาส\nฆ้อง\nฆ่า\nฆาต\nฆาน\nฆานินทรีย์\nเฆี่ยน\nโฆรวิส\nโฆษก\nโฆษณา\nโฆษะ\nโฆษิต\nงก\nงง\nงด\nงดงาม\nงบ\nงม\nงวง\nง่วง\nงวด\nง่วน\nง้วน\nงวยงง\nงอ\nง้อ\nงอก\nงอกแงก\nง่อกแง่ก\nง่อง\nง่องแง่ง\nงอแง\nงอด\nงอดแงด\nงอน\nง่อน\nง่อนแง่น\nงอนหง่อ\nงอบ\nงอม\nง้อม\nงอย\nง่อย\nงัก\nงั่ก\nงั่ง\nงัด\nงัน\nงันงก\nงับ\nงัว\nงั่ว\nงัวเงีย\nงา\nง่า\nง้าง\nงาน\nง่าน\nงาบ\nงาม\nง่าม\nงาย\nง่าย\nง้าว\nงำ\nง่ำ\nง้ำ\nงิ้ว\nงี่เง่า\nงีบ\nงึก\nงึน\nงึม\nงุด\nงุนงง\nงุ่นง่าน\nงุบ\nงุบงิบ\nงุ้ม\nงุ่มง่าม\nงุย\nงู\nงูบ\nงูสวัด\nเงก\nเงย\nเงอะ\nเงอะงะ\nเงา\nเง่า\nเง้า\nเงาะ\nเงิน\nเงี่ยง\nเงี่ยน\nเงียบ\nเงี้ยว\nเงี่ยหู\nเงื้อ\nเงือก\nเงื่อง\nเงือด\nเงื่อน\nเงือบ\nเงื้อม\nแง\nแง่\nแง่ง\nแง่น\nแง้ม\nแงะ\nโง\nโง่\nโงก\nโงกเงก\nโงง\nโง่ง\nโง้ง\nโงงเงง\nโง่งเง่ง\nโงเง\nโงน\nโงนเงน\nไง้\nจก\nจง\nจ่ง\nจงกรม\nจงกล\nจงกลนี\nจงโคร่ง\nโจงโคร่ง\nจงอร\nจงอาง\nจด\nจดุรงค์\nจตุปัจจัย\nจตุลังคบาท\nจตุโลกบาล\nจตุสดมภ์\nจตุตถ\nจตุตถี\nจตุร\nจตุรงค์\nจตุรพักตร์\nจตุรพิธ\nจตุรพิธพร\nจน\nจบ\nจม\nจ่ม\nจมร\nจมรี\nจมูก\nจยุติ\nจร\nจรณะ\nจรด\nจรรจา\nจรรโจษ\nจรรม\nจรรยา\nจรรโลง\nจรลี\nจรวจ\nจรวด\nจรส\nจรอก\nจระเข้\nจระนำ\nจระบี\nจรัล\nจรัส\nจราจร\nจราญ\nจริก\nจริง\nจริต\nจริม\nจริยธรรม\nจริยวัตร\nจริยาวัตร\nจริยศาสตร์\nจริยศึกษา\nจริยา\nจรุง\nจรูง\nจรูญ\nจเร\nจล\nจลนพลศาสตร์\nจลนศาสตร์\nจลนี\nจลาจล\nจวก\nจ๊วก\nจวง\nจ้วง\nจ๋วง\nจวด\nจวน\nจวบ\nจวัก\nจอ\nจ่อ\nจ้อ\nจ๋อ\nจอก\nจ้อก\nจ๊อก\nจ้อกแจ้ก\nจอง\nจ้อง\nจ๋อง\nจ้องเต\nจองเปรียง\nจ้องหน่อง\nจองหอง\nจอแจ\nจ๋อแจ๋\nจอด\nจอน\nจ้อน\nจอนจ่อ\nจอบ\nจอม\nจ่อม\nจอมสุรางค์\nจ่อย\nจ้อย\nจ๋อย\nจอแส\nจะ\nจ้ะ\nจ๊ะ\nจ๋ะ\nจะกละ\nจะกลาม\nจะกูด\nจะขาบ\nจะเข้\nจะเข็บ\nจะงอย\nจะจะ\nจ๊ะจ๋า\nจะแจ้ง\nจะแจ่ม\nจะละเม็ด\nจะละหวั่น\nจัก\nจั้ก\nจักกาย\nจั๊กกิ้ม\nจักขุ\nจักจั่น\nจักจี้\nจั๊กจี้\nจั๊กเดียม\nจักร\nจักรพาก\nจักรวาก\nจักริน\nจักรี\nจั๊กเล้อ\nจักษุ\nจักแหล่น\nจัง\nจั้ง\nจั๋ง\nจังกวด\nจังกอบ\nจังก้า\nจังกูด\nจังโกฏก์\nจังงัง\nจั้งมั่ง\nจังไร\nจังหนับ\nจังหรีด\nจังหวะ\nจังหวัด\nจังหัน\nจัญไร\nจัณฑ์\nจัณฑาล\nจัด\nจัตตาฬีสะ\nจัตวา\nจัตุ\nจัตุรงค์\nจัตุรัส\nจัตุลังคบาท\nจัตุโลกบาล\nจัตุสดมภ์\nจัน\nจั่น\nจันโจษ\nจั่นดิน\nจันท์\nจันทน์\nจันทร์\nจันทรคติ\nจันทรคราส\nจันทรุปราคา\nจันทรเม็ด\nจันทวาร\nจันทัน\nจันอับ\nจับ\nจับกัง\nจับฉ่าย\nจับเดิม\nจับปิ้ง\nจับยี่กี\nจัมบก\nจัมปกะ\nจัมปา\nจัมมะ\nจัว\nจั่ว\nจั๊วะ\nจา\nจ่า\nจ้า\nจ๋า\nจาก\nจากพาก\nจาคะ\nจาคี\nจาง\nจ่าง\nจ้าง\nจางปาง\nจางวาง\nจาด\nจาตุรงค์\nจาตุรนต์\nจาตุรันต์\nจาน\nจ้าน\nจาบ\nจาบัล\nจาบัลย์\nจาป\nจาม\nจ่ามงกุฎ\nจามจุรี\nจามร\nจามรี\nจามีกร\nจ่าย\nจาร\nจ่ารง\nจารวาก\nจาระไน\nจาระบี\nจาริก\nจารึก\nจารี\nจารีต\nจารุ\nจ้าละหวั่น\nจาว\nจ้าว\nจ่าหวัก\nจำ\nจ้ำ\nจำกัด\nจำงาย\nจ้ำจี้\nจำเจ\nจำเดิม\nจำทวย\nจำนง\nจำนน\nจำนรรจ์\nจำนรรจา\nจำนวน\nจำนอง\nจำนัล\nจำนำ\nจำเนียน\nจำเนียม\nจำเนียร\nจำแนก\nจำบ่ม\nจำบัง\nจ้ำเบ้า\nจำปา\nจำปาดะ\nจำปี\nจำปูน\nจำพวก\nจำเพาะ\nจ้ำม่ำ\nจำรัส\nจำราญ\nจำรูญ\nจำเริญ\nจำเรียง\nจำลอง\nจำเลย\nจำเลาะ\nจำแลง\nจำแล่น\nจำหนับ\nจ๋ำหนับ\nจำหน่าย\nจำหระ\nจำหล่อ\nจำหลัก\nจำเหียง\nจำอวด\nจิ\nจิก\nจิ้งโกร่ง\nจิ้งจก\nจิงจ้อ\nจิ้งจอก\nจิงจัง\nจิ้งจัง\nจิงโจ้\nจิ้งหรีด\nจิ้งเหลน\nจิต\nจิตกาธาน\nจิตต์\nจิตร\nจิตรจุล\nจิตระ\nจิตรา\nจินเจา\nจินดา\nจินดาหนา\nจินดาหรา\nจินต์\nจิบ\nจิปาถะ\nจิ่ม\nจิ้ม\nจิ้มก้อง\nจิ้มลิ้ม\nจิรกาล\nจิ๋ว\nจี\nจี่\nจี้\nจี๋\nจี๋จ้อ\nจีแจ๊บ\nจี๊ด\nจีน\nจีนแส\nจีบ\nจีโบ\nจีม\nจีวร\nจึง\nจึ่ง\nจึ้ง\nจืด\nจุ\nจุก\nจุ๊กกรู๊\nจุกจิก\nจุกชี\nจุกผาม\nจุกโรหินี\nจุ่ง\nจุ๋งจิ๋ง\nจุฑา\nจุณ\nจุณณียบท\nจุด\nจุติ\nจุตูปปาตญาณ\nจุทส\nจุน\nจุ่น\nจุ้น\nจุนจู๋\nจุ้นจู๊\nจุนทการ\nจุนสี\nจุบ\nจุ๊บ\nจุบจิบ\nจุ๊บแจง\nจุ่ม\nจุ้ม\nจุ๋มจิ๋ม\nจุมพฏ\nจุมพรวด\nจุมพล\nจุมพิต\nจุมโพล่\nจุ้ย\nจุรณ\nจูรณ\nจุรี\nจุไร\nจุล\nจุลจอมเกล้า\nจุลวงศ์\nจุฬา\nจุฬาราชมนตรี\nจุฬาลัมพา\nจุฬาลำพา\nจู\nจู่\nจู้\nจู๋\nจูง\nจู้จี้\nจู๋จี๋\nจู๊ด\nจูบ\nเจ\nเจ๊ก\nเจ่ง\nเจ้ง\nเจ๊ง\nเจ๋ง\nเจ็ด\nเจ็ดตะคลี\nเจดีย์\nเจดียสถาน\nเจต\nเจตนา\nเจตพังคี\nเจตมูลเพลิง\nเจตสิก\nเจโตวิมุติ\nเจน\nเจ็บ\nเจรจา\nเจริญ\nเจริด\nเจรียง\nเจลียง\nเจว็ด\nเจษฎา\nเจ๊สัว\nเจอ\nเจ่อ\nเจ๋อ\nเจ๋อเจ๊อะ\nเจอร์เมเนียม\nเจอะ\nเจา\nเจ่า\nเจ้า\nเจ๊า\nเจาะ\nเจิ่ง\nเจิด\nเจิ่น\nเจิม\nเจีย\nเจียง\nเจียด\nเจียน\nเจี๋ยน\nเจี๊ยบ\nเจียม\nเจี๋ยมเจี้ยม\nเจียร\nเจียระไน\nเจียระบาด\nเจียว\nเจี๊ยวจ๊าว\nเจือ\nเจื่อน\nเจื้อย\nเจือสม\nแจ\nแจ้\nแจ๋\nแจก\nแจกัน\nแจง\nแจ่ง\nแจ้ง\nแจงลอน\nแจ๊ด\nแจ๊ดแจ๋\nแจตร\nแจ้น\nแจบ\nแจ่ม\nแจรง\nแจว\nแจ่ว\nแจ้ว\nแจ๋ว\nแจะ\nโจก\nโจ๊ก\nโจง\nโจ่งครึ่ม\nโจ๋งครึ่ม\nโจ่งครุ่ม\nโจ๋งเจ๋ง\nโจ่งแจ้ง\nโจท\nโจทก์\nโจทนา\nโจทย์\nโจน\nโจม\nโจร\nโจล\nโจษ\nโจษจัน\nใจ\nไจ\nไจ้\nฉก\nฉกรรจ์\nฉกษัตริย์\nฉกาจ\nฉกามาพจร\nฉกามาวจร\nฉง\nฉงน\nฉงาย\nฉทึง\nฉนวน\nฉนัง\nฉนาก\nฉนำ\nฉบัง\nฉบัด\nฉบับ\nฉบำ\nฉม\nฉมบ\nฉมวก\nฉมวย\nฉม่อง\nฉมัง\nฉมัน\nฉมา\nฉมำ\nฉล\nฉลวย\nฉลอง\nฉลอม\nฉลัก\nฉลับ\nฉลาก\nฉลาง\nฉลาด\nฉลาม\nฉลาย\nฉลิว\nฉลีก\nฉลุ\nฉลู\nฉวย\nฉวะ\nฉวัดเฉวียน\nฉวาง\nฉวี\nฉศก\nฉ้อ\nฉอก\nฉ่อง\nฉอด\nฉ่อย\nฉอเลาะ\nฉะ\nฉะฉาด\nฉะฉาน\nฉะฉ่ำ\nฉะฉี่\nฉะเฉื่อย\nฉะนั้น\nฉะนี้\nฉะอ้อน\nฉักกะ\nฉัฐ\nฉัด\nฉัตร\nฉัททันต์\nฉัน\nฉันท\nฉันท์\nฉันทะ\nฉันทา\nฉันทาคติ\nฉันทานุมัติ\nฉับ\nฉัพพรรณรังสี\nฉัยยา\nฉ่า\nฉาก\nฉาง\nฉ่าง\nฉ่าฉาว\nฉาด\nฉาดฉาน\nฉาตกภัย\nฉาน\nฉาบ\nฉาบฉวย\nฉาย\nฉายา\nฉาว\nฉ่ำ\nฉำฉา\nฉำแฉะ\nฉิ่ง\nฉิน\nฉินท์\nฉินทฤกษ์\nฉิบ\nฉิมพลี\nฉิว\nฉี่\nฉีก\nฉีด\nฉุ\nฉุก\nฉุด\nฉุน\nฉุป\nฉุป\nฉุย\nฉุยฉาย\nฉู่\nฉู่ฉี่\nฉูด\nฉูดฉาด\nเฉ\nเฉก\nเฉโก\nเฉ่ง\nเฉด\nเฉท\nเฉนียน\nเฉพาะ\nเฉย\nเฉลย\nเฉลว\nเฉลา\nเฉลิม\nเฉลี่ย\nเฉลียง\nเฉลี่ยง\nเฉลียบ\nเฉลียว\nเฉวียง\nเฉวียน\nเฉอะแฉะ\nเฉา\nเฉาก๊วย\nเฉาฮื้อ\nเฉาะ\nเฉิด\nเฉิบ\nเฉียง\nเฉียงพร้านางแอ\nเฉียด\nเฉียบ\nเฉียว\nเฉี่ยว\nเฉือน\nเฉื่อย\nแฉ\nแฉ่\nแฉก\nแฉง\nแฉ่ง\nแฉลบ\nแฉล้ม\nแฉะ\nโฉ\nโฉ่\nโฉเก\nโฉ่งฉ่าง\nโฉงเฉง\nโฉด\nโฉนด\nโฉบ\nโฉเบ๊\nโฉม\nโฉลก\nไฉน\nไฉไล\nชก\nชคัตตรัย\nชง\nชงโค\nชงฆ์\nชงฆา\nชงโลง\nชฎา\nชฎามังษี\nชฎามังสี\nชฎิล\nชด\nชน\nชนก\nชนนี\nชนม์\nชนวน\nชนะ\nชนัก\nชนา\nชนาง\nชนิด\nชเนตตี\nชบา\nชม\nชมดชม้อย\nชมนาด\nชมพู\nชมพู่\nชมรม\nชม้อย\nชม้าย\nชไม\nชยา\nชโย\nชรทึง\nชรริน\nชรอุ่ม\nชระล้ำ\nชระลุ\nชระอาบ\nชระเอม\nชรัด\nชรา\nชล\nชโลง\nชโลม\nช่วง\nชวด\nชวน\nชวย\nช่วย\nชวร\nชวลิต\nชวา\nชวาล\nชวาลา\nช่อ\nชอก\nช็อก\nช็อกโกเลต\nช็อกโกแลต\nชอง\nช่อง\nช้อง\nชองระอา\nชอน\nช่อน\nช้อน\nชอบ\nชอม\nช้อย\nชอล์ก\nชอ่ำ\nชอุ่ม\nชะ\nชะคราม\nชะงอก\nชะง่อน\nชะงัก\nชะงัด\nชะง้ำ\nชะงุ้ม\nชะเง้อ\nชะเงื้อม\nชะแง้\nชะโงก\nชะฉ่า\nชะช่อง\nชะชะ\nชะช้า\nชะโด\nชะตา\nชะต้า\nชะนี\nชะเนาะ\nชะเนียง\nชะพลู\nชะเพลิง\nชะมด\nชะมบ\nชะมวง\nชะมัง\nชะมัด\nชะแม่\nชะรอย\nชะลอ\nชะลอม\nชะล่า\nชะลาน\nชะลิน\nชะลูด\nชะเลง\nชะเลย\nชะแล็ก\nชะแลง\nชะวาก\nชะวาด\nชะเวิกชะวาก\nชะแวง\nชะอม\nชะอ้อน\nชะเอม\nชะโอน\nชัก\nชักคราม\nชักช้า\nชัง\nชั่ง\nชังคา\nชังฆ\nชัชวาล\nชัฏ\nชัด\nชัดช้า\nชัน\nชั้น\nชันกาด\nชันชี\nชันตุ\nชันนะตุ\nชันนุ\nชันโรง\nชันษา\nชันสูตร\nชัปนะ\nชัพ\nชัมพูนท\nชัย\nชัยพฤกษ์\nชัยภูมิ\nชัลลุกา\nชั่ว\nชั้ว\nชัวชม\nชา\nช้า\nชาคระ\nชาคริต\nชาคริยานุโยค\nช่าง\nช้าง\nช้าช่อน\nชาญ\nชาด\nชาดก\nชาต\nชาตบุษย์\nชาตรี\nชาตะ\nชาตา\nชาติ\nชาน\nชานุ\nช้าปี่\nชาปีไหน\nช้าแป้น\nช้าพลู\nชาม\nชามพูนท\nชามาดร\nชามาดา\nชามาตุ\nชาย\nชายา\nชาล\nชาลา\nชาลินี\nช้าเลือด\nชาว\nชาวี\nชำ\nช่ำ\nช้ำ\nชำงัด\nชำงาย\nช่ำชอง\nชำนะ\nชำนัญ\nชำนัน\nชำนาญ\nชำนิ\nชำเนียร\nชำมะนาด\nชำมะเลียง\nชำร่วย\nชำระ\nช้ำรั่ว\nชำรุด\nชำเรา\nชำเราะ\nชำแรก\nชำแระ\nชำเลือง\nชำแหละ\nชิ\nชิง\nชิ่ง\nชิงชัน\nชิงช้า\nชิงช้าชาลี\nชิงชี่\nชิงฮื้อ\nชิชะ\nชิชิ\nชิณณะ\nชิด\nชิเดนทรีย์\nชิต\nชิตินทรีย์\nชิน\nชิ้น\nชินโต\nชิโนรส\nชิม\nชิมแปนซี\nชิยา\nชิรณะ\nชิระ\nชิวหา\nชิสา\nชี\nชี่\nชี้\nชีปะขาว\nชีผะขาว\nชีผ้าขาว\nชีพ\nชีฟอง\nชีรณ\nชีระ\nชีวเคมี\nชีวประวัติ\nชีวภาพ\nชีววิทยา\nชีวะ\nชีวัน\nชีวา\nชีวาตม์\nชีวาลัย\nชีวิต\nชีวิตักษัย\nชีวิน\nชีวี\nชืด\nชื่น\nชื้น\nชื่อ\nชุก\nชุกชี\nชุ้ง\nชุณห\nชุด\nชุติ\nชุน\nชุบ\nชุม\nชุ่ม\nชุมนุม\nชุมพร\nชุมพา\nชุมแพรก\nชุมรุม\nชุมแสง\nชุมเห็ด\nชุ่ย\nชุลมุน\nชุลี\nชุษณะ\nชู\nชู้\nเช็ค\nเช้ง\nเช้งวับ\nเชงเลง\nเช็ด\nเชน\nเช่น\nเชย\nเชลง\nเชลย\nเชลแล็ก\nเชลียง\nเชวง\nเชษฐะ\nเชษฐา\nเชอ\nเช่า\nเช้า\nเชาว์\nเชาวน์\nเชิง\nเชิญ\nเชิด\nเชิ้ต\nเชียง\nเชี่ยน\nเชียบ\nเชี่ยม\nเชียร\nเชียร์\nเชียว\nเชี่ยว\nเชื่อ\nเชื้อ\nเชือก\nเชื่อง\nเชือด\nเชือน\nเชื่อม\nแช\nแช่\nแช่ง\nแชงมา\nแชบ๊วย\nแช่ม\nแชร์\nแชล่ม\nแชสซี\nแชะ\nโชก\nโชค\nโชงโลง\nโชดก\nโชดึก\nโชต\nโชตก\nโชติ\nโชติก\nโชน\nโชมโรม\nโชย\nโชยงการ\nโชยชาย\nโชยติส\nโชว์\nใช่\nใช้\nไช\nไชนะ\nไชย\nไชโย\nซก\nซ่ก\nซงดำ\nซ่งฮื้อ\nซด\nซน\nซ้น\nซบ\nซม\nซวดเซ\nซวน\nซวย\nซอ\nซอก\nซอง\nซ่อง\nซ้อง\nซองแมว\nซ้องแมว\nซอน\nซ่อน\nซ้อน\nซอม\nซ่อม\nซ้อม\nซอมซ่อ\nซอย\nซอส\nซัก\nซักส้าว\nซัง\nซั้ง\nซัด\nซับ\nซัลฟา\nซั้ว\nซา\nซ่า\nซาก\nซาง\nซ่าง\nซาด\nซาน\nซ่าน\nซาบซ่าน\nซาบซึ้ง\nซ่าโบะ\nซาแมเรียม\nซ้าย\nซาลาเปา\nซาว\nซ่าหริ่ม\nซำ\nซ้ำ\nซิ\nซี\nซิก\nซิกข์\nซิกซี้\nซิกแซ็ก\nซิการ์\nซิงโคนา\nซิ่น\nซินนามิก\nซินแส\nซิบ\nซิป\nซิฟิลิส\nซิลิคอน\nซิว\nซี่\nซีก\nซีเซียม\nซีด\nซี้ด\nซีนอน\nซีป่าย\nซีเมนต์\nซีเรียม\nซีลีเนียม\nซีอิ๊ว\nซึก\nซึง\nซึ่ง\nซึ้ง\nซึม\nซื่อ\nซื้อ\nซุก\nซุง\nซุน\nซุบ\nซุป\nซุ่ม\nซุ้ม\nซุ่มซ่าม\nซุย\nซู่\nซูโครส\nซูด\nซู้ด\nซูดซาด\nซูบ\nเซ\nเซ็ก\nเซแคนต์\nเซ็ง\nเซ่ง\nเซ้ง\nเซ็งแซ่\nเซต\nเซน\nเซ็น\nเซ่น\nเซนติกรัม\nเซนติเกรด\nเซนติเมตร\nเซนติลิตร\nเซปักตะกร้อ\nเซราะ\nเซรุ่ม\nเซลเซียส\nเซลล์\nเซลลูลอยด์\nเซลลูโลส\nเซ่อ\nเซอร์โคเนียม\nเซอะ\nเซา\nเซ้าซี้\nเซาะ\nเซิง\nเซิ้ง\nเซียน\nเซียบ\nเซียมซี\nเซียว\nเซี่ยว\nเซี่ยวกาง\nเซื่อง\nแซ\nแซ่\nแซ็กคาริน\nแซง\nแซงแซว\nแซด\nแซบ\nแซม\nแซยิด\nแซ่ว\nแซะ\nโซ\nโซ่\nโซก\nโซ่ง\nโซงโขดง\nโซเซ\nโซดา\nโซเดียม\nโซม\nโซรม\nโซลา\nไซ\nไซ้\nไซเกิล\nไซโคลน\nไซน์\nไซยาไนด์\nไซร้\nไซเรน\nไซโล\nฌาน\nฌาปน\nฌาปนกิจ\nฌาปนสถาน\nเฌอ\nเฌอเอม\nญวน\nญัตติ\nญาณ\nญาติ\nญานาซะฮ์\nญิบ\nญี่ปุ่น\nเญยธรรม\nไญยธรรม\nฎีกา\nฐกัด\nฐากูร\nฐาน\nฐานะ\nฐานันดร\nฐานานุกรม\nฐานานุรูป\nฐานานุศักดิ์\nฐานียะ\nฐาปน\nฐาปนา\nฐายี\nฐิต\nฐิติ\nฑาหก\nฑาหะ\nเฒ่า\nณรงค์\nเณร\nดก\nดง\nด้ง\nด้น\nดนโด่\nดนตรี\nดนัย\nดนุ\nดนู\nดบัสวิน\nดบัสวี\nดม\nดรงค์\nดรณี\nดรรชนี\nดราฟต์\nดรุณ\nดรุณี\nดล\nดวง\nด้วง\nดวด\nด่วน\nด้วน\nด้วย\nดอก\nดอง\nด่อง\nด้อง\nดองฉาย\nดองดึง\nดอด\nดอน\nด่อน\nดอม\nด้อม\nดอย\nด้อย\nดอลลาร์\nดะ\nดะโต๊ะ\nดะหมัง\nดัก\nดักดาน\nดักแด้\nดัง\nดั่ง\nดั้ง\nดัชนี\nดัด\nดัตช์\nดัน\nดั้น\nดับ\nดัมพ์\nดั้วเดี้ย\nดัสกร\nดา\nด่า\nดาก\nด่าง\nด้าง\nดาด\nดาน\nด่าน\nด้าน\nดาบ\nดาบส\nดาม\nด้าม\nด้ามจิ้ว\nดามพ์\nดาย\nด้าย\nดารกะ\nดารณี\nดารดาษ\nดาระ\nดารา\nดาล\nดาลัด\nดาว\nด่าว\nด้าว\nดาวดึงส์\nดาวบส\nดาษ\nดาษดา\nดำ\nด่ำ\nด้ำ\nดำกล\nดำเกิง\nดำแคง\nดำดง\nดำนาณ\nดำเนิน\nดำบล\nดำรง\nดำรวจ\nดำรัส\nดำริ\nดำรี\nดำรู\nดำฤษณา\nดำเลิง\nดิก\nดิ่ง\nดิฉัน\nดิฐ\nดิตถ์\nดิถี\nดิน\nดิ้น\nดิบ\nดิรัจฉาน\nดิลก\nดิ่ว\nดิ้ว\nดิ้วเดี้ยว\nดิษฐ์\nดิสโพรเซียม\nดี\nดีเซล\nดีด\nดีดีที\nดีบุก\nดีปลี\nดีเปรสชัน\nดีหมี\nดีหลี\nดึก\nดึง\nดึ่ง\nดึ่ม\nดื่น\nดื่ม\nดือ\nดื้อ\nดุ\nดุก\nดุกดิก\nดุกทะเล\nดุ้ง\nดุ้งดิ้ง\nดุจ\nดุด\nดุน\nดุ้น\nดุบ\nดุม\nดุ่ม\nดุ่ย\nดุรงค์\nดุริยะ\nดุริยางค์\nดุริยางคศาสตร์\nดุริยางคศิลป์\nดุล\nดุษฎี\nดุษณี\nดุษณีภาพ\nดุษิต\nดุสิต\nดุเหว่า\nดู\nดูกค่าง\nดูกร\nดูด\nดูรา\nดูแล\nเด\nเด่\nเดก\nเด็ก\nเดกซ์โทรส\nเดคากรัม\nเดคาเมตร\nเดคาลิตร\nเด้ง\nเด็จ\nเดช\nเดชน์\nเดชนะ\nเดชะ\nเดโช\nเดซิกรัม\nเดซิเมตร\nเดซิลิตร\nเด็ด\nเดน\nเด่น\nเดนมาร์ก\nเดรัจฉาน\nเด๋อ\nเด๋อด๋า\nเดา\nเด้า\nเดาะ\nเดิน\nเดิ่น\nเดิม\nเดียง\nเดียด\nเดียรดาษ\nเดียรถีย์\nเดียรัจฉาน\nเดียว\nเดี่ยว\nเดี๋ยว\nเดียะ\nเดื่อ\nเดือก\nเดื่อง\nเดือด\nเดือน\nเดือย\nแด\nแด่\nแดก\nแด็ก\nแดกงา\nแดกแด้\nแดง\nแดด\nแดน\nแด่น\nแด่ว\nแดะ\nแดะแด๋\nโด\nโด่\nโดกเดก\nโด่ง\nโดด\nโดน\nโดม\nโดมร\nโดย\nโดรณ\nใด\nได\nได้\nไดแซ็กคาไรด์\nไดนาโม\nไดนาไมต์\nไดโนเสาร์\nไดเรกตริกซ์\nตก\nต๊กโต\nตง\nต๋ง\nตงฉิน\nตงิด\nตงุ่น\nตด\nตติย\nตถาคต\nตน\nต้น\nตนัย\nตนุ\nตบ\nตบะ\nตปนียะ\nตม\nต้ม\nตมูก\nตยาคี\nตรง\nตรณี\nตรม\nตรรก\nตรรกะ\nตรลบ\nตรลอด\nตรลาด\nตรวจ\nตรวน\nตรอก\nตรอง\nตรอมใจ\nตรอมตรม\nตระ\nตระกล\nตระกวน\nตระกอง\nตระการ\nตระกูล\nตระคัร\nตระเตรียม\nตระนาว\nตระบก\nตระบอก\nตระบอง\nตระบัด\nตระบัน\nตระเบ็ง\nตระแบก\nตระแบง\nตระโบม\nตระพอง\nตระพัง\nตระลาการ\nตระวัน\nตระเว็ด\nตระเวน\nตระสัก\nตระหง่าน\nตระหนก\nตระหนัก\nตระหน่ำ\nตระหนี่\nตรัง\nตรังค์\nตรับ\nตรับฟัง\nตรัย\nตรัยตรึงศ์\nตรัส\nตรัสสา\nตรา\nตรากตรำ\nตราชู\nตราบ\nตราสัง\nตรำ\nตริ\nตริว\nตรี\nตรีปวาย\nตรีพิธพรรณ\nตรียัมปวาย\nตรึก\nตรึง\nตรุ\nตรุณ\nตรุณะ\nตรุษ\nตรู\nตรู่\nตฤณ\nตฤตีย\nตฤษณา\nตลก\nตลบ\nตลอด\nตลับ\nตลาด\nตลิ่ง\nตลึง\nตวง\nต่วน\nต้วมเตี้ยม\nตวัก\nตวัด\nตวาด\nตอ\nตอม่อ\nต่อ\nต้อ\nตอก\nต๊อก\nต๊อกต๋อย\nตอง\nต้อง\nตองกราย\nต้องเต\nตองแตก\nต่องแต่ง\nตองเหลือง\nตอด\nตอน\nต้อน\nตอบ\nตอเบา\nตอม\nต่อม\nต๋อม\nต่อย\nต้อย\nต้อยตริ่ง\nต้อยติ่ง\nต้อยตีวิด\nตอแย\nตอร์ปิโด\nต่อไส้\nตอแหล\nตะ\nตะกรน\nตะกร้อ\nตะกรัน\nตะกรับ\nตะกร้า\nตะกราม\nตะกรุด\nตะกรุม\nตะกรุมตะกราม\nตะกละ\nตะกลาม\nตะกวด\nตะกอ\nตะกอน\nตะกัง\nตะกั่ว\nตะกาง\nตะกาด\nตะกาย\nตะกาว\nตะกุกตะกัก\nตะกุย\nตะกู\nตะกูด\nตะเกียกตะกาย\nตะเกียง\nตะเกียบ\nตะแก\nตะแก่\nตะแกรง\nตะโก\nตะโก้\nตะโกก\nตะโกน\nตะโกรง\nตะโกรม\nตะไกร\nตะขบ\nตะขอ\nตะขาบ\nตะขิดตะขวง\nตะเข้\nตะเข็บ\nตะโขง\nตะคร้อ\nตะครอง\nตะครั่นตะครอ\nตะคร้ำ\nตะคริว\nตะคิว\nตะครุบ\nตะคอก\nตะคัน\nตะค้า\nตะคาก\nตะค้าน\nตะคุ่ม\nตะเครียว\nตะเคียว\nตะเคียน\nตะแคง\nตะไคร่\nตะไคร้\nตะเฆ่\nตะนอย\nตะนาว\nตะบม\nตะบอง\nตะบอย\nตะบัน\nตะบิ้ง\nตะบิด\nตะบิดตะบอย\nตะบี้ตะบัน\nตะบึง\nตะบูน\nตะเบ็ง\nตะเบ็งมาน\nตะเบ๊ะ\nตะแบก\nตะแบง\nตะโบม\nตะไบ\nตะปบ\nตะปลิง\nตะปิ้ง\nตะปุ่มตะป่ำ\nตะปู\nตะพง\nตะพด\nตะพอง\nตะพัก\nตะพัง\nตะพัด\nตะพั้น\nตะพาก\nตะพาน\nตะพาบ\nตะพาย\nตะพึด\nตะพึดตะพือ\nตะพุ่น\nตะเพรา\nตะเพิง\nตะเพิด\nตะเพียน\nตะโพก\nตะโพง\nตะโพน\nตะเภา\nตะใภ้\nตะม่อ\nตะมอย\nตะรังกะนู\nตะรังตังกวาง\nตะรังตังช้าง\nตะราง\nตะลอง\nตะลอน\nตะล่อม\nตะละ\nตะลาน\nตะลิงปลิง\nตะลิบ\nตะลีตะลาน\nตะลึง\nตะลึงพรึงเพริด\nตะลุง\nตะลุ่ม\nตะลุ่มนก\nตะลุมบอน\nตะลุ่มโปง\nตะลุมพอ\nตะลุมพุก\nตะลุย\nตะเลง\nตะแลงแกง\nตะไล\nตะวัน\nตะเวน\nตะหลิว\nตะหลุก\nตะหลุง\nตะแหง่ว\nตะแหมะแขะ\nตะโหงก\nตัก\nตักกะ\nตักเตือน\nตั๊กแตน\nตักษัย\nตัง\nตั่ง\nตั้ง\nตังเก\nตังฉ่าย\nตังเม\nตังวาย\nตังโอ๋\nตัจฉก\nตัจฉนี\nตัณฑุล\nตัณหา\nตัด\nตัน\nตันตระ\nตันติ\nตันหยง\nตับ\nตับปิ้ง\nตัว\nตั๋ว\nตัวจี๊ด\nตัวตืด\nตั้วโผ\nตั้วเหี่ย\nตา\nตาก\nตากวาง\nต่าง\nตาด\nตาน\nต่าน\nต้าน\nตานนกกด\nตานี\nตาบ\nตาม\nตามะแน\nตามิน\nตาย\nตาราไต\nตาล\nตาลุ\nต๋าว\nตาเสือ\nตาหนู\nตาฬ\nตำ\nต่ำ\nตำนาน\nตำบล\nตำแบ\nตำแย\nตำรวจ\nตำรับ\nตำรา\nตำรุ\nตำลึง\nตำเสา\nตำหนัก\nตำหนิ\nตำแหน่ง\nติ\nติก\nติ๊ก\nติกะ\nติกาหรัง\nติง\nติ่ง\nติ๋ง\nติ่งตั่ง\nติ๋งต่าง\nติงส\nติงสติ\nติณ\nติด\nติตติกะ\nติตติร\nติตถ\nติตถะ\nติถี\nติมิงคละ\nติรัจฉาน\nติลก\nติละ\nติ้ว\nตี\nตี่\nตีน\nตีบ\nตีรถะ\nตีระ\nตึ\nตึก\nตึ้ก\nตึ้กตั้ก\nตึง\nตึดตื๋อ\nตึ๊ดตื๋อ\nตืด\nตื่น\nตื้น\nตื้อ\nตื๊อ\nตื๋อ\nตุ\nตุ๊\nตุ๊กแก\nตุ๊กตา\nตุ๊กต่ำ\nตุกติก\nตุ๊กติ๊ก\nตุ๊กตุ่น\nตุ๊กตุ๋ย\nตุง\nตุ้งก่า\nตุ้งติ้ง\nตุ๊ดตู่\nตุน\nตุ่น\nตุ๋น\nตุนาหงัน\nตุบ\nตุ้บ\nตุ๊บป่อง\nตุปัดตุป่อง\nตุปัดตุเป๋\nตุ่ม\nตุ้ม\nตุ๋ม\nตุ้มกว้าว\nตุมกา\nตุ้มแซะ\nตุมตัง\nตุ้มเต๋น\nตุ้มปี่\nตุมพะ\nตุ่ย\nตุ้ย\nตุ๊ย\nตุ๋ยตุ่ย\nตุรคะ\nตุรงค์\nตุล\nตุลา\nตุหรัดตุเหร่\nตู\nตู่\nตู้\nตูก\nตูด\nตูบ\nตูม\nเต๊ก\nเต็ง\nเต่ง\nเตช\nเตโช\nเต้น\nเต็นท์\nเต็ม\nเตย\nเตร่\nเตร็ด\nเตรตา\nเตรียม\nเตรียมตรม\nเตละ\nเตลิด\nเตว็ด\nเต่อ\nเตอะ\nเตะ\nเตา\nเต่า\nเต้า\nเต๋า\nเต่าเกียด\nเต้าเจี้ยว\nเต้าทึง\nเต้าหู้\nเต้าฮวย\nเต๊าะ\nเตาะแตะ\nเติ่ง\nเติบ\nเติม\nเตี้ย\nเตียง\nเตียน\nเตียบ\nเตี๋ยม\nเตียรถ์\nเตียว\nเตี่ยว\nเตือน\nแต่\nแต้\nแตก\nแตง\nแต่ง\nแตงเม\nแต้จิ๋ว\nแตด\nแต๊ดแต๋\nแตน\nแต้ม\nแตร\nแตระ\nแต้ว\nแต้วแร้ว\nแต้วแล้ว\nแต่ว่า\nแต้แว้ด\nแตะ\nโต\nโต้\nโตก\nโต่ง\nโต้ง\nโตงเตง\nโตฎก\nโต๊ด\nโตน\nโตนด\nโต้โผ\nโตมร\nโตย\nโตรก\nโต๊ะ\nใต้\nไต\nไต่\nไต้\nไต๋\nไตร\nไตรกิศยา\nไตรดายุค\nไตร่ตรอง\nไตรย\nไต้หวัน\nถก\nถกล\nถงาด\nถด\nถนน\nถนอม\nถนัด\nถนัน\nถนำ\nถนิม\nถม\nถ่ม\nถมอ\nถมึงทึง\nถลก\nถลกบาตร\nถลน\nถล่ม\nถลอก\nถลัน\nถลา\nถลาก\nถลาย\nถลำ\nถลึงตา\nถลุง\nถ่วง\nถ้วน\nถ้วย\nถวัล\nถวัลย์\nถวาย\nถวิน\nถวิล\nถ่อ\nถ้อ\nถอก\nถอง\nถ่อง\nถ้อง\nถอด\nถอน\nถอบ\nถอบแถบ\nถ่อม\nถอย\nถ่อย\nถ้อย\nถะ\nถะถั่น\nถะมัดถะแมง\nถัก\nถัง\nถั่ง\nถัด\nถัทธ\nถัน\nถั่น\nถับ\nถัมภ์\nถัว\nถั่ว\nถา\nถ้า\nถาก\nถาง\nถ่าง\nถาด\nถาน\nถ่าน\nถาบ\nถาม\nถามะ\nถ่าย\nถ่าว\nถาวร\nถาวรธิรา\nถ้ำ\nถิ่น\nถี่\nถีบ\nถึก\nถึง\nถือ\nถุง\nถุน\nถุย\nถู\nถูก\nเถกิง\nเถน\nเถร\nเถระ\nเถรานุเถระ\nเถรี\nเถลไถล\nเถลิง\nเถลือกถลน\nเถ่อ\nเถอะ\nเถา\nเถ้า\nเถาวัลย์\nเถาะ\nเถิก\nเถิง\nเถิด\nเถิดเทิง\nเถิน\nเถียง\nเถียร\nเถือ\nเถือก\nเถื่อน\nแถ\nแถก\nแถง\nแถน\nแถบ\nแถม\nแถลง\nแถลบ\nแถว\nโถ\nโถง\nโถงเถง\nโถบ\nโถม\nโถมนาการ\nไถ\nไถ่\nไถ้\nไถง\nไถล\nทกล้า\nทแกล้ว\nท่ง\nทด\nทน\nท้น\nทนต์\nทนโท่\nทนาย\nทบ\nทบวง\nทมอ\nทมะ\nทมิฬ\nทโมน\nทยอย\nทแยง\nทรกรรม\nทรชน\nทรชาติ\nทรพิษ\nทรยศ\nทรราช\nทรลักษณ์\nทรง\nทรพี\nทรมาทรกรรม\nทรมาน\nทรรทึง\nทรรป\nทรรปณ์\nทรรปณะ\nทรรศนะ\nทรรศนาการ\nทรรศนีย์\nทรวง\nทรวดทรง\nทรวาร\nทรหด\nทรหวล\nทรหึง\nทรอมโบน\nทระนง\nทรัพย์\nทรัพยากร\nทรัมเป็ต\nทรานซิสเตอร์\nทราบ\nทราม\nทราย\nทรุด\nทฤษฎี\nทลาย\nทลิท\nทลิททก\nทวง\nท้วง\nท่วงท่า\nท่วงทำนอง\nท่วงที\nทวด\nทวน\nท้วน\nท่วม\nท้วม\nทวย\nท่วย\nท้วย\nทวอย\nทวัตดึงส์\nทวัย\nทวา\nทวาบร\nทว่า\nทวาย\nทวาร\nทวิ\nทวิช\nทวิตีย์\nทวิตียา\nทวี\nทวีธาภิเษก\nทวีป\nทศ\nทศมี\nทศางค์\nทหระ\nทหาร\nทอ\nท่อ\nท้อ\nทอก\nทอง\nท่อง\nท้อง\nทองกวาว\nทองภู\nทองลิน\nทองหลาง\nทองโหลง\nทองอุไร\nทอด\nทอน\nท่อน\nทอนซิล\nทอฟฟี่\nท่อม\nทอย\nทอเรียม\nทะ\nทะงัน\nทะนง\nทะนน\nทะนาน\nทะนุ\nทะเบียน\nทะมัดทะแมง\nทะมึน\nทะมื่น\nทะแม่ง\nทะยาน\nทะเยอทะยาน\nทะแย\nทะร่อทะแร่\nทะลวง\nทะลอก\nทะลัก\nทะลาย\nทะลึ่ง\nทะลุ\nทะลุดทะลาด\nทะเล\nทะเล้น\nทะเล่อทะล่า\nทะเลาะ\nทะเลิ่กทะลั่ก\nทะวาย\nทัก\nทักข์\nทักขิญ\nทักขิณ\nทักขิณา\nทักขิณาวัฏ\nทักขิโณทก\nทักขิไณยบุคคล\nทักทิน\nทักษะ\nทักษา\nทักษิณ\nทักษิณา\nทักษิโณทก\nทัง\nทั่ง\nทั้ง\nทังวล\nทังวี้ทังวล\nทังสเตน\nทัณฑ์\nทัณฑกรรม\nทัณฑฆาต\nทัณฑสถาน\nทัณฑะ\nทัณฑิกา\nทัณฑิมา\nทัณฑีบท\nทัด\nทัดทา\nทัต\nทัน\nทันต์\nทันตชะ\nทันตแพทย์\nทันติน\nทันตี\nทันธ์\nทับ\nทับทิม\nทับสมิงคลา\nทัพ\nทัพพะ\nทัพพี\nทั่ว\nทัศ\nทัศน์\nทัศนะ\nทัศนา\nทัศนคติ\nทัศนวิสัย\nทัศนศาสตร์\nทัศนศิลป์\nทัศนศึกษา\nทัศนาการ\nทัศนาจร\nทัศนีย์\nทัศนียภาพ\nทัศนูปกรณ์\nทัศไนย\nทัสนานุตริยะ\nทัฬหะ\nทัฬหิ\nทัฬหี\nทา\nท่า\nท้า\nทาก\nทาง\nท้าง\nทาฐะ\nทาฐิกะ\nทาฒะ\nทาฒิกะ\nทาน\nท่าน\nทานต์\nทานพ\nทาบ\nทาม\nท่ามกลาง\nทาย\nท้าย\nทายก\nทายัช\nทายาด\nทายาท\nทายิกา\nทารก\nทารพี\nทาริกา\nทารุณ\nทาว\nท่าว\nท้าว\nทาส\nทาสี\nทำ\nทำนบ\nทำนอง\nทำนาย\nทำนุ\nทำนูล\nทำเนา\nทำเนียบ\nทำไม\nทำลาย\nทำเล\nทิคัมพร\nทิฆัมพร\nทิ้ง\nทิงเจอร์\nทิ้งถ่อน\nทิ้งทูด\nทิชะ\nทิชากร\nทิชาชาติ\nทิฏฐะ\nทิฏฐานุคติ\nทิฏฐุชุกรรม\nทิฐธรรม\nทิฐิ\nทิด\nทิต\nทิน\nทิพ\nทิพย์\nทิพา\nทิม\nทิ่ม\nทิมทอง\nทิว\nทิวงคต\nทิวทัศน์\nทิวา\nทิศ\nทิศา\nทิศานุทิศ\nที\nที่\nทีฆชาติ\nทีฆนิกาย\nทีฆสระ\nทีฆายุ\nทีป\nทีม\nทีเอ็นที\nทึก\nทึกทัก\nทึ่ง\nทึ้ง\nทึดทือ\nทึนทึก\nทึบ\nทึม\nทึ่ม\nทื่อ\nทุ\nทุก\nทุกข์\nทุกขลาภ\nทุกขเวทนา\nทุกขารมณ์\nทุกฏ\nทุกรกิริยา\nทุกะ\nทุกัง\nทุกูล\nทุคตะ\nทุคติ\nทุ่ง\nทุ้ง\nทุงงะ\nทุจริต\nทุด\nทุทรรศนนิยม\nทุนิยม\nทุน\nทุ่น\nทุนนิมิต\nทุบ\nทุบทู\nทุปปัญญา\nทุพพรรณ\nทุพพล\nทุพพลภาพ\nทุพภิกขภัย\nทุม\nทุ่ม\nทุ้ม\nทุย\nทุ้ย\nทุรกันดาร\nทุรชน\nทุรชาติ\nทุรพล\nทุรลักษณ์\nทุรน\nทุรนทุราย\nทุรัศ\nทุราคม\nทุราจาร\nทุเรศ\nทุเรียน\nทุลักทุเล\nทุเลา\nทุศีล\nทุสสะ\nทุสสีล\nทู\nทูโม่ง\nทู่\nทู้\nทูกัง\nทู่ซี้\nทูต\nทูตานุทูต\nทูน\nทูบ\nทูม\nทูล\nทูเลียม\nเท\nเท่\nเทคนิค\nเทคนีเชียม\nเทคโนโลยี\nเท้ง\nเท้งเต้ง\nเท็จ\nเทนนิส\nเทพ\nเทพา\nเทพารักษ์\nเทพยเจ้า\nเทพยดา\nเทพยุดา\nเทพิน\nเทพินทร์\nเทพี\nเทเพนทร์\nเทโพ\nเทริด\nเทลลูเรียม\nเทวทัณฑ์\nเทวดา\nเทวทูต\nเทวธรรม\nเทวนาครี\nเทวนิยม\nเทวรูป\nเทวโลก\nเทววิทยา\nเทวสถาน\nเทวศ\nเทวษ\nเทวัญ\nเทวัน\nเทวาลัย\nเทวินทร์\nเทวี\nเทเวศ\nเทเวศร์\nเทเวศวร์\nเทศ\nเทศะ\nเทศาภิบาล\nเทศน์\nเทศนา\nเทห์\nเท่ห์\nเทห์ฟากฟ้า\nเทหวัตถุ\nเท่อ\nเท้อ\nเทอญ\nเทอม\nเทอร์เบียม\nเทอร์โมมิเตอร์\nเทอะทะ\nเทา\nเท่า\nเท้า\nเท้ายายม่อม\nเท่ารึง\nเทิ่ง\nเทิด\nเทิน\nเทิบ\nเทิบทาบ\nเทิ้ม\nเที่ยง\nเทียด\nเทียน\nเที้ยน\nเทียบ\nเทียม\nเทียร\nเที้ยร\nเทียว\nเที่ยว\nเทือ\nเทื่อ\nเทื้อ\nเทือก\nแท้\nแท็กซี่\nแทง\nแท่ง\nแท้ง\nแท็งก์\nแทงทวย\nแทงวิสัย\nแทตย์\nแทน\nแท่น\nแทนเจนต์\nแทนทาลัม\nแทบ\nแทรก\nแทรกเตอร์\nแทลเลียม\nแทะ\nโท\nโท่\nโทกเทก\nโทง\nโทงเทง\nโทณะ\nโทน\nโทนโท่\nโทมนัส\nโทรคมนาคม\nโทรทรรศน์\nโทรทัศน์\nโทรพิมพ์\nโทรภาพ\nโทรเลข\nโทรศัพท์\nโทรสาร\nโทรม\nโทษ\nโทษา\nโทษานุโทษ\nโทสะ\nโทสาคติ\nโทโส\nโทหฬินี\nไท\nไท้\nไทเทเนียม\nไทเทรต\nไทย\nไทร\nไทวะ\nธง\nธงก์\nธชะ\nธชี\nธตรฐ\nธนบัตร\nธนสมบัติ\nธนสาร\nธนะ\nธนา\nธนาคม\nธนาคาร\nธนาณัติ\nธเนศ\nธโนปจัย\nธไนศวรรย์\nธนิต\nธนิษฐะ\nธนิษฐา\nธนุ\nธนุรวิทยา\nธนุรเวท\nธนู\nธม\nธมกรก\nธรณะ\nธรณิน\nธรณินทร์\nธรณิศ\nธรณิศร\nธรณิศวร์\nธรณี\nธรมาน\nธรรม\nธรรมนูญ\nธรรมยุต\nธรรมยุติกนิกาย\nธรรมะ\nธรรมาทิตย์\nธรรมาธรรม\nธรรมาธิปไตย\nธรรมาธิษฐาน\nธรรมานุสาร\nธรรมาภิมุข\nธรรมาภิสมัย\nธรรมายตนะ\nธรรมารมณ์\nธรรมาสน์\nธรรมิก\nธรา\nธราดล\nธราธร\nธราธาร\nธราธิบดี\nธราธิป\nธริษตรี\nธเรษตรี\nธเรศ\nธวัช\nธัช\nธัญ\nธัญญาหาร\nธันยา\nธันยาวาท\nธันวาคม\nธัมมะ\nธาดา\nธาตรี\nธาตวากร\nธาตุ\nธาตุโขภ\nธาตุมมิสสา\nธานิน\nธานินทร์\nธานี\nธาร\nธารกำนัล\nธารคำนัล\nธารณะ\nธารณา\nธารา\nธาษตรี\nธำมรงค์\nธำรง\nธิดา\nธิติ\nธีระ\nธุช\nธุดงค์\nธุดงควัตร\nธุต\nธุตตะ\nธุมเกตุ\nธุมา\nธุรการ\nธุรกิจ\nธุระ\nธุรำ\nธุลี\nธุวดารา\nธุวภาค\nธุวมณฑล\nธูป\nเธนุ\nเธอ\nเธียร\nโธ่\nโธวนะ\nนก\nนกุล\nนขลิขิต\nนขะ\nนขา\nนเคนทร์\nนโคทร\nนคร\nนครินทร์\nนคเรศ\nนง\nนงคุฐ\nนที\nนนตรา\nนนท์\nนันทน์\nนนทรี\nนนทลี\nนนทิ\nนบ\nนปุงสกลิงค์\nนปุงสกลึงค์\nนพ\nนพนิต\nนภจร\nนภดล\nนภศูล\nนภา\nนภาลัย\nนม\nนมตำเรีย\nนมตำเลีย\nนมะ\nนมัสการ\nนมาซ\nนยนะ\nนยนา\nนโยบาย\nนรชาติ\nนรเทพ\nนรนาถ\nนรบดี\nนรบาล\nนรสิงห์\nนรสีห์\nนรา\nนรากร\nนราธิป\nนรินทร์\nนริศ\nนริศร\nนริศวร\nนเรศ\nนเรศวร\nนเรศวร์\nนโรดม\nนรก\nนรกานต์\nนรการ\nนรี\nนฤเทพ\nนฤบดี\nนฤบาล\nนฤเบศ\nนฤปเวศม์\nนฤปัตนี\nนฤคหิต\nนฤนาท\nนฤมล\nนฤตย์\nนฤตยสถาน\nนฤพาน\nนฤมาณ\nนฤมิต\nนลาฏ\nนลิน\nนลินี\nนวกรรม\nนวการ\nนวกิจ\nนวนิยาย\nนวปฎล\nนวรัตน์\nนวโลหะ\nนวกะ\nนวโกวาท\nนวด\nนวม\nน่วม\nนวมี\nนวย\nนวล\nนวัตกรรม\nนวาระ\nนหารุ\nนหุต\nนฬการ\nนอ\nนอก\nนอง\nน่อง\nน้อง\nน่องแน่ง\nนอต\nนอน\nนอบ\nน้อม\nน้อย\nน้อยหน่า\nน้อยโหน่ง\nนะ\nนะแน่ง\nนัก\nนักขัต\nนักขัตฤกษ์\nนักษัตร\nนักสราช\nนัข\nนั่ง\nนังคัล\nนัจ\nนัฑ\nนัด\nนัดดา\nนัตถุ์\nนั่น\nนั้น\nนันททายี\nนันทนาการ\nนันทวัน\nนันทิ\nนับ\nนัย\nนัยน์\nนัยนา\nนัว\nนัวเนีย\nนา\nน่า\nน้า\nนาก\nนากบุด\nนากาสาหรี\nนาค\nนาคร\nนาคา\nนาคาวโลก\nนาคินทร์\nนาคี\nนาเคนทร์\nนาเคศวร\nนาง\nนางเกล็ด\nนางนวล\nนางนูน\nนางรม\nนางรำ\nนางล้อม\nนางเล็ด\nนางเลิ้ง\nนางหงส์\nนางอาย\nนางแอ่น\nนาฏ\nนาฏกะ\nนาด\nนาถ\nนาท\nนาที\nนาน\nน่าน\nนานัครส\nนานัปการ\nนานา\nนาเนก\nนาบ\nนาภี\nนาม\nนามานุกรม\nนามาภิไธย\nนาย\nน่าย\nนายก\nนายิกา\nนารา\nนารายณ์\nนารี\nนาเรศ\nนาลิวัน\nนาว\nน้าว\nนาวา\nนาวิก\nนาวิน\nนาวี\nนาเวศ\nนาศ\nนาสา\nนาสิก\nนาฬิกา\nนาฬิเก\nนาฬี\nนำ\nน้ำ\nน้ำละว้า\nน้ำว้า\nนิ\nนิกเกิล\nนิกขะ\nนิกร\nนิกรอยด์\nนิกาย\nนิคม\nนิครนถ์\nนิคหกรรม\nนิคหะ\nนิคหิต\nนิคาลัย\nนิเคราะห์\nนิโคติน\nนิโครธ\nนิโครม\nนิ่ง\nนิจ\nนิด\nนิตย์\nนิตยทาน\nนิตยภัต\nนิตยสาร\nนิติ\nนิทร\nนิทรรศการ\nนิทรา\nนิทรารมณ์\nนิทัศน์\nนิทาน\nนิเทศ\nนิธาน\nนิธิ\nนินทา\nนินนาท\nนินาท\nนิบาต\nนิปริยาย\nนิปัจการ\nนิพจน์\nนิพนธ์\nนิพพาน\nนิพพิทา\nนิพัทธ์\nนิพันธ์\nนิพิท\nนิเพท\nนิภา\nนิ่ม\nนิ้ม\nนิมนต์\nนิมมาน\nนิมมานรดี\nนิมิต\nนิยต\nนิยม\nนิยัตินิยม\nนิยาม\nนิยาย\nนิยุต\nนิรคุณ\nนิรชร\nนิรชรา\nนิรทุกข์\nนิรเทศ\nนิรโทษ\nนิรโทษกรรม\nนิรนัย\nนิรนาม\nนิรภัย\nนิรมล\nนิรมาน\nนิรัตศัย\nนิรันดร\nนิราพาธ\nนิรามัย\nนิรามิษ\nนิราศรัย\nนิรินธน์\nนิรมาณ\nนิรมิต\nนิรยบาล\nนิรัพพุท\nนิรา\nนิราศ\nนิรุกติ\nนิรุตติ\nนิรุทธ์\nนิโรธ\nนิล\nนิลุบล\nนิโลบล\nนิ่ว\nนิ้ว\nนิวคลิอิก\nนิวเคลียร์\nนิวเคลียส\nนิวตรอน\nนิวรณ์\nนิวัต\nนิวัตน์\nนิวาต\nนิวาส\nนิเวศ\nนิเวศน์\nนิศา\nนิษาท\nนิสัช\nนิสัชชาการ\nนิสัย\nนิสาท\nนิสิต\nนิสีทนสันถัต\nนิสีทนะ\nนิสีทนาการ\nนิเสธ\nนี่\nนี้\nนี่นัน\nนีรนาท\nนีออน\nนีโอดิเมียม\nนึก\nนึง\nนึ่ง\nนุง\nนุ่ง\nนุงนัง\nนุช\nนุต\nนุ่น\nนุ่ม\nนุ้ย\nนูน\nนู่น\nนู้น\nเนกขัม\nเนตบอล\nเนตร\nเนติ\nเน้น\nเนบิวลา\nเนปจูน\nเนปทูเนียม\nเนมิ\nเนย\nเนรกัณฐี\nเนรคุณ\nเนรเทศ\nเนรนาด\nเนรมิต\nเนระพูสี\nเนอ\nเน้อ\nเนา\nเน่า\nเนาวนิต\nเนาวรัตน์\nเนิน\nเนิ่น\nเนิบ\nเนียง\nเนียน\nเนียม\nเนียร\nเนียรทุกข์\nเนียรเทศ\nเนียรนาท\nเนื้อ\nเนือง\nเนื่อง\nเนือย\nแน่\nแน่ง\nแน่น\nแนบ\nแน่บ\nแนม\nแนว\nแน่ว\nแนะ\nแน่ะ\nแนะแหน\nโน\nโน้ต\nโนน\nโน่น\nโน้น\nโนเบเลียม\nโน้ม\nโนมพรรณ\nโนรา\nโนรี\nใน\nไน\nไนต์คลับ\nไนโตรเจน\nไนลอน\nไนโอเบียม\nบ่\nบก\nบง\nบ่ง\nบงก์\nบ๊งเบ๊ง\nบงสุ์\nบด\nบดินทร์\nบดี\nบถ\nบท\nบน\nบ่น\nบพิตร\nบพิธ\nบ่ม\nบรม\nบรมัตถ์\nบรรจง\nบรรจถรณ์\nบรรจบ\nบรรจวบ\nบรรจุ\nบรรเจิด\nบรรณ\nบรรดา\nบรรตานึก\nบรรถร\nบรรทม\nบรรทัด\nบรรทาน\nบรรทุก\nบรรเทา\nบรรเทือง\nบรรพ\nบรรพ์\nบรรพชา\nบรรพชิต\nบรรพต\nบรรยง\nบรรยงก์\nบรรยเวกษก์\nบรรยากาศ\nบรรยาย\nบรรลัย\nบรรลาย\nบรรลุ\nบรรเลง\nบรรโลม\nบรรษัท\nบรรสบ\nบรรสพ\nบรรสม\nบรรสาน\nบรรสาร\nบรรหาน\nบรรหาร\nบรอนซ์\nบรั่นดี\nบรัศว์\nบราลี\nบริกรรม\nบริการ\nบริขาร\nบริขารโจล\nบริคณห์\nบริจาค\nบริจาริกา\nบริเฉท\nบริชน\nบริดจ์\nบริบท\nบริบาล\nบริบูรณ์\nบริพนธ์\nบริพัตร\nบริพันธ์\nบริพาชก\nบริพาร\nบริภัณฑ์\nบริภาษ\nบริโภค\nบริมาส\nบริยาย\nบริรม\nบริรักษ์\nบริราช\nบริวรรต\nบริวาร\nบริวาส\nบริเวณ\nบริษัท\nบริสชน\nบริสุทธิ์\nบริหาร\nบล็อก\nบวก\nบวง\nบ่วง\nบวช\nบวน\nบ้วน\nบวบ\nบวม\nบ๊วย\nบวร\nบหลิ่ม\nบอ\nบ่อ\nบ้อ\nบอก\nบอง\nบ่อง\nบ้อง\nบ๊อง\nบ้องแบ๊ว\nบองหลา\nบอด\nบอน\nบ่อน\nบอบ\nบ้อม\nบ๋อม\nบ่อย\nบอระเพ็ด\nบอล\nบอลลูน\nบ้อหุ้น\nบ๊ะ\nบ๊ะจ่าง\nบะหมี่\nบัก\nบักโกรก\nบัคเตรี\nบัง\nบั้ง\nบังกะโล\nบังเกิด\nบังคน\nบังคม\nบังคล\nบังควร\nบังคับ\nบังคัล\nบังแทรก\nบังวาย\nบังเวียน\nบังสุกุล\nบังสุกูลิก\nบังสูรย์\nบังหวน\nบังเหตุ\nบังเหียน\nบังอร\nบังอวจ\nบังอาจ\nบังเอิญ\nบัญจก\nบัญชร\nบัญชา\nบัญชี\nบัญญัติ\nบัญหา\nบัฏ\nบัณฑร\nบัณฑิต\nบัณฑิตย์\nบัณฑุ\nบัณฑูร\nบัณเฑาะก์\nบัณเฑาะว์\nบัณณาส\nบัณรส\nบัณรสี\nบัด\nบัดกรี\nบัดซบ\nบัดสี\nบัตร\nบัทม์\nบัน\nบั่น\nบั้น\nบันจวบ\nบันดล\nบันดาล\nบันได\nบันทึก\nบันทึง\nบันเทิง\nบันยะบันยัง\nบันลือ\nบัปผาสะ\nบัพ\nบัพชา\nบัพพาชนียกรรม\nบัล\nบัลลพ\nบัลลังก์\nบัลลูน\nบัลเลต์\nบัว\nบา\nบ่า\nบ้า\nบาก\nบาง\nบ่าง\nบ้าง\nบาจรีย์\nบาซิลลัส\nบาด\nบาดทะจิต\nบาดทะพิษ\nบาดทะยัก\nบาดาล\nบาตร\nบาท\nบาทสกุณี\nบาทหลวง\nบาทาธึก\nบาทุกา\nบาน\nบ้าน\nบานชื่น\nบานเช้า\nบานบุรี\nบานไม่รู้โรย\nบานเย็น\nบ้าบ๋า\nบาป\nบาย\nบ่าย\nบ้าย\nบาร์\nบารนี\nบารมี\nบาร์เรล\nบาร์เลย์\nบารอมิเตอร์\nบ้าระบุ่น\nบาเรียน\nบาเรียม\nบาล\nบาลี\nบ่าว\nบ่าวขุน\nบาศ\nบาศก์\nบาสเกตบอล\nบาหลี\nบ๋ำ\nบำเทิง\nบำนาญ\nบำบวง\nบำบัด\nบำเพ็ญ\nบำราบ\nบำราศ\nบำรุง\nบำรู\nบำเรอ\nบำหยัด\nบำเหน็จ\nบิ\nบิฐ\nบิณฑบาต\nบิด\nบิดร\nบิดหล่า\nบิดา\nบิตุ\nบิตุจฉา\nบิตุรงค์\nบิตุเรศ\nบิตุลา\nบิน\nบิ่น\nบินยา\nบิลเลียด\nบิวเรตต์\nบิสมัท\nบี้\nบีฑา\nบีตา\nบีบ\nบีเยศ\nบึก\nบึกบึน\nบึง\nบึ่ง\nบึ้ง\nบุ\nบุก\nบุคคล\nบุคลากร\nบุคลาธิษฐาน\nบุคลิก\nบุง\nบุ่ง\nบุ้ง\nบุ้งกี๋\nบุญ\nบุญญาธิการ\nบุญญานุภาพ\nบุญญาภินิหาร\nบุญญาภิสังขาร\nบุณฑริก\nบุณมี\nบุณย์\nบุตร\nบุตรี\nบุถุชน\nบุทคล\nบุนนาค\nบุบ\nบุบบิบ\nบุปผชาติ\nบุพกรรม\nบุพการี\nบุพกิจ\nบุพชาติ\nบุพทักษิณ\nบุพนิมิต\nบุพบท\nบุพพาจารย์\nบุพเพสันนิวาส\nบุพโพ\nบุ๋ม\nบุ่มบ่าม\nบุ้ย\nบุรณะ\nบุรพทิศ\nบุรพบท\nบุรพาจารย์\nบูรพาจารย์\nบุระ\nบุราณ\nบุรินทร์\nบุริมทิศ\nบุริมพรรษา\nบุริมสิทธิ\nบุรี\nบุรุษ\nบุโรทั่ง\nบุษกร\nบุษบก\nบุษบง\nบุษบัน\nบุษบา\nบุษบามินตรา\nบุษปราค\nบุษปะ\nบุษย์\nบุษย์น้ำทอง\nบุษยมาส\nบุษยะ\nบุษราคัม\nบุหงัน\nบุหงา\nบุหรง\nบุหรี่\nบุหลัน\nบู่\nบู้\nบูชนียสถาน\nบูชา\nบูชิต\nบูด\nบูดู\nบูร\nบูรณ์\nบูรณภาพ\nบูรณมี\nบูรณะ\nบูรณาการ\nบูรพ์\nบูรพะ\nบูรพา\nเบ้\nเบ่ง\nเบ๊จี๋\nเบญกานี\nเบญจกัลยาณี\nเบญจกามคุณ\nเบญจขันธ์\nเบญจดุริยางค์\nเบญจธรรม\nเบญจบรรพต\nเบญจพรรณ\nเบญจเพส\nเบญจมาศ\nเบญจรงค์\nเบญจศก\nเบญจศีล\nเบญจะ\nเบญจา\nเบญจางค์\nเบญจางคประดิษฐ์\nเบญญา\nเบญพาด\nเบ็ด\nเบ็ดเตล็ด\nเบ็ดเสร็จ\nเบน\nเบนซิน\nเบรก\nเบริลเลียม\nเบส\nเบ้อ\nเบอร์\nเบอร์คีเลียม\nเบ้อเร่อ\nเบ้อเร่อเท่อ\nเบ้อเริ่ม\nเบ้อเริ่มเทิ่ม\nเบอะ\nเบอะบะ\nเบะ\nเบา\nเบ้า\nเบาราณ\nเบาะ\nเบิก\nเบิ่ง\nเบี้ย\nเบี่ยง\nเบียด\nเบียน\nเบียร์\nเบี้ยว\nเบือ\nเบื่อ\nเบื้อ\nเบื้อง\nเบือน\nแบ\nแบ้\nแบก\nแบคทีเรีย\nแบ่ง\nแบงก์\nแบดมินตัน\nแบตเตอรี่\nแบน\nแบนโจ\nแบบ\nแบ็บ\nแบเรียม\nแบหลา\nแบะ\nโบ\nโบ้\nโบ๋\nโบก\nโบกขรณี\nโบกขรพรรษ\nโบชุก\nโบต\nโบนัส\nโบ๊เบ๊\nโบย\nโบรมีน\nโบรอน\nโบราณ\nโบสถ์\nใบ\nใบ้\nไบ่\nปก\nปกติ\nปกรณ์\nปกรณัม\nปกิณกะ\nปกีรณัม\nปโกฏิ\nปง\nป่ง\nปงช้าง\nปฎล\nปฏัก\nปฏิกรณ์\nปฏิกรรม\nปฏิการะ\nปฏิกิริยา\nปฏิกูล\nปฏิคม\nปฏิคหิต\nปฏิคาหก\nปฏิฆะ\nปฏิชีวนะ\nปฏิญญา\nปฏิญาณ\nปฏิทิน\nปฏิบถ\nปฏิบัติ\nปฏิปทา\nปฏิปักษ์\nปฏิปัน\nปฏิปุจฉาพยากรณ์\nปฏิปุจฉาวาที\nปฏิพัทธ์\nปฏิพากย์\nปฏิภาค\nปฏิภาณ\nปฏิมา\nปฏิมากร\nปฏิยุทธ์\nปฏิรพ\nปฏิรูป\nปฏิโลม\nปฏิวัติ\nปฏิวาต\nปฏิวาท\nปฏิเวธ\nปฏิสนธิ\nปฏิสวะ\nปฏิสังขรณ์\nปฏิสันถาร\nปฏิสัมภิทา\nปฏิเสธ\nปฐพี\nปฐม\nปฐวี\nปณต\nปณาม\nปณิธาน\nปณิธิ\nปณีต\nปด\nปดิวรัดา\nปติ\nปถพี\nปถมัง\nปถวี\nปทัฏฐาน\nปทัสถาน\nปทานุกรม\nปทีป\nปทุม\nปน\nป่น\nปนัดดา\nปปัญจะ\nปม\nปรนัย\nปรปักษ์\nปรโลก\nปรวาที\nปรก\nปรกติ\nปรง\nปรตยักษ์\nปรน\nปรนนิบัติ\nปรนิมมิตวสวัตดี\nปรบ\nปรปักษ์\nปรมัตถ์\nปรมาจารย์\nปรมาณู\nปรมาภิไธย\nปรมาภิเษก\nปรมินทร์\nบรเมนทร์\nปรเมศวร์\nปรเมษฐ์\nปรวด\nปรวนแปร\nปรศุ\nปรสิต\nปร๋อ\nปรองดอง\nปรอด\nปรอท\nปรอย\nประ\nประกบ\nประกฤต\nประกฤติ\nประกล\nประกวด\nประกวดประขัน\nประกอบ\nประกัน\nประกับ\nประกาย\nประกายพรึก\nประการ\nประกาศ\nประกาศนียบัตร\nประกาศิต\nประกำ\nประกิด\nประกิต\nประคด\nประคนธรรพ\nประคนธรรพ์\nประคบ\nประคบประหงม\nประคอง\nประคับประคอง\nประคัลภ์\nประคำ\nประคิ่น\nประคุณ\nประเคน\nประเคราะห์\nประโคน\nประโคนธรรพ\nประโคนธรรพ์\nประโคม\nประจง\nประจญ\nประจบ\nประจบประแจง\nประจวบ\nประจ๋อประแจ๋\nประจักษ์\nประจักษนิยม\nประจัญ\nประจัน\nประจาก\nประจาค\nประจาน\nประจำ\nประจิม\nประจิ้มประเจ๋อ\nประจุ\nประจุคมน์\nประจุบัน\nประเจก\nประเจิด\nประเจิดประเจ้อ\nประเจียด\nประแจ\nประชด\nประชน\nประชวม\nประชวร\nประชัน\nประชา\nประชาธิปไตย\nประชิด\nประชี\nประชุม\nประเชิญ\nประณต\nประณม\nประณาม\nประณิธาน\nประณิธิ\nประณีต\nประณุท\nประดง\nประดน\nประดวน\nประดอน\nประดอย\nประดัก\nประดักประเดิด\nประดัง\nประดับ\nประดา\nประดาก\nประดาป\nประดาษ\nประดิชญา\nประดิดประดอย\nประดิทิน\nประดิษฐ์\nประดิษฐกรรม\nประดิษฐาน\nประดุง\nประดุจ\nประดู่\nประเด\nประเด็น\nประเดิม\nประเดียง\nประเดี๋ยว\nประเดี๋ยวประด๋าว\nประแดง\nประแดะ\nประโดง\nประโดย\nประตง\nประตัก\nประตาป\nประติชญา\nประติญาณ\nประติทิน\nประติมากร\nประติมากรรม\nประติรพ\nประตู\nประถม\nประถมจินดา\nประทม\nประท้วง\nประทวน\nประทักษ์\nประทักษิณ\nประทัง\nประทัด\nประทับ\nประทาน\nประทาย\nประทาศี\nประทิน\nประทิ่น\nประทีป\nประทุฐ\nประทุน\nประทุษ\nประทุษฐ์\nประเทศ\nประเทา\nประเทียด\nประเทียบ\nประเทือง\nประธาน\nประธานาธิบดี\nประนม\nประนอ\nประนอม\nประนัง\nประนัปดา\nประนีประนอม\nประปราน\nประปราย\nประปา\nประเปรี้ยง\nประเปรียว\nประพจน์\nประพนธ์\nประพรม\nประพฤติ\nประพฤทธิ์\nประพัด\nประพัทธ์\nประพันธ์\nประพาต\nประพาส\nประพาสมหรณพ\nประพาฬ\nประพิณ\nประพิมพ์ประพาย\nประพุทธ์\nประเพณี\nประโพธ\nประไพ\nประไพร\nประภพ\nประภัสสร\nประภา\nประภาคาร\nประภาพ\nประภาษ\nประภาส\nประเภท\nประมง\nประมวล\nประมาณ\nประมาท\nประมุข\nประมุท\nประมูล\nประเมิน\nประโมง\nประโมทย์\nประยงค์\nประยุกต์\nประยุทธ์\nประยุร\nประยูร\nประโยค\nประโยชน์\nประโรหิต\nประลมพ์\nประลอง\nประลัย\nประลาต\nประลาย\nประลุ\nประเล่ห์\nประเล้าประโลม\nประโลม\nประวรรต\nประวรรตน์\nประวัติ\nประวาล\nประวาลปัทม์\nประวาส\nประวิง\nประวิช\nประวิตร\nประวิน\nประวีณ\nประเวณี\nประเวศ\nประเวศน์\nประศม\nประศาสน์\nประศุ\nประสก\nประสงค์\nประสบ\nประสพ\nประสม\nประสะ\nประสัก\nประสันนาการ\nประสัยห์\nประสา\nประสาท\nประสาธน์\nประสาน\nประสาร\nประสิทธิ์\nประสิทธิผล\nประสิทธิภาพ\nประสีประสา\nประสูต\nประสูติ\nประเสบัน\nประเสบันอากง\nประเสริฐ\nประหนึ่ง\nประหม่า\nประหยัด\nประหลาด\nประหล่ำ\nประหวัด\nประหวั่น\nประหัตประหาร\nประหาณ\nประหาร\nประเหล\nประเหส\nประไหมสุหรี\nประอบ\nประอร\nปรัก\nปรักปรำ\nปรักมะ\nปรัง\nปรัชญา\nปรัตถจริยา\nปรัตยุบัน\nปรัน\nปรับ\nปรัมปรา\nปรัศจิม\nปรัศนา\nปรัศนี\nปรัศว์\nปรัสสบท\nปร่า\nปรากฏ\nปรากรม\nปรากฤต\nปราการ\nปราง\nปรางค์\nปราจีน\nปราชญ์\nปราชญา\nปราชัย\nปราณ\nปราณี\nปราด\nปราน\nปรานี\nปราบ\nปราบดาภิเษก\nปราปต์\nปราม\nปรามาส\nปราโมช\nปราโมทย์\nปราย\nปรารถนา\nปรารภ\nปรารมภ์\nปราศ\nปราศจาก\nปราศรัย\nปราษณี\nปราษาณ\nปราสัย\nปราสาท\nปรำ\nปริ\nปริก\nปริกขาร\nปริกรรม\nปริกัป\nปริคณห์\nปริจาค\nปริจาริกา\nปริเฉท\nปริชน\nปริซึม\nปริญญา\nปริณาม\nปริณายก\nปริต\nปริตตะ\nปริตโตทก\nปริตร\nปริทรรศน์\nปริทัยหัคคี\nปริทัศน์\nปริเทพ\nปริเทวะ\nปรินิพพาน\nปริบ\nปริบท\nปริปันถ์\nปริพนธ์\nปริพัตร\nปริพันธ์\nปริพาชก\nปริภัณฑ์\nปริภาษ\nปริภูมิ\nปริโภค\nปริ่ม\nปริมณฑล\nปริมาณ\nปริมาตร\nปริยัติ\nปริยานุช\nปริยาย\nปริเยศ\nปริโยสาน\nปริวรรต\nปริวัตร\nปริวาร\nปริวาส\nปริวิตก\nปริเวณ\nปริศนา\nปริษัท\nปริสัญญู\nปริสุทธิ\nปริหาน\nปริหาร\nปรี่\nปรีชญา\nปรีชา\nปรี๊ด\nปรีดา\nปรีดิ\nปรีดิ์\nปรีดี\nปรีติ\nปรียะ\nปรียา\nปรึก\nปรึกษา\nปรึง\nปรือ\nปรื๋อ\nปรุ\nปรุง\nปรู\nปรู๋\nปรูด\nปรู๊ด\nปรู๊ดปร๊าด\nปรู๊ฟ\nปฤงคพ\nปฤจฉา\nปฤษฎางค์\nปฤษฐ\nปลก\nปลกเปลี้ย\nปลง\nปล่ง\nปลด\nปล้น\nปลวก\nปลอก\nปล่อง\nปล้อง\nปลอด\nปล้อน\nปลอบ\nปลอม\nปล่อย\nปละ\nปลัก\nปลั๊ก\nปลัง\nปลั่ง\nปลัด\nปลัดขิก\nปลา\nปลาต\nปลาบ\nปลาย\nปลาสเตอร์\nปลาสนาการ\nปล้ำ\nปลิง\nปลิด\nปลิ้น\nปลิโพธ\nปลิม\nปลิ่ม\nปลิว\nปลี\nปลีก\nปลื้ม\nปลุก\nปลูก\nปวกเปียก\nปวง\nป่วง\nปวด\nป่วน\nป้วน\nป้วนเปี้ยน\nป่วย\nปวัตน์\nปวารณา\nปวาล\nปวาส\nปวาฬ\nปวิช\nปวิตร\nปวิธ\nปวิเวก\nปวีณ\nปวุติ\nปเวณี\nปเวส\nปเวสน์\nปศุ\nปสันนะ\nปสันนาการ\nปสาท\nปสาน\nปสาสน์\nปสุ\nปสุต\nปสูติ\nปหังสนะ\nปหาน\nปหาร\nปหาส\nปอ\nป้อ\nป๋อ\nปอก\nปอง\nป่อง\nป้อง\nปอด\nปอน\nป้อน\nปอนด์\nปอเนาะ\nปอบ\nป้อแป้\nปอม\nป้อม\nป๋อม\nปอย\nป้อย\nป้อยอ\nปะ\nปะกน\nปะกัง\nปะการัง\nปะกำ\nปะขาว\nปะงาบ\nปะตาปา\nปะตาระกาหลา\nปะติดปะต่อ\nปะติยาน\nปะทะ\nปะทะปะทัง\nปะทุ\nปะทุน\nปะปน\nปะมง\nปะราลี\nปะรำ\nปะไร\nปะลอม\nปะเลง\nปะแล่ม\nปะโลง\nปะวะหล่ำ\nปะหงับ\nปะหนัน\nปะหัง\nปะเหลาะ\nปัก\nปักข์\nปักเป้า\nปักษ์\nปักษา\nปักษิน\nปักษี\nปัง\nปั๋ง\nปังสุ์\nปังสุกุล\nปัจจัตตะ\nปัจจันต์\nปัจจันตคาม\nปัจจันตชนบท\nปัจจันตประเทศ\nปัจจัย\nปัจจามิตร\nปัจจุคมน์\nปัจจุทธรณ์\nปัจจุบัน\nปัจจุสมัย\nปัจเจก\nปัจโจปการกิจ\nปัจฉา\nปัจฉิม\nปัจถรณ์\nปัจนึก\nปัจยาการ\nปัจเวกขณ์\nปัชชุน\nปัญจนที\nปัญจวัคคีย์\nปัญจก\nปัญจกะ\nปัญจมี\nปัญจวีสติ\nปัญญัติ\nปัญญา\nปัญหา\nปัฏ\nปัฏนะ\nปัฐยาวัต\nปัณฑรหัตถี\nปัณณะ\nปัณณาส\nปัณณาสก์\nปัณรสี\nปัณหิ\nปัด\nปัตคาด\nปัตตะ\nปัตตานึก\nปัตตานุโมทนา\nปัตตาเวีย\nปัตติ\nปัตติก\nปัตถร\nปัตถะ\nปัตนิ\nปัตนี\nปัตหล่า\nปัถพี\nปัถวี\nปัทม์\nปัทมะ\nปัทมาสน์\nปัน\nปั่น\nปั้น\nปั้นจั่น\nปันจุเหร็จ\nปั้นลม\nปั้นหยา\nปั้นเหน่ง\nปับ\nปั๊บ\nปัปผาสะ\nปัพพาชนียกรรม\nปัพภาระ\nปั๊ม\nปัยกา\nปัยยิกา\nปัวเปีย\nปัศจิม\nปัศตัน\nปัสสาวะ\nปัสสาสะ\nปา\nป่า\nป้า\nปาก\nปาง\nป้าง\nปาจรีย์\nปาจิตตีย์\nปาจีน\nปาฏลิ\nปาฏิบท\nปาฏิบุคลิก\nปาฏิโภค\nปาฏิหาริย์\nปาฐก\nปาฐกถา\nปาฐะ\nปาณกชาติ\nปาณะ\nปาณาติบาต\nปาณิ\nปาณี\nปาด\nปาติโมกข์\nปาตี\nปาเต๊ะ\nปาท่องโก๋\nปาทังกา\nปาทาน\nปาทุกา\nปาน\nป่าน\nป้าน\nปานะ\nปานียะ\nป้าบ\nป๊าบ\nปาพจน์\nปาม\nปาโมกข์\nป่าย\nป้าย\nปายาส\nปาร์เกต์\nปารมี\nปารเมศ\nปาราชิก\nปาริฉัตร\nปาริชาต\nปารุสกวัน\nปาล\nปาล์ม\nปาลิไลยก์\nปาลี\nปาว\nป่าว\nป๊าว\nปาวาร\nปาษาณ\nปาส\nปาสาณ\nปาสาทิกะ\nปาหนัน\nปาหี่\nปำ\nป้ำ\nป้ำเป๋อ\nปิกนิก\nปิ้ง\nปิงคละ\nปิงปอง\nปิฎก\nปิฏฐะ\nปิฐิ\nปิณฑะ\nปิด\nปิตตะ\nปิตา\nปิตามหัยกา\nปิตามหัยยิกา\nปิตุ\nปิตุจฉา\nปิตุภูมิ\nปิตุลา\nปิโตรเลียม\nปิ่น\nปิ่นแก้ว\nปิ่นโต\nปิปผลี\nปิ่ม\nปิ้ม\nปิยะ\nปิยังคุ\nปิโยรส\nปิลันธน์\nปิ๋ว\nปิศาจ\nปิหกะ\nปี\nปี่\nปี้\nปี๋\nปีก\nปีฐะ\nปี๊ด\nปีติ\nปีน\nปีบ\nปี๊บ\nปีศาจ\nปีฬกะ\nปึก\nปึง\nปึ่ง\nปึ๋ง\nปึ้ด\nปึมปื้อ\nปืน\nปื้น\nปือ\nปื้อ\nปื๋อ\nปุ\nปุ๊\nปุก\nปุกปุย\nปุคละ\nปุ้งกี๋\nปุงควะ\nปุงลิงค์\nปุงลึงค์\nปุจฉา\nปุฏะ\nปุณฑริก\nปุด\nปุตตะ\nปุถุชน\nปุนนาค\nปุนภพ\nปุนัพสุ\nปุบ\nปุ๊บ\nปุปผะ\nปุปะ\nปุพพะ\nปุ่ม\nปุ่มป่ำ\nปุ้ม\nปุ๋ม\nปุย\nปุ้ย\nปุ๋ย\nปุรณะ\nปุระ\nปุราณ\nปุราณะ\nปุริมพรรษา\nปุเรจาริก\nปุโรหิต\nปุลลิงค์\nปุลลึงค์\nปุลินท์\nปุโลปุเล\nปุษยะ\nปุสสะ\nปู\nปู่\nปูชกะ\nปูชนียบุคคล\nปูชนียวัตถุ\nปูชนียะ\nปูชา\nปูชิต\nปูด\nปูน\nปูม\nปู้ยี่ปู้ยำ\nปูระ\nปูลู\nเป้\nเป๋\nเปก\nเป๊ก\nเป่ง\nเป้ง\nเป๋ง\nเป็ด\nเปตพลี\nเปตอง\nเป็น\nเปยยาล\nเปร็ง\nเปรต\nเปรม\nเปรย\nเปรอ\nเปรอะ\nเปราะ\nเปรียง\nเปรี้ยง\nเปรี้ยงปร้าง\nเปรียญ\nเปรียบ\nเปรี่ยม\nเปรียว\nเปรี้ยว\nเปรียะ\nเปรี๊ยะ\nเปรื่อง\nเปรื้อย\nเปล\nเปล่ง\nเปลว\nเปลา\nเปล่า\nเปล้า\nเปลาะ\nเปลี้ย\nเปลี่ยน\nเปลี่ยม\nเปลี่ยว\nเปลือก\nเปลือง\nเปลื้อง\nเปลือย\nเปศะ\nเปศัส\nเปสการ\nเปสละ\nเปสุญวาท\nเป๋อ\nเป้อเย้อ\nเปอร์\nเปอร์เซ็นต์\nเปะ\nเปา\nเป่า\nเป้า\nเป๊า\nเป๋า\nเป๋าฮื้อ\nเปาะ\nเป๊าะ\nเปาะเปี๊ยะ\nเปาะแปะ\nเปิก\nเปิง\nเปิงมาง\nเปิด\nเปิ่น\nเปิบ\nเปิ๊บ\nเปีย\nเปียก\nเปี๊ยก\nเปี๊ยบ\nเปี่ยม\nเปี้ยว\nเปี๊ยว\nเปียะ\nเปี๊ยะ\nเปือก\nเปื้อน\nเปื่อย\nแป\nแป้ง\nแป๋ง\nแปด\nแป๊ด\nแปทู\nแป้น\nแป๊น\nแปบ\nแป๊บ\nแปม\nแปร\nแปร๋\nแปรก\nแปรง\nแปร่ง\nแปร๊ด\nแปร้น\nแปร๋น\nแปรปรวน\nแประ\nแปล\nแปล้\nแปลก\nแปลง\nแปลน\nแปลบ\nแปล๊บ\nแป้ว\nแป๊ว\nแปะ\nแป๊ะ\nแป๊ะซะ\nโป\nโป่\nโป้\nโป๊\nโปก\nโป๊ก\nโป๊กเกอร์\nโปกขรณี\nโปกขรพรรษ\nโปเก\nโปง\nโป่ง\nโป้ง\nโป่งข่าม\nโปงลาง\nโป่งวิด\nโปฐบท\nโปฐปทมาส\nโปดก\nโปตถกะ\nโปน\nโป๊ป\nโป๊ยเซียน\nโปรแกรม\nโปรง\nโปร่ง\nโปรด\nโปรตอน\nโปรตีน\nโปรเตสแตนต์\nโปรแทรกเตอร์\nโปรย\nโปล่ง\nโปลิโอ\nโปโล\nโปสก\nโปสต์การ์ด\nโปะ\nโป๊ะ\nโป๊ะจ้าย\nไป\nไป่\nไป๋\nไปยาล\nไปรษณีย์\nไปรษณียบัตร\nไปรษณียภัณฑ์\nไปรษณียากร\nไปล่\nไปศาจ\nผก\nผกา\nผกาย\nผคม\nผง\nผงก\nผงม\nผงะ\nผงาด\nผง่าน\nผจง\nผจญ\nผจัญ\nผจาน\nผชุม\nผณิน\nผณินทร\nผณิศวร\nผด\nผดุง\nผเดิน\nผทม\nผนวก\nผนวช\nผนัง\nผนิด\nผนึก\nผม\nผยอง\nผรณาปีติ\nผรสุ\nผริต\nผรุสวาท\nผล\nผลคุน\nผลคุนี\nผล็อย\nผละ\nผลัก\nผลัด\nผลับ\nผลัวะ\nผลา\nผลาญ\nผลานิสงส์\nผลาผล\nผลาหาร\nผลิ\nผลิกะ\nผลิต\nผลิน\nผลี\nผลีผลาม\nผลึก\nผลึ่ง\nผลือ\nผลุ\nผลุง\nผลุด\nผลุน\nผลุนผลัน\nผลุบ\nผลุบผลับ\nผลุย\nผลู\nผวน\nผวย\nผวา\nผสม\nผสาน\nผอง\nผ่อง\nผ่อน\nผอบ\nผอม\nผ็อย\nผอูน\nผะ\nผะดา\nผะสา\nผัก\nผัคคุณ\nผัคคุณี\nผัง\nผัด\nผัน\nผับ\nผัว\nผัวะ\nผัสสะ\nผัสสาหาร\nผา\nผ่า\nผ้า\nผาก\nผาง\nผ่าง\nผาณิต\nผาด\nผาติ\nผ่าน\nผาม\nผาย\nผ่ายผอม\nผาล\nผาลคุน\nผาลา\nผ่าว\nผาสุก\nผ้าฮาด\nผำ\nผ้ำ\nผิ\nผิง\nผิด\nผิตะ\nผิน\nผิว\nผี\nผี้ว์\nผึง\nผึ่ง\nผึ้ง\nผึ้งรวง\nผืน\nผื่น\nผุ\nผุด\nผุยผง\nผุสราคา\nผู้\nผูก\nเผ\nเผง\nเผชิญ\nเผ็ด\nเผด็จ\nเผดิม\nเผดียง\nเผ่น\nเผนิก\nเผย\nเผยอ\nเผยิบ\nเผยิบผยาบ\nเผล\nเผล่\nเผล็ด\nเผลอ\nเผลอไผล\nเผละ\nเผลาะ\nเผลาะแผละ\nเผลียง\nเผอเรอ\nเผอิญ\nเผอิล\nเผะ\nเผา\nเผ่า\nเผ้า\nเผาะ\nเผิ้ง\nเผิน\nเผียน\nเผือ\nเผื่อ\nเผือก\nเผือด\nเผือน\nเผื่อน\nแผ่\nแผก\nแผง\nแผด\nแผน\nแผ่น\nแผนก\nแผล\nแผลง\nแผล็บ\nแผล็ว\nแผละ\nแผ่ว\nแผ้ว\nโผ\nโผง\nโผฏฐัพพะ\nโผน\nโผเผ\nโผย\nโผล่\nโผลกเผลก\nโผละ\nโผอน\nโผะ\nไผ\nไผ่\nไผท\nฝน\nฝรั่ง\nฝรั่งเศส\nฝ่อ\nฝอย\nฝัก\nฝัง\nฝั่ง\nฝัด\nฝัน\nฝา\nฝ่า\nฝ้า\nฝาก\nฝาง\nฝาด\nฝาน\nฝาย\nฝ่าย\nฝ้าย\nฝิ่น\nฝี\nฝี่\nฝีก\nฝึก\nฝืด\nฝืน\nฝุ่น\nฝูง\nเฝ้า\nเฝือ\nเฝือก\nเฝือง\nเฝื่อน\nแฝก\nแฝง\nแฝด\nใฝ่\nไฝ\nพก\nพกุล\nพง\nพงศ์\nพงศกร\nพงศธร\nพงศา\nพงศาวดาร\nพจน์\nพจนา\nพจนานุกรม\nพจนารถ\nพจนีย์\nพจมาน\nพจี\nพชระ\nพญา\nพญาลอ\nพณิช\nพณิชย์\nพดด้วง\nพธู\nพนันดร\nพนาดร\nพนาดอน\nพนาราม\nพนาลัย\nพนาลี\nพนาวาส\nพนาเวศ\nพนาศรม\nพนาสณฑ์\nพนาสัณฑ์\nพเนจร\nพ่น\nพ้น\nพนม\nพนอง\nพนอม\nพนัก\nพนักงาน\nพนัง\nพนัน\nพนัส\nพนา\nพนาย\nพนิดา\nพนิต\nพบ\nพม่า\nพยนต์\nพยศ\nพยัก\nพยักพเยิด\nพยัคฆ์\nพยัคฆา\nพยัคฆิน\nพยัคฆี\nพยัชน์\nพยัญชนะ\nพยัต\nพยับ\nพยากรณ์\nพยาฆร์\nพยางค์\nพยาธิ\nพยาน\nพยาบาท\nพยาบาล\nพยาม\nพยามะ\nพยายาม\nพยุ\nพยุง\nพยุหยาตรา\nพยุหโยธา\nพยุหเสนา\nพยุหะ\nพยู่ห์\nพเยีย\nพร\nพรต\nพรม\nพรรค\nพรรค์\nพรรคานต์\nพรรณ\nพรรณนา\nพรรดึก\nพรรลาย\nพรรษ\nพรรษา\nพรรเอิญ\nพรวด\nพรวน\nพรหม\nพรหมจรรย์\nพรหมจาริณี\nพรหมจารี\nพรหมา\nพรหมาสตร์\nพรหมินทร์\nพรอก\nพร่อง\nพร้อง\nพรอด\nพร้อม\nพร้อมพรัก\nพร่อย\nพร้อย\nพระ\nพระนอม\nพระนาด\nพระฮาม\nพรักพร้อม\nพรั่ง\nพรัด\nพรั่น\nพรับ\nพร่า\nพร้า\nพราก\nพราง\nพร่าง\nพราด\nพราน\nพราย\nพราว\nพราหมณ์\nพราหมณะ\nพราหมณี\nพราหมี\nพรำ\nพร่ำ\nพริก\nพริ้ง\nพริบ\nพริ้ม\nพรึง\nพรึน\nพรึบ\nพรึ่บ\nพรืด\nพรุ\nพรุ่ง\nพรุน\nพรู\nพรูด\nพฤกษ์\nพฤกษชาติ\nพฤกษเทวดา\nพฤกษราช\nพฤกษศาสตร์\nพฤกษา\nพฤฒ\nพฤฒา\nพฤฒาจารย์\nพฤฒิ\nพฤต\nพฤติ\nพฤทธ์\nพฤทธิ์\nพฤนต์\nพฤนท์\nพฤศจิก\nพฤศจิกายน\nพฤษภ\nพฤษภาคม\nพฤหัสบดี\nพล\nพละ\nพลากร\nพลาดิศัย\nพลาธิการ\nพลานามัย\nพลบ\nพลวก\nพลวง\nพลวัต\nพลศาสตร์\nพลอ\nพล้อ\nพลอง\nพลอด\nพลอน\nพลอมแพลม\nพลอย\nพล่อย\nพลั่ก\nพลัง\nพลั่ง\nพลั้ง\nพลัด\nพลัน\nพลับ\nพลับพลา\nพลับพลึง\nพลั่ว\nพล่า\nพลาง\nพลาญ\nพลาด\nพล่าน\nพลาม\nพล่าม\nพลาย\nพลาสติก\nพลาสมา\nพลาหก\nพลำ\nพล้ำ\nพลำภัง\nพลิก\nพลิพัท\nพลิ้ว\nพลี\nพลุ\nพลุก\nพลุ่ก\nพลุกพล่าน\nพลุ่ง\nพลุ้ย\nพลู\nพลูโต\nพลูโทเนียม\nพวก\nพวง\nพ่วง\nพวน\nพวย\nพสก\nพสุ\nพสุธา\nพสุสงกรานต์\nพหล\nพหุ\nพหุล\nพหู\nพอ\nพ่อ\nพ้อ\nพอก\nพอง\nพ้อง\nพอน\nพ้อม\nพอโลเนียม\nพะ\nพะงา\nพะงาบ\nพะจง\nพะทำมะรง\nพะนอ\nพะเน้าพะนอ\nพะเนิน\nพะเนียง\nพะแนง\nพะพาน\nพะพิง\nพะเพิง\nพะยอม\nพ่ะย่ะค่ะ\nพะยูง\nพะยูน\nพะเยิบ\nพะเยิบพะยาบ\nพะรุงพะรัง\nพะโล้\nพะไล\nพะวง\nพะวักพะวน\nพะวา\nพะว้าพะวัง\nพะอง\nพะอากพะอำ\nพะอืดพะอม\nพัก\nพักตร์\nพักตรา\nพักร\nพัง\nพังกา\nพังงา\nพังผืด\nพังพวย\nพังพอน\nพังพาน\nพังพาบ\nพังเพย\nพัช\nพัชนี\nพัชระ\nพัญจน์\nพัฒนะ\nพัฒนา\nพัฒนากร\nพัฒนาการ\nพัด\nพัดชา\nพัดดึงส์\nพัตร\nพัทธ์\nพัทธยา\nพัทธสีมา\nพัทร\nพัน\nพันตู\nพันทาง\nพันธ์\nพันธะ\nพันธกรณี\nพันธบัตร\nพันธมิตร\nพันธนะ\nพันธนาคาร\nพันธนาการ\nพันธุ์\nพันธุกรรม\nพันลึก\nพันลือ\nพันเลิศ\nพันเอิญ\nพับ\nพัลลภ\nพัลวัน\nพัว\nพัวะ\nพัศดี\nพัสดุ\nพัสตร์\nพัสถาน\nพา\nพาก\nพากเพียร\nพากย์\nพาง\nพ่าง\nพาชี\nพาณิช\nพาณิชย์\nพาณิชยกรรม\nพาณิชยการ\nพาณิชยศาสตร์\nพาณิชยศิลป์\nพาณินี\nพาณี\nพาณีนี\nพาด\nพาท\nพาทย์\nพาธ\nพาธา\nพาน\nพ่าน\nพานร\nพานรินทร์\nพาม\nพาย\nพ่าย\nพายม้า\nพายัพ\nพายุ\nพาร์เซก\nพารณ\nพารา\nพาราฟิน\nพาล\nพาลา\nพาลี\nพาลุก\nพาโล\nพาไล\nพาส\nพาสน์\nพาสนา\nพาสุกรี\nพ่าห์\nพาหนะ\nพาหะ\nพาหา\nพาหิรกะ\nพาหิระ\nพาหุ\nพาหุรัด\nพาหุสัจจะ\nพาเหียร\nพาฬ\nพำ\nพำนัก\nพำพึม\nพำลา\nพิกล\nพิกสิต\nพิกัด\nพิกัติ\nพิกัน\nพิการ\nพิกุล\nพิเคราะห์\nพิฆน์\nพิฆเนศ\nพิฆเนศวร\nพิฆาต\nพิง\nพิจัย\nพิจาร\nพิจารณ์\nพิจารณา\nพิจิก\nพิจิต\nพิจิตร\nพิชญ์\nพิชัย\nพิชาน\nพิชิต\nพิเชฐ\nพิเชียร\nพิฑูรย์\nพิณ\nพิดทูล\nพิดาน\nพิโดร\nพิตร\nพิถี\nพิถีพิถัน\nพิทย\nพิทย์\nพิทยา\nพิทยาคม\nพิทยาคาร\nพิทยาธร\nพิทยาลัย\nพิทักษ์\nพิทูร\nพิเทศ\nพิธาน\nพิธี\nพิธุ\nพินทุ\nพินอบพิเทา\nพินัย\nพินาศ\nพินิจ\nพินิต\nพินิศ\nพินิศจัย\nพิเนต\nพิบัติ\nพิบุล\nพิบูล\nพิปริต\nพิปลาส\nพิพรรธ\nพิพรรธน์\nพิพักพิพ่วน\nพิพัฒ\nพิพัฒน์\nพิพากษ์\nพิพากษา\nพิพาท\nพิพิธ\nพิพิธภัณฑ์\nพิพิธภัณฑสถาน\nพิภพ\nพิภัช\nพิภาค\nพิภูษณะ\nพิเภก\nพิมปะการัง\nพิมพ์\nพิมพการัง\nพิมพา\nพิมพาภรณ์\nพิมล\nพิมเสน\nพิมาน\nพิมุข\nพิโมกข์\nพิโมกษ์\nพิโยกพิเกน\nพิโยค\nพิรอด\nพิระ\nพิรากล\nพิราบ\nพิราม\nพิราลัย\nพิริยะ\nพิรี้พิไร\nพิรุณ\nพิรุธ\nพิรุฬห์\nพิเรนทร์\nพิเราะ\nพิโรธ\nพิไร\nพิลังกาสา\nพิลาป\nพิลาส\nพิลิปดา\nพิลึก\nพิลึกกึกกือ\nพิลึกพิลั่น\nพิโลน\nพิไล\nพิศ\nพิศวง\nพิศวาส\nพิศาล\nพิศุทธ์\nพิศุทธิ์\nพิเศษ\nพิษ\nพิษฐาน\nพิษนาศน์\nพิสดาร\nพิสมร\nพิสมัย\nพิสัง\nพิสัช\nพิสัย\nพิสิฐ\nพิสุทธิ์\nพิสูจน์\nพิหค\nพิหาร\nพิฬาร\nพี\nพี่\nพี้\nพีชคณิต\nพีระมิด\nพึง\nพึ่ง\nพึ่บ\nพึ่บพั่บ\nพึม\nพึมพำ\nพืช\nพืด\nพื้น\nพุ\nพุก\nพุกาม\nพุง\nพุ่ง\nพุงดอ\nพุฒ\nพุฒิ\nพุด\nพุดตาน\nพุทธ\nพุทธะ\nพุทธังกูร\nพุทธางกูร\nพุทธันดร\nพุทธาภิเษก\nพุทธาวาส\nพุทธิ\nพุทโธ่\nพุทรา\nพุธ\nพุ่ม\nพุมเรียง\nพุ้ย\nพู\nพูพอน\nพู่\nพูด\nพูน\nพู้น\nพู่ระหง\nเพ\nเพ็ก\nเพกา\nเพคะ\nเพ็ง\nเพ่ง\nเพ็จ\nเพชฉลูกรรม\nเพชฌฆาต\nเพชร\nเพชรดา\nเพชรปาณี\nเพชรฤกษ์\nเพชรายุธ\nเพชรกลับ\nเพชรสังฆาต\nเพชรหลีก\nเพชรหึง\nเพ็ญ\nเพฑูริย์\nเพณี\nเพ็ดทูล\nเพดาน\nเพท\nเพทนา\nเพทาย\nเพทุบาย\nเพโทบาย\nเพ่นพ่าน\nเพนียด\nเพไนย\nเพ้ย\nเพรง\nเพรซีโอดิเมียม\nเพรา\nเพราะ\nเพริด\nเพริศ\nเพรียก\nเพรียง\nเพรียบ\nเพรี้ยม\nเพรียว\nเพรื่อ\nเพรือง\nเพล\nเพลง\nเพล็ด\nเพล้โพล้\nเพลา\nเพลาะ\nเพลิง\nเพลิดเพลิน\nเพลิน\nเพลีย\nเพลี้ย\nเพลี่ยง\nเพศ\nเพส\nเพสลาด\nเพ่อ\nเพ้อ\nเพ้อเจ้อ\nเพอิญ\nเพะ\nเพา\nเพาะ\nเพิก\nเพิง\nเพิ่ง\nเพิดเพ้ย\nเพิ่ม\nเพี้ย\nเพียง\nเพี้ยง\nเพียงออ\nเพี้ยน\nเพียบ\nเพียร\nเพื่อ\nเพื่อน\nแพ\nแพ้\nแพง\nแพ่ง\nแพงพวย\nแพทย์\nแพทยศาสตร์\nแพน\nแพ่น\nแพนก\nแพนงเชิง\nแพร\nแพร่\nแพรก\nแพร่ง\nแพรว\nแพร้ว\nแพลง\nแพลทินัม\nแพล็บ\nแพลม\nแพลเลเดียม\nแพละ\nแพละโลม\nแพว\nแพ้ว\nแพศย์\nแพศยา\nแพะ\nโพ\nโพก\nโพกพาย\nโพง\nโพงพาง\nโพชฌงค์\nโพซิตรอน\nโพด\nโพทะเล\nโพแทสเซียม\nโพธ\nโพธิ\nโพธิ์\nโพน\nโพ้น\nโพนทะนา\nโพบาย\nโพย\nโพยก๊วน\nโพยม\nโพรก\nโพรง\nโพรโทแอกทิเนียม\nโพรมีเทียม\nโพระดก\nโพล่\nโพลง\nโพล่ง\nโพล้ง\nโพลน\nโพล้เพล้\nโพละ\nโพสพ\nไพ\nไพ่\nไพจิตร\nไพชน\nไพชยนต์\nไพฑูรย์\nไพที\nไพบูลย์\nไพพรรณ\nไพร\nไพร่\nไพรจิตร\nไพรชน\nไพรชยนต์\nไพรฑูรย์\nไพรที\nไพรบูลย์\nไพรเราะ\nไพรัช\nไพรำ\nไพริน\nไพรินทร์\nไพรี\nไพเราะ\nไพโรจน์\nไพล\nไพล่\nไพศาขะ\nไพศาล\nไพเศษ\nไพสพ\nไพสิฐ\nไพหาร\nฟก\nฟ้ง\nฟรักโทส\nฟรี\nฟลูออรีน\nฟ่อ\nฟ้อ\nฟอก\nฟอง\nฟ่อง\nฟ้อง\nฟอด\nฟอน\nฟ่อน\nฟ้อน\nฟ้อแฟ้\nฟอร์มาลดีไฮด์\nฟอร์มาลิน\nฟอสฟอรัส\nฟอสเฟต\nฟัก\nฟักฟุ้น\nฟัง\nฟังก์ชัน\nฟัด\nฟัน\nฟั่น\nฟั้น\nฟ้า\nฟาก\nฟาง\nฟ่าง\nฟาด\nฟาทอม\nฟาน\nฟ่าม\nฟาย\nฟาร์ม\nฟาสซิสต์\nฟิด\nฟิต\nฟิบ\nฟิล์ม\nฟิวส์\nฟิสิกส์\nฟี่\nฟี้\nฟืดฟาด\nฟืน\nฟื้น\nฟืม\nฟุ\nฟุ้ง\nฟุต\nฟุน\nฟุบ\nฟุ่บ\nฟุ่มเฟือย\nฟุลสแก๊ป\nฟู\nฟู่\nฟูก\nฟูด\nฟูม\nเฟ็ด\nเฟ้น\nเฟลด์สปาร์\nเฟ้อ\nเฟอร์เมียม\nเฟอะ\nเฟอะฟะ\nเฟะ\nเฟะฟะ\nเฟิน\nเฟี้ยม\nเฟี้ยว\nเฟือ\nเฟื้อ\nเฟือง\nเฟื่อง\nเฟื้อง\nเฟือน\nเฟือย\nเฟื้อย\nแฟ่\nแฟง\nแฟชั่น\nแฟน\nแฟบ\nแฟ้ม\nแฟรนเซียม\nแฟลกซ์\nแฟลต\nแฟะ\nโฟกัส\nไฟ\nภควดี\nภควัต\nภควันต์\nภควัม\nภควา\nภควาน\nภคะ\nภคันทลา\nภคินี\nภณะ\nภณิดา\nภพ\nภมร\nภมริน\nภมรี\nภมุกา\nภยันตราย\nภยาคติ\nภระ\nภรณี\nภรต\nภรรดร\nภรรดา\nภรรยา\nภระมร\nภระมรี\nภราดร\nภราดรภาพ\nภราดา\nภริยา\nภฤศ\nภวะ\nภวตัณหา\nภวนะ\nภวังค์\nภวังคจิต\nภักดี\nภักตะ\nภักติ\nภักษ์\nภักษา\nภักษาหาร\nภัค\nภัคน์\nภังคะ\nภังคี\nภัจ\nภัณฑ์\nภัณฑาคาร\nภัณฑาคาริก\nภัณฑารักษ์\nภัณฑนะ\nภัณฑู\nภัต\nภัตตาคาร\nภัตตาหาร\nภัตร\nภัทระ\nภัทรกัป\nภัพ\nภัย\nภัสดา\nภัสตรา\nภัสมะ\nภัสสร\nภา\nภาค\nภาคย์\nภาคยานุวัติ\nภาคินี\nภาคิไนย\nภาคี\nภาคียะ\nภาชนะ\nภาชี\nภาณ\nภาณวาร\nภาณกะ\nภาณี\nภาณุ\nภาดร\nภาดา\nภาตระ\nภาตา\nภาตุ\nภาติกะ\nภาติยะ\nภาพ\nภาพย์\nภาม\nภาย\nภาร\nภาระ\nภารดี\nภารต\nภารตี\nภารยทรัพย์\nภารยา\nภารา\nภาวนา\nภาวะ\nภาษ\nภาษณ์\nภาษา\nภาษิต\nภาษี\nภาส\nภาสน์\nภาสวร\nภาสา\nภาสุระ\nภิกขา\nภิกขาจาร\nภิกขุ\nภิกขุนี\nภิกษา\nภิกษาจาร\nภิกษาหาร\nภิกษุ\nภิกษุณี\nภิงคาร\nภิญโญ\nภิตติ\nภินท์\nภินทนาการ\nภิยโย\nภิรมย์\nภิรมย์สุรางค์\nภิษัช\nภิสัก\nภีตะ\nภีมะ\nภีรุ\nภุกต์\nภุขัน\nภุช\nภุชงค์\nภุต\nภุมมะ\nภุมรัตน์\nภุมวาร\nภุมรา\nภุมริน\nภุมรี\nภุมเรศ\nภู\nภู่\nภูต\nภูติ\nภูม\nภูมิ\nภูมี\nภูริ\nภูรี\nภูวดล\nภูวนาถ\nภูวเนตร\nภูวไนย\nภูษา\nภูษิต\nเภกะ\nเภตรา\nเภท\nเภทุบาย\nเภรี\nเภสัช\nโภค\nโภคะ\nโภคิน\nโภคี\nโภไคย\nโภไคศวรรย์\nโภช\nโภชย์\nโภชก\nโภชนะ\nโภชนา\nโภชนาหาร\nโภชนียะ\nไภริน\nไภรี\nไภษัชคุรุ\nไภษัชย์\nมกร\nมกราคม\nมกุฎ\nมคธ\nมฆวัน\nมฆะ\nมฆา\nม่ง\nมงกุฎ\nมงโกรย\nมงคล\nมงคลวาร\nมณฑ์\nมณฑก\nมณฑนะ\nมณฑป\nมณฑล\nมณฑา\nมณฑารพ\nมณฑิระ\nมณเฑียร\nมณี\nมด\nมตะ\nมตกภัต\nมติ\nมทนะ\nมทะ\nมธุ\nมธุกร\nมธุการี\nมธุลีห์\nมธุระ\nมธุรพจน์\nมน\nมนินทรีย์\nม่น\nมนต์\nมนตร์\nมนตรี\nมนท์\nมนทิราลัย\nมนเทียร\nมนสิการ\nมนัส\nมนัสวี\nมนินทรีย์\nมนิมนา\nมนิลา\nมนุญ\nมนุษย์\nมนุษยชาติ\nมนุษยธรรม\nมนุษย์มนา\nมนุษยโลก\nมนุษยศาสตร์\nมนุษยสัมพันธ์\nมนุสาร\nมนู\nมนูสาร\nมโน\nมโนช\nมโนชญ์\nมโนราห์\nมโนสาเร่\nมโนห์รา\nมมังการ\nมยุรฉัตร\nมยุระ\nมยุรา\nมยุรี\nมยุเรศ\nมยูร\nมรกต\nมรคา\nมรฑป\nมรณ์\nมรณะ\nมรณกรรม\nมรณบัตร\nมรณภัย\nมรณภาพ\nมรดก\nมรรค\nมรรคา\nมรรตัย\nมรรยาท\nมรรษ\nมรสุม\nมริจ\nมริยาท\nมรีจิ\nมรุต\nมฤค\nมฤคย์\nมฤคศิระ\nมฤคศิรมาส\nมฤคเศียร\nมฤคินทร์\nมฤเคนทร์\nมฤดก\nมฤต\nมฤตยู\nมฤทุ\nมล\nมละ\nมลัก\nมลังเมลือง\nมล้าง\nมลาย\nมลายู\nมวก\nม่วง\nมวน\nม่วน\nม้วน\nม้วนต้วน\nมวย\nม้วย\nมวล\nมหกรรม\nมหรณพ\nมหรรณพ\nมหรสพ\nมหัจฉริยะ\nมหัต\nมหัทธนะ\nมหันต์\nมหันตโทษ\nมหัพภาค\nมหัศจรรย์\nมหา\nมหากฐิน\nมหากาฬ\nมหาขันธกะ\nมหาจักร\nมหาชน\nมหาชัย\nมหาชาติ\nมหาโชตรัต\nมหาดไทย\nมหาดเล็ก\nมหาตมะ\nมหาไถ่\nมหาเทพ\nมหาเทพี\nมหาเทวี\nมหาธาตุ\nมหานิกาย\nมหานิล\nมหาบพิตร\nมหาบัณฑิต\nมหาพน\nมหาพรหม\nมหาภารตะ\nมหาภิเนษกรมณ์\nมหาภูต\nมหาเมฆ\nมหายาน\nมหายุค\nมหาราช\nมหาฤกษ์\nมหาละลวย\nมหาละลาย\nมหาวงศ์\nมหาวรรค\nมหาวิทยาลัย\nมหาศักราช\nมหาศาล\nมหาสงกรานต์\nมหาสดมภ์\nมหาสดำ\nมหาสมุทร\nมหาสาวก\nมหาหงส์\nมหาหิงคุ์\nมหาอำนาจ\nมหาอุจ\nมหาอุด\nมหาอุปรากร\nมหาอุปราช\nมหิ\nมหิดล\nมหิธร\nมหิป\nมหิงส์\nมหิทธิ\nมหินท์\nมหิมา\nมหิศร\nมหิศวร\nมหิษ\nมหิษี\nมหึมา\nมเหยงค์\nมเหศ\nมเหศวร\nมเหศักดิ์\nมเหสักข์\nมเหสิ\nมเหสี\nมเหาฬาร\nมโหรสพ\nมโหระทึก\nมโหรี\nมโหฬาร\nมไหศวรรย์\nมอ\nมอง\nมองโกลอยด์\nมองโกเลีย\nมองคร่อ\nมอญ\nมอด\nม่อต้อ\nมอเตอร์\nมอเตอร์ไซค์\nมอน\nม่อน\nมอบ\nมอม\nมอมแมม\nม่อย\nมอร์ฟีน\nมอระกู่\nมอลโทส\nม่อลอกม่อแลก\nม่อห้อม\nม่อฮ่อม\nมะ\nมะกรูด\nมะกล่ำ\nมะกอก\nมะก่อง\nมะกะโรนี\nมะกา\nมะเกลือ\nมะเกี๋ยง\nมะข่วง\nมะขวิด\nมะขาม\nมะเขือ\nมะแข่น\nมะคังแดง\nมะค่า\nมะคำไก่\nมะคำดีควาย\nมะงั่ว\nมะงุมมะงาหรา\nมะซัก\nมะซาง\nมะดัน\nมะดีหวี\nมะดูก\nมะเดหวี\nมะเดื่อ\nมะต้อง\nมะตะบะ\nมะตาด\nมะตาหะรี\nมะตึ่ง\nมะตื๋น\nมะตูม\nมะแตก\nมะโต\nมะนาว\nมะปราง\nมะปริง\nมะฝ่อ\nมะพร้าว\nมะพลับ\nมะพูด\nมะแพน\nมะแพร้ว\nมะเฟือง\nมะแฟน\nมะไฟ\nมะม่วง\nมะม่าว\nมะมี่\nมะมื่น\nมะมุด\nมะเมอ\nมะเมีย\nมะเมื่อย\nมะแม\nมะยง\nมะยม\nมะระ\nมะริด\nมะรืน\nมะรุม\nมะรุมมะตุ้ม\nมะเร็ง\nมะเรื่อง\nมะโรง\nมะลอกมะแลก\nมะละกอ\nมะลิ\nมะลื่น\nมะลืมดำ\nมะลุลี\nมะแว้ง\nมะสัง\nมะเส็ง\nมะหวด\nมะหะหมัด\nมะหาด\nมะหิ่ง\nมะเหงก\nมะอึก\nมะฮอกกานี\nมัก\nมักกะโรนี\nมักกะลีผล\nมักกะสัน\nมักขะ\nมั่กขั้ก\nมักขิกา\nมัค\nมัคคะ\nมัคคุเทศก์\nมัคนายก\nมัฆวาน\nมั่ง\nมังกง\nมังกร\nมังกุ\nมังคละ\nมังค่า\nมังคุด\nมังตาน\nมังสวิรัติ\nมังสะ\nมังสี\nมัจจะ\nมัจจุ\nมัจฉริยะ\nมัจฉรี\nมัจฉะ\nมัจฉา\nมัชชะ\nมัชวิรัติ\nมัชชาระ\nมัชฌันติกสมัย\nมัชฌิม\nมัชฌิมา\nมัญจา\nมัญชิษฐา\nมัญชุ\nมัญชุสา\nมัญชูสา\nมัญเชฏฐะ\nมัฏฐะ\nมัณฑนศิลป์\nมัณฑนา\nมัด\nมัตตะ\nมัตตัญญู\nมัตตา\nมัตติกา\nมัตถกะ\nมัตถลุงค์\nมัตสยะ\nมัตสยา\nมัตสระ\nมัตสริน\nมัททวะ\nมัทนะ\nมัทยะ\nมัธยฐาน\nมัธยม\nมัธยันห์\nมัธยัสถ์\nมัน\nมั่น\nมันตา\nมันถะ\nมันทิระ\nมันทิราลัย\nมับ\nมั้ม\nมัมมี่\nมัย\nมัลละ\nมัลลิกา\nมัว\nมัวซัว\nมั่ว\nมัศยา\nมัสตุ\nมัสตาร์ด\nมัสมั่น\nมัสยิด\nมัสรู่\nมัสลิน\nมัสสุ\nมา\nม้า\nมาก\nมาคสิระ\nมาฆบูชา\nมาฆะ\nม้าง\nมางสะ\nมาณพ\nมาณวิกา\nมาด\nมาดา\nมาตงค์\nมาตร\nมาตรา\nมาตฤ\nมาตังคะ\nมาตา\nมาตามหัยกะ\nมาตามหัยกา\nมาตามหัยยิกา\nมาติกะ\nมาติกา\nมาตุ\nมาตุจฉา\nมาตุรงค์\nมาตุเรศ\nมาตุละ\nมาตุลา\nมาตุลานี\nมาทะ\nมาธยมิก\nมาธยมิกะ\nมาธุระ\nมาธุสร\nมาธูระ\nมาน\nม่าน\nม้าน\nมานพ\nมานะ\nมานัต\nมานัส\nมานิต\nมานี\nมานุษ\nมานุษยวิทยา\nมาโนชญ์\nมาบ\nมาภา\nม้าม\nม่าย\nมายา\nมาร\nมาราธิราช\nมารค\nมารดร\nมารดา\nมารยา\nมารยาท\nมารศรี\nมารษา\nมาริต\nมารุต\nมาลย์\nมาลัย\nมาลา\nมาลาตี\nมาลาเรีย\nมาลินี\nมาลี\nมาลุต\nมาศ\nมาส\nมาสก\nมาห์\nม่าห์\nมาหิส\nม่าเหมี่ยว\nมาฬก\nมิ\nมิค\nมิคสัญญี\nมิ่ง\nมิจฉา\nมิด\nมิตร\nมิติ\nมิเตอร์\nมิถยา\nมิถุน\nมิถุนายน\nมิทธะ\nมินตรา\nมินตา\nมินหม้อ\nมิ่ม\nมิ้ม\nมิไย\nมิรันตี\nมิลลิกรัม\nมิลลิบาร์\nมิลลิเมตร\nมิลลิลิตร\nมิลักขะ\nมิลักขู\nมิส\nมิสกรี\nมิสกวัน\nมิสซา\nมี\nมี่\nมีด\nมีเทน\nมีน\nมีนาคม\nมี่สั้ว\nมึง\nมึน\nมืด\nมืน\nมื่น\nมือ\nมื้อ\nมุ\nมุก\nมุกดา\nมุกดาหาร\nมุกุระ\nมุข\nมุขเด็จ\nมุขยประโยค\nมุโขโลกนะ\nมุคคะ\nมุง\nมุ่ง\nมุ้ง\nมุจฉา\nมุจนะ\nมุจลินท์\nมุญจนะ\nมุญชะ\nมุฐิ\nมุณฑกะ\nมุณฑะ\nมุด\nมุตกิด\nมุตฆาต\nมุตตะ\nมุตตา\nมุตติ\nมุตะ\nมุติ\nมุททา\nมุทธชะ\nมุทธา\nมุทธาภิเษก\nมุทรา\nมุทริกา\nมุทะลุ\nมุทา\nมุทิกา\nมุทิงค์\nมุทิตา\nมุทุ\nมุทุตา\nมุ่น\nมุนิ\nมุนินทร์\nมุนี\nมุบ\nมุบมิบ\nมุม\nมุ้ม\nมุ่ย\nมุรธา\nมุรธาภิเษก\nมุสละ\nมุสลิม\nมุสา\nมุสิก\nมุหงิด\nมุหน่าย\nมุหุต\nมุฮัมมัด\nมูก\nมูเซอ\nมูตร\nมู่ทู่\nมูน\nมูมมาม\nมูรติ\nมูรธา\nมูรธาภิเษก\nมูล\nมูละ\nมูลา\nมูลิกากร\nมู่ลี่\nมู่เล่\nมูสัง\nมูสิก\nมูสิกะ\nมูสิกทันต์\nเม\nเม็ก\nเมกะเฮิรตซ์\nเมขลา\nเมฆ\nเมฆา\nเมฆินทร์\nเมฆี\nเม็ง\nเม็ด\nเมตตา\nเมตไตรย\nเมตร\nเมตริก\nเมตริกตัน\nเมถุน\nเมท\nเมโท\nเมทนี\nเมทินี\nเมทนีดล\nเมทานอล\nเมทิลแอลกอฮอล์\nเมธ\nเมธา\nเมธาวี\nเมธี\nเมน\nเม่น\nเม้น\nเมนเดลีเวียม\nเมนทอล\nเม้ม\nเมรัย\nเมริเดียน\nเมรุ\nเมล์\nเมล็ด\nเมลือง\nเมษ\nเมษายน\nเมห์\nเมหนะ\nเมหะ\nเมะ\nเมา\nเม่า\nเม้า\nเมารี\nเมาลี\nเมาฬี\nเมาะ\nเมิง\nเมิน\nเมิล\nเมีย\nเมียง\nเมี่ยง\nเมี้ยน\nเมือ\nเมื้อ\nเมื่อ\nเมือก\nเมือง\nเมือบ\nเมื่อย\nแม่\nแม้\nแมก\nแมกนีเซียม\nแมง\nแมงกะพรุน\nแมงกานิน\nแมงกานีส\nแมงคา\nแมงคาเรือง\nแมงช้าง\nแมงดา\nแมงลัก\nแม่ตะงาว\nแมน\nแม่น\nแม้น\nแมลง\nแมลบ\nแมว\nแม้ว\nแมะ\nโม\nโม่\nโม้\nโมก\nโมกข์\nโมกษะ\nโมฆกรรม\nโมฆสัญญา\nโมฆะ\nโมฆียกรรม\nโมฆียะ\nโมง\nโม่ง\nโมงครุ่ม\nโมทนา\nโมโนแซ็กคาไรด์\nโมไนย\nโมเม\nโมเมนต์\nโมเย\nโมรา\nโมรี\nโมเรส\nโมลิบดีนัม\nโมลี\nโมเลกุล\nโมเสก\nโมเสส\nโม่ห์\nโมหะ\nโมหันธ์\nโมหาคติ\nโมโห\nไม่\nไม้\nไมกา\nไมครอน\nไมโครกรัม\nไมโครฟิล์ม\nไมโครโฟน\nไมโครมิเตอร์\nไมโครเมตร\nไมโครลิตร\nไมโครเวฟ\nไมตรี\nไมยราบ\nไมล์\nยก\nยกกระบัตร\nยกนะ\nยง\nยงโย่\nยชุรเวท\nยติ\nยติภังค์\nยถากรรม\nยถาภูตญาณ\nย่น\nยนต์\nยนตร์\nยม\nยมก\nยมโดย\nยมนา\nยมล\nยมะ\nยรรยง\nยล\nยวง\nยวด\nยวน\nยวบ\nย้วย\nยวรยาตร\nยศ\nยโส\nยอ\nย่อ\nยอก\nย็อกแย็ก\nยอง\nย่อง\nย้อง\nยอด\nยอน\nย้อน\nยอบ\nยอม\nย่อม\nย้อม\nย่อย\nย้อย\nย้อแย้\nยะ\nย่ะ\nยะยอบ\nยะยับ\nยัก\nยักข์\nยักขินี\nยักษ์\nยักษา\nยักษิณี\nยักษี\nยัง\nยั้ง\nยั่งยืน\nยัชโญปวีต\nยัญ\nยัญญะ\nยัด\nยัติภังค์\nยัน\nยั่น\nยันต์\nยันตร\nยันตร์\nยันตรกรรม\nยั่นตะนี\nยับ\nยั่ว\nยั้ว\nยั้วเยี้ย\nยัวรยาตร\nยัวะ\nยัษฏิ\nยา\nย่า\nยาก\nยาคุ\nยาคู\nยาง\nย่าง\nยางพารา\nยาจก\nยาจนา\nยาไฉน\nยาด\nยาดา\nยาตร\nยาตรา\nยาน\nย่าน\nย่านพาโหม\nยานมาศ\nยานุมาศ\nยานี\nยาม\nย่าม\nยามะ\nยามักการ\nยามา\nยาย\nย้าย\nยายี\nยาว\nย้าว\nยาวกาลิก\nยาวชีวิก\nยาสูบ\nย่าหยา\nยาหยี\nยำ\nย่ำ\nย้ำ\nยำเยีย\nยิก\nยิง\nยิ่ง\nยิฏฐะ\nยิน\nยิบ\nยิบหยี\nยิปซัม\nยิปซี\nยิ้ม\nยิมนาสติก\nยิหวา\nยี\nยี่\nยี้\nยี่ก่า\nยี่เก\nยี่เข่ง\nยี่โถ\nยีน\nยี่โป้\nยี่ภู่\nยีราฟ\nยี่สก\nยี่สง\nยี่สน\nยี่สาน\nยี่สุ่น\nยี่หระ\nยี่หร่า\nยี่ห้อ\nยี่หุบ\nยึกยัก\nยึกยือ\nยึด\nยืด\nยืน\nยื่น\nยืม\nยื้อ\nยุ\nยุกกระบัตร\nยุกดิ\nยุกติ\nยุกติธรรม\nยุกต์\nยุค\nยุคนธร\nยุคล\nยุคันต์\nยุคันธร\nยุคุนธร\nยุง\nยุ่ง\nยุ้ง\nยุด\nยุต\nยุติ\nยุทธ\nยุทธ์\nยุทธนา\nยุทโธปกรณ์\nยุบ\nยุ่บ\nยุ่บยั่บ\nยุบล\nยุพดี\nยุพเรศ\nยุพา\nยุพาน\nยุพาพาล\nยุพาพิน\nยุ่มย่าม\nยุ่ย\nยุ้ย\nยุรยาตร\nยูรยาตร\nยุวชน\nยุวดี\nยุวราช\nยุวา\nยุวาน\nยู\nยู่\nยูง\nยูโด\nยูถะ\nยูถิกา\nยูริก\nยูเรนัส\nยูเรเนียม\nยูโรเพียม\nเย\nเย้\nเยง\nเยซู\nเย็ด\nเย็น\nเย็นตาโฟ\nเย็นเตาโฟ\nเย็บ\nเย้ย\nเยอ\nเย่อ\nเยอรมัน\nเยอว\nเย่อหยิ่ง\nเยอะ\nเยอะแยะ\nเยา\nเย้า\nเยาว์\nเยาวชน\nเยาวมาลย์\nเยาวยอด\nเยาวราช\nเยาวเรศ\nเยาวลักษณ์\nเยาวพา\nเยาวพาณี\nเยาวพาน\nเยาะ\nเยิง\nเยิน\nเยิ่น\nเยิ่นเย้อ\nเยินยอ\nเยิบ\nเยิบยาบ\nเยิ้ม\nเยีย\nเยี่ยง\nเยี่ยงอย่าง\nเยียงผา\nเยียดยัด\nเยียน\nเยียบ\nเยี่ยม\nเยียรบับ\nเยียรยง\nเยียว\nเยี่ยว\nเยียวยา\nเยือ\nเยื่อ\nเยื้อ\nเยือก\nเยือง\nเยื่อง\nเยื้อง\nเยือน\nเยื้อน\nแย่\nแย้\nแยก\nแยง\nแย่ง\nแย้ง\nแยงแย่\nแยงแย้\nแยบ\nแย็บ\nแยม\nแย้ม\nแยแส\nแยะ\nโย\nโย้\nโยก\nโยกเยก\nโยคาพจร\nโยคาวจร\nโยคเกณฑ์\nโยคยะ\nโยคะ\nโยคิน\nโยคี\nโยง\nโย่ง\nโย่งเย่ง\nโยงโย่\nโยชน์\nโยชนา\nโยถิกะ\nโยทะกา\nโยธวาทิต\nโยธา\nโยธิน\nโยน\nโยนก\nโยนิโส\nโยนี\nโยม\nโยโส\nใย\nไย\nไย่\nไยดี\nไยไพ\nรก\nรง\nรงค์\nรงควัตถุ\nรงรอง\nรจนา\nรจเรข\nรจเลข\nรจิต\nรชตะ\nรชนิ\nรชนี\nรชะ\nรณรงค์\nรด\nรดี\nรตนะ\nรตะ\nรติ\nรถ\nรน\nร่น\nรบ\nรบาญ\nรพี\nรม\nร่ม\nรมณี\nรมณีย์\nรมณียสถาน\nรมย์\nรมเยศ\nรยางค์\nรวก\nรวง\nร่วง\nรวด\nรวน\nรวนเร\nร่วน\nรวบ\nรวม\nร่วม\nรวย\nรวิ\nรวิวาร\nรวี\nรศนา\nรส\nรสนา\nรสสุคนธ์\nรสายนเวท\nรสิก\nรหัท\nรหัส\nรโห\nรโหฐาน\nรอ\nร่อ\nรอก\nรอง\nร่อง\nร้อง\nรองเง็ง\nร่องแร่ง\nรอด\nรอน\nร่อน\nร้อน\nรอบ\nรอบคอบ\nรอม\nรอมชอม\nรอมร่อ\nรอย\nร่อย\nร้อย\nร่อแร่\nระ\nระกะ\nระกา\nระกำ\nระเกะระกะ\nระคน\nระคาง\nระคาย\nระแคะ\nระฆัง\nระงม\nระงับ\nระแง้\nระโงกหิน\nระชวย\nระดม\nระดะ\nระดับ\nระดา\nระด่าว\nระดู\nระเด่น\nระเดียง\nระแด\nระตู\nระทก\nระทด\nระทม\nระทวย\nระทา\nระทึก\nระแทะ\nระนาด\nระนาบ\nระนาม\nระนาว\nระเนน\nระเนระนาด\nระเนียด\nระแนง\nระแนะ\nระบบ\nระบม\nระบอบ\nระบัด\nระบับ\nระบาด\nระบาย\nระบำ\nระบิล\nระบือ\nระบุ\nระเบง\nระเบ็ง\nระเบิด\nระเบียง\nระเบียน\nระเบียบ\nระแบบ\nระมัดระวัง\nระมาด\nระเมียร\nระย่อ\nระย่อม\nระยะ\nระยั้ง\nระยับ\nระย้า\nระยาบ\nระยำ\nระยิบระยับ\nระโยง\nระโยงระยาง\nระรวย\nระรอง\nระร่อน\nระรัว\nระราน\nระร่าย\nระริก\nระรี่\nระรึง\nระรื่น\nระรื้น\nระเร้ง\nระเริง\nระเรียง\nระเรื่อย\nระแรง\nระลวง\nระลอก\nระลึก\nระวัง\nระวาง\nระวาย\nระวิง\nระแวง\nระแวดระวัง\nระไว\nระส่ำระสาย\nระหกระเหิน\nระหง\nระหวย\nระหว่าง\nระหองระแหง\nระหัด\nระหาย\nระเห็จ\nระเหย\nระเหระหน\nระเหหน\nระเหิด\nระเหินระหก\nระแหง\nระโหย\nระอา\nระอิดระอา\nระอุ\nรัก\nรักข์\nรักขิต\nรักตะ\nรักบี้\nรักเร่\nรักแร้\nรักษ์\nรักษา\nรัง\nรั้ง\nรังเกียจ\nรังแก\nรังค์\nรังควาน\nรังแค\nรังรอง\nรังวัด\nรังสิ\nรังสี\nรังสิมันตุ์\nรังสิมา\nรัจฉา\nรัช\nรัชชูปการ\nรัชมังคลาภิเษก\nรัชชุ\nรัชฎาภิเษก\nรัชดาภิเษก\nรัชนะ\nรัชนี\nรัญจวน\nรัฏฐาภิปาลโนบาย\nรัฐ\nรัฐประศาสโนบาย\nรัฐประศาสนศาสตร์\nรัด\nรัต\nรัตกัมพล\nรัตมณี\nรัตคน\nรัตจันทน์\nรัตตัญญู\nรัตติ\nรัตน์\nรัตนะ\nรัตนโกสินทร์\nรัตนโกสินทรศก\nรัตนชาติ\nรัตนตรัย\nรัตนบัลลังก์\nรัตนวราภรณ์\nรัตนสิงหาสน์\nรัตนา\nรัตนากร\nรัตนาภรณ์\nรัตนาวลี\nรัตมา\nรัถ\nรัถยา\nรัทเทอร์ฟอร์เดียม\nรัน\nรั้น\nรันทด\nรันทวย\nรับ\nรัมณียสถาน\nรัมภา\nรัมมี่\nรัมย์\nรัย\nรัว\nรั่ว\nรั้ว\nรัศมิมัต\nรัศมิมาน\nรัศมี\nรัษฎากร\nรัสเซีย\nรัสสะ\nรัสสระ\nรา\nร่า\nร้า\nราก\nรากษส\nรากสาด\nราคะ\nราคจริต\nราคา\nราคิน\nราคี\nราง\nร่าง\nร้าง\nรางจืด\nรางชาง\nรางวัล\nราช\nราชกิจจานุเบกษา\nราชนิกุล\nราชวโรงการ\nราชญี\nราชดัด\nราชพฤกษ์\nราชมาณพ\nราชมาษ\nราชมาส\nราชย์\nราชสีห์\nราชะ\nราชัน\nราชันย์\nราชัย\nราชา\nราชาธิปไตย\nราชาธิราช\nราชาภิเษก\nราชายตนะ\nราชาวดี\nราชี\nราชินิกุล\nราชินีกุล\nราชินี\nราชินูปถัมภ์\nราชูปถัมภ์\nราชูปโภค\nราเชน\nราเชนทร์\nราเชนทรยาน\nราโชวาท\nราไชศวรรย์\nราญ\nราญรอน\nราด\nราต\nราตร\nราตรี\nราน\nร่าน\nร้าน\nราบ\nราพณ์\nราพณาสูร\nราม\nรามเกียรติ์\nรามสูร\nรามัญ\nรามา\nราย\nร่าย\nร้าย\nราว\nร้าว\nราวี\nราศี\nราษฎร\nราษฎร์\nราษตรี\nราษราตรี\nราหุ\nราหู\nรำ\nร่ำ\nรำคาญ\nรำงับ\nรำจวน\nรำบาญ\nรำพัน\nรำพาย\nรำพึง\nรำเพย\nรำไพ\nรำมะนา\nรำมะนาด\nรำมะร่อ\nร่ำรวย\nร่ำร่ำ\nรำไร\nรำลึก\nรำหัด\nรำหัส\nริ\nริก\nริดสีดวง\nริน\nริ้น\nริบ\nริบบิ้น\nริบรี่\nริบหรี่\nริปุ\nริปู\nริม\nริ้ว\nริษยา\nรี\nรี่\nรี้พล\nรีด\nรีดักชัน\nรีต\nรีเนียม\nรีบ\nรีม\nรีรอ\nรี้ริก\nรึง\nรึ้ง\nรื่น\nรื้น\nรื้อ\nรุ\nรุก\nรุกข์\nรุกขชาติ\nรุกขเทวดา\nรุกขมูล\nรุกขา\nรุกรุย\nรุ่ง\nรุ้ง\nรุงรัง\nรุ่งริ่ง\nรุจ\nรุจา\nรุจนะ\nรุจิ\nรุจี\nรุจิระ\nรุจิรา\nรุด\nรุต\nรุทธ์\nรุทระ\nรุธิร\nรุธิระ\nรุเธียร\nรุน\nรุ่น\nรุบรู่\nรุม\nรุ่ม\nรุ่มร่าม\nรุย\nรุ่ย\nรุรุ\nรุหะ\nรู\nรู่\nรู้\nรูจี\nรูด\nรูทีเนียม\nรูบิเดียม\nรูป\nรูปิยะ\nรูปี\nรูเล็ตต์\nเร่\nเรข\nเรขา\nเรขาคณิต\nเร็ง\nเร่ง\nเร้ง\nเรณุ\nเรณู\nเรดอน\nเรดาร์\nเรเดียม\nเร้น\nเรรวน\nเรไร\nเร็ว\nเร่ว\nเรวดี\nเรอ\nเร่อ\nเรา\nเร่า\nเร้า\nเราะ\nเริง\nเริด\nเริม\nเริ่ม\nเริ้ม\nเริศร้าง\nเรี่ย\nเรี้ย\nเรียก\nเรียง\nเรียด\nเรียน\nเรียบ\nเรียม\nเรี่ยม\nเรียว\nเรี่ยว\nเรี้ยวรก\nเรือ\nเรื่อ\nเรื้อ\nเรือก\nเรือง\nเรื่อง\nเรื้อง\nเรืองรอง\nเรือด\nเรือน\nเรื้อน\nเรื่อย\nแร\nแร่\nแรก\nแร็กเกต\nแรง\nแร่ง\nแร้ง\nแรด\nแร้นแค้น\nแรม\nแร้ว\nแระ\nโร\nโร่\nโรค\nโรคา\nโรคาพาธ\nโรง\nโรจ\nโรจน์\nโรเดียม\nโรตี\nโรท\nโรธ\nโรม\nโรมัน\nโรเมอร์\nโรย\nโรเร\nโรหิณี\nโรหิต\nไร\nไร่\nไร้\nไรย์\nฤกษ์\nฤกษณะ\nฤคเวท\nฤชา\nฤชุ\nฤณ\nฤดี\nฤดียา\nฤดู\nฤต\nฤติยา\nฤตุ\nฤทธา\nฤทธิ์\nฤทัย\nฤษภ\nฤษยา\nฤษี\nฤๅ\nฤๅดี\nฤๅทัย\nฤๅษี\nฤๅสาย\nลก\nล่ก\nลฆุ\nลง\nล่ง\nลงกา\nล้งเล้ง\nลด\nลดา\nลดาวัลย์\nลน\nล้น\nลบ\nลบอง\nลพ\nลพุช\nลม\nล่ม\nล้ม\nลมาด\nลรรลุง\nลลนา\nลลิต\nลวก\nลวง\nล่วง\nล้วง\nลวณะ\nลวด\nล้วน\nลวนลาม\nลวนะ\nล่วม\nลวะ\nลวิตร\nลหุ\nลหุกาบัติ\nล่อ\nล้อ\nลอก\nล็อก\nล็อกเกต\nลอกแลก\nลอการิทึม\nลอง\nล่อง\nลองกอง\nลองจิจูด\nลองไน\nลอด\nลอตเตอรี่\nลอน\nล่อน\nลอบ\nลอม\nล้อม\nลอมชอม\nลอมพอก\nลอย\nล่อย\nล่อแล่\nลอว์เรนเซียม\nลออ\nละ\nล่ะ\nละคร\nละติจูด\nละบม\nละบอง\nละบือ\nละเบ็ง\nละโบม\nละม่อม\nละมั่ง\nละมาน\nละม้าย\nละมุ\nละมุด\nละมุน\nละเมอ\nละเมาะ\nละเมิด\nละเมียด\nละแมะ\nละโมก\nละโมบ\nละไม\nละลวย\nละลอก\nละล้า\nละล้าละลัง\nละลาน\nละลาบละล้วง\nละลาย\nละล้าว\nละล่ำละลัก\nละลิบ\nละลุม\nละเลง\nละเล้า\nละเลาะ\nละเลิง\nละเลียด\nละเลียบ\nละไล้\nละว้า\nละวาด\nละเวง\nละแวก\nละโว้\nละหมาด\nละห้อย\nละหาน\nละหาร\nละหุ่ง\nละเหย\nละเหี่ย\nละอง\nละออง\nละอาย\nละเอียด\nละแอน\nลัก\nลักขณะ\nลักขณา\nลักขะ\nลักขี\nลักจั่น\nลักปิดลักเปิด\nลักษณ์\nลักษณนาม\nลักษณะ\nลักษณาการ\nลักษมณ์\nลักษมาณา\nลักษมี\nลักษะ\nลัคคะ\nลัคน์\nลัคนา\nลัง\nลั่ง\nลังกา\nลังคี\nลังถึง\nลังลอง\nลังเล\nลังสาด\nลัชชา\nลัชชี\nลัญจ์\nลัญจกร\nลัญฉกร\nลัญฉน์\nลัฐิ\nลัฐิกา\nลัด\nลัดา\nลัทธ์\nลัทธิ\nลัน\nลั่น\nลันเต\nลันเตา\nลันไต\nลั่นทม\nลันโทม\nลับ\nลัพธ์\nลัพธิ\nลัภ\nลัภนะ\nลัภย์\nลัมพ์\nลัย\nลา\nล่า\nล้า\nลาก\nลาง\nล่าง\nล้าง\nลางลิง\nลางสาด\nลาช\nลาชะ\nลาชา\nลาญ\nลาด\nลาดเลา\nล้าต้า\nล่าเตียง\nลาน\nล่าน\nล้าน\nลาบ\nลาพอน\nลาภ\nลาม\nล่าม\nลามก\nลาย\nล้าย\nลายสือ\nลาลา\nลาว\nลาวัณย์\nลาวา\nลำ\nล่ำ\nล้ำ\nลำเข็ญ\nลำแข\nลำเค็ญ\nลำเจียก\nลำดวน\nลำดับ\nลำเนา\nลำบอง\nลำบาก\nลำปำ\nลำพวน\nลำพอง\nลำพัง\nลำพู\nลำเพ็ญ\nลำเพา\nลำแพน\nลำโพง\nลำไพ่\nลำภุขัน\nลำมะลอก\nลำยอง\nลำไย\nลำลอง\nล่ำลา\nลำลาบ\nลำลึก\nลำเลาะ\nลำเลิก\nลำเลียง\nลำเวียง\nลำเอียก\nลำเอียง\nลิ\nลิกขา\nลิกไนต์\nลิกู\nลิเก\nลิขนะ\nลิขสิทธิ์\nลิขิต\nลิง\nลิงค์\nลิด\nลิต\nลิตมัส\nลิตร\nลิเทียม\nลิ่น\nลิ้น\nลินจง\nลิ้นจี่\nลินลา\nลินสีด\nลิ่นฮื้อ\nลินิน\nลิบ\nลิปดา\nลิปสติก\nลิปิ\nลิฟต์\nลิเภา\nลิ่ม\nลิ้ม\nลิมป์\nลิมปนะ\nลิลิต\nลิว\nลิ่ว\nลิสง\nลี\nลี่\nลี้\nลีซอ\nลีบ\nลีลา\nลีลาศ\nลีฬหา\nลึก\nลึงค์\nลืด\nลื่น\nลื้น\nลืบ\nลืม\nลือ\nลื่อ\nลื้อ\nลุ\nลุก\nลุง\nลุ้ง\nลุ่น\nลุ้น\nลุพธ์\nลุ่ม\nลุมพี\nลุมพู\nลุย\nลุ่ย\nลุ้ย\nลู่\nลูก\nลูกระมาศ\nลูกเอ็น\nลูขะ\nลูทีเชียม\nลูบ\nเลก\nเล็ก\nเลข\nเลขา\nเลขาธิการ\nเลขานุการ\nเล็ง\nเล้ง\nเล่งฮื้อ\nเลเซอร์\nเลฑฑุ\nเลณฑุ\nเลณะ\nเล็ด\nเลน\nเล็น\nเล่น\nเลนส์\nเล็บ\nเลบง\nเลปกร\nเลปน์\nเลเป\nเลเพ\nเล็ม\nเล่ม\nเลย\nเลว\nเลวง\nเลวูโลส\nเลศ\nเลษฏุ\nเล่ห์\nเล่ห์กระเท่ห์\nเลหลัง\nเลหะ\nเลอ\nเล่อ\nเลอะ\nเลอะเทอะ\nเละ\nเละเทะ\nเลา\nเล่า\nเล้า\nเลากัย\nเล้าโลม\nเลาะ\nเลิก\nเลิ่กลั่ก\nเลิง\nเลิ้ง\nเลินเล่อ\nเลิศ\nเลีย\nเลียง\nเลี่ยง\nเลี้ยง\nเลียงผา\nเลียงฝ้าย\nเลียงมัน\nเลียน\nเลี่ยน\nเลียนไฟ\nเลียบ\nเลี่ยม\nเลียว\nเลี้ยว\nเลือก\nเลือง\nเลื่อง\nเลือด\nเลือน\nเลื่อน\nเลื่อม\nเลื่อย\nเลื้อย\nเลื่อยล้า\nแล\nแล่\nแล้\nแลก\nแล็กเกอร์\nแล็กโทส\nแลง\nแล่ง\nแล้ง\nแลน\nแล่น\nแลนทานัม\nแลบ\nแล้ว\nและ\nโล่\nโล้\nโลก\nโลกเชษฐ์\nโลกธรรม\nโลกธาตุ\nโลกนาถ\nโลกบาล\nโลกย์\nโลกัย\nโลกวัชชะ\nโลกวิทู\nโลกัตถจริยา\nโลกันตร์\nโลกา\nโลกาธิบดี\nโลกาธิปไตย\nโลกานุวัตร\nโลกาภิวัตน์\nโลกามิส\nโลกายัต\nโลกาวินาศ\nโลกิยะ\nโลกีย์\nโลกียวัตร\nโลกียวิสัย\nโลกียสุข\nโลกุตระ\nโลกุตรธรรม\nโลกุตรภูมิ\nโลง\nโล่ง\nโล้ง\nโล่งโจ้ง\nโล่งโต้ง\nโล้งโต้ง\nโลจนะ\nโลณะ\nโลด\nโล่ติ๊น\nโลโต\nโลท\nโลน\nโล้น\nโลภ\nโลม\nโลมเล้า\nโลมะ\nโลมา\nโลลุป\nโลเล\nโลโล\nโลโล้\nโลหะ\nโลหกุมภี\nโลหัช\nโลหิต\nไล่\nไล้\nไลย\nไลลา\nไล่เลี่ย\nฦๅ\nฦๅชา\nฦๅสาย\nวก\nวง\nวงก์\nวงกต\nวงศ์\nวงศกร\nวงศา\nวงษ์\nวจนะ\nวจี\nวชิระ\nวชิรปาณี\nวชิรหัตถ์\nวชิราวุธ\nวฏะ\nวฏาการ\nวณิช\nวณิชชา\nวณิชย์\nวณิชยา\nวณิพก\nวดี\nวทนะ\nวทัญญุตา\nวทัญญู\nวธุกา\nวธู\nวน\nวนศาสตร์\nวนสณฑ์\nวนสัณฑ์\nวนอุทยาน\nวนัส\nวนัสบดี\nวนา\nวนาดร\nวนาดอน\nวนานต์\nวนาลัย\nวนาลี\nวนาวาส\nวนาศรม\nวนาสณฑ์\nวนาสัณฑ์\nวนิดา\nวนิพก\nวเนจร\nวโนทยาน\nวยัคฆ์\nวยากรณ์\nวรดนู\nวรทาน\nวรมหาวิหาร\nวรงค์\nวรณะ\nวรรค\nวรรคย์\nวรรช\nวรรชย์\nวรรณะ\nวรรณกรรม\nวรรณคดี\nวรรณยุกต์\nวรรณยุต\nวรรณศิลป์\nวรรณนา\nวรรณพฤติ\nวรรณึก\nวรรธกะ\nวรรธนะ\nวรรษ\nวรรษา\nวรวิหาร\nวรัญญู\nวรางคณา\nวรางคนา\nวราห์\nวราหะ\nวรุณ\nวโรดม\nวฤก\nวลัช\nวลัญช์\nวลัญชน์\nวลัย\nวลาหก\nวลี\nวศค\nวศะ\nวศิน\nวสนะ\nวสภะ\nวสละ\nวสวัดดี\nวสวัตตี\nวสะ\nวสันต์\nวสันตดิลก\nวสันตฤดู\nวสันตวิษุวัต\nวสา\nวสี\nวสุ\nวสุธา\nวสุนธรา\nวสุมดี\nวหะ\nวอ\nวอก\nวอกแวก\nว่องไว\nวอด\nวอน\nว่อน\nว็อบ\nวอมแวม\nวอลเลย์บอล\nวอแว\nวะ\nวัก\nวักกะ\nวัคคีย์\nวัคคุ\nวัคซีน\nวัง\nวังก์\nวังชา\nวังเวง\nวังศะ\nวังสะ\nวัจจะ\nวัจกุฎี\nวัจฉละ\nวัจน์\nวัช\nวัชชะ\nวัชพืช\nวัชฌ์\nวัชระ\nวัชรปาณี\nวัชรยาน\nวัชรอาสน์\nวัชราสน์\nวัชรินทร์\nวัชรี\nวัชเรนทร์\nวัฏ\nวัฏฏะ\nวัฏจักร\nวัฏทุกข์\nวัฏสงสาร\nวัฏกะ\nวัฏฏิ\nวัฒกะ\nวัฒกี\nวัฒนธรรม\nวัฒนะ\nวัฒนา\nวัณ\nวัณโรค\nวัณฏ์\nวัณณะ\nวัณนา\nวัด\nวัต\nวัตต์\nวัตตา\nวัตถ์\nวัตถาภรณ์\nวัตถาลังการ\nวัตถุ\nวัตนะ\nวัตร\nวัตสดร\nวัตสะ\nวัติ\nวัทน์\nวัน\nวันต์\nวันทนา\nวันทนาการ\nวันทนีย์\nวันทยหัตถ์\nวันทยาวุธ\nวันทา\nวันทิ\nวับ\nวับวาบ\nวับวาม\nวับแวบ\nวับแวม\nวัปปะ\nวัมมิกะ\nวัย\nวัลก์\nวัลคุ\nวัลย์\nวัลลภ\nวัลลี\nวัว\nวัสสะ\nวัสโสทก\nวัสดุ\nวัสตร์\nวัสน์\nวัสนะ\nวัสสานะ\nวัสสานฤดู\nวา\nว่า\nว้า\nว้าเหว่\nวาก\nว้าก\nวากยสัมพันธ์\nวากยะ\nวาง\nว่าง\nว้าง\nวาจก\nวาจา\nวาจาไปยะ\nวาจาล\nวาชเปยะ\nวาณิช\nวาณิชกะ\nวาณิชย์\nวาณี\nวาด\nวาต\nวาตะ\nวาตภัย\nวาท\nวาทศาสตร์\nวาทศิลป์\nวาทกะ\nวาทนะ\nวาทย์\nวาทยกร\nวาทิต\nวาทิน\nวาที\nวาน\nวานซืน\nว่าน\nวานร\nวานรินทร์\nวาเนเดียม\nวาบ\nวาปี\nวาม\nวามน\nวามนาวตาร\nวามะ\nวาย\nว่าย\nว้าย\nวายะ\nวาโย\nวายามะ\nวายุ\nวายุกูล\nวาร\nวาระ\nวารสาร\nวารสารศาสตร์\nวาริ\nวารี\nวาริช\nวารีช\nวาริท\nวาริธร\nวารุณ\nวารุณี\nวาล\nวาลวีชนี\nวาล์ว\nวาลิกา\nวาลุกา\nวาว\nว่าว\nว้าว่อน\nว้าวุ่น\nวาสนะ\nวาสนา\nวาสพ\nวาสะ\nวาสิน\nวาสี\nวาสุกรี\nวาสุกี\nวาสุเทพ\nวาหนะ\nวาหะ\nวาหินี\nวาฬ\nวิกขัมภ์\nวิกขัมภนะ\nวิกเขป\nวิกรม\nวิกรัย\nวิกรานต์\nวิกฤต\nวิกฤติ\nวิกล\nวิกสิต\nวิกัต\nวิกัติ\nวิกัติการก\nวิกัป\nวิกัย\nวิการ\nวิกาล\nวิกาลโภชน์\nวิคหะ\nวิเคราะห์\nวิฆเนศ\nวิฆเนศวร\nวิฆาต\nวิง\nวิ่ง\nวิ่งเปี้ยว\nวิงวอน\nวิจฉิกะ\nวิจล\nวิจักขณ์\nวิจักษ์\nวิจักษณ์\nวิจัย\nวิจาร\nวิจารณ์\nวิจารณญาณ\nวิจิ\nวิจิกิจฉา\nวิจิต\nวิจิตร\nวิจิน\nวิจุณ\nวิจุรณ\nวิชชา\nวิชชุ\nวิชชุดา\nวิชชุตา\nวิชชุลดา\nวิชญะ\nวิชน\nวิชนี\nวิชย\nวิชัย\nวิชา\nวิชานนะ\nวิชิต\nวิเชียร\nวิญญัตติ\nวิญญาณ\nวิญญาณกทรัพย์\nวิญญู\nวิฑูรย์\nวิด\nวิตก\nวิตถาร\nวิตามิน\nวิถี\nวิทธะ\nวิทยฐานะ\nวิทยา\nวิทยาคม\nวิทยาคาร\nวิทยาลัย\nวิทยุ\nวิทยุต\nวิทวัส\nวิทัตถิ\nวิทัศน์\nวิทารณ์\nวิทิต\nวิทู\nวิทูร\nวิเทศ\nวิเทโศบาย\nวิธ\nวิธวา\nวิธาน\nวิธี\nวิธุระ\nวิธู\nวิธูปนะ\nวิ่น\nวินตกะ\nวินัย\nวินาที\nวินายก\nวินาศ\nวินิจ\nวินิจฉัย\nวินิต\nวินิบาต\nวินิปาติก\nวิเนต\nวิบัติ\nวิบาก\nวิบุล\nวิบุลย์\nวิบูล\nวิบูลย์\nวิปการ\nวิปฏิสาร\nวิปโยค\nวิประโยค\nวิปริต\nวิปลาส\nวิปวาส\nวิปักษ์\nวิปัสสก\nวิปัสสนา\nวิปัสสนายานิก\nวิพากษ์\nวิพิธทัศนา\nวิพุธ\nวิภว\nวิภวตัณหา\nวิภังค์\nวิภัช\nวิภัตติ\nวิภา\nวิภาค\nวิภาช\nวิภาดา\nวิภาวี\nวิภาษ\nวิภาส\nวิภู\nวิภูษณะ\nวิภูษา\nวิภูษิต\nวิมน\nวิมล\nวิมลัก\nวิมังสา\nวิมัติ\nวิมาน\nวิมุข\nวิมุต\nวิมุตติ\nวิเมลือง\nวิโมกข์\nวิโยค\nวิระ\nวิรงรอง\nวิรังรอง\nวิรัช\nวิรัต\nวิรัติ\nวิราคะ\nวิราม\nวิริยภาพ\nวิริยะ\nวิรุธ\nวิรุฬห์\nวิรุฬหก\nวิรูป\nวิรูปักษ์\nวิเรนทร์\nวิโรจ\nวิโรจน์\nวิโรฒ\nวิโรธ\nวิลันดา\nวิลัย\nวิลาด\nวิลาศ\nวิลาป\nวิลาวัณย์\nวิลาส\nวิลาสินี\nวิลิปดา\nวิลิศมาหรา\nวิเลป\nวิเลปนะ\nวิโลกนะ\nวิโลม\nวิไล\nวิไลวรรณ\nวิวรณ์\nวิวรรธน์\nวิวัฏ\nวิวัฒน์\nวิวัฒนาการ\nวิวัน\nวิวาท\nวิวาห์\nวิวาหมงคล\nวิวาหะ\nวิวิต\nวิวิธ\nวิเวก\nวิศรุต\nวิศว\nวิศวกร\nวิศวกรรม\nวิศวกรรมศาสตร์\nวิศัลย์\nวิศาขบูชา\nวิศาขา\nวิศาล\nวิศิษฏ์\nวิศุทธ์\nวิศุทธิ์\nวิเศษ\nวิเศษณ์\nวิษณุ\nวิษณุกรรม\nวิษธร\nวิษัย\nวิษาณ\nวิษุวัต\nวิสกี้\nวิสรรชนีย์\nวิสฤต\nวิสสุกรรม\nวิสัชนา\nวิสัญญี\nวิสัย\nวิสัยทัศน์\nวิสาขบูชา\nวิสาขะ\nวิสาขา\nวิสามัญ\nวิสามานยนาม\nวิสาร\nวิสารทะ\nวิสาล\nวิสาสะ\nวิสาหกิจ\nวิสิฐ\nวิสุงคามสีมา\nวิสุทธ์\nวิสุทธิ์\nวิสูตร\nวิเสท\nวิหค\nวิหลั่น\nวิหาร\nวิหิงสา\nวิเหสา\nวิฬาร\nวิฬาร์\nวี\nวีจิ\nวีชนี\nวีณา\nวี้ด\nวีรกรรม\nวีรชน\nวีรบุรุษ\nวีรสตรี\nวี่วัน\nวี่แวว\nวีสะ\nวุ้ง\nวุฐิ\nวุฒ\nวุฒิ\nวุด\nวุ่น\nวุ้น\nวุบ\nวุ้ย\nวุลแฟรม\nวู้\nวูดวาด\nวูบ\nวู่วาม\nเว้\nเวค\nเวคิน\nเวคี\nเวจ\nเวช\nเวชยันต์\nเวฐน์\nเวณิ\nเวณิก\nเวณุ\nเวตน์\nเวตร\nเวตาล\nเวท\nเวทคู\nเวทนา\nเวทย์\nเวทัลละ\nเวทางค์\nเวทางคศาสตร์\nเวทานต์\nเวทานตะ\nเวทิ\nเวที\nเวธะ\nเวน\nเว้น\nเวนไตย\nเวไนย\nเวมัต\nเว้ย\nเวยยากรณะ\nเวร\nเวรมณี\nเวรี\nเวโรจน์\nเวลา\nเวเลนซี\nเวศม์\nเวศย์\nเวศยา\nเวสน์\nเวสภู\nเวสม์\nเวสวัณ\nเวสสะ\nเวสสันดร\nเวสสุกรรม\nเวสสุวัณ\nเวสารัช\nเวสิยา\nเวหน\nเวหะ\nเวหา\nเวหาส\nเวฬุ\nเวฬุริยะ\nเว่อ\nเว้า\nเวิก\nเวิ้ง\nเวี่ย\nเวียง\nเวียด\nเวียดนาม\nเวียน\nเวียร\nเวี่ยว\nแว้\nแวง\nแว้ง\nแวด\nแว้ด\nแวน\nแว่น\nแวนดา\nแวบ\nแว็บ\nแวม\nแว็ม\nแวว\nแว่ว\nแวะ\nโว\nโว่\nโวการ\nโว่ง\nโวทาน\nโวย\nโว้ย\nโว้เว้\nโวหาร\nไว\nไว้\nไวกูณฐ์\nไวฑูรย์\nไวทย์\nไวน์\nไวพจน์\nไวยากรณ์\nไวยาวัจกร\nไวยาวัจมัย\nไวรัส\nไววรรณ\nไวษณพ\nไวโอลิน\nศก\nศกุน\nศกุนต์\nศกุนิ\nศกุนี\nศจี\nศตะ\nศตภิษัช\nศตวรรษ\nศตพรรษ\nศตกะ\nศนิ\nศพ\nศมนะ\nศมะ\nศยาม\nศยามล\nศร\nศรายุธ\nศราวรณ์\nศรรกรา\nศรวณะ\nศรวณีย์\nศรวิษฐา\nศรัณย์\nศรัณยู\nศรัท\nศรัทธา\nศรัย\nศราทธ์\nศราทธพรต\nศราพก\nศราวก\nศราวณะ\nศรี\nศรีตรัง\nศรุติ\nศฤคาล\nศฤงค์\nศฤงคาร\nศฤงคาริน\nศฤงคารี\nศลิษฏ์\nศลิษา\nศวะ\nศวัส\nศวา\nศวาน\nศศะ\nศศธร\nศศพินทุ์\nศศลักษณ์\nศศิ\nศศิน\nศศี\nศศิขัณฑ์\nศศิธร\nศศิมณฑล\nศศิวิมล\nศอ\nศอก\nศักดา\nศักดิ\nศักดิ์\nศักดินา\nศักติ\nศักย\nศักยภาพ\nศักย์\nศักยะ\nศักร\nศักรินทร์\nศักเรนทร์\nศักราช\nศังกร\nศัตรู\nศันสนะ\nศันสนีย์\nศัพท์\nศัยยา\nศัล\nศัลย์\nศัลยกรรม\nศัลยแพทย์\nศัลยศาสตร์\nศัสดร\nศัสตร\nศัสตรศาสตร์\nศัสตรา\nศัสตราวุธ\nศากตะ\nศากย\nศากยะ\nศากยพุทธ\nศากยมุนี\nศาฎก\nศาณ\nศานต์\nศานติ\nศาป\nศารท\nศารทูล\nศาริกา\nศาล\nศาลา\nศาศวัต\nศาสดา\nศาสตร์\nศาสตรา\nศาสตราจารย์\nศาสนา\nศาสนกิจ\nศาสนจักร\nศาสนธรรม\nศาสนบุคคล\nศาสนพิธี\nศาสนวัตถุ\nศาสนศาสตร์\nศาสนสถาน\nศาสนสมบัติ\nศาสนิกชน\nศาสนีย์\nศาสนูปถัมภก\nศาสน์\nศิกษก\nศิการ\nศิขร\nศิขริน\nศิขรี\nศิขัณฑ์\nศิคาล\nศิงขร\nศิงขริน\nศิตะ\nศิถี\nศิพิระ\nศิระ\nศิรประภา\nศิราภรณ์\nศิโรรัตน์\nศิโรเวฐน์\nศิรา\nศิรามพุช\nศิโรราบ\nศิลป\nศิลป์\nศิลปะ\nศิลปกร\nศิลปกรรม\nศิลปกิจ\nศิลปวัตถุ\nศิลปวิทยา\nศิลปศาสตร์\nศิลปศึกษา\nศิลปหัตถกรรม\nศิลปิน\nศิลปี\nศิลา\nศิวะ\nศิวโมกข์\nศิวลึงค์\nศิวเวท\nศิวาลัย\nศิศีระ\nศิษฎิ\nศิษฏ์\nศิษย์\nศิษยานุศิษย์\nศีขร\nศีต\nศีตกาล\nศีรษะ\nศีล\nศึก\nศึกษา\nศึกษาธิการ\nศึกษานิเทศก์\nศุกร์\nศุกรวรรณ\nศุกรวาร\nศุกระ\nศุกล\nศุกลปักษ์\nศุจิ\nศุทธะ\nศุทธิ\nศุนะ\nศุนิ\nศุภกร\nศุภเคราะห์\nศุภนิมิต\nศุภมัสดุ\nศุภมาตรา\nศุภมาส\nศุภอักษร\nศุภางค์\nศูกร\nศุลกากร\nศุลการักษ์\nศุลี\nศุษิร\nศูทร\nศูนย์\nศูนยวาท\nศูละ\nศูลิน\nเศรณี\nเศรษฐ\nเศรษฐ์\nเศรษฐกิจ\nเศรษฐศาสตร์\nเศรษฐี\nเศร้า\nเศลษ\nเศวต\nเศวตร\nเศวตัมพร\nเศษ\nเศาจ\nเศาร์\nเศารยะ\nเศิก\nเศียร\nโศก\nโศกา\nโศกาดูร\nโศกาลัย\nโศกี\nโศจิ\nโศธนะ\nโศภน\nโศภะ\nโศภา\nโศภิต\nโศภิน\nโศภิษฐ์\nโศภี\nโศรดา\nโศรตร\nโศลก\nไศล\nไศวะ\nษมา\nษัฏ\nษัฑ\nษัณ\nษัษ\nษัษฐะ\nษัษฐี\nโษฑศัน\nสก\nสกวาที\nสกฏะ\nสกทาคามิผล\nสกิทาคามิผล\nสกทาคามิมรรค\nสกิทาคามิมรรค\nสกทาคามี\nสกิทาคามี\nสกนธ์\nสกปรก\nสกรณีย์\nสกรรจ์\nสกรรมกริยา\nสกล\nสกลมหาสังฆปริณายก\nสกัด\nสกา\nสกาว\nสกี\nสกุณ\nสกุณา\nสกุณี\nสกุน\nสกุนต์\nสกุล\nสเกต\nสแกนเดียม\nสขะ\nสง\nส่ง\nสงกร\nสงกรานต์\nสงกา\nสงค์\nสงคร\nสงคราม\nสงเคราะห์\nสงฆ์\nสงบ\nสงวน\nส่งสการ\nสงสัย\nสงสาร\nสงสารวัฏ\nสงัด\nสง่า\nสฐะ\nสณฑ์\nสด\nสดมภ์\nสดับ\nสดับปกรณ์\nสดำ\nสดุดี\nสตะ\nสตน\nสตภิสชะ\nสตรอนเชียม\nสตริกนิน\nสตรี\nสตัฟฟ์\nสตัมภ์\nสตางค์\nสติ\nสติปัฏฐาน\nสตี\nสตู\nสตูป\nสเต๊ก\nสถบดี\nสถล\nสถวีระ\nสถาน\nสถานะ\nสถานี\nสถาบัน\nสถาปนา\nสถาปนิก\nสถาปัตยกรรม\nสถาปัตยกรรมศาสตร์\nสถาปัตยเรขา\nสถาปัตยเวท\nสถาพร\nสถาวร\nสถิต\nสถิตยศาสตร์\nสถิติ\nสถิร\nสถีรวาท\nสถุล\nสถูป\nสทิง\nสทึง\nสทุม\nสธนะ\nสาธุสะ\nสน\nส้น\nสนทนา\nสนทรรศ\nสนทรรศน์\nสนเทศ\nสนเท่ห์\nสนธยา\nสนธิ\nสนน\nสนม\nสนวน\nสนอง\nสนอบ\nสนอม\nสนะ\nสนัด\nสนั่น\nสนับ\nสนับทึบ\nสนับสนุน\nสนาน\nสนาม\nสนายุ\nสนิกะ\nสนิท\nสนิธ\nสนิม\nสนุก\nสนุกเกอร์\nสนุข\nสนุต\nสนุ่น\nสบ\nสบง\nสบถ\nสบัน\nสบาย\nสบู่\nสไบ\nสปริง\nสปอร์\nสปาเกตตี\nสเปกตรัม\nสเปกโทรสโกป\nสไปริลลัม\nสพาบ\nสภา\nสภาพ\nสภาวการณ์\nสภาวะ\nสม\nสมการ\nสมจารี\nสมดุล\nสมมูล\nส้ม\nสมญา\nสมณะ\nสมณบริขาร\nสมณศักดิ์\nสมณสารูป\nสมเด็จ\nสมถะ\nสมถยานิก\nสมถวิปัสสนา\nสมนาคุณ\nสมบัติ\nสมบุกสมบัน\nสมบูรณ์\nสมบูรณาญาสิทธิราชย์\nสมประดี\nสมปฤดี\nสมปฤๅดี\nส้มป่อย\nสมปัก\nสมผุส\nสมพง\nสมพงศ์\nสมพล\nสมพัตสร\nสมพาส\nสมเพช\nสมโพธน์\nสมโพธิ\nสมภพ\nสมภาร\nสมโภค\nสมโภช\nสมมต\nสมมติ\nสมมุติ\nสมมาตร\nส้มมือ\nสมโมท\nสมโยค\nสมร\nสมรด\nสมรรถ\nสมรรถนะ\nสมรรถภาพ\nสมรส\nสมฤดี\nสมฤติ\nสมวายะ\nสมเสร็จ\nสมอ\nสมอง\nสมะ\nสมัคร\nสมังคี\nสมัช\nสมัชชา\nสมัญญา\nสมัต\nสมัน\nสมันต์\nสมัย\nสมา\nสมาคม\nสมาจาร\nสมาชิก\nสมาทาน\nสมาธิ\nสมาน\nสมานฉันท์\nสมาบัติ\nสมาพันธรัฐ\nสมาส\nสม่ำเสมอ\nสมิง\nสมิต\nสมิติ\nสมิทธ์\nสมิทธิ\nสมี\nสมุก\nสมุจจัย\nสมุจเฉท\nสมุฏฐาน\nสมุด\nสมุทร\nสมุทรโคดม\nสมุทัย\nสมุน\nสมุนไพร\nสมุลแว้ง\nสมุห\nสมุห์\nสมุหกลาโหม\nสมุหเทศาภิบาล\nสมุหนาม\nสมุหนายก\nสโมธาน\nสโมสร\nสยด\nสยนะ\nสยบ\nสยมพร\nสยมภู\nสยอง\nสยอน\nสยัมวรา\nสยาม\nสยามานุสติ\nสยามินทร์\nสยาย\nสยิว\nสยิ้ว\nสยุมพร\nสยุมภู\nสร\nสรง\nสร่ง\nสรณะ\nสรณคมน์\nสรณาคมน์\nสรณตรัย\nสรตะ\nสรทะ\nสรนุก\nสรเนาะ\nสรไน\nสรเพชญ\nสรภะ\nสรภัญญะ\nสรภู\nสรม\nสรร\nสรรค์\nสรรพ\nสรรพคุณ\nสรรพนาม\nสรรพสามิต\nสรรพัชญ\nสรรพากร\nสรรพางค์\nสรรเพชญ\nสรรเพชุดา\nสรรเสริญ\nสรลอน\nสรเลข\nสรวง\nสรวม\nสรวล\nสรเสริญ\nสร้อย\nสระ\nสระกอ\nสระท้อน\nสระพรั่ง\nสระอาด\nสรั่ง\nสรัสวดี\nสร่าง\nสร้าง\nสราญ\nสรี้\nสรีระ\nสรีรกิจ\nสรีรธาตุ\nสรีรวิทยา\nสรีรศาสตร์\nสรีรังคาร\nสรีรางคาร\nสรุป\nสโรช\nสโรชะ\nสฤก\nสฤต\nสฤษฎิ\nสฤษฎี\nสฤษฏ์\nสฤษดิ์\nสลด\nสลบ\nสลวน\nสลวย\nสลอด\nสลอน\nสลอย\nสละ\nสลัก\nสลัด\nสลัดได\nสลับ\nสลัว\nสลา\nสลาก\nสลาง\nสล้าง\nสลาด\nสลาตัน\nสลาบ\nสลาย\nสลิด\nสลิล\nสลึก\nสลึง\nสลุต\nสลุบ\nสลุมพร\nสแลง\nสวการย์\nสวภาพ\nสวราชย์\nสวก\nส้วง\nสวด\nสวน\nสวนะ\nสวนาการ\nส่วน\nสวนิต\nสวบ\nสวม\nส้วม\nสวย\nส่วย\nส้วย\nสวยม\nสวรรค\nสวรรค์\nสวรรคต\nสวรรคาลัย\nสวรรยา\nสวระ\nสวะ\nสวัสดิ\nสวัสดิ์\nสวัสดิการ\nสวัสดิภาพ\nสวัสดิมงคล\nสวัสดี\nสวัสติ\nสวาตี\nสวัสติกะ\nสวา\nสวาปาม\nสวาคตะ\nสวาง\nสว่าง\nสวาด\nสวาดิ\nสวาท\nสว่าน\nสว้าน\nสวาบ\nสวามิ\nสวามี\nสวามินี\nสวาย\nสวาสดิ์\nสวาหะ\nสวิง\nสวิญญาณกทรัพย์\nสวิตช์\nสสาร\nสสุระ\nสสุรี\nสหกรณ์\nสหการ\nสหจร\nสหชาต\nสหชาติ\nสหธรรม\nสหธรรมิก\nสหประชาชาติ\nสหพันธ์\nสหพันธรัฐ\nสหภาพ\nสหศึกษา\nสหัช\nสหัมบดี\nสหัส\nสหัสสะ\nสหัสธารา\nสหัสนัยน์\nสหัสเนตร\nสหัสรังสี\nสหัสา\nสหาย\nสอ\nส่อ\nสอง\nส่อง\nส้อง\nสอด\nสอน\nส่อน\nสอบ\nสอพลอ\nส้อม\nสอย\nสะ\nสะกด\nสะกอ\nสะกาง\nสะการะ\nสะกิด\nสะกิดสะเกา\nสะเก็ด\nสะแก\nสะคร้อ\nสะคราญ\nสะค้าน\nสะเงาะสะแงะ\nสะดม\nสะดวก\nสะดิ้ง\nสะดึง\nสะดือ\nสะดุ้ง\nสะดุด\nสะเด็ด\nสะเดา\nสะเดาะ\nสะตอ\nสะตาหมัน\nสะตึ\nสะตือ\nสะตุ\nสะเต๊ะ\nสะโตก\nสะทก\nสะท้อน\nสะท้าน\nสะทึก\nสะเทิน\nสะเทิ้น\nสะเทือน\nสะเทื้อน\nสะบะ\nสะบัก\nสะบักสะบอม\nสะบัด\nสะบัดสะบิ้ง\nสะบั้น\nสะบันงา\nสะบ้า\nสะบู\nสะแบง\nสะเปะสะปะ\nสะพรั่ง\nสะพรึงกลัว\nสะพรึบ\nสะพรึ่บ\nสะพัก\nสะพัง\nสะพัด\nสะพั้น\nสะพาน\nสะพาย\nสะเพร่า\nสะโพก\nสะเภา\nสะใภ้\nสะโมง\nสะระตะ\nสะระแหน่\nสะลาง\nสะลาบ\nสะลึมสะลือ\nสะวี้ดสะว้าด\nสะสม\nสะสวย\nสะสาง\nสะเหล่อ\nสะอาง\nสะอาด\nสะอ้าน\nสะอิ้ง\nสะอิดสะเอียน\nสะอึก\nสะอื้น\nสะเอ้ง\nสะเอว\nสะเออะ\nสะโอดสะอง\nสะไอ\nสัก\nสักกะ\nสักยะ\nสักกัจจะ\nสักกายทิฐิ\nสักการ\nสักการะ\nสักขี\nสักวา\nสักหลาด\nสัค\nสัคคะ\nสั่ง\nสังกร\nสังกรณี\nสังกรประโยค\nสังกะตัง\nสังกะวัง\nสังกะวาด\nสังกะสี\nสังกัด\nสังกัปปะ\nสังกา\nสังการ\nสังกาศ\nสังกิเลส\nสังเกต\nสังข์\nสังขกร\nสังขตธรรม\nสังขตะ\nสังขยา\nสังขลิก\nสังขลิกา\nสังขาร\nสังขารา\nสังเขป\nสังค์\nสังคญาติ\nสังคม\nสังคหะ\nสังคัง\nสังคายนา\nสังคายนาย\nสังคีต\nสังคีติ\nสังเค็ด\nสังเคราะห์\nสังฆกรรม\nสังฆการี\nสังฆเถระ\nสังฆทาน\nสังฆนายก\nสังฆปาโมกข์\nสังฆภัต\nสังฆเภท\nสังฆมณฑล\nสังฆมนตรี\nสังฆราช\nสังฆสภา\nสังฆาณัติ\nสังฆาฏิ\nสังฆาทิเสส\nสังฆาธิการ\nสังฆานุสติ\nสังฆาวาส\nสังยุตนิกาย\nสังโยค\nสังโยชน์\nสังวร\nสังวัจฉระ\nสังวัธยาย\nสังวาล\nสังวาส\nสังเวคะ\nสังเวช\nสังเวชนียสถาน\nสังเวย\nสังเวียน\nสังสกฤต\nสังสการ\nสังสนทนา\nสั่งสนทนา\nสังสรรค์\nสังสารวัฏ\nสังสิทธิ\nสังสุทธ์\nสังสุทธิ\nสังหร\nสังหรณ์\nสังหาร\nสังหาริมทรัพย์\nสังหาริมะ\nสังหิต\nสัจ\nสัจกิริยา\nสัจจะ\nสัจญาณ\nสัจธรรม\nสัจนิยม\nสัจพจน์\nสัชฌะ\nสัชฌุ\nสัญจร\nสัญเจตนา\nสัญชาตญาณ\nสัญชาติ\nสัญฌา\nสัญญา\nสัญญาณ\nสัญญี\nสัญโญชน์\nสัญนิยม\nสัญประกาศ\nสัญลักษณ์\nสัฐิ\nสัณฐาน\nสัณฐิติ\nสัณฑ์\nสัณห์\nสัด\nสัดจอง\nสัต\nสัตตะ\nสัตตาหกรณียะ\nสัตตาหกาลิก\nสัตมวาร\nสัตสดก\nสัตตบงกช\nสัตตบรรณ\nสัตตบุษย์\nสัตตู\nสัตถันดร\nสัตถา\nสัตถิ\nสัตถุ\nสัตถุศาสนา\nสัตบรรณ\nสัตย์\nสัตยพรต\nสัตยวาที\nสัตยาเคราะห์\nสัตยาธิษฐาน\nสัตยาบัน\nสัตว์\nสัตวชาติ\nสัตวบาล\nสัตวแพทย์\nสัตววิทยา\nสัตวา\nสัทธรรม\nสัทธา\nสัทธาจริต\nสัทธาธิกะ\nสัทธินทรีย์\nสัทธิงวิหาริก\nสัทธิวิหาริก\nสัทวิทยา\nสัทศาสตร์\nสัทอักษร\nสัน\nสั่น\nสั้น\nสันดาน\nสันดาป\nสันโดษ\nสันต์\nสันตติ\nสันตะปาปา\nสันตะวา\nสันติ\nสันตุฏฐี\nสันถวไมตรี\nสันถวะ\nสันถัต\nสันถาร\nสันทนะ\nสันทะ\nสันทัด\nสันทัสนะ\nสันทาน\nสันทิฐิก\nสันทิส\nสันเทหะ\nสันธาน\nสันนิธิ\nสันนิบาต\nสันนิวาส\nสันนิษฐาน\nสันสกฤต\nสับ\nสับปลับ\nสับปลี้\nสับปะรด\nสัปคับ\nสัปดาห์\nสัปดาหะ\nสัปดน\nสัปตศก\nสัปทน\nสัปปะ\nสัปปิ\nสัปปุริส\nสัปปุรุษ\nสัประยุทธ์\nสัปหงก\nสัปเหร่อ\nสัพ\nสัพพะ\nสัพพัญญู\nสัพเพเหระ\nสัพยอก\nสัมบูรณ์\nสัมปชัญญะ\nสัมปทา\nสัมปทาน\nสัมปยุต\nสัมปโยค\nสัมประสิทธิ์\nสัมประหาร\nสัมปรายภพ\nสัมปรายิกภพ\nสัมปัตติ\nสัมผัปลาป\nสัมผัปลาปะ\nสัมผัส\nสัมพล\nสัมพหุลา\nสัมพัจฉรฉินท์\nสัมพัตสร\nสัมพัทธ์\nสัมพันธ์\nสัมพันธน์\nสัมพันธภาพ\nสัมพันธมิตร\nสัมพันธไมตรี\nสัมพาหะ\nสัมพุทธ\nสัมพุทธะ\nสัมโพธิ\nสัมภวะ\nสัมภเวสี\nสัมภัต\nสัมภัตตะ\nสัมภาระ\nสัมภาษณ์\nสัมโภคกาย\nสัมมนา\nสัมมัปธาน\nสัมมา\nสัมโมทนียกถา\nสัมฤทธิ\nสัมฤทธิ์\nสัมฤทธิศก\nสัยน์\nสัลเลข\nสัสดี\nสัสตทิฐิ\nสัสสะ\nสัสสุ\nสัสสู\nสา\nส่า\nสาก\nสากรรจ์\nสากล\nสากัจฉา\nสากัลย์\nสากิยะ\nสาเก\nสาขา\nสาคร\nสาคเรศ\nสาคู\nสาง\nส้าง\nสาชล\nสาฎก\nสาฏิก\nสาณี\nสาด\nสาไถย\nสาทร\nสาทิส\nสาทุ\nสาโท\nสาธก\nสาธยะ\nสาธยาย\nสาธารณะ\nสาธารณชน\nสาธารณประโยชน์\nสาธารณภัย\nสาธารณรัฐ\nสาธารณสถาน\nสาธารณสมบัติ\nสาธารณสุข\nสาธารณูปการ\nสาธารณูปโภค\nสาธารณ์\nสาธิต\nสาธุ\nสาน\nส่าน\nสานุ\nสานู\nสานุศิษย์\nสาบ\nสาบสูญ\nสาบาน\nสาป\nสาปไตย\nสาม\nสามชุก\nสามเณร\nสามเณรี\nสามนต์\nสามนตราช\nสามยทรัพย์\nสามล\nสามหาว\nสามะ\nสามัคคี\nสามัญ\nสามัตถิยะ\nสามานย์\nสามานยนาม\nสามารถ\nสามิต\nสามินี\nสามิภักดิ์\nสามี\nสามีจิกรรม\nสาย\nส่าย\nส้าย\nสายชู\nสายัณห์\nสายาห์\nสาร\nสารคดี\nสารธรรม\nสารนิเทศ\nสารบบ\nสารบรรณ\nสารบัญ\nสารบาญ\nสารบาญชี\nสารประโยชน์\nสารสนเทศ\nสารทุกข์\nสารถี\nสารท\nสารพัด\nสารพัน\nสารพางค์\nสารภาพ\nสารภี\nสารวัตร\nสาระ\nสาระแน\nสาระพา\nสาระยำ\nสาระวารี\nสาระสะมา\nสารัตถประโยชน์\nสารัตถศึกษา\nสารัตถะ\nสารัทธ์\nสารัมภ์\nสาราณียกร\nสาราณียธรรม\nสาราณียะ\nสารานุกรม\nสารีริกธาตุ\nสารูป\nสาโรช\nสาละ\nสาละวน\nสาลิ\nสาลิกา\nสาลินี\nสาลี\nสาลี่\nสาลู\nสาโลหิต\nสาว\nสาวก\nสาวิกา\nสาวิตร\nสาวิตรี\nสาสน\nสาสน์\nสาส์น\nสาสนา\nสาสม\nสาหร่าย\nสาหรี\nส่าหรี\nสาหัส\nสาเหตุ\nสาแหรก\nสำ\nสำส่อน\nส่ำ\nสำคัญ\nสำซ่าง\nสำแดง\nสำทับ\nสำนวน\nสำนอง\nสำนัก\nสำนาน\nสำนึก\nสำนึง\nสำเนา\nสำเนียง\nสำบัด\nสำปะลอ\nสำปะหลัง\nสำปั้น\nสำปันนี\nสำเภา\nสำมะงา\nสำมะโน\nสำมะลอ\nสำมะเลเทเมา\nสำมะหา\nสำรด\nสำรวจ\nสำรวม\nสำรวย\nสำรวล\nสำรอก\nสำรอง\nสำรับ\nสำราก\nสำราญ\nสำริด\nสำเร็จ\nสำเรา\nสำเริง\nสำโรง\nสำลัก\nสำลาน\nสำลี\nสำแลง\nสำหรวด\nสำหรับ\nสำหา\nสำเหนียก\nสำเหร่\nสำออย\nสำอาง\nสิ\nสิกข์\nสิข\nสิกขมานา\nสิกขา\nสิขร\nสิขรี\nสิขเรศ\nสิขา\nสิขานล\nสิขี\nสิคาล\nสิง\nสิ่ง\nสิงขร\nสิงค์\nสิงคลิ้ง\nสิงคลี\nสิงคาร\nสิงคาล\nสิงคี\nสิงโต\nสิงห์\nสิงหนาท\nสิงหบัญชร\nสิงหรา\nสิงหราช\nสิงหาคม\nสิงหาสน์\nสิงหล\nสิญจน์\nสิตะ\nสิตางศุ์\nสิถิล\nสิทธ์\nสิทธัตถะ\nสิทธา\nสิทธาจารย์\nสิทธารถ\nสิทธิ\nสิทธิ์\nสิทธิการิยะ\nสิธยะ\nสิน\nสิ้น\nสินเทา\nสินธพ\nสินธุ\nสินธุ์\nสินธุระ\nสินธู\nสินเธาว์\nสินาด\nสินิทธ์\nสินี\nสิเนรุ\nสิเนหก\nสิเนหะ\nสิเนหา\nสิเน่หา\nสิบ\nสิปปะ\nสิมพลี\nสิระ\nสิโรดม\nสิโรตม์\nสิริ\nสิรี\nสิลา\nสิว\nสิ่ว\nสิวะ\nสิวาลัย\nสิวิกา\nสี\nสี่\nสี้\nสีกา\nสีกุน\nสีข้าง\nสีด\nสีดอ\nสีดา\nสีตลรัศมี\nสีตโลทก\nสีโตทก\nสีทันดร\nสีมันต์\nสีมา\nสีละมัน\nสีวิกา\nสีสอ\nสีสะ\nสีสา\nสีสุก\nสีเสียด\nสีห์\nสีหนาท\nสีหบัญชร\nสีหราช\nสีหไสยา\nสีหไสยาสน์\nสีหะ\nสึก\nสึง\nสืบ\nสื่อ\nสุ\nสุก\nสุกข์\nสุกร\nสุกรม\nสุกำศพ\nสุกียากี้\nสุข\nสุขา\nสุขาภิบาล\nสุขารมณ์\nสุขาวดี\nสุขิน\nสุขี\nสุขุม\nสุขุมาล\nสุโข\nสุคต\nสุคติ\nสุคนธ\nสุคนธ์\nสุคนธชาติ\nสุคนธรส\nสุคันธ์\nสุคันธรส\nสุงกะ\nสุงกากร\nสุงสิง\nสุงสุมาร\nสุจริต\nสุจหนี่\nสุจิ\nสุจิต\nสุจิตร\nสุชน\nสุชัมบดี\nสุชา\nสุชาดา\nสุญ\nสุญญากาศ\nสุญตา\nสุญนิยม\nสุณ\nสุณิสา\nสุด\nสุดา\nสุต\nสุตตนิบาต\nสุตตะ\nสุตตันตปิฎก\nสุตตันตะ\nสุติ\nสุทธ\nสุทธ์\nสุทธาวาส\nสุทธิ\nสุทรรศน์\nสุทัศน์\nสุธา\nสุธาโภชน์\nสุธารส\nสุธาสินี\nสุธาสี\nสุธี\nสุนทร\nสุนทรี\nสุนทรียภาพ\nสุนทรียศาสตร์\nสุนทรียะ\nสุนัข\nสุนันท์\nสุโนก\nสุบดี\nสุบรรณ\nสุบิน\nสุปรีดิ์\nสุปรีย์\nสุปาณี\nสุพพัต\nสุพรรณ\nสุพรรณบัฏ\nสุพรรณภาชน์\nสุพรรณราช\nสุพรรณศรี\nสุพรรณถัน\nสุพรรณิการ์\nสุภร\nสุภัค\nสุภา\nสุภาพ\nสุภาษิต\nสุม\nสุ่ม\nสุมทุม\nสุมน\nสุมนะ\nสุมนัส\nสุมนา\nสุ้มเสียง\nสุมะ\nสุมาลี\nสุเมธ\nสุเมรุ\nสุรคต\nสุรเชษฐ์\nสุรบดี\nสุรภาพ\nสุรโลก\nสุรสีหนาท\nสุรเสียง\nสุรงค์\nสุรังค์\nสุรภี\nสุรัติ\nสุรัสวดี\nสุรา\nสุรางค์จำเรียง\nสุรางคนา\nสุรางคนางค์\nสุรารักษ์\nสุราลัย\nสุรินทร์\nสุรินทราหู\nสุริยะ\nสุริยกันต์\nสุริยกานต์\nสุริยการ\nสุริยกาล\nสุริยคติ\nสุริยคราส\nสุริยมณฑล\nสุริยวงศ์\nสุริยง\nสุริยา\nสุริเยนทร์\nสุริเยศ\nสุริโย\nสุริยน\nสุริยัน\nสุริยุปราคา\nสุรีย์\nสุรุ่ยสุร่าย\nสุลต่าน\nสุวคนธ์\nสุวภาพ\nสุวรรณ\nสุวรรณภูมิ\nสุวะ\nสุวาน\nสุวินัย\nสุวิมล\nสุษิระ\nสุสาน\nสุหนัต\nสุหร่ง\nสุหร่าย\nสุหฤท\nสุหัท\nสุเหร่า\nสู\nสู่\nสู้\nสูง\nสูจิ\nสูจิบัตร\nสูญ\nสูด\nสูต\nสูตร\nสูติ\nสูติกรรม\nสูตินรีเวช\nสูติบัตร\nสูติแพทย์\nสูติศาสตร์\nสูท\nสูทกรรม\nสูทศาสตร์\nสูบ\nสูปะ\nสูร\nสูรย์\nสูรยกานต์\nสูริ\nสูสี\nเส\nเสก\nเสกขบุคคล\nเสกขะ\nเสขบุคคล\nเสขะ\nเส็ง\nเส้ง\nเส็งเคร็ง\nเสงี่ยม\nเสฏฐี\nเสณี\nเสด\nเสด็จ\nเสตุ\nเสถียร\nเสทะ\nเสโท\nเสน\nเส้น\nเสนง\nเสน่ง\nเสน่ห์\nเสนหา\nเสน่หา\nเสนอ\nเสนะ\nเสนา\nเสนาธิการ\nเสนาบดี\nเสน่า\nเสนากุฎ\nเสนางค์\nเสนางคนิกร\nเสนานี\nเสนาสนะ\nเสนาะ\nเสนี\nเสนีย์\nเสนียะ\nเสนียด\nเสบย\nเสบียง\nเสพ\nเสพย์\nเสเพล\nเสภา\nเสม็ด\nเสมหะ\nเสมอ\nเสมา\nเสมียน\nเสมือน\nเสย\nเสร็จ\nเสริด\nเสริม\nเสรี\nเสลด\nเสลบรรพต\nเสลา\nเสลี่ยง\nเสลือกสลน\nเสโล\nเสวก\nเสวกามาตย์\nเสวนะ\nเสวนา\nเสวย\nเสวียน\nเสสรวง\nเสสรวล\nเสา\nเส้า\nเสาร์\nเสารภย์\nเสารี\nเสาวคนธ์\nเสาวธาร\nเสาวภา\nเสาวภาคย์\nเสาวภาพ\nเสาวรภย์\nเสาวรส\nเสาวลักษณ์\nเสาวณิต\nเสาวนะ\nเสาวนา\nเสาวนีย์\nเสาหฤท\nเสาะ\nเสาะแสะ\nเสิร์จ\nเสิร์ฟ\nเสีย\nเสียง\nเสี่ยง\nเสียด\nเสี้ยน\nเสียบ\nเสียม\nเสี่ยม\nเสี้ยม\nเสียว\nเสี่ยว\nเสี้ยว\nเสือ\nเสื่อ\nเสื้อ\nเสือก\nเสื่อม\nแส\nแส่\nแส้\nแสก\nแสง\nแสด\nแสดง\nแสตมป์\nแสน\nแสนย์\nแสนยากร\nแสนยานุภาพ\nแสบ\nแสม\nแสยก\nแสยง\nแสยะ\nแสรก\nแสร้ง\nแสลง\nแสล้ม\nแสวง\nแสะ\nโสก\nโสกโดก\nโสกันต์\nโสโครก\nโสณฑ์\nโสณิ\nโสณี\nโสด\nโสดก\nโสดม\nโสดา\nโสดาบัน\nโสดาปัตติผล\nโสดาปัตติมรรค\nโสต\nโสตทัศนวัสดุ\nโสตทัศนอุปกรณ์\nโสตทัศนูปกรณ์\nโสตินทรีย์\nโสตถิ\nโสทก\nโสทร\nโสธก\nโสธนะ\nโสน\nโสภณ\nโสภา\nโสภี\nโสภิณี\nโสเภณี\nโสม\nโสมนัส\nโสมม\nโสมย์\nโสร่ง\nโสรจ\nโสรวาร\nโสโร\nโสวรรณ\nโสหุ้ย\nโสฬส\nใส\nใส่\nไส\nไส้\nไสย\nไสยา\nไสยาสน์\nไสร้\nไสว\nหก\nหกคะเมน\nหง\nหงก\nหงส์\nหงสบาท\nหงสรถ\nหงอ\nหงอก\nหง่อง\nหงองแหงง\nหงอด\nหงอน\nหง่อม\nหงอย\nหง่อย\nหงัก\nหงับ\nหง่าง\nหงาย\nหง่าว\nหงำ\nหงิก\nหงิง\nหงิม\nหงึก\nหงุงหงิง\nหงุดหงิด\nหงุบ\nหงุ่ย\nหญ้า\nหญ้าฝรั่น\nหญ้ายายเภา\nหญิง\nหญิบ\nหด\nหตะ\nหทัย\nหน\nหนวก\nหน่วง\nหนวด\nหน่วย\nหน่วยกิต\nหนอ\nหน่อ\nหนอก\nหนอง\nหนอน\nหนอนตายหยาก\nหน่อย\nหน็อยแน่\nหนัก\nหนัง\nหนังสติ๊ก\nหนังสือ\nหนั่น\nหนับ\nหนา\nหน้า\nหน่าง\nหนาด\nหนาน\nหนาม\nหน่าย\nหนาว\nหนำ\nหนำเลี้ยบ\nหนี\nหนี้\nหนีบ\nหนึก\nหนึ่ง\nหนึบ\nหนืด\nหนุ\nหนุน\nหนุบ\nหนุ่ม\nหนุ่ย\nหนู\nห่ม\nหมก\nหมด\nหม่น\nหมวก\nหมวด\nหมวน\nหมอ\nหม่อ\nหม้อ\nหมอก\nหมอง\nหม่อง\nหมอน\nหม่อน\nหมอบ\nหม่อม\nหมอย\nหม้อห้อม\nหมัก\nหมักหมม\nหมัด\nหมัน\nหมั่น\nหมั้น\nหมับ\nหมา\nหม่า\nหมาก\nหมากฮอส\nหมาง\nหมาด\nหมามุ่ย\nหมามุ้ย\nหมาย\nหม้าย\nหมาร่า\nหม่ำ\nหม้ำ\nหมิ่น\nหมี\nหมี่\nหมึก\nหมืน\nหมื่น\nหมุด\nหมุน\nหมุบ\nหมุบหมับ\nหมุบหมิบ\nหมุ่ย\nหมุยขาว\nหมู\nหมู่\nหมูหริ่ง\nหยก\nหย่ง\nหยด\nหยวก\nหยวบ\nหยอก\nหยอกเอิน\nหย็อกหย็อย\nหยอง\nหย็อง\nหย่อง\nหย็องกรอด\nหย็องแหย็ง\nหยอด\nหยอน\nหย่อน\nหย่อม\nหย็อมแหย็ม\nหย็อย\nหย่อย\nหยัก\nหยักไย่\nหยักเหยา\nหยัง\nหยั่ง\nหยังหยัง\nหยัด\nหยัน\nหยับ\nหยั่วเมือง\nหย่า\nหยากเยื่อ\nหยากไย่\nหยาด\nหยาบ\nหยาม\nหยาว\nหย้าว\nหยำเป\nหยำเหยอะ\nหยำแหยะ\nหยิก\nหยิ่ง\nหยิบ\nหยิม\nหยี\nหยี่\nหยุกหยิก\nหยุด\nหยุ่น\nหยุบ\nหยุมหยิม\nหยูกยา\nหโยดม\nหรคุณ\nหรณะ\nหรดาล\nหรดี\nหรรษ์\nหรรษา\nหรอ\nหรอก\nหร็อมแหร็ม\nหรอย\nหระ\nหรับ\nหรา\nหริ\nหริ่ง\nหริณะ\nหริต\nหริตกี\nหรีตกี\nหรี่\nหรีด\nหรือ\nหรุบ\nหรุบรู่\nหรุบหรู่\nหรุ่ม\nหรู\nหรูหรา\nหฤทัย\nหฤทย์\nหฤษฎ์\nหฤษฎี\nหฤหรรษ์\nหฤโหด\nหลง\nหลงใหล\nหลงจู๊\nหลด\nหลน\nหล่น\nหลบ\nหล่ม\nหลวง\nหลวม\nหลอ\nหล่อ\nหลอก\nหลอด\nหลอน\nหล็อน\nหล่อน\nหลอม\nหละ\nหละหลวม\nหลัก\nหลัง\nหลั่ง\nหลัด\nหลั่น\nหลับ\nหลัว\nหลา\nหล้า\nหลาก\nหลาน\nหลาบ\nหลาม\nหลาย\nหลาว\nหลิ่ง\nหลิท\nหลิน\nหลิม\nหลิว\nหลิ่ว\nหลี\nหลีก\nหลีโก\nหลีบ\nหลีฮื้อ\nหลืบ\nหลุกหลิก\nหลุด\nหลุน\nหลุบ\nหลุม\nหลุมพอ\nหลุมพี\nหลู่\nหวง\nห่วง\nห้วง\nหวด\nหวน\nห้วน\nหวย\nห้วย\nหวอ\nหวอด\nหวะ\nหวัง\nหวัด\nหวั่น\nหวันยิหวา\nหวัว\nหวัวร่อ\nหวัวเราะ\nหวา\nหว่า\nหว้า\nหวาก\nหว่าง\nหวาด\nหวาน\nหว่าน\nหวาม\nหวาย\nหวำ\nหวิด\nหวิว\nหวี\nหวี่\nหวีด\nหวือ\nหวุดหวิด\nหวูด\nหอ\nห่อ\nห้อ\nหอก\nหอง\nห้อง\nหอน\nห่อน\nหอบ\nหอม\nห้อม\nหอย\nห้อย\nหะ\nหะยี\nหะหาย\nหัก\nหัจญ์\nหัจญี\nหัช\nหัฏฐะ\nหัด\nหัต\nหัตถ์\nหัตถกรรม\nหัตถการ\nหัตถกิจ\nหัตถบาส\nหัตถพันธ์\nหัตถาภรณ์\nหัตถศาสตร์\nหัตถศิลป์\nหัตถศึกษา\nหัตถาจารย์\nหัตถินี\nหัตถี\nหัน\nหั่น\nหั้น\nหันตรา\nหับ\nหัย\nหัว\nหัวร่อ\nหัวเราะ\nหัส\nหัสดิน\nหัสดี\nหัสต์\nหัสตะ\nหา\nห่า\nห้า\nหาก\nหาง\nห่าง\nห้าง\nหาญ\nหาด\nห่าน\nหาบ\nหาม\nห่าม\nห้าม\nหาย\nหายใจ\nหายนะ\nหาร\nหารือ\nหาว\nห้าว\nหาสะ\nหำ\nห้ำ\nหิ้ง\nหิงคุ\nหิงสา\nหิงห้อย\nหิ่งห้อย\nหิ่งหาย\nหิด\nหิต\nหิตานุหิตประโยชน์\nหิน\nหิมพาน\nหิมพานต์\nหิมวัต\nหิมวันต์\nหิมวา\nหิมะ\nหิมาลัย\nหิรัญ\nหิรัญญิการ์\nหิรัญบัฏ\nหิรัณย์\nหิรัณยรัศมี\nหิริ\nหิว\nหิ้ว\nหี\nหีด\nหีนยาน\nหีบ\nหึ\nหึง\nหึ่ง\nหึงสา\nหืด\nหืน\nหื่น\nหือ\nหื้อ\nหุง\nหุน\nหุ่น\nหุ้น\nหุนหัน\nหุบ\nหุ้ม\nหุยฮา\nหู\nหู่\nหูก\nหูด\nเห\nเห่\nเหง\nเหง่ง\nเหงา\nเหง้า\nเหงื่อ\nเหงือก\nเห็จ\nเห็ด\nเหติ\nเหตุ\nเห็น\nเหน่ง\nเหนงนายพราน\nเหน็ดเหนื่อย\nเหน็บ\nเหน่อ\nเห็นอ้ม\nเหนอะ\nเหนอะหนะ\nเหน้า\nเหนาะ\nเหนียง\nเหนี่ยง\nเหนี่ยน\nเหนียม\nเหนียว\nเหนี่ยว\nเหนือ\nเหนื่อย\nเห็บ\nเหม\nเหม่\nเหม็ง\nเหม่ง\nเหม็น\nเหมวดี\nเหม่อ\nเหมันต์\nเหมันตฤดู\nเหมา\nเหมายัน\nเหมาะ\nเหมียว\nเหมี่ยว\nเหมือง\nเหมือด\nเหมือน\nเหมื่อย\nเหย\nเหยง\nเหย่อย\nเหยา\nเหย่า\nเหย้า\nเหยาะ\nเหยาะแหยะ\nเหยิง\nเหยิบ\nเหยียด\nเหยียบ\nเหยี่ยว\nเหยื่อ\nเหยือก\nเหรอ\nเหรอะ\nเหรัญญิก\nเหรา\nเหราะ\nเหรียญ\nเหล่\nเหล็ก\nเหลน\nเหลว\nเหลอ\nเหลา\nเหล่า\nเหล้า\nเหลาะแหละ\nเหลิง\nเหลิงเจิ้ง\nเหลียน\nเหลี่ยม\nเหลียว\nเหลือ\nเหลือก\nเหลือง\nเหลือบ\nเหลือม\nเหลื่อม\nเหว\nเหว่\nเหวง\nเหวย\nเหวอะ\nเหวอะหวะ\nเหวี่ยง\nเห่อ\nเหอะ\nเหะ\nเหะหะ\nเหา\nเห่า\nเหาะ\nเหิน\nเหิม\nเหี้ย\nเหียง\nเหียน\nเหี้ยน\nเหี้ยม\nเหี่ยว\nเหื่อ\nเหือด\nแห\nแห่\nแห้\nแหก\nแหง\nแหง่\nแห่ง\nแห้ง\nแหงแก๋\nแหง่ง\nแหงน\nแหน\nแห้น\nแหนง\nแหนบ\nแหนม\nแหบ\nแหม\nแหม่\nแหม่ม\nแหมะ\nแหย\nแหย่\nแหยง\nแหย่ง\nแหยม\nแหย็ม\nแหยะ\nแหล่\nแหลก\nแหล่ง\nแหลน\nแหลม\nแหละ\nแหว\nแห้ว\nแหวก\nแหว่ง\nแหวด\nแหวน\nแหวะ\nแหะ\nโห่\nโหง\nโหด\nโหน\nโหนก\nโหน่ง\nโหม\nโหม่ง\nโหมด\nโหย\nโหยกเหยก\nโหยง\nโหย่ง\nโหร\nโหรง\nโหรงเหรง\nโหรดาจารย์\nโหระพา\nโหรา\nโหราจารย์\nโหราศาสตร์\nโหล\nโหล่\nโหลงโจ้ง\nโหว\nโหว่\nโหว้\nโหวกเหวก\nโหวง\nโหวด\nโหวต\nให้\nใหญ่\nใหม่\nไห\nไห่\nไห้\nไหน\nไหม\nไหม้\nไหรณย์\nไหล\nไหล่\nไหว\nไหว้\nไหหลำ\nอก\nอกตเวทิตา\nอกตเวที\nอกตัญญุตา\nอกตัญญู\nอกนิษฐ์\nอกรณีย์\nอกรรมกริยา\nอกัปปิยวัตถุ\nอกัปปิยะ\nอกุศล\nอคติ\nอคาธ\nอโฆษะ\nองก์\nองค์\nองคชาต\nองคมนตรี\nองครักษ์\nองคาพยพ\nองคุลี\nองศ์\nองศา\nองอาจ\nองุ่น\nอจลา\nอจินตา\nอจินไตย\nอจิระ\nอเจลก\nอเจละ\nอชะ\nอชิน\nอชินี\nอชิระ\nอฏวี\nอณิ\nอณู\nอโณทัย\nอด\nอดิถี\nอดิเทพ\nอดิเรก\nอดิศร\nอดิศวร\nอดิศัย\nอดีต\nอดุล\nอดุลย์\nอติ\nอติชาต\nอติมานะ\nอติราช\nอติเรก\nอติสาร\nอถรรพเวท\nอาถรรพเวท\nอทระ\nอทินนาทาน\nอธรรม\nอธิ\nอธิกมาส\nอธิกรณ์\nอธิกวาร\nอธิกสุรทิน\nอธิการ\nอธิคม\nอธิฏฐาน\nอธิบดี\nอธิบาย\nอธิป\nอธิปไตย\nอธิมาตร\nอธิมุตติ\nอธิโมกข์\nอธิราช\nอธิวาส\nอธิวาสนะ\nอธิศีล\nอธิษฐาน\nอธึก\nอ้น\nอนงค์\nอนงคณะ\nอนงคเลขา\nอนธการ\nอนนต์\nอนยะ\nอนรรฆ\nอนรรถ\nอนล\nอนวัช\nอนัญ\nอนัตตา\nอนันต์\nอนันตริยกรรม\nอนัม\nอนาคต\nอนาคามิผล\nอนาคามิมรรค\nอนาคามี\nอนาจาร\nอนาถ\nอนาถา\nอนาทร\nอนาธิปไตย\nอนามัย\nอนามิกา\nอนารยชน\nอนารยธรรม\nอนารยะ\nอนาลัย\nอนำ\nอนิจ\nอนิจจัง\nอนิจจา\nอนิฏฐารมณ์\nอนิยต\nอนิยม\nอนิล\nอนิวรรต\nอนิวรรตน์\nอนีกะ\nอนีจะ\nอนึก\nอนึ่ง\nอนุ\nอนุกร\nอนุกรม\nอนุกรรมการ\nอนุกระเบียด\nอนุกาชาด\nอนุการ\nอนุกูล\nอนุคามิก\nอนุเคราะห์\nอนุจร\nอนุช\nอนุชน\nอนุชา\nอนุชาต\nอนุชิต\nอนุญาต\nอนุญาโตตุลาการ\nอนุตร\nอนุเถระ\nอนุทิน\nอนุบท\nอนุบาล\nอนุประโยค\nอนุปริญญา\nอนุปสัมบัน\nอนุปัสนา\nอนุพงศ์\nอนุพัทธ์\nอนุพันธ์\nอนุโพธ\nอนุภรรยา\nอนุภริยา\nอนุภาค\nอนุภาษ\nอนุมัติ\nอนุมาตรา\nอนุมาน\nอนุมูล\nอนุโมทนา\nอนุโยค\nอนุรักษ์\nอนุรักษนิยม\nอนุราช\nอนุราธ\nอนุราธะ\nอนุราธา\nอนุรูป\nอนุโลม\nอนุวงศ์\nอนุวรรตน์\nอนุวัต\nอนุวัตน์\nอนุวัตร\nอนุวัติ\nอนุวาต\nอนุศาสก\nอนุศาสน์\nอนุศาสนาจารย์\nอนุศิษฏ์\nอนุสติ\nอนุสนธิ\nอนุสร\nอนุสรณ์\nอนุสัญญา\nอนุสัย\nอนุสาวรีย์\nอนุสาสนี\nอเนก\nอเนกคุณ\nอเนกรรถประโยค\nอเนจอนาถ\nอโนชา\nอโนดาต\nอบ\nอบเชย\nอบาย\nอปจายนธรรม\nอปจายนมัย\nอปมงคล\nอปยศ\nอประไมย\nอปรัณณชาติ\nอปรา\nอปราชัย\nอปราชิต\nอปริมาณ\nอปลักษณ์\nอปโลกน์\nอปวาท\nอเปหิ\nอพพะ\nอพยพ\nอภัพ\nอภัย\nอภิ\nอภิฆาต\nอภิชฌา\nอภิชน\nอภิชนาธิปไตย\nอภิชัย\nอภิชาต\nอภิชิต\nอภิญญา\nอภิญญาณ\nอภิธรรม\nอภิธาน\nอภิไธย\nอภินันท์\nอภินันทนาการ\nอภินัย\nอภินิหาร\nอภิเนษกรมณ์\nอภิบาล\nอภิปรัชญา\nอภิปราย\nอภิมหาอำนาจ\nอภิมานะ\nอภิมุข\nอภิรดี\nอภิรติ\nอภิรมย์\nอภิรักษ์\nอภิราม\nอภิรุต\nอภิรุม\nอภิรูป\nอภิลักขิต\nอภิลักขิตสมัย\nอภิเลปน์\nอภิวันท์\nอภิวาท\nอภิวาทน์\nอภิเษก\nอภิสมโพธิ\nอภิสมัย\nอภิสมาจาร\nอภิสัมโพธิ\nอภิสัมโพธิญาณ\nอภิสิต\nอภิสิทธิ์\nอภูตะ\nอม\nอมพะนำ\nอ้ม\nอมตธรรม\nอมตบท\nอมตะ\nอมนุษย์\nอมร\nอมรา\nอมราวดี\nอมรินทร์\nอมเรนทร์\nอมเรศ\nอมฤต\nอมัตร\nอมาตย์\nอมาวสี\nอมาวสุ\nอมาวาสี\nอมิตร\nอเมริกัน\nอย่า\nอยาก\nอย่าง\nอยุทธ์\nอยู่\nอร\nอรชร\nอรชุน\nอรดี\nอรติ\nอรทัย\nอรไท\nอรนุช\nอรพินท์\nอรพิม\nอรรค\nอรรฆ\nอรรฆย์\nอรรจน์\nอรรณพ\nอรรถ\nอรรถกถา\nอรรถกถาจารย์\nอรรถาธิบาย\nอรรธ\nอรสุม\nอรหะ\nอรหัง\nอรหัต\nอรหัตผล\nอรหัตมรรค\nอรหัน\nอรหันต์\nอรหันตฆาต\nอร่อย\nอรัญ\nอรัญญิก\nอรัญวาส\nอรัญวาสี\nอรัณย์\nอราดี\nอร่าม\nอริ\nอรินทร์\nอริน\nอริยกะ\nอริยทรัพย์\nอริยบุคคล\nอริยผล\nอริยมรรค\nอริยสัจ\nอริยะ\nอรุณ\nอรุโณทัย\nอรุ่ม\nอรูป\nอลงกต\nอลงกรณ์\nอลงการ\nอลวน\nอลเวง\nอลหม่าน\nอล่องฉ่อง\nอลักเอลื่อ\nอลังการ\nอลัชชี\nอล่างฉ่าง\nอลิงค์\nอลึงค์\nอลึ่งฉึ่ง\nอโลหะ\nอ้วก\nอวกาศ\nอวจร\nอวชัย\nอวชาต\nอวด\nอวตาร\nอวน\nอ้วน\nอวบ\nอวมงคล\nอวย\nอวยวะ\nอวรรค\nอวรุทธ์\nอวรุทธก\nอวล\nอวสาน\nอวหาร\nอวัยวะ\nอวัสดา\nอวาจี\nอวิจี\nอวิชชา\nอวิญญาณกทรัพย์\nอวิญญู\nอวิรุทธ์\nอวิโรธน์\nอวิโรธนะ\nอวิหิงสา\nอวีจิ\nอเวจี\nอโศก\nอสงไขย\nอสนี\nอัสนี\nอสนีบาต\nอสภะ\nอสมการ\nอสมมาตร\nอสรพิษ\nอสังหาริมทรัพย์\nอสังหาริมะ\nอสัญกรรม\nอสัญญี\nอสัญแดหวา\nอสัตถพฤกษ์\nอัสสัตถพฤกษ์\nอสัตย์\nอสัมภิน\nอสัมภินพงศ์\nอสัมภินวงศ์\nอสิ\nอสิธารา\nอสิต\nอสิเลสะ\nอสีตยานุพยัญชนะ\nอสีติ\nอสุ\nอสุจิ\nอสุนีบาต\nอสุภ\nอสุรกาย\nอสุรา\nอสุรี\nอสุเรศ\nอสูร\nอเสกขบุคคล\nอเสกขะ\nอเสขบุคคล\nอเสขะ\nอหังการ\nอหิ\nอหิงสา\nอหิวาต์\nอหิวาตกโรค\nอหึงสา\nอเหตุกทิฐิ\nอโหสิ\nออ\nอ้อ\nอ๋อ\nออก\nออกซิเจน\nออกซิเดชัน\nออกไซด์\nออกญา\nอ่อง\nอ๋อง\nอ้องแอ้ง\nออเซาะ\nออด\nอ๊อด\nอ๊อดแอ๊ด\nอ่อน\nอ้อน\nออนซ์\nออนซอน\nอ้อนแอ้น\nออฟฟิศ\nออม\nอ่อม\nอ้อม\nออมชอม\nออมซอม\nอ้อมแอ้ม\nอ่อย\nอ้อย\nอ๋อย\nอ้อยส้อย\nอ้อยอิ่ง\nออสเมียม\nอ้อแอ้\nอ๊ะ\nอะคร้าว\nอะเคื้อ\nอะแจ\nอะเซทิลีน\nอะดรีนาลิน\nอะดุง\nอะตอม\nอะมีบา\nอะเมริเซียม\nอะร้าอร่าม\nอะไร\nอะลุ่มอล่วย\nอะลุ้มอล่วย\nอะลูมิเนียม\nอะหม\nอะไหล่\nอัก\nอั้ก\nอั๊ก\nอักกะ\nอักโกธะ\nอักขรวิธี\nอักขรวิบัติ\nอักขรสมัย\nอักขระ\nอักขรานุกรม\nอักขะ\nอักโข\nอักโขภิณี\nอักโขเภณี\nอักษร\nอักษะ\nอักเษาหิณี\nอักเสบ\nอักอ่วน\nอัคคะ\nอัคคิ\nอัคคี\nอัคนิ\nอัคนี\nอัคร\nอัครชายา\nอัครมเหสี\nอัครราชทูต\nอัครสมณทูต\nอัง\nอังก์\nอังกนะ\nอังกฤษ\nอังกะลุง\nอังกา\nอังกาบ\nอังกุระ\nอังกุศ\nอังกูร\nอังคณะ\nอังคณา\nอังคาร\nอังคาส\nอังคีรส\nอังคุฐ\nอังคุตรนิกาย\nอังฆาต\nอังแพลม\nอั้งยี่\nอั้งโล่\nอังศุ\nอังศุก\nอังศุธร\nอังศุมาลี\nอังสกุฏ\nอังสตรอม\nอังสนา\nอังสภาระ\nอังสะ\nอังสา\nอัจกลับ\nอัจจิ\nอัจจิมา\nอัจจุตะ\nอัจฉรา\nอัจฉริยบุคคล\nอัจฉริยภาพ\nอัจฉริยลักษณ์\nอัจฉริยลักษณะ\nอัจฉริยะ\nอัจนา\nอัชฌัตติก\nอัชฌา\nอัชฌาจาร\nอัชฌาศัย\nอัชฌาสัย\nอัญเดียรถีย์\nอัญมณี\nอัญขยม\nอัญชนะ\nอัญชลี\nอัญชัน\nอัญชุลี\nอัญเชิญ\nอัญญะ\nอัญดิตถีย์\nอัญเดียรถีย์\nอัญประกาศ\nอัญรูป\nอัฏ\nอัฏฐบาน\nอัฏฐะ\nอัฏฐังคิกมรรค\nอัฏนา\nอัฐ\nอัฐฬส\nอัฐเคราะห์\nอัฐทิศ\nอัฐบริขาร\nอัฐบาน\nอัฐม\nอัฐมี\nอัฐศก\nอัฐิ\nอัฒจันทร์\nอัฒภาค\nอัฒมาส\nอัฒรัตติ\nอัณฑโกส\nอัณฑชะ\nอัณฑะ\nอัณณพ\nอัด\nอัดแจ\nอัต\nอัตชีวประวัติ\nอัตนัย\nอัตภาพ\nอัตวินิบาตกรรม\nอัตคัด\nอัตตโนบท\nอัตตา\nอัตตาธิปไตย\nอัตถ์\nอัตถะ\nอัตโนมัติ\nอัตรชะ\nอัตรา\nอัตลัด\nอัททา\nอัทธ์\nอัทธา\nอัทธาน\nอัทธายุ\nอัธยาตมวิทยา\nอัธยาย\nอัธยาศัย\nอัน\nอั้น\nอั๋น\nอันดร\nอันดับ\nอันตกะ\nอันตกาล\nอันตะ\nอันตคุณ\nอันตรภาค\nอันตรวาสก\nอันตรธาน\nอันตรา\nอันตราย\nอันตรายิกธรรม\nอันติกะ\nอันติมสัจ\nอันติมะ\nอันเต\nอันโต\nอันเตปุริก\nอันเตวาสิก\nอันแถ้ง\nอันโทล\nอันธการ\nอันธพาล\nอันธิกา\nอันเวส\nอับ\nอับปาง\nอัปปะ\nอัปเปหิ\nอัปภาคย์\nอัปมงคล\nอัปยศ\nอัประมาณ\nอัประไมย\nอัปราชัย\nอัปรีย์\nอัปลักษณ์\nอัปสร\nอัพพุท\nอัพโพหาริก\nอัพภันดร\nอัพภาน\nอัพภาส\nอัพภูตธรรม\nอัพยากฤต\nอัมพฤกษ์\nอัมพาต\nอัมพวัน\nอัมพวา\nอัมพร\nอัมพา\nอัมพิละ\nอัมพุ\nอัมพุช\nอัมพุชินี\nอัมพุท\nอัยกา\nอัยการ\nอัยกี\nอัยยะ\nอัยยิกา\nอัลกุรอาน\nอัลตราไวโอเลต\nอั่ว\nอัศจรรย์\nอัศเจรีย์\nอัศว\nอัศวเมธ\nอัศวยุช\nอัศวานึก\nอัศวิน\nอัศวินี\nอัษฎมงคล\nอัษฏมงคล\nอัษฎางคิกมรรค\nอัษฎายุธ\nอัษฎาวุธ\nอัสสะ\nอัสดร\nอัสกัณ\nอัสดง\nอัสดงคต\nอัสมิมานะ\nอัสสนี\nอัสสานึก\nอัสสาสะ\nอัสสุ\nอา\nอ่า\nอ้า\nอ๋า\nอากร\nอากังขา\nอากัป\nอาการ\nอากาศ\nอากูล\nอาเกียรณ์\nอาขยาต\nอาขยาน\nอาคเนย์\nอาคม\nอาครหายณี\nอาคันตุกะ\nอาคันตุกภัต\nอาคันตุกวัตร\nอาคาร\nอาฆาต\nอ่าง\nอ้าง\nอางขนาง\nอ้างว้าง\nอาจ\nอาจม\nอาจริยวัตร\nอาจริยวาท\nอาจาด\nอาจาร\nอาจารย์\nอาจารี\nอาจิณ\nอาเจียน\nอาชญา\nอาชวะ\nอาชา\nอาชาไนย\nอาชีพ\nอาชีวศึกษา\nอาชีวะ\nอาชีวก\nอาญา\nอาฏานา\nอาณัติ\nอาณา\nอาด\nอาดูร\nอาดุลย์\nอาดูลย์\nอาเด๊ะ\nอาตมภาพ\nอาตมัน\nอาตมา\nอาถรรพ์\nอาถรรพณ์\nอาทร\nอาทิ\nอาทิจจวาร\nอาทิตย์\nอาทิตยมณฑล\nอาทิตยวาร\nอาทีนพ\nอาทีนวะ\nอาทึก\nอาเทศ\nอาเทสนา\nอาธรรม\nอาธรรม์\nอาธาน\nอาธาร\nอาน\nอ่าน\nอานน\nอานนท์\nอานันท์\nอานันทนะ\nอานัม\nอานาปานะ\nอานาปานัสสติ\nอานิสงส์\nอานุภาพ\nอานุภาวะ\nอาบ\nอาบัติ\nอาบัน\nอาปณกะ\nอาปณะ\nอาปะ\nอาโป\nอาปานะ\nอาพัทธ์\nอาพันธ์\nอาพันธนะ\nอาพาธ\nอาเพศ\nอาภรณ์\nอาภัพ\nอาภัสระ\nอาภา\nอาภาส\nอามลกะ\nอามัย\nอามิษ\nอามิส\nอาย\nอ้าย\nอายตนะ\nอายตะ\nอายน\nอายัด\nอายัต\nอายัน\nอายาจนะ\nอายานะ\nอายุ\nอายุตกะ\nอายุธ\nอายุรกรรม\nอายุรแพทย์\nอายุรเวช\nอายุรเวท\nอายุศาสตร์\nอายุษ\nอาร์กอน\nอารดี\nอารติ\nอาร์ต\nอารทรา\nอาร์ม\nอารมณ์\nอารยชน\nอารยชาติ\nอารยธรรม\nอารยประเทศ\nอารยะ\nอารยัน\nอาระ\nอารักขา\nอารักษ์\nอารัญ\nอารัณย์\nอารัญญิก\nอารัณยกะ\nอารัติ\nอารัมภ์\nอารัมภกถา\nอารัมภบท\nอารัมภะ\nอาราธน์\nอาราธนา\nอาราม\nอารามิก\nอารี\nอารุม\nอาลปนะ\nอาละวาด\nอาลักษณ์\nอาลัย\nอาลัว\nอาลี\nอาโลก\nอาว\nอ่าว\nอ้าว\nอาวรณ์\nอาวัชนาการ\nอาวัล\nอาวาส\nอาวาสิก\nอาวาหมงคล\nอาวาหะ\nอาวุต\nอาวุธ\nอาวุโส\nอาเวค\nอาศรม\nอาศรมบท\nอาศเลษา\nอาศัย\nอาศิรพจน์\nอาศิรพาท\nอาศิรวาท\nอาศุ\nอาเศียรพจน์\nอาเศียรพาท\nอาเศียรวาท\nอาษาฒ\nอาสน\nอาสน์\nอาสนะ\nอาสนศาลา\nอาสัญ\nอาสัตย์\nอาสา\nอาสาฬห์\nอาสาฬหบูชา\nอาสาฬหะ\nอาสิญจ์\nอาสิน\nอาหม\nอาหรับ\nอาหาร\nอาฬหก\nอำ\nอ่ำ\nอ้ำ\nอำแดง\nอำนนต์\nอำนรรฆ\nอำนวย\nอำนาจ\nอำนาถ\nอำนิฐ\nอำนิษฐ์\nอำปลัง\nอำพน\nอำพล\nอำพะนำ\nอำพัน\nอำไพ\nอำเภอ\nอำมร\nอำมฤคโชค\nอำมฤต\nอำมหิต\nอำมาตย์\nอำมาตยาธิปไตย\nอำยวน\nอำรุง\nอำลา\nอำอวม\nอ้ำอึ้ง\nอิก\nอิง\nอิงค์\nอิงอร\nอิจฉา\nอิฉัน\nอิชยา\nอิฏฐารมณ์\nอิฐ\nอิฐผล\nอิด\nอิตถี\nอิตเทรียม\nอิตเทอร์เบียม\nอิติวุตตกะ\nอิทธิ\nอิน\nอินซูลิน\nอินเดีย\nอินเดียนแดง\nอินเดียม\nอินท์\nอินทขีล\nอินทนิล\nอินทผลัม\nอินทร์\nอินทรธนู\nอินทรวงศ์\nอินทรวิเชียร\nอินทรศักดิ์\nอินทราณี\nอินทราภิเษก\nอินทรายุธ\nอินทรี\nอินทรีย์\nอินทรียสังวร\nอินทีวร\nอินทุ\nอินฟราเรด\nอินัง\nอิ่ม\nอิมัลชัน\nอิริเดียม\nอิริยา\nอิริยาบถ\nอิรุพเพท\nอิเล็กตรอน\nอิเล็กทรอนิกส์\nอิเล็กโทน\nอิศร\nอิศวร\nอิษฏ์\nอิษฏี\nอิส\nอิสตรี\nอิสัตรี\nอิสรภาพ\nอิสระ\nอิสริยยศ\nอิสริยะ\nอิสริยาภรณ์\nอิสลาม\nอิสสา\nอิสิ\nอิสี\nอิหม่าม\nอิหลักอิเหลื่อ\nอี\nอี่\nอี้\nอี๊\nอี๋\nอี๋อ๋อ\nอีก\nอีก้อ\nอีก๋อย\nอีโก้ง\nอีจู้\nอี๊ด\nอีเต้อ\nอีโต้\nอีทุบ\nอีเทอร์\nอีนุงตุงนัง\nอีนูน\nอีโน\nอีแปะ\nอีโปง\nอีเพา\nอีมู\nอีรม\nอีลุ้ม\nอีลุ่ยฉุยแฉก\nอีเลิ้ง\nอีศ\nอีศวร\nอีส\nอีสาน\nอีสุกอีใส\nอีหรอบ\nอีหลักอีเหลื่อ\nอีหลี\nอีหลุกขลุกขลัก\nอีหลุกขลุกขลุ่ย\nอีเห็น\nอีเหน็บ\nอีเหนียว\nอีเหละเขละขละ\nอีเหละเขะขะ\nอีโหน่อีเหน่\nอีโหลกโขลกเขลก\nอีแอ่น\nอึ\nอึก\nอึ้ก\nอึ๊ก\nอึกทึก\nอึกอัก\nอึง\nอึ่ง\nอึ้ง\nอึด\nอึดตะปือ\nอึ้ดทึ่ด\nอึน\nอืด\nอื่น\nอื้น\nอือ\nอื้อ\nอื้อฮือ\nอุ\nอุก\nอุกกา\nอุกกาบาต\nอุกฤษฏ์\nอุกลาบาต\nอุค\nอุคระ\nอุคหนิมิต\nอุโฆษ\nอุ้ง\nอุจ\nอุจจาระ\nอุจฉุ\nอุจเฉท\nอุจเฉททิฐิ\nอุจาด\nอุชุ\nอุฏฐาการ\nอุณหภูมิ\nอุณหะ\nอุณหาหาร\nอุณหิส\nอุณา\nอุณาโลม\nอุด\nอุดเตา\nอุดม\nอุดมการณ์\nอุดมคติ\nอุดมศึกษา\nอุดร\nอุดหนุน\nอุตดม\nอุตตมะ\nอุตมภาพ\nอุตมางค์\nอุตดร\nอุตรกุรุทวีป\nอุตตรายัน\nอุตรนิกาย\nอุตรผลคุนี\nอุตตรผลคุนี\nอุตรภัทรบท\nอุตตรภัทรบท\nอุตตรภัททะ\nอุตราภิมุข\nอุตราวรรต\nอุตราวัฏ\nอุตราษาฒ\nอุตตราสาฬหะ\nอุตราสงค์\nอุตตานภาพ\nอุตพิด\nอุตรา\nอุตริ\nอุตริมนุสธรรม\nอุตลุด\nอุตส่าห์\nอุตสาหกรรม\nอุตสาหะ\nอุตุ\nอุตุนิยม\nอุตุนิยมวิทยา\nอุทก\nอุทกธาร\nอุทกธารา\nอุทกภัย\nอุทกวิทยา\nอุทกศาสตร์\nอุทธรณ์\nอุทธัจ\nอุทยาน\nอุทร\nอุทริยะ\nอุทลุม\nอุทัช\nอุทัย\nอุทาน\nอุทาร\nอุทาหรณ์\nอุทิศ\nอุทุมพร\nอุเทศ\nอุเทสิกเจดีย์\nอุธัจ\nอุ่น\nอุบ\nอุบล\nอุบะ\nอุบ๊ะ\nอุบัติ\nอุบาท\nอุบาทว์\nอุบาย\nอุบาสก\nอุบาสิกา\nอุเบกขา\nอุโบสถ\nอุปกรณ์\nอุปกรม\nอุปการ\nอุปการะ\nอุปการี\nอุปกิเลส\nอุปจาร\nอุปถัมภ์\nอุปถัมภก\nอุปทม\nอุปทูต\nอุปเทศ\nอุปเท่ห์\nอุปธิ\nอุปนัย\nอุปนิกขิต\nอุปนิษัท\nอุปนิสัย\nอุปบัติ\nอุปปาติกะ\nอุปพัทธ์\nอุปพันธ์\nอุปโภค\nอุปมา\nอุปมาน\nอุปไมย\nอุปยุวราช\nอุปรากร\nอุปราคา\nอุปราช\nอุปริ\nอุปริมปริยาย\nอุปโลกน์\nอุปเวท\nอุปสมบท\nอุปสมบัน\nอุปสัมบัน\nอุปสรรค\nอุปสัมปทา\nอุปฮาด\nอุปัชฌาย์\nอุปัชฌายวัตร\nอุปัชฌายะ\nอุปัฏฐาก\nอุปัฏฐานะ\nอุปัทวะ\nอุปัทวันตราย\nอุปาทาน\nอุปาหนา\nอุภัย\nอุ้ม\nอุมงค์\nอุโมงค์\nอุย\nอุ่ย\nอุ้ย\nอุ๊ย\nอุยยาน\nอุยยาม\nอุรณะ\nอุรพี\nอุระ\nอุรังอุตัง\nอุรัจฉัท\nอุรัจฉทะ\nอุรา\nอุรุ\nอุไร\nอุลกมณี\nอุลโลจ\nอุลามก\nอุลิด\nอุโลก\nอุแว้\nอุษณกร\nอุษณกาล\nอุษณรัศมี\nอุษณรุจี\nอุษณาการ\nอุษณีษ์\nอุษมะ\nอุษมัน\nอุษา\nอุษาโยค\nอุสภ\nอุสส่าห์\nอุสสาหะ\nอุสา\nอุสุ\nอุสุภ\nอุสุภราช\nอุสุม\nอุหรับ\nอุหลบ\nอุเหม่\nอุฬาร\nอู\nอู่\nอู้\nอูฐ\nอูด\nอูม\nอูย\nอูรุ\nอู๋อี๋\nเอ\nเอ้\nเอ๊\nเอก\nเอกเขนก\nเอกซเรย์\nเอกรรถประโยค\nเอกัคตา\nเอกังสพยากรณ์\nเอกังสวาที\nเอกา\nเอ้กา\nเอกาธิปไตย\nเอเคอร์\nเอง\nเอ็ง\nเอ๋ง\nเอ็ด\nเอ็ดตะโร\nเอดส์\nเอตทัคคะ\nเอ้เต\nเอทิล\nเอน\nเอ็น\nเอนไซม์\nเอ็นดู\nเอ็นอ่อน\nเอม\nเอ็มบริโอ\nเอย\nเอ่ย\nเอ๊ย\nเอ๋ย\nเอร็ดอร่อย\nเอราวัณ\nเอว\nเอ๊ว\nเอวัง\nเอฬกะ\nเอฬา\nเออ\nเอ่อ\nเออร์เบียม\nเอ้อระเหย\nเอ้อเร้อ\nเอ้อเฮอ\nเอ๊ะ\nเอะใจ\nเอะอะ\nเอะอะมะเทิ่ง\nเอา\nเอาทาร\nเอาทารย์\nเอารส\nเอาฬาร\nเอาะลาย\nเอิก\nเอิกเกริก\nเอิ้น\nเอิบ\nเอียง\nเอี้ยง\nเอียด\nเอี๊ยด\nเอียน\nเอี่ยน\nเอี่ยม\nเอี๊ยม\nเอี้ยมจุ๊น\nเอี้ยมเฟี้ยม\nเอี่ยว\nเอี้ยว\nเอื้อ\nเอื๊อก\nเอื้อง\nเอือด\nเอือน\nเอื้อน\nเอือม\nเอื้อม\nเอื่อย\nเอื้อย\nแอ\nแอ้\nแอ๋\nแอก\nแอกทิเนียม\nแอ่ง\nแอ้งแม้ง\nแอด\nแอ้ด\nแอ๊ด\nแอ่น\nแอนติเจน\nแอนติบอดี\nแอนติอิเล็กตรอน\nแอโนด\nแอบ\nแอม\nแอ้ม\nแอมแปร์\nแอมมิเตอร์\nแอมโมเนีย\nแอร่ม\nแอลกอฮอล์\nแอลฟา\nแอว\nแอ่ว\nแอ้วแซ่ว\nแอสทาทีน\nแอสไพริน\nแอสฟัลต์\nแอหนัง\nแออัด\nโอ\nโอ่\nโอ้\nโอ๋\nโอก\nโอ้ก\nโอ้กอ้าก\nโอ๊ก\nโอกาส\nโอฆชล\nโอฆสงสาร\nโอฆะ\nโอ่ง\nโองการ\nโองโขดง\nโอชะ\nโอชา\nโอโซน\nโอฐ\nโอด\nโอ๊ต\nโอตตัปปะ\nโอทนะ\nโอน\nโอบ\nโอปปาติกะ\nโอภา\nโอภาส\nโอม\nโอย\nโอ๊ย\nโอรส\nโอละพ่อ\nโอลิมปิก\nโอวาท\nโอษฐ์\nโอษฐชะ\nโอษฐภัย\nโอสถ\nโอห์ม\nโอหัง\nโอฬาร\nโอฬาริก\nโอฬารึก\nโอ้เอ้\nโอเอซิส\nโอ้โฮ\nไอ\nไอ้\nไอโซโทป\nไอน์สไตเนียม\nไอยรา\nไอยเรศ\nไอราพต\nไอราวัณ\nไอราวัต\nไอศกรีม\nไอศวรรย์\nไอศุริยสมบัติ\nไอศูรย์\nไอออน\nไอโอดีน\nฮกเกี้ยน\nฮด\nฮวงซุ้ย\nฮวน\nฮ้วนหมู\nฮวบ\nฮ่อ\nฮ้อ\nฮอกกี้\nฮอด\nฮ่อม\nฮ่อยจ๊อ\nฮอร์โมน\nฮอลแลนด์\nฮอลันดา\nฮะ\nฮะเบส\nฮะเรีย\nฮัก\nฮังเล\nฮัจญ์\nฮัจญะฮ์\nฮัจญี\nฮั่น\nฮั้ว\nฮา\nฮ้า\nฮ่างหลวง\nฮาจญ์\nฮาม\nฮาเร็ม\nฮาห์เนียม\nฮิจเราะห์\nฮินดู\nฮิปโปโปเตมัส\nฮิสทีเรีย\nฮีเลียม\nฮึ\nฮึก\nฮึด\nฮึดฮัด\nฮึ่ม\nฮึย\nฮึ่ย\nฮืดฮาด\nฮือ\nฮื่อ\nฮื้อ\nฮื้อฉี่\nฮุด\nฮุบ\nฮุยเลฮุย\nฮู้\nฮูก\nฮูม\nเฮ\nเฮฮา\nเฮกตาร์\nเฮกโตกรัม\nเฮกโตเมตร\nเฮกโตลิตร\nเฮง\nเฮ็ด\nเฮโมโกลบิน\nเฮย\nเฮ่ย\nเฮ้ย\nเฮโรอีน\nเฮลิคอปเตอร์\nเฮโล\nเฮละโล\nเฮ้ว\nเฮอ\nเฮ่อ\nเฮ้อ\nเฮอริเคน\nเฮิรตซ์\nเฮี้ยน\nเฮี้ยบ\nเฮี้ยว\nเฮือก\nเฮือน\nแฮ\nแฮ่\nแฮก\nแฮ่กึ๊น\nแฮนด์บอล\nแฮฟเนียม\nแฮม\nแฮะ\nโฮ\nโฮก\nโฮ่ง\nโฮ้ง\nโฮเต็ล\nโฮลเมียม\nโฮะ\nไฮ้\nไฮโกรมิเตอร์\nไฮดรา\nไฮโดร\nไฮโดรคาร์บอน\nไฮโดรเจน\nไฮโดรมิเตอร์\nไฮไฟ\nไฮโล\nไฮฮี\n".split(/[\r\n]+/).filter(function(n){return 1<n.length}),this.addWords(words,!1);t&&this.finalizeDict()},dictSeek:function(n,t,e,r,i){for(var o=null;n<=t;){var s=Math.floor((n+t)/2),a=this.dict[s];if(a.length<=r)n=s+1;else{var c=a[r];c<e?n=s+1:e<c?t=s-1:(o=s,0==i?t=s-1:n=s+1)}}return o},isFinal:function(n){return this.dict[n.l].length==n.strOffset},createAcceptor:function(){return{l:0,r:this.dict.length-1,strOffset:0,isFinal:!1,dict:this,transit:function(n){return this.dict.transit(this,n)},isError:!1,tag:"DICT",w:1,type:"DICT"}},transit:function(n,t){var e=this.dictSeek(n.l,n.r,t,n.strOffset,0);if(null!==e){var r=this.dictSeek(e,n.r,t,n.strOffset,1);n.l=e,n.r=r,n.strOffset++,n.isFinal=this.isFinal(n)}else n.isError=!0;return n},sortuniq:function(n){return n.sort().filter(function(n,t,e){return!t||n!=e[t-1]})},flatten:function(n){return[].concat.apply([],n)}});e.exports=n}).call(this,"/dist/tmp")},{glob:16,path:22}],3:[function(n,t,e){var r={tag:"SPACE_RULE",createAcceptor:function(n){return n.SPACE_RULE?null:{strOffset:0,isFinal:!1,transit:function(n){return" "==n||"\t"==n||"\r"==n||"\n"==n||" "==n||" "==n?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:r.tag,w:1,type:"SPACE_RULE"}}},i=[{createAcceptor:function(n){return n.WORD_RULE?null:{strOffset:0,isFinal:!1,transit:function(n){var t=n.toLowerCase();return"a"<=t&&t<="z"?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:"WORD_RULE",type:"WORD_RULE",w:1}}},r,{tag:"SINSYM",createAcceptor:function(n){return{strOffset:0,isFinal:!1,transit:function(n){return 0==this.strOffset&&n.match(/^[\@\(\)\/\,\-\."`]$/)?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:"SINSYM",w:1,type:"SINSYM"}}},{createAcceptor:function(n){return n.NUMBER_RULE?null:{strOffset:0,isFinal:!1,transit:function(n){return"0"<=n&&n<="9"?(this.isFinal=!0,this.strOffset++):this.isError=!0,this},isError:!1,tag:"NUMBER_RULE",type:"NUMBER_RULE",w:1}}}];t.exports=i},{}],4:[function(n,t,e){var r=n("underscore"),i=(n("./wordcut_core"),{buildByAcceptors:function(o,n,s){return n.map(function(n){var t=s-n.strOffset+1,e=o[t],r={p:t,mw:e.mw+(void 0===n.mw?0:n.mw),w:n.w+e.w,unk:(n.unk?n.unk:0)+e.unk,type:n.type};if("PART"==n.type){for(var i=t+1;i<=s;i++)o[i].merge=t;r.merge=t}return r}).filter(function(n){return n})},fallback:function(n,t,e,r){var i=n[t];return e[r].match(/[\u0E48-\u0E4E]/)?(0!=t&&(t=n[t].p),{p:t,mw:0,w:1+i.w,unk:1+i.unk,type:"UNK"}):{p:t,mw:i.mw,w:1+i.w,unk:1+i.unk,type:"UNK"}},build:function(n,t,e,r,i){var o=this.buildByAcceptors(n,t,e);return 0<o.length?o:[this.fallback(n,r,i,e)]}});t.exports=function(){return r.clone(i)}},{"./wordcut_core":8,underscore:25}],5:[function(n,t,e){var r=n("underscore"),i={selectPath:function(n){return n.reduce(function(n,t){if(null==n)return t;if(t.unk<n.unk)return t;if(t.unk==n.unk){if(t.mw<n.mw)return t;if(t.mw==n.mw&&t.w<n.w)return t}return n},null)},createPath:function(){return[{p:null,w:0,unk:0,type:"INIT",mw:0}]}};t.exports=function(){return r.clone(i)}},{underscore:25}],6:[function(n,t,e){function i(n,t,e){if(n.length<=t)return!1;var r=n[t];return r==e||r.match(/[กข]/)&&e.match(/[ก-ฮ]/)||r.match(/[มบ]/)&&e.match(/[ก-ฮ]/)||r.match(/\u0E49/)&&e.match(/[\u0E48-\u0E4B]/)}var r={pat:"เหก็ม",createAcceptor:function(n){return{strOffset:0,isFinal:!1,transit:function(n){return i(r.pat,this.strOffset,n)?(this.isFinal=this.strOffset+1==r.pat.length,this.strOffset++):this.isError=!0,this},isError:!1,tag:"THAI_RULE",type:"THAI_RULE",w:1}}},o=[r,{createAcceptor:function(n){return{strOffset:0,patterns:["แก","เก","ก้","กก์","กา","กี","กิ","กืก"],isFinal:!1,transit:function(t){var e=this.strOffset;if(this.patterns=this.patterns.filter(function(n){return i(n,e,t)}),0<this.patterns.length){var r=1+e;this.isFinal=this.patterns.some(function(n){return n.length==r}),this.strOffset++}else this.isError=!0;return this},isError:!1,tag:"PART",type:"PART",unk:1,w:1}}}];t.exports=o},{}],7:[function(n,t,e){n("sys");var r=n("./dict"),i=n("./wordcut_core"),o=n("./path_info_builder"),s=n("./path_selector"),a=n("./acceptors"),c=n("./latin_rules"),u=n("./thai_rules"),l=n("underscore"),f=Object.create(i);f.defaultPathInfoBuilder=o,f.defaultPathSelector=s,f.defaultAcceptors=a,f.defaultLatinRules=c,f.defaultThaiRules=u,f.defaultDict=r,f.initNoDict=function(n){var t=this;t.pathInfoBuilder=new t.defaultPathInfoBuilder,t.pathSelector=new t.defaultPathSelector,t.acceptors=new t.defaultAcceptors,t.defaultLatinRules.forEach(function(n){t.acceptors.creators.push(n)}),t.defaultThaiRules.forEach(function(n){t.acceptors.creators.push(n)})},f.init=function(n,t,e){t=t||!1,this.initNoDict();var r=l.clone(this.defaultDict);r.init(n,t,e),this.acceptors.creators.push(r)},t.exports=f},{"./acceptors":1,"./dict":2,"./latin_rules":3,"./path_info_builder":4,"./path_selector":5,"./thai_rules":6,"./wordcut_core":8,sys:28,underscore:25}],8:[function(n,t,e){var r={buildPath:function(n){var t=this,e=t.pathSelector.createPath(),r=0;t.acceptors.reset();for(var i=0;i<n.length;i++){var o=n[i];t.acceptors.transit(o);var s=t.pathInfoBuilder.build(e,t.acceptors.getFinalAcceptors(),i,r,n),a=t.pathSelector.selectPath(s);e.push(a),"UNK"!==a.type&&(r=i)}return e},pathToRanges:function(n){for(var t=n.length-1,e=[];0<t;){var r=n[t],i=r.p;if(void 0!==r.merge&&0<e.length){var o=e[e.length-1];o.s=r.merge,i=o.s}else e.push({s:i,e:t});t=i}return e.reverse()},rangesToText:function(t,n,e){return n.map(function(n){return t.substring(n.s,n.e)}).join(e)},cut:function(n,t){var e=this.buildPath(n),r=this.pathToRanges(e);return this.rangesToText(n,r,void 0===t?"|":t)},cutIntoRanges:function(t,n){var e=this.buildPath(t),r=this.pathToRanges(e);return n||r.forEach(function(n){n.text=t.substring(n.s,n.e)}),r},cutIntoArray:function(t){var n=this.buildPath(t);return this.pathToRanges(n).map(function(n){return t.substring(n.s,n.e)})}};t.exports=r},{}],9:[function(n,t,e){var c=n("util/"),u=Array.prototype.slice,r=Object.prototype.hasOwnProperty,o=t.exports=i;function l(n,t){return c.isUndefined(t)?""+t:c.isNumber(t)&&!isFinite(t)?t.toString():c.isFunction(t)||c.isRegExp(t)?t.toString():t}function f(n,t){return c.isString(n)?n.length<t?n:n.slice(0,t):n}function h(n,t,e,r,i){throw new o.AssertionError({message:e,actual:n,expected:t,operator:r,stackStartFunction:i})}function i(n,t){n||h(n,!0,t,"==",o.ok)}function p(n,t){if(n===t)return!0;if(c.isBuffer(n)&&c.isBuffer(t)){if(n.length!=t.length)return!1;for(var e=0;e<n.length;e++)if(n[e]!==t[e])return!1;return!0}return c.isDate(n)&&c.isDate(t)?n.getTime()===t.getTime():c.isRegExp(n)&&c.isRegExp(t)?n.source===t.source&&n.global===t.global&&n.multiline===t.multiline&&n.lastIndex===t.lastIndex&&n.ignoreCase===t.ignoreCase:c.isObject(n)||c.isObject(t)?function(n,t){if(c.isNullOrUndefined(n)||c.isNullOrUndefined(t))return!1;if(n.prototype!==t.prototype)return!1;if(c.isPrimitive(n)||c.isPrimitive(t))return n===t;var e=d(n),r=d(t);if(e&&!r||!e&&r)return!1;if(e)return n=u.call(n),t=u.call(t),p(n,t);var i,o,s=v(n),a=v(t);if(s.length!=a.length)return!1;for(s.sort(),a.sort(),o=s.length-1;0<=o;o--)if(s[o]!=a[o])return!1;for(o=s.length-1;0<=o;o--)if(i=s[o],!p(n[i],t[i]))return!1;return!0}(n,t):n==t}function d(n){return"[object Arguments]"==Object.prototype.toString.call(n)}function s(n,t){return!(!n||!t)&&("[object RegExp]"==Object.prototype.toString.call(t)?t.test(n):n instanceof t||!0===t.call({},n))}function a(n,t,e,r){var i;c.isString(e)&&(r=e,e=null);try{t()}catch(n){i=n}if(r=(e&&e.name?" ("+e.name+").":".")+(r?" "+r:"."),n&&!i&&h(i,e,"Missing expected exception"+r),!n&&s(i,e)&&h(i,e,"Got unwanted exception"+r),n&&i&&e&&!s(i,e)||!n&&i)throw i}o.AssertionError=function(n){var t;this.name="AssertionError",this.actual=n.actual,this.expected=n.expected,this.operator=n.operator,n.message?(this.message=n.message,this.generatedMessage=!1):(this.message=(t=this,f(JSON.stringify(t.actual,l),128)+" "+t.operator+" "+f(JSON.stringify(t.expected,l),128)),this.generatedMessage=!0);var e=n.stackStartFunction||h;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var i=r.stack,o=e.name,s=i.indexOf("\n"+o);if(0<=s){var a=i.indexOf("\n",s+1);i=i.substring(a+1)}this.stack=i}}},c.inherits(o.AssertionError,Error),o.fail=h,o.ok=i,o.equal=function(n,t,e){n!=t&&h(n,t,e,"==",o.equal)},o.notEqual=function(n,t,e){n==t&&h(n,t,e,"!=",o.notEqual)},o.deepEqual=function(n,t,e){p(n,t)||h(n,t,e,"deepEqual",o.deepEqual)},o.notDeepEqual=function(n,t,e){p(n,t)&&h(n,t,e,"notDeepEqual",o.notDeepEqual)},o.strictEqual=function(n,t,e){n!==t&&h(n,t,e,"===",o.strictEqual)},o.notStrictEqual=function(n,t,e){n===t&&h(n,t,e,"!==",o.notStrictEqual)},o.throws=function(n,t,e){a.apply(this,[!0].concat(u.call(arguments)))},o.doesNotThrow=function(n,t){a.apply(this,[!1].concat(u.call(arguments)))},o.ifError=function(n){if(n)throw n};var v=Object.keys||function(n){var t=[];for(var e in n)r.call(n,e)&&t.push(e);return t}},{"util/":28}],10:[function(n,t,e){"use strict";function r(n,t,e){n instanceof RegExp&&(n=i(n,e)),t instanceof RegExp&&(t=i(t,e));var r=o(n,t,e);return r&&{start:r[0],end:r[1],pre:e.slice(0,r[0]),body:e.slice(r[0]+n.length,r[1]),post:e.slice(r[1]+t.length)}}function i(n,t){var e=t.match(n);return e?e[0]:null}function o(n,t,e){var r,i,o,s,a,c=e.indexOf(n),u=e.indexOf(t,c+1),l=c;if(0<=c&&0<u){for(r=[],o=e.length;0<=l&&!a;)l==c?(r.push(l),c=e.indexOf(n,l+1)):1==r.length?a=[r.pop(),u]:((i=r.pop())<o&&(o=i,s=u),u=e.indexOf(t,l+1)),l=c<u&&0<=c?c:u;r.length&&(a=[o,s])}return a}(t.exports=r).range=o},{}],11:[function(n,t,e){var k=n("concat-map"),S=n("balanced-match");t.exports=function(n){if(!n)return[];"{}"===n.substr(0,2)&&(n="\\{\\}"+n.substr(2));return function t(n,e){var r=[];var i=S("{","}",n);if(!i||/\$$/.test(i.pre))return[n];var o=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body);var s=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body);var a=o||s;var c=0<=i.body.indexOf(",");if(!a&&!c)return i.post.match(/,.*\}/)?(n=i.pre+"{"+i.body+R+i.post,t(n)):[n];var u;if(a)u=i.body.split(/\.\./);else if(1===(u=T(i.body)).length&&1===(u=t(u[0],!1).map(I)).length){var l=i.post.length?t(i.post,!1):[""];return l.map(function(n){return i.pre+u[0]+n})}var f=i.pre;var l=i.post.length?t(i.post,!1):[""];var h;if(a){var p=L(u[0]),d=L(u[1]),v=Math.max(u[0].length,u[1].length),g=3==u.length?Math.abs(L(u[2])):1,m=D,y=d<p;y&&(g*=-1,m=F);var b=u.some(N);h=[];for(var _=p;m(_,d);_+=g){var w;if(s)"\\"===(w=String.fromCharCode(_))&&(w="");else if(w=String(_),b){var E=v-w.length;if(0<E){var O=new Array(E+1).join("0");w=_<0?"-"+O+w.slice(1):O+w}}h.push(w)}}else h=k(u,function(n){return t(n,!1)});for(var A=0;A<h.length;A++)for(var x=0;x<l.length;x++){var j=f+h[A]+l[x];(!e||a||j)&&r.push(j)}return r}((t=n,t.split("\\\\").join(r).split("\\{").join(i).split("\\}").join(R).split("\\,").join(o).split("\\.").join(s)),!0).map(a);var t};var r="\0SLASH"+Math.random()+"\0",i="\0OPEN"+Math.random()+"\0",R="\0CLOSE"+Math.random()+"\0",o="\0COMMA"+Math.random()+"\0",s="\0PERIOD"+Math.random()+"\0";function L(n){return parseInt(n,10)==n?parseInt(n,10):n.charCodeAt(0)}function a(n){return n.split(r).join("\\").split(i).join("{").split(R).join("}").split(o).join(",").split(s).join(".")}function T(n){if(!n)return[""];var t=[],e=S("{","}",n);if(!e)return n.split(",");var r=e.pre,i=e.body,o=e.post,s=r.split(",");s[s.length-1]+="{"+i+"}";var a=T(o);return o.length&&(s[s.length-1]+=a.shift(),s.push.apply(s,a)),t.push.apply(t,s),t}function I(n){return"{"+n+"}"}function N(n){return/^-?0\d/.test(n)}function D(n,t){return n<=t}function F(n,t){return t<=n}},{"balanced-match":10,"concat-map":13}],12:[function(n,t,e){},{}],13:[function(n,t,e){t.exports=function(n,t){for(var e=[],r=0;r<n.length;r++){var i=t(n[r],r);o(i)?e.push.apply(e,i):e.push(i)}return e};var o=Array.isArray||function(n){return"[object Array]"===Object.prototype.toString.call(n)}},{}],14:[function(n,t,e){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function a(n){return"function"==typeof n}function c(n){return"object"==typeof n&&null!==n}function u(n){return void 0===n}((t.exports=r).EventEmitter=r).prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(n){if("number"!=typeof n||n<0||isNaN(n))throw TypeError("n must be a positive number");return this._maxListeners=n,this},r.prototype.emit=function(n){var t,e,r,i,o,s;if(this._events||(this._events={}),"error"===n&&(!this._events.error||c(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;throw TypeError('Uncaught, unspecified "error" event.')}if(u(e=this._events[n]))return!1;if(a(e))switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:for(r=arguments.length,i=new Array(r-1),o=1;o<r;o++)i[o-1]=arguments[o];e.apply(this,i)}else if(c(e)){for(r=arguments.length,i=new Array(r-1),o=1;o<r;o++)i[o-1]=arguments[o];for(r=(s=e.slice()).length,o=0;o<r;o++)s[o].apply(this,i)}return!0},r.prototype.on=r.prototype.addListener=function(n,t){var e;if(!a(t))throw TypeError("listener must be a function");(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",n,a(t.listener)?t.listener:t),this._events[n]?c(this._events[n])?this._events[n].push(t):this._events[n]=[this._events[n],t]:this._events[n]=t,c(this._events[n])&&!this._events[n].warned)&&((e=u(this._maxListeners)?r.defaultMaxListeners:this._maxListeners)&&0<e&&this._events[n].length>e&&(this._events[n].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[n].length),"function"==typeof console.trace&&console.trace()));return this},r.prototype.once=function(n,t){if(!a(t))throw TypeError("listener must be a function");var e=!1;function r(){this.removeListener(n,r),e||(e=!0,t.apply(this,arguments))}return r.listener=t,this.on(n,r),this},r.prototype.removeListener=function(n,t){var e,r,i,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[n])return this;if(i=(e=this._events[n]).length,r=-1,e===t||a(e.listener)&&e.listener===t)delete this._events[n],this._events.removeListener&&this.emit("removeListener",n,t);else if(c(e)){for(o=i;0<o--;)if(e[o]===t||e[o].listener&&e[o].listener===t){r=o;break}if(r<0)return this;1===e.length?(e.length=0,delete this._events[n]):e.splice(r,1),this._events.removeListener&&this.emit("removeListener",n,t)}return this},r.prototype.removeAllListeners=function(n){var t,e;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[n]&&delete this._events[n],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(a(e=this._events[n]))this.removeListener(n,e);else for(;e.length;)this.removeListener(n,e[e.length-1]);return delete this._events[n],this},r.prototype.listeners=function(n){return this._events&&this._events[n]?a(this._events[n])?[this._events[n]]:this._events[n].slice():[]},r.listenerCount=function(n,t){return n._events&&n._events[t]?a(n._events[t])?1:n._events[t].length:0}},{}],15:[function(t,n,p){(function(i){function o(n,t){return Object.prototype.hasOwnProperty.call(n,t)}p.alphasort=u,p.alphasorti=c,p.setopts=function(n,t,e){e||(e={});if(e.matchBase&&-1===t.indexOf("/")){if(e.noglobstar)throw new Error("base matching requires globstar");t="**/"+t}n.silent=!!e.silent,n.pattern=t,n.strict=!1!==e.strict,n.realpath=!!e.realpath,n.realpathCache=e.realpathCache||Object.create(null),n.follow=!!e.follow,n.dot=!!e.dot,n.mark=!!e.mark,n.nodir=!!e.nodir,n.nodir&&(n.mark=!0);n.sync=!!e.sync,n.nounique=!!e.nounique,n.nonull=!!e.nonull,n.nosort=!!e.nosort,n.nocase=!!e.nocase,n.stat=!!e.stat,n.noprocess=!!e.noprocess,n.maxLength=e.maxLength||1/0,n.cache=e.cache||Object.create(null),n.statCache=e.statCache||Object.create(null),n.symlinks=e.symlinks||Object.create(null),function(n,t){n.ignore=t.ignore||[],Array.isArray(n.ignore)||(n.ignore=[n.ignore]);n.ignore.length&&(n.ignore=n.ignore.map(l))}(n,e),n.changedCwd=!1;var r=i.cwd();o(e,"cwd")?(n.cwd=e.cwd,n.changedCwd=s.resolve(e.cwd)!==r):n.cwd=r;n.root=e.root||s.resolve(n.cwd,"/"),n.root=s.resolve(n.root),"win32"===i.platform&&(n.root=n.root.replace(/\\/g,"/"));n.nomount=!!e.nomount,e.nonegate=!1!==e.nonegate,e.nocomment=!1!==e.nocomment,function(n){if(!(n.nonegate&&n.nocomment||!0===i.noDeprecation||p.deprecationWarned)){var t="glob WARNING: comments and negation will be disabled in v6";if(i.throwDeprecation)throw new Error(t);i.traceDeprecation?console.trace(t):console.error(t),p.deprecationWarned=!0}}(e),n.minimatch=new a(t,e),n.options=n.minimatch.options},p.ownProp=o,p.makeAbs=f,p.finish=function(t){for(var n=t.nounique,e=n?[]:Object.create(null),r=0,i=t.matches.length;r<i;r++){var o=t.matches[r];if(o&&0!==Object.keys(o).length){var s=Object.keys(o);n?e.push.apply(e,s):s.forEach(function(n){e[n]=!0})}else if(t.nonull){var a=t.minimatch.globSet[r];n?e.push(a):e[a]=!0}}n||(e=Object.keys(e));t.nosort||(e=e.sort(t.nocase?c:u));if(t.mark){for(var r=0;r<e.length;r++)e[r]=t._mark(e[r]);t.nodir&&(e=e.filter(function(n){return!/\/$/.test(n)}))}t.ignore.length&&(e=e.filter(function(n){return!h(t,n)}));t.found=e},p.mark=function(n,t){var e=f(n,t),r=n.cache[e],i=t;if(r){var o="DIR"===r||Array.isArray(r),s="/"===t.slice(-1);if(o&&!s?i+="/":!o&&s&&(i=i.slice(0,-1)),i!==t){var a=f(n,i);n.statCache[a]=n.statCache[e],n.cache[a]=n.cache[e]}}return i},p.isIgnored=h,p.childrenIgnored=function(n,t){return!!n.ignore.length&&n.ignore.some(function(n){return!(!n.gmatcher||!n.gmatcher.match(t))})};var s=t("path"),n=t("minimatch"),e=t("path-is-absolute"),a=n.Minimatch;function c(n,t){return n.toLowerCase().localeCompare(t.toLowerCase())}function u(n,t){return n.localeCompare(t)}function l(n){var t=null;if("/**"===n.slice(-3)){var e=n.replace(/(\/\*\*)+$/,"");t=new a(e)}return{matcher:new a(n),gmatcher:t}}function f(n,t){return"/"===t.charAt(0)?s.join(n.root,t):e(t)||""===t?t:n.changedCwd?s.resolve(n.cwd,t):s.resolve(t)}function h(n,t){return!!n.ignore.length&&n.ignore.some(function(n){return n.matcher.match(t)||!(!n.gmatcher||!n.gmatcher.match(t))})}p.deprecationWarned}).call(this,t("_process"))},{_process:24,minimatch:20,path:22,"path-is-absolute":23}],16:[function(_,w,n){(function(s){w.exports=i;var u=_("fs"),l=_("minimatch"),n=(l.Minimatch,_("inherits")),t=_("events").EventEmitter,g=_("path"),f=_("assert"),h=_("path-is-absolute"),r=_("./sync.js"),e=_("./common.js"),a=(e.alphasort,e.alphasorti,e.setopts),p=e.ownProp,d=_("inflight"),o=_("util"),v=e.childrenIgnored,c=e.isIgnored,m=_("once");function i(n,t,e){if("function"==typeof t&&(e=t,t={}),t||(t={}),t.sync){if(e)throw new TypeError("callback provided to sync glob");return r(n,t)}return new b(n,t,e)}i.sync=r;var y=i.GlobSync=r.GlobSync;function b(n,t,e){if("function"==typeof t&&(e=t,t=null),t&&t.sync){if(e)throw new TypeError("callback provided to sync glob");return new y(n,t)}if(!(this instanceof b))return new b(n,t,e);a(this,n,t),this._didRealPath=!1;var r=this.minimatch.set.length;this.matches=new Array(r),"function"==typeof e&&(e=m(e),this.on("error",e),this.on("end",function(n){e(null,n)}));var i=this;r=this.minimatch.set.length;if(this._processing=0,this.matches=new Array(r),this._emitQueue=[],this._processQueue=[],this.paused=!1,this.noprocess)return this;if(0===r)return s();for(var o=0;o<r;o++)this._process(this.minimatch.set[o],o,!1,s);function s(){--i._processing,i._processing<=0&&i._finish()}}(i.glob=i).hasMagic=function(n,t){var e=o._extend({},t);e.noprocess=!0;var r=new b(n,e).minimatch.set;if(1<r.length)return!0;for(var i=0;i<r[0].length;i++)if("string"!=typeof r[0][i])return!0;return!1},n(i.Glob=b,t),b.prototype._finish=function(){if(f(this instanceof b),!this.aborted){if(this.realpath&&!this._didRealpath)return this._realpath();e.finish(this),this.emit("end",this.found)}},b.prototype._realpath=function(){if(!this._didRealpath){this._didRealpath=!0;var n=this.matches.length;if(0===n)return this._finish();for(var t=this,e=0;e<this.matches.length;e++)this._realpathSet(e,r)}function r(){0==--n&&t._finish()}},b.prototype._realpathSet=function(r,i){var n=this.matches[r];if(!n)return i();var t=Object.keys(n),o=this,s=t.length;if(0===s)return i();var a=this.matches[r]=Object.create(null);t.forEach(function(e,n){e=o._makeAbs(e),u.realpath(e,o.realpathCache,function(n,t){n?"stat"===n.syscall?a[e]=!0:o.emit("error",n):a[t]=!0,0==--s&&(o.matches[r]=a,i())})})},b.prototype._mark=function(n){return e.mark(this,n)},b.prototype._makeAbs=function(n){return e.makeAbs(this,n)},b.prototype.abort=function(){this.aborted=!0,this.emit("abort")},b.prototype.pause=function(){this.paused||(this.paused=!0,this.emit("pause"))},b.prototype.resume=function(){if(this.paused){if(this.emit("resume"),this.paused=!1,this._emitQueue.length)for(var n=this._emitQueue.slice(0),t=this._emitQueue.length=0;t<n.length;t++){var e=n[t];this._emitMatch(e[0],e[1])}if(this._processQueue.length){var r=this._processQueue.slice(0);for(t=this._processQueue.length=0;t<r.length;t++){var i=r[t];this._processing--,this._process(i[0],i[1],i[2],i[3])}}}},b.prototype._process=function(n,t,e,r){if(f(this instanceof b),f("function"==typeof r),!this.aborted)if(this._processing++,this.paused)this._processQueue.push([n,t,e,r]);else{for(var i,o=0;"string"==typeof n[o];)o++;switch(o){case n.length:return void this._processSimple(n.join("/"),t,r);case 0:i=null;break;default:i=n.slice(0,o).join("/")}var s,a=n.slice(o);s=null===i?".":((h(i)||h(n.join("/")))&&(i&&h(i)||(i="/"+i)),i);var c=this._makeAbs(s);if(v(this,s))return r();a[0]===l.GLOBSTAR?this._processGlobStar(i,s,c,a,t,e,r):this._processReaddir(i,s,c,a,t,e,r)}},b.prototype._processReaddir=function(e,r,i,o,s,a,c){var u=this;this._readdir(i,a,function(n,t){return u._processReaddir2(e,r,i,o,s,a,t,c)})},b.prototype._processReaddir2=function(n,t,e,r,i,o,s,a){if(!s)return a();for(var c=r[0],u=!!this.minimatch.negate,l=c._glob,f=this.dot||"."===l.charAt(0),h=[],p=0;p<s.length;p++){if("."!==(v=s[p]).charAt(0)||f)(u&&!n?!v.match(c):v.match(c))&&h.push(v)}var d=h.length;if(0===d)return a();if(1===r.length&&!this.mark&&!this.stat){this.matches[i]||(this.matches[i]=Object.create(null));for(p=0;p<d;p++){var v=h[p];n&&(v="/"!==n?n+"/"+v:n+v),"/"!==v.charAt(0)||this.nomount||(v=g.join(this.root,v)),this._emitMatch(i,v)}return a()}r.shift();for(p=0;p<d;p++){v=h[p];n&&(v="/"!==n?n+"/"+v:n+v),this._process([v].concat(r),i,o,a)}a()},b.prototype._emitMatch=function(n,t){if(!this.aborted&&!this.matches[n][t]&&!c(this,t))if(this.paused)this._emitQueue.push([n,t]);else{var e=this._makeAbs(t);if(this.nodir){var r=this.cache[e];if("DIR"===r||Array.isArray(r))return}this.mark&&(t=this._mark(t)),this.matches[n][t]=!0;var i=this.statCache[e];i&&this.emit("stat",t,i),this.emit("match",t)}},b.prototype._readdirInGlobStar=function(r,i){if(!this.aborted){if(this.follow)return this._readdir(r,!1,i);var o=this,n=d("lstat\0"+r,function(n,t){if(n)return i();var e=t.isSymbolicLink();(o.symlinks[r]=e)||t.isDirectory()?o._readdir(r,!1,i):(o.cache[r]="FILE",i())});n&&u.lstat(r,n)}},b.prototype._readdir=function(n,t,e){if(!this.aborted&&(e=d("readdir\0"+n+"\0"+t,e))){if(t&&!p(this.symlinks,n))return this._readdirInGlobStar(n,e);if(p(this.cache,n)){var r=this.cache[n];if(!r||"FILE"===r)return e();if(Array.isArray(r))return e(null,r)}var i,o,s;u.readdir(n,(i=this,o=n,s=e,function(n,t){n?i._readdirError(o,n,s):i._readdirEntries(o,t,s)}))}},b.prototype._readdirEntries=function(n,t,e){if(!this.aborted){if(!this.mark&&!this.stat)for(var r=0;r<t.length;r++){var i=t[r];i="/"===n?n+i:n+"/"+i,this.cache[i]=!0}return e(null,this.cache[n]=t)}},b.prototype._readdirError=function(n,t,e){if(!this.aborted){switch(t.code){case"ENOTSUP":case"ENOTDIR":this.cache[this._makeAbs(n)]="FILE";break;case"ENOENT":case"ELOOP":case"ENAMETOOLONG":case"UNKNOWN":this.cache[this._makeAbs(n)]=!1;break;default:this.cache[this._makeAbs(n)]=!1,this.strict&&(this.emit("error",t),this.abort()),this.silent||console.error("glob error",t)}return e()}},b.prototype._processGlobStar=function(e,r,i,o,s,a,c){var u=this;this._readdir(i,a,function(n,t){u._processGlobStar2(e,r,i,o,s,a,t,c)})},b.prototype._processGlobStar2=function(n,t,e,r,i,o,s,a){if(!s)return a();var c=r.slice(1),u=n?[n]:[],l=u.concat(c);this._process(l,i,!1,a);var f=this.symlinks[e],h=s.length;if(f&&o)return a();for(var p=0;p<h;p++){if("."!==s[p].charAt(0)||this.dot){var d=u.concat(s[p],c);this._process(d,i,!0,a);var v=u.concat(s[p],r);this._process(v,i,!0,a)}}a()},b.prototype._processSimple=function(e,r,i){var o=this;this._stat(e,function(n,t){o._processSimple2(e,r,n,t,i)})},b.prototype._processSimple2=function(n,t,e,r,i){if(this.matches[t]||(this.matches[t]=Object.create(null)),!r)return i();if(n&&h(n)&&!this.nomount){var o=/[\/\\]$/.test(n);"/"===n.charAt(0)?n=g.join(this.root,n):(n=g.resolve(this.root,n),o&&(n+="/"))}"win32"===s.platform&&(n=n.replace(/\\/g,"/")),this._emitMatch(t,n),i()},b.prototype._stat=function(r,i){var o=this._makeAbs(r),n="/"===r.slice(-1);if(r.length>this.maxLength)return i();if(!this.stat&&p(this.cache,o)){var t=this.cache[o];if(Array.isArray(t)&&(t="DIR"),!n||"DIR"===t)return i(null,t);if(n&&"FILE"===t)return i()}var e=this.statCache[o];if(void 0!==e){if(!1===e)return i(null,e);var s=e.isDirectory()?"DIR":"FILE";return n&&"FILE"===s?i():i(null,s,e)}var a=this,c=d("stat\0"+o,function(n,e){{if(e&&e.isSymbolicLink())return u.stat(o,function(n,t){n?a._stat2(r,o,null,e,i):a._stat2(r,o,n,t,i)});a._stat2(r,o,n,e,i)}});c&&u.lstat(o,c)},b.prototype._stat2=function(n,t,e,r,i){if(e)return this.statCache[t]=!1,i();var o="/"===n.slice(-1);if(this.statCache[t]=r,"/"===t.slice(-1)&&!r.isDirectory())return i(null,!1,r);var s=r.isDirectory()?"DIR":"FILE";return this.cache[t]=this.cache[t]||s,o&&"DIR"!==s?i():i(null,s,r)}}).call(this,_("_process"))},{"./common.js":15,"./sync.js":17,_process:24,assert:9,events:14,fs:12,inflight:18,inherits:19,minimatch:20,once:21,path:22,"path-is-absolute":23,util:28}],17:[function(e,r,n){(function(i){(r.exports=n).GlobSync=h;var s=e("fs"),c=e("minimatch"),g=(c.Minimatch,e("./glob.js").Glob,e("util"),e("path")),u=e("assert"),l=e("path-is-absolute"),t=e("./common.js"),o=(t.alphasort,t.alphasorti,t.setopts),a=t.ownProp,f=t.childrenIgnored;function n(n,t){if("function"==typeof t||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");return new h(n,t).found}function h(n,t){if(!n)throw new Error("must provide pattern");if("function"==typeof t||3===arguments.length)throw new TypeError("callback provided to sync glob\nSee: https://github.com/isaacs/node-glob/issues/167");if(!(this instanceof h))return new h(n,t);if(o(this,n,t),this.noprocess)return this;var e=this.minimatch.set.length;this.matches=new Array(e);for(var r=0;r<e;r++)this._process(this.minimatch.set[r],r,!1);this._finish()}h.prototype._finish=function(){if(u(this instanceof h),this.realpath){var i=this;this.matches.forEach(function(n,t){var e=i.matches[t]=Object.create(null);for(var r in n)try{r=i._makeAbs(r),e[s.realpathSync(r,i.realpathCache)]=!0}catch(n){if("stat"!==n.syscall)throw n;e[i._makeAbs(r)]=!0}})}t.finish(this)},h.prototype._process=function(n,t,e){u(this instanceof h);for(var r,i=0;"string"==typeof n[i];)i++;switch(i){case n.length:return void this._processSimple(n.join("/"),t);case 0:r=null;break;default:r=n.slice(0,i).join("/")}var o,s=n.slice(i);o=null===r?".":((l(r)||l(n.join("/")))&&(r&&l(r)||(r="/"+r)),r);var a=this._makeAbs(o);f(this,o)||(s[0]===c.GLOBSTAR?this._processGlobStar(r,o,a,s,t,e):this._processReaddir(r,o,a,s,t,e))},h.prototype._processReaddir=function(n,t,e,r,i,o){var s=this._readdir(e,o);if(s){for(var a=r[0],c=!!this.minimatch.negate,u=a._glob,l=this.dot||"."===u.charAt(0),f=[],h=0;h<s.length;h++){if("."!==(v=s[h]).charAt(0)||l)(c&&!n?!v.match(a):v.match(a))&&f.push(v)}var p=f.length;if(0!==p)if(1!==r.length||this.mark||this.stat){r.shift();for(h=0;h<p;h++){var d;v=f[h];d=n?[n,v]:[v],this._process(d.concat(r),i,o)}}else{this.matches[i]||(this.matches[i]=Object.create(null));for(var h=0;h<p;h++){var v=f[h];n&&(v="/"!==n.slice(-1)?n+"/"+v:n+v),"/"!==v.charAt(0)||this.nomount||(v=g.join(this.root,v)),this.matches[i][v]=!0}}}},h.prototype._emitMatch=function(n,t){this._makeAbs(t);if(this.mark&&(t=this._mark(t)),!this.matches[n][t]){if(this.nodir){var e=this.cache[this._makeAbs(t)];if("DIR"===e||Array.isArray(e))return}this.matches[n][t]=!0,this.stat&&this._stat(t)}},h.prototype._readdirInGlobStar=function(n){if(this.follow)return this._readdir(n,!1);var t,e;try{e=s.lstatSync(n)}catch(n){return null}var r=e.isSymbolicLink();return(this.symlinks[n]=r)||e.isDirectory()?t=this._readdir(n,!1):this.cache[n]="FILE",t},h.prototype._readdir=function(t,n){if(n&&!a(this.symlinks,t))return this._readdirInGlobStar(t);if(a(this.cache,t)){var e=this.cache[t];if(!e||"FILE"===e)return null;if(Array.isArray(e))return e}try{return this._readdirEntries(t,s.readdirSync(t))}catch(n){return this._readdirError(t,n),null}},h.prototype._readdirEntries=function(n,t){if(!this.mark&&!this.stat)for(var e=0;e<t.length;e++){var r=t[e];r="/"===n?n+r:n+"/"+r,this.cache[r]=!0}return this.cache[n]=t},h.prototype._readdirError=function(n,t){switch(t.code){case"ENOTSUP":case"ENOTDIR":this.cache[this._makeAbs(n)]="FILE";break;case"ENOENT":case"ELOOP":case"ENAMETOOLONG":case"UNKNOWN":this.cache[this._makeAbs(n)]=!1;break;default:if(this.cache[this._makeAbs(n)]=!1,this.strict)throw t;this.silent||console.error("glob error",t)}},h.prototype._processGlobStar=function(n,t,e,r,i,o){var s=this._readdir(e,o);if(s){var a=r.slice(1),c=n?[n]:[],u=c.concat(a);this._process(u,i,!1);var l=s.length;if(!this.symlinks[e]||!o)for(var f=0;f<l;f++){if("."!==s[f].charAt(0)||this.dot){var h=c.concat(s[f],a);this._process(h,i,!0);var p=c.concat(s[f],r);this._process(p,i,!0)}}}},h.prototype._processSimple=function(n,t){var e=this._stat(n);if(this.matches[t]||(this.matches[t]=Object.create(null)),e){if(n&&l(n)&&!this.nomount){var r=/[\/\\]$/.test(n);"/"===n.charAt(0)?n=g.join(this.root,n):(n=g.resolve(this.root,n),r&&(n+="/"))}"win32"===i.platform&&(n=n.replace(/\\/g,"/")),this.matches[t][n]=!0}},h.prototype._stat=function(n){var t=this._makeAbs(n),e="/"===n.slice(-1);if(n.length>this.maxLength)return!1;if(!this.stat&&a(this.cache,t)){var r=this.cache[t];if(Array.isArray(r)&&(r="DIR"),!e||"DIR"===r)return r;if(e&&"FILE"===r)return!1}var i=this.statCache[t];if(!i){var o;try{o=s.lstatSync(t)}catch(n){return!1}if(o.isSymbolicLink())try{i=s.statSync(t)}catch(n){i=o}else i=o}r=(this.statCache[t]=i).isDirectory()?"DIR":"FILE";return this.cache[t]=this.cache[t]||r,(!e||"DIR"===r)&&r},h.prototype._mark=function(n){return t.mark(this,n)},h.prototype._makeAbs=function(n){return t.makeAbs(this,n)}}).call(this,e("_process"))},{"./common.js":15,"./glob.js":16,_process:24,assert:9,fs:12,minimatch:20,path:22,"path-is-absolute":23,util:28}],18:[function(t,r,n){(function(s){var n=t("wrappy"),a=Object.create(null),e=t("once");r.exports=n(function(n,t){return a[n]?(a[n].push(t),null):(a[n]=[t],o=n,e(function n(){var t=a[o],e=t.length,r=function(n){for(var t=n.length,e=[],r=0;r<t;r++)e[r]=n[r];return e}(arguments);try{for(var i=0;i<e;i++)t[i].apply(null,r)}finally{t.length>e?(t.splice(0,e),s.nextTick(function(){n.apply(null,r)})):delete a[o]}}));var o})}).call(this,t("_process"))},{_process:24,once:21,wrappy:29}],19:[function(n,t,e){"function"==typeof Object.create?t.exports=function(n,t){n.super_=t,n.prototype=Object.create(t.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(n,t){n.super_=t;var e=function(){};e.prototype=t.prototype,n.prototype=new e,n.prototype.constructor=n}},{}],20:[function(n,t,e){(t.exports=s).Minimatch=i;var u={sep:"/"};try{u=n("path")}catch(n){}var M=s.GLOBSTAR=i.GLOBSTAR={},r=n("brace-expansion"),C={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},P="[^/]",z=P+"*?",B="().*{}+?[]^$\\!".split("").reduce(function(n,t){return n[t]=!0,n},{});var l=/\/+/;function o(t,e){t=t||{},e=e||{};var r={};return Object.keys(e).forEach(function(n){r[n]=e[n]}),Object.keys(t).forEach(function(n){r[n]=t[n]}),r}function s(n,t,e){if("string"!=typeof t)throw new TypeError("glob pattern string required");return e||(e={}),!(!e.nocomment&&"#"===t.charAt(0))&&(""===t.trim()?""===n:new i(t,e).match(n))}function i(n,t){if(!(this instanceof i))return new i(n,t);if("string"!=typeof n)throw new TypeError("glob pattern string required");t||(t={}),n=n.trim(),"/"!==u.sep&&(n=n.split(u.sep).join("/")),this.options=t,this.set=[],this.pattern=n,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}function a(n,t){if(t||(t=this instanceof i?this.options:{}),void 0===(n=void 0===n?this.pattern:n))throw new TypeError("undefined pattern");return t.nobrace||!n.match(/\{.*\}/)?[n]:r(n)}s.filter=function(r,i){return i=i||{},function(n,t,e){return s(n,r,i)}},s.defaults=function(r){if(!r||!Object.keys(r).length)return s;var i=s,n=function(n,t,e){return i.minimatch(n,t,o(r,e))};return n.Minimatch=function(n,t){return new i.Minimatch(n,o(r,t))},n},i.defaults=function(n){return n&&Object.keys(n).length?s.defaults(n).Minimatch:i},i.prototype.debug=function(){},i.prototype.make=function(){if(this._made)return;var n=this.pattern,t=this.options;if(!t.nocomment&&"#"===n.charAt(0))return void(this.comment=!0);if(!n)return void(this.empty=!0);this.parseNegate();var e=this.globSet=this.braceExpand();t.debug&&(this.debug=console.error);this.debug(this.pattern,e),e=this.globParts=e.map(function(n){return n.split(l)}),this.debug(this.pattern,e),e=e.map(function(n,t,e){return n.map(this.parse,this)},this),this.debug(this.pattern,e),e=e.filter(function(n){return-1===n.indexOf(!1)}),this.debug(this.pattern,e),this.set=e},i.prototype.parseNegate=function(){var n=this.pattern,t=!1,e=this.options,r=0;if(e.nonegate)return;for(var i=0,o=n.length;i<o&&"!"===n.charAt(i);i++)t=!t,r++;r&&(this.pattern=n.substr(r));this.negate=t},s.braceExpand=function(n,t){return a(n,t)},i.prototype.braceExpand=a,i.prototype.parse=function(n,t){if(65536<n.length)throw new TypeError("pattern is too long");var e=this.options;if(!e.noglobstar&&"**"===n)return M;if(""===n)return"";var r,i="",o=!!e.nocase,s=!1,a=[],c=[],u=!1,l=-1,f=-1,h="."===n.charAt(0)?"":e.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",p=this;function d(){if(r){switch(r){case"*":i+=z,o=!0;break;case"?":i+=P,o=!0;break;default:i+="\\"+r}p.debug("clearStateChar %j %j",r,i),r=!1}}for(var v,g=0,m=n.length;g<m&&(v=n.charAt(g));g++)if(this.debug("%s\t%s %s %j",n,g,i,v),s&&B[v])i+="\\"+v,s=!1;else switch(v){case"/":return!1;case"\\":d(),s=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",n,g,i,v),u){this.debug("  in class"),"!"===v&&g===f+1&&(v="^"),i+=v;continue}p.debug("call clearStateChar %j",r),d(),r=v,e.noext&&d();continue;case"(":if(u){i+="(";continue}if(!r){i+="\\(";continue}a.push({type:r,start:g-1,reStart:i.length,open:C[r].open,close:C[r].close}),i+="!"===r?"(?:(?!(?:":"(?:",this.debug("plType %j %j",r,i),r=!1;continue;case")":if(u||!a.length){i+="\\)";continue}d(),o=!0;var y=a.pop();i+=y.close,"!"===y.type&&c.push(y),y.reEnd=i.length;continue;case"|":if(u||!a.length||s){i+="\\|",s=!1;continue}d(),i+="|";continue;case"[":if(d(),u){i+="\\"+v;continue}u=!0,f=g,l=i.length,i+=v;continue;case"]":if(g===f+1||!u){i+="\\"+v,s=!1;continue}if(u){var b=n.substring(f+1,g);try{RegExp("["+b+"]")}catch(n){var _=this.parse(b,U);i=i.substr(0,l)+"\\["+_[0]+"\\]",o=o||_[1],u=!1;continue}}u=!(o=!0),i+=v;continue;default:d(),s?s=!1:!B[v]||"^"===v&&u||(i+="\\"),i+=v}u&&(b=n.substr(f+1),_=this.parse(b,U),i=i.substr(0,l)+"\\["+_[0],o=o||_[1]);for(y=a.pop();y;y=a.pop()){var w=i.slice(y.reStart+y.open.length);this.debug("setting tail",i,y),w=w.replace(/((?:\\{2}){0,64})(\\?)\|/g,function(n,t,e){return e||(e="\\"),t+t+e+"|"}),this.debug("tail=%j\n   %s",w,w,y,i);var E="*"===y.type?z:"?"===y.type?P:"\\"+y.type;o=!0,i=i.slice(0,y.reStart)+E+"\\("+w}d(),s&&(i+="\\\\");var O=!1;switch(i.charAt(0)){case".":case"[":case"(":O=!0}for(var A=c.length-1;-1<A;A--){var x=c[A],j=i.slice(0,x.reStart),k=i.slice(x.reStart,x.reEnd-8),S=i.slice(x.reEnd-8,x.reEnd),R=i.slice(x.reEnd);S+=R;var L=j.split("(").length-1,T=R;for(g=0;g<L;g++)T=T.replace(/\)[+*?]?/,"");var I="";""===(R=T)&&t!==U&&(I="$");var N=j+k+R+I+S;i=N}""!==i&&o&&(i="(?=.)"+i);O&&(i=h+i);if(t===U)return[i,o];if(!o)return n.replace(/\\(.)/g,"$1");var D=e.nocase?"i":"";try{var F=new RegExp("^"+i+"$",D)}catch(n){return new RegExp("$.")}return F._glob=n,F._src=i,F};var U={};s.makeRe=function(n,t){return new i(n,t||{}).makeRe()},i.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var n=this.set;if(!n.length)return this.regexp=!1,this.regexp;var t=this.options,e=t.noglobstar?z:t.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",r=t.nocase?"i":"",i=n.map(function(n){return n.map(function(n){return n===M?e:"string"==typeof n?n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):n._src}).join("\\/")}).join("|");i="^(?:"+i+")$",this.negate&&(i="^(?!"+i+").*$");try{this.regexp=new RegExp(i,r)}catch(n){this.regexp=!1}return this.regexp},s.match=function(n,t,e){var r=new i(t,e=e||{});return n=n.filter(function(n){return r.match(n)}),r.options.nonull&&!n.length&&n.push(t),n},i.prototype.match=function(n,t){if(this.debug("match",n,this.pattern),this.comment)return!1;if(this.empty)return""===n;if("/"===n&&t)return!0;var e=this.options;"/"!==u.sep&&(n=n.split(u.sep).join("/"));n=n.split(l),this.debug(this.pattern,"split",n);var r,i,o=this.set;for(this.debug(this.pattern,"set",o),i=n.length-1;0<=i&&!(r=n[i]);i--);for(i=0;i<o.length;i++){var s=o[i],a=n;e.matchBase&&1===s.length&&(a=[r]);var c=this.matchOne(a,s,t);if(c)return!!e.flipNegate||!this.negate}return!e.flipNegate&&this.negate},i.prototype.matchOne=function(n,t,e){var r=this.options;this.debug("matchOne",{this:this,file:n,pattern:t}),this.debug("matchOne",n.length,t.length);for(var i=0,o=0,s=n.length,a=t.length;i<s&&o<a;i++,o++){this.debug("matchOne loop");var c,u=t[o],l=n[i];if(this.debug(t,u,l),!1===u)return!1;if(u===M){this.debug("GLOBSTAR",[t,u,l]);var f=i,h=o+1;if(h===a){for(this.debug("** at the end");i<s;i++)if("."===n[i]||".."===n[i]||!r.dot&&"."===n[i].charAt(0))return!1;return!0}for(;f<s;){var p=n[f];if(this.debug("\nglobstar while",n,f,t,h,p),this.matchOne(n.slice(f),t.slice(h),e))return this.debug("globstar found match!",f,s,p),!0;if("."===p||".."===p||!r.dot&&"."===p.charAt(0)){this.debug("dot detected!",n,f,t,h);break}this.debug("globstar swallow a segment, and continue"),f++}return!(!e||(this.debug("\n>>> no match, partial?",n,f,t,h),f!==s))}if("string"==typeof u?(c=r.nocase?l.toLowerCase()===u.toLowerCase():l===u,this.debug("string match",u,l,c)):(c=l.match(u),this.debug("pattern match",u,l,c)),!c)return!1}if(i===s&&o===a)return!0;if(i===s)return e;if(o===a)return i===s-1&&""===n[i];throw new Error("wtf?")}},{"brace-expansion":11,path:22}],21:[function(n,t,e){var r=n("wrappy");function i(n){var t=function(){return t.called?t.value:(t.called=!0,t.value=n.apply(this,arguments))};return t.called=!1,t}function o(n){var t=function(){if(t.called)throw new Error(t.onceError);return t.called=!0,t.value=n.apply(this,arguments)},e=n.name||"Function wrapped with `once`";return t.onceError=e+" shouldn't be called more than once",t.called=!1,t}t.exports=r(i),t.exports.strict=r(o),i.proto=i(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return i(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return o(this)},configurable:!0})})},{wrappy:29}],22:[function(n,t,u){(function(i){function o(n,t){for(var e=0,r=n.length-1;0<=r;r--){var i=n[r];"."===i?n.splice(r,1):".."===i?(n.splice(r,1),e++):e&&(n.splice(r,1),e--)}if(t)for(;e--;e)n.unshift("..");return n}var t=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,s=function(n){return t.exec(n).slice(1)};function a(n,t){if(n.filter)return n.filter(t);for(var e=[],r=0;r<n.length;r++)t(n[r],r,n)&&e.push(n[r]);return e}u.resolve=function(){for(var n="",t=!1,e=arguments.length-1;-1<=e&&!t;e--){var r=0<=e?arguments[e]:i.cwd();if("string"!=typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(n=r+"/"+n,t="/"===r.charAt(0))}return(t?"/":"")+(n=o(a(n.split("/"),function(n){return!!n}),!t).join("/"))||"."},u.normalize=function(n){var t=u.isAbsolute(n),e="/"===r(n,-1);return(n=o(a(n.split("/"),function(n){return!!n}),!t).join("/"))||t||(n="."),n&&e&&(n+="/"),(t?"/":"")+n},u.isAbsolute=function(n){return"/"===n.charAt(0)},u.join=function(){var n=Array.prototype.slice.call(arguments,0);return u.normalize(a(n,function(n,t){if("string"!=typeof n)throw new TypeError("Arguments to path.join must be strings");return n}).join("/"))},u.relative=function(n,t){function e(n){for(var t=0;t<n.length&&""===n[t];t++);for(var e=n.length-1;0<=e&&""===n[e];e--);return e<t?[]:n.slice(t,e-t+1)}n=u.resolve(n).substr(1),t=u.resolve(t).substr(1);for(var r=e(n.split("/")),i=e(t.split("/")),o=Math.min(r.length,i.length),s=o,a=0;a<o;a++)if(r[a]!==i[a]){s=a;break}var c=[];for(a=s;a<r.length;a++)c.push("..");return(c=c.concat(i.slice(s))).join("/")},u.sep="/",u.delimiter=":",u.dirname=function(n){var t=s(n),e=t[0],r=t[1];return e||r?(r&&(r=r.substr(0,r.length-1)),e+r):"."},u.basename=function(n,t){var e=s(n)[2];return t&&e.substr(-1*t.length)===t&&(e=e.substr(0,e.length-t.length)),e},u.extname=function(n){return s(n)[3]};var r="b"==="ab".substr(-1)?function(n,t,e){return n.substr(t,e)}:function(n,t,e){return t<0&&(t=n.length+t),n.substr(t,e)}}).call(this,n("_process"))},{_process:24}],23:[function(n,r,t){(function(n){"use strict";function t(n){return"/"===n.charAt(0)}function e(n){var t=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/.exec(n),e=t[1]||"",r=Boolean(e&&":"!==e.charAt(1));return Boolean(t[2]||r)}r.exports="win32"===n.platform?e:t,r.exports.posix=t,r.exports.win32=e}).call(this,n("_process"))},{_process:24}],24:[function(n,t,e){var r,i,o=t.exports={};function s(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function c(t){if(r===setTimeout)return setTimeout(t,0);if((r===s||!r)&&setTimeout)return r=setTimeout,setTimeout(t,0);try{return r(t,0)}catch(n){try{return r.call(null,t,0)}catch(n){return r.call(this,t,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:s}catch(n){r=s}try{i="function"==typeof clearTimeout?clearTimeout:a}catch(n){i=a}}();var u,l=[],f=!1,h=-1;function p(){f&&u&&(f=!1,u.length?l=u.concat(l):h=-1,l.length&&d())}function d(){if(!f){var n=c(p);f=!0;for(var t=l.length;t;){for(u=l,l=[];++h<t;)u&&u[h].run();h=-1,t=l.length}u=null,f=!1,function(t){if(i===clearTimeout)return clearTimeout(t);if((i===a||!i)&&clearTimeout)return i=clearTimeout,clearTimeout(t);try{i(t)}catch(n){try{return i.call(null,t)}catch(n){return i.call(this,t)}}}(n)}}function v(n,t){this.fun=n,this.array=t}function g(){}o.nextTick=function(n){var t=new Array(arguments.length-1);if(1<arguments.length)for(var e=1;e<arguments.length;e++)t[e-1]=arguments[e];l.push(new v(n,t)),1!==l.length||f||c(d)},v.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=g,o.addListener=g,o.once=g,o.off=g,o.removeListener=g,o.removeAllListeners=g,o.emit=g,o.prependListener=g,o.prependOnceListener=g,o.listeners=function(n){return[]},o.binding=function(n){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(n){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},{}],25:[function(n,q,$){(function(){var n=this,t=n._,r=Array.prototype,s=Object.prototype,e=Function.prototype,i=r.push,c=r.slice,f=s.toString,o=s.hasOwnProperty,a=Array.isArray,u=Object.keys,l=e.bind,h=Object.create,p=function(){},d=function(n){return n instanceof d?n:this instanceof d?void(this._wrapped=n):new d(n)};void 0!==$?(void 0!==q&&q.exports&&($=q.exports=d),$._=d):n._=d,d.VERSION="1.8.3";var v=function(i,o,n){if(void 0===o)return i;switch(null==n?3:n){case 1:return function(n){return i.call(o,n)};case 2:return function(n,t){return i.call(o,n,t)};case 3:return function(n,t,e){return i.call(o,n,t,e)};case 4:return function(n,t,e,r){return i.call(o,n,t,e,r)}}return function(){return i.apply(o,arguments)}},g=function(n,t,e){return null==n?d.identity:d.isFunction(n)?v(n,t,e):d.isObject(n)?d.matcher(n):d.property(n)};d.iteratee=function(n,t){return g(n,t,1/0)};var m=function(c,u){return function(n){var t=arguments.length;if(t<2||null==n)return n;for(var e=1;e<t;e++)for(var r=arguments[e],i=c(r),o=i.length,s=0;s<o;s++){var a=i[s];u&&void 0!==n[a]||(n[a]=r[a])}return n}},y=function(n){if(!d.isObject(n))return{};if(h)return h(n);p.prototype=n;var t=new p;return p.prototype=null,t},b=function(t){return function(n){return null==n?void 0:n[t]}},_=Math.pow(2,53)-1,w=b("length"),E=function(n){var t=w(n);return"number"==typeof t&&0<=t&&t<=_};function O(a){return function(n,t,e,r){t=v(t,r,4);var i=!E(n)&&d.keys(n),o=(i||n).length,s=0<a?0:o-1;return arguments.length<3&&(e=n[i?i[s]:s],s+=a),function(n,t,e,r,i,o){for(;0<=i&&i<o;i+=a){var s=r?r[i]:i;e=t(e,n[s],s,n)}return e}(n,t,e,i,s,o)}}d.each=d.forEach=function(n,t,e){var r,i;if(t=v(t,e),E(n))for(r=0,i=n.length;r<i;r++)t(n[r],r,n);else{var o=d.keys(n);for(r=0,i=o.length;r<i;r++)t(n[o[r]],o[r],n)}return n},d.map=d.collect=function(n,t,e){t=g(t,e);for(var r=!E(n)&&d.keys(n),i=(r||n).length,o=Array(i),s=0;s<i;s++){var a=r?r[s]:s;o[s]=t(n[a],a,n)}return o},d.reduce=d.foldl=d.inject=O(1),d.reduceRight=d.foldr=O(-1),d.find=d.detect=function(n,t,e){var r;if(void 0!==(r=E(n)?d.findIndex(n,t,e):d.findKey(n,t,e))&&-1!==r)return n[r]},d.filter=d.select=function(n,r,t){var i=[];return r=g(r,t),d.each(n,function(n,t,e){r(n,t,e)&&i.push(n)}),i},d.reject=function(n,t,e){return d.filter(n,d.negate(g(t)),e)},d.every=d.all=function(n,t,e){t=g(t,e);for(var r=!E(n)&&d.keys(n),i=(r||n).length,o=0;o<i;o++){var s=r?r[o]:o;if(!t(n[s],s,n))return!1}return!0},d.some=d.any=function(n,t,e){t=g(t,e);for(var r=!E(n)&&d.keys(n),i=(r||n).length,o=0;o<i;o++){var s=r?r[o]:o;if(t(n[s],s,n))return!0}return!1},d.contains=d.includes=d.include=function(n,t,e,r){return E(n)||(n=d.values(n)),("number"!=typeof e||r)&&(e=0),0<=d.indexOf(n,t,e)},d.invoke=function(n,e){var r=c.call(arguments,2),i=d.isFunction(e);return d.map(n,function(n){var t=i?e:n[e];return null==t?t:t.apply(n,r)})},d.pluck=function(n,t){return d.map(n,d.property(t))},d.where=function(n,t){return d.filter(n,d.matcher(t))},d.findWhere=function(n,t){return d.find(n,d.matcher(t))},d.max=function(n,r,t){var e,i,o=-1/0,s=-1/0;if(null==r&&null!=n)for(var a=0,c=(n=E(n)?n:d.values(n)).length;a<c;a++)e=n[a],o<e&&(o=e);else r=g(r,t),d.each(n,function(n,t,e){i=r(n,t,e),(s<i||i===-1/0&&o===-1/0)&&(o=n,s=i)});return o},d.min=function(n,r,t){var e,i,o=1/0,s=1/0;if(null==r&&null!=n)for(var a=0,c=(n=E(n)?n:d.values(n)).length;a<c;a++)(e=n[a])<o&&(o=e);else r=g(r,t),d.each(n,function(n,t,e){((i=r(n,t,e))<s||i===1/0&&o===1/0)&&(o=n,s=i)});return o},d.shuffle=function(n){for(var t,e=E(n)?n:d.values(n),r=e.length,i=Array(r),o=0;o<r;o++)(t=d.random(0,o))!==o&&(i[o]=i[t]),i[t]=e[o];return i},d.sample=function(n,t,e){return null==t||e?(E(n)||(n=d.values(n)),n[d.random(n.length-1)]):d.shuffle(n).slice(0,Math.max(0,t))},d.sortBy=function(n,r,t){return r=g(r,t),d.pluck(d.map(n,function(n,t,e){return{value:n,index:t,criteria:r(n,t,e)}}).sort(function(n,t){var e=n.criteria,r=t.criteria;if(e!==r){if(r<e||void 0===e)return 1;if(e<r||void 0===r)return-1}return n.index-t.index}),"value")};var A=function(s){return function(r,i,n){var o={};return i=g(i,n),d.each(r,function(n,t){var e=i(n,t,r);s(o,n,e)}),o}};d.groupBy=A(function(n,t,e){d.has(n,e)?n[e].push(t):n[e]=[t]}),d.indexBy=A(function(n,t,e){n[e]=t}),d.countBy=A(function(n,t,e){d.has(n,e)?n[e]++:n[e]=1}),d.toArray=function(n){return n?d.isArray(n)?c.call(n):E(n)?d.map(n,d.identity):d.values(n):[]},d.size=function(n){return null==n?0:E(n)?n.length:d.keys(n).length},d.partition=function(n,r,t){r=g(r,t);var i=[],o=[];return d.each(n,function(n,t,e){(r(n,t,e)?i:o).push(n)}),[i,o]},d.first=d.head=d.take=function(n,t,e){if(null!=n)return null==t||e?n[0]:d.initial(n,n.length-t)},d.initial=function(n,t,e){return c.call(n,0,Math.max(0,n.length-(null==t||e?1:t)))},d.last=function(n,t,e){if(null!=n)return null==t||e?n[n.length-1]:d.rest(n,Math.max(0,n.length-t))},d.rest=d.tail=d.drop=function(n,t,e){return c.call(n,null==t||e?1:t)},d.compact=function(n){return d.filter(n,d.identity)};var x=function(n,t,e,r){for(var i=[],o=0,s=r||0,a=w(n);s<a;s++){var c=n[s];if(E(c)&&(d.isArray(c)||d.isArguments(c))){t||(c=x(c,t,e));var u=0,l=c.length;for(i.length+=l;u<l;)i[o++]=c[u++]}else e||(i[o++]=c)}return i};function j(o){return function(n,t,e){t=g(t,e);for(var r=w(n),i=0<o?0:r-1;0<=i&&i<r;i+=o)if(t(n[i],i,n))return i;return-1}}function k(o,s,a){return function(n,t,e){var r=0,i=w(n);if("number"==typeof e)0<o?r=0<=e?e:Math.max(e+i,r):i=0<=e?Math.min(e+1,i):e+i+1;else if(a&&e&&i)return n[e=a(n,t)]===t?e:-1;if(t!=t)return 0<=(e=s(c.call(n,r,i),d.isNaN))?e+r:-1;for(e=0<o?r:i-1;0<=e&&e<i;e+=o)if(n[e]===t)return e;return-1}}d.flatten=function(n,t){return x(n,t,!1)},d.without=function(n){return d.difference(n,c.call(arguments,1))},d.uniq=d.unique=function(n,t,e,r){d.isBoolean(t)||(r=e,e=t,t=!1),null!=e&&(e=g(e,r));for(var i=[],o=[],s=0,a=w(n);s<a;s++){var c=n[s],u=e?e(c,s,n):c;t?(s&&o===u||i.push(c),o=u):e?d.contains(o,u)||(o.push(u),i.push(c)):d.contains(i,c)||i.push(c)}return i},d.union=function(){return d.uniq(x(arguments,!0,!0))},d.intersection=function(n){for(var t=[],e=arguments.length,r=0,i=w(n);r<i;r++){var o=n[r];if(!d.contains(t,o)){for(var s=1;s<e&&d.contains(arguments[s],o);s++);s===e&&t.push(o)}}return t},d.difference=function(n){var t=x(arguments,!0,!0,1);return d.filter(n,function(n){return!d.contains(t,n)})},d.zip=function(){return d.unzip(arguments)},d.unzip=function(n){for(var t=n&&d.max(n,w).length||0,e=Array(t),r=0;r<t;r++)e[r]=d.pluck(n,r);return e},d.object=function(n,t){for(var e={},r=0,i=w(n);r<i;r++)t?e[n[r]]=t[r]:e[n[r][0]]=n[r][1];return e},d.findIndex=j(1),d.findLastIndex=j(-1),d.sortedIndex=function(n,t,e,r){for(var i=(e=g(e,r,1))(t),o=0,s=w(n);o<s;){var a=Math.floor((o+s)/2);e(n[a])<i?o=a+1:s=a}return o},d.indexOf=k(1,d.findIndex,d.sortedIndex),d.lastIndexOf=k(-1,d.findLastIndex),d.range=function(n,t,e){null==t&&(t=n||0,n=0),e=e||1;for(var r=Math.max(Math.ceil((t-n)/e),0),i=Array(r),o=0;o<r;o++,n+=e)i[o]=n;return i};var S=function(n,t,e,r,i){if(!(r instanceof t))return n.apply(e,i);var o=y(n.prototype),s=n.apply(o,i);return d.isObject(s)?s:o};d.bind=function(n,t){if(l&&n.bind===l)return l.apply(n,c.call(arguments,1));if(!d.isFunction(n))throw new TypeError("Bind must be called on a function");var e=c.call(arguments,2),r=function(){return S(n,r,t,this,e.concat(c.call(arguments)))};return r},d.partial=function(i){var o=c.call(arguments,1),s=function(){for(var n=0,t=o.length,e=Array(t),r=0;r<t;r++)e[r]=o[r]===d?arguments[n++]:o[r];for(;n<arguments.length;)e.push(arguments[n++]);return S(i,s,this,this,e)};return s},d.bindAll=function(n){var t,e,r=arguments.length;if(r<=1)throw new Error("bindAll must be passed function names");for(t=1;t<r;t++)n[e=arguments[t]]=d.bind(n[e],n);return n},d.memoize=function(r,i){var o=function(n){var t=o.cache,e=""+(i?i.apply(this,arguments):n);return d.has(t,e)||(t[e]=r.apply(this,arguments)),t[e]};return o.cache={},o},d.delay=function(n,t){var e=c.call(arguments,2);return setTimeout(function(){return n.apply(null,e)},t)},d.defer=d.partial(d.delay,d,1),d.throttle=function(e,r,i){var o,s,a,c=null,u=0;i||(i={});var l=function(){u=!1===i.leading?0:d.now(),c=null,a=e.apply(o,s),c||(o=s=null)};return function(){var n=d.now();u||!1!==i.leading||(u=n);var t=r-(n-u);return o=this,s=arguments,t<=0||r<t?(c&&(clearTimeout(c),c=null),u=n,a=e.apply(o,s),c||(o=s=null)):c||!1===i.trailing||(c=setTimeout(l,t)),a}},d.debounce=function(t,e,r){var i,o,s,a,c,u=function(){var n=d.now()-a;n<e&&0<=n?i=setTimeout(u,e-n):(i=null,r||(c=t.apply(s,o),i||(s=o=null)))};return function(){s=this,o=arguments,a=d.now();var n=r&&!i;return i||(i=setTimeout(u,e)),n&&(c=t.apply(s,o),s=o=null),c}},d.wrap=function(n,t){return d.partial(t,n)},d.negate=function(n){return function(){return!n.apply(this,arguments)}},d.compose=function(){var e=arguments,r=e.length-1;return function(){for(var n=r,t=e[r].apply(this,arguments);n--;)t=e[n].call(this,t);return t}},d.after=function(n,t){return function(){if(--n<1)return t.apply(this,arguments)}},d.before=function(n,t){var e;return function(){return 0<--n&&(e=t.apply(this,arguments)),n<=1&&(t=null),e}},d.once=d.partial(d.before,2);var R=!{toString:null}.propertyIsEnumerable("toString"),L=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function T(n,t){var e=L.length,r=n.constructor,i=d.isFunction(r)&&r.prototype||s,o="constructor";for(d.has(n,o)&&!d.contains(t,o)&&t.push(o);e--;)(o=L[e])in n&&n[o]!==i[o]&&!d.contains(t,o)&&t.push(o)}d.keys=function(n){if(!d.isObject(n))return[];if(u)return u(n);var t=[];for(var e in n)d.has(n,e)&&t.push(e);return R&&T(n,t),t},d.allKeys=function(n){if(!d.isObject(n))return[];var t=[];for(var e in n)t.push(e);return R&&T(n,t),t},d.values=function(n){for(var t=d.keys(n),e=t.length,r=Array(e),i=0;i<e;i++)r[i]=n[t[i]];return r},d.mapObject=function(n,t,e){t=g(t,e);for(var r,i=d.keys(n),o=i.length,s={},a=0;a<o;a++)s[r=i[a]]=t(n[r],r,n);return s},d.pairs=function(n){for(var t=d.keys(n),e=t.length,r=Array(e),i=0;i<e;i++)r[i]=[t[i],n[t[i]]];return r},d.invert=function(n){for(var t={},e=d.keys(n),r=0,i=e.length;r<i;r++)t[n[e[r]]]=e[r];return t},d.functions=d.methods=function(n){var t=[];for(var e in n)d.isFunction(n[e])&&t.push(e);return t.sort()},d.extend=m(d.allKeys),d.extendOwn=d.assign=m(d.keys),d.findKey=function(n,t,e){t=g(t,e);for(var r,i=d.keys(n),o=0,s=i.length;o<s;o++)if(t(n[r=i[o]],r,n))return r},d.pick=function(n,t,e){var r,i,o={},s=n;if(null==s)return o;d.isFunction(t)?(i=d.allKeys(s),r=v(t,e)):(i=x(arguments,!1,!1,1),r=function(n,t,e){return t in e},s=Object(s));for(var a=0,c=i.length;a<c;a++){var u=i[a],l=s[u];r(l,u,s)&&(o[u]=l)}return o},d.omit=function(n,t,e){if(d.isFunction(t))t=d.negate(t);else{var r=d.map(x(arguments,!1,!1,1),String);t=function(n,t){return!d.contains(r,t)}}return d.pick(n,t,e)},d.defaults=m(d.allKeys,!0),d.create=function(n,t){var e=y(n);return t&&d.extendOwn(e,t),e},d.clone=function(n){return d.isObject(n)?d.isArray(n)?n.slice():d.extend({},n):n},d.tap=function(n,t){return t(n),n},d.isMatch=function(n,t){var e=d.keys(t),r=e.length;if(null==n)return!r;for(var i=Object(n),o=0;o<r;o++){var s=e[o];if(t[s]!==i[s]||!(s in i))return!1}return!0};var I=function(n,t,e,r){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof d&&(n=n._wrapped),t instanceof d&&(t=t._wrapped);var i=f.call(n);if(i!==f.call(t))return!1;switch(i){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!=+n?+t!=+t:0==+n?1/+n==1/t:+n==+t;case"[object Date]":case"[object Boolean]":return+n==+t}var o="[object Array]"===i;if(!o){if("object"!=typeof n||"object"!=typeof t)return!1;var s=n.constructor,a=t.constructor;if(s!==a&&!(d.isFunction(s)&&s instanceof s&&d.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in t)return!1}r=r||[];for(var c=(e=e||[]).length;c--;)if(e[c]===n)return r[c]===t;if(e.push(n),r.push(t),o){if((c=n.length)!==t.length)return!1;for(;c--;)if(!I(n[c],t[c],e,r))return!1}else{var u,l=d.keys(n);if(c=l.length,d.keys(t).length!==c)return!1;for(;c--;)if(u=l[c],!d.has(t,u)||!I(n[u],t[u],e,r))return!1}return e.pop(),r.pop(),!0};d.isEqual=function(n,t){return I(n,t)},d.isEmpty=function(n){return null==n||(E(n)&&(d.isArray(n)||d.isString(n)||d.isArguments(n))?0===n.length:0===d.keys(n).length)},d.isElement=function(n){return!(!n||1!==n.nodeType)},d.isArray=a||function(n){return"[object Array]"===f.call(n)},d.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},d.each(["Arguments","Function","String","Number","Date","RegExp","Error"],function(t){d["is"+t]=function(n){return f.call(n)==="[object "+t+"]"}}),d.isArguments(arguments)||(d.isArguments=function(n){return d.has(n,"callee")}),"function"!=typeof/./&&"object"!=typeof Int8Array&&(d.isFunction=function(n){return"function"==typeof n||!1}),d.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},d.isNaN=function(n){return d.isNumber(n)&&n!==+n},d.isBoolean=function(n){return!0===n||!1===n||"[object Boolean]"===f.call(n)},d.isNull=function(n){return null===n},d.isUndefined=function(n){return void 0===n},d.has=function(n,t){return null!=n&&o.call(n,t)},d.noConflict=function(){return n._=t,this},d.identity=function(n){return n},d.constant=function(n){return function(){return n}},d.noop=function(){},d.property=b,d.propertyOf=function(t){return null==t?function(){}:function(n){return t[n]}},d.matcher=d.matches=function(t){return t=d.extendOwn({},t),function(n){return d.isMatch(n,t)}},d.times=function(n,t,e){var r=Array(Math.max(0,n));t=v(t,e,1);for(var i=0;i<n;i++)r[i]=t(i);return r},d.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},d.now=Date.now||function(){return(new Date).getTime()};var N={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},D=d.invert(N),F=function(t){var e=function(n){return t[n]},n="(?:"+d.keys(t).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(n){return n=null==n?"":""+n,r.test(n)?n.replace(i,e):n}};d.escape=F(N),d.unescape=F(D),d.result=function(n,t,e){var r=null==n?void 0:n[t];return void 0===r&&(r=e),d.isFunction(r)?r.call(n):r};var M=0;d.uniqueId=function(n){var t=++M+"";return n?n+t:t},d.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var C=/(.)^/,P={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},z=/\\|'|\r|\n|\u2028|\u2029/g,B=function(n){return"\\"+P[n]};d.template=function(o,n,t){!n&&t&&(n=t),n=d.defaults({},n,d.templateSettings);var e=RegExp([(n.escape||C).source,(n.interpolate||C).source,(n.evaluate||C).source].join("|")+"|$","g"),s=0,a="__p+='";o.replace(e,function(n,t,e,r,i){return a+=o.slice(s,i).replace(z,B),s=i+n.length,t?a+="'+\n((__t=("+t+"))==null?'':_.escape(__t))+\n'":e?a+="'+\n((__t=("+e+"))==null?'':__t)+\n'":r&&(a+="';\n"+r+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{var r=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}var i=function(n){return r.call(this,n,d)},c=n.variable||"obj";return i.source="function("+c+"){\n"+a+"}",i},d.chain=function(n){var t=d(n);return t._chain=!0,t};var U=function(n,t){return n._chain?d(t).chain():t};d.mixin=function(e){d.each(d.functions(e),function(n){var t=d[n]=e[n];d.prototype[n]=function(){var n=[this._wrapped];return i.apply(n,arguments),U(this,t.apply(d,n))}})},d.mixin(d),d.each(["pop","push","reverse","shift","sort","splice","unshift"],function(t){var e=r[t];d.prototype[t]=function(){var n=this._wrapped;return e.apply(n,arguments),"shift"!==t&&"splice"!==t||0!==n.length||delete n[0],U(this,n)}}),d.each(["concat","join","slice"],function(n){var t=r[n];d.prototype[n]=function(){return U(this,t.apply(this._wrapped,arguments))}}),d.prototype.value=function(){return this._wrapped},d.prototype.valueOf=d.prototype.toJSON=d.prototype.value,d.prototype.toString=function(){return""+this._wrapped}}).call(this)},{}],26:[function(n,t,e){arguments[4][19][0].apply(e,arguments)},{dup:19}],27:[function(n,t,e){t.exports=function(n){return n&&"object"==typeof n&&"function"==typeof n.copy&&"function"==typeof n.fill&&"function"==typeof n.readUInt8}},{}],28:[function(h,n,k){(function(r,i){var a=/%[sdj%]/g;k.format=function(n){if(!_(n)){for(var t=[],e=0;e<arguments.length;e++)t.push(c(arguments[e]));return t.join(" ")}e=1;for(var r=arguments,i=r.length,o=String(n).replace(a,function(n){if("%%"===n)return"%";if(i<=e)return n;switch(n){case"%s":return String(r[e++]);case"%d":return Number(r[e++]);case"%j":try{return JSON.stringify(r[e++])}catch(n){return"[Circular]"}default:return n}}),s=r[e];e<i;s=r[++e])y(s)||!l(s)?o+=" "+s:o+=" "+c(s);return o},k.deprecate=function(n,t){if(w(i.process))return function(){return k.deprecate(n,t).apply(this,arguments)};if(!0===r.noDeprecation)return n;var e=!1;return function(){if(!e){if(r.throwDeprecation)throw new Error(t);r.traceDeprecation?console.trace(t):console.error(t),e=!0}return n.apply(this,arguments)}};var n,o={};function c(n,t){var e={seen:[],stylize:u};return 3<=arguments.length&&(e.depth=arguments[2]),4<=arguments.length&&(e.colors=arguments[3]),m(t)?e.showHidden=t:t&&k._extend(e,t),w(e.showHidden)&&(e.showHidden=!1),w(e.depth)&&(e.depth=2),w(e.colors)&&(e.colors=!1),w(e.customInspect)&&(e.customInspect=!0),e.colors&&(e.stylize=s),p(e,n,e.depth)}function s(n,t){var e=c.styles[t];return e?"["+c.colors[e][0]+"m"+n+"["+c.colors[e][1]+"m":n}function u(n,t){return n}function p(t,e,r){if(t.customInspect&&e&&x(e.inspect)&&e.inspect!==k.inspect&&(!e.constructor||e.constructor.prototype!==e)){var n=e.inspect(r,t);return _(n)||(n=p(t,n,r)),n}var i=function(n,t){if(w(t))return n.stylize("undefined","undefined");if(_(t)){var e="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return n.stylize(e,"string")}if(b(t))return n.stylize(""+t,"number");if(m(t))return n.stylize(""+t,"boolean");if(y(t))return n.stylize("null","null")}(t,e);if(i)return i;var o,s=Object.keys(e),a=(o={},s.forEach(function(n,t){o[n]=!0}),o);if(t.showHidden&&(s=Object.getOwnPropertyNames(e)),A(e)&&(0<=s.indexOf("message")||0<=s.indexOf("description")))return d(e);if(0===s.length){if(x(e)){var c=e.name?": "+e.name:"";return t.stylize("[Function"+c+"]","special")}if(E(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(O(e))return t.stylize(Date.prototype.toString.call(e),"date");if(A(e))return d(e)}var u,l="",f=!1,h=["{","}"];(g(e)&&(f=!0,h=["[","]"]),x(e))&&(l=" [Function"+(e.name?": "+e.name:"")+"]");return E(e)&&(l=" "+RegExp.prototype.toString.call(e)),O(e)&&(l=" "+Date.prototype.toUTCString.call(e)),A(e)&&(l=" "+d(e)),0!==s.length||f&&0!=e.length?r<0?E(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special"):(t.seen.push(e),u=f?function(t,e,r,i,n){for(var o=[],s=0,a=e.length;s<a;++s)j(e,String(s))?o.push(v(t,e,r,i,String(s),!0)):o.push("");return n.forEach(function(n){n.match(/^\d+$/)||o.push(v(t,e,r,i,n,!0))}),o}(t,e,r,a,s):s.map(function(n){return v(t,e,r,a,n,f)}),t.seen.pop(),function(n,t,e){if(60<n.reduce(function(n,t){return 0,0<=t.indexOf("\n")&&0,n+t.replace(/\u001b\[\d\d?m/g,"").length+1},0))return e[0]+(""===t?"":t+"\n ")+" "+n.join(",\n  ")+" "+e[1];return e[0]+t+" "+n.join(", ")+" "+e[1]}(u,l,h)):h[0]+l+h[1]}function d(n){return"["+Error.prototype.toString.call(n)+"]"}function v(n,t,e,r,i,o){var s,a,c;if((c=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?a=c.set?n.stylize("[Getter/Setter]","special"):n.stylize("[Getter]","special"):c.set&&(a=n.stylize("[Setter]","special")),j(r,i)||(s="["+i+"]"),a||(n.seen.indexOf(c.value)<0?-1<(a=y(e)?p(n,c.value,null):p(n,c.value,e-1)).indexOf("\n")&&(a=o?a.split("\n").map(function(n){return"  "+n}).join("\n").substr(2):"\n"+a.split("\n").map(function(n){return"   "+n}).join("\n")):a=n.stylize("[Circular]","special")),w(s)){if(o&&i.match(/^\d+$/))return a;s=(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),n.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),n.stylize(s,"string"))}return s+": "+a}function g(n){return Array.isArray(n)}function m(n){return"boolean"==typeof n}function y(n){return null===n}function b(n){return"number"==typeof n}function _(n){return"string"==typeof n}function w(n){return void 0===n}function E(n){return l(n)&&"[object RegExp]"===t(n)}function l(n){return"object"==typeof n&&null!==n}function O(n){return l(n)&&"[object Date]"===t(n)}function A(n){return l(n)&&("[object Error]"===t(n)||n instanceof Error)}function x(n){return"function"==typeof n}function t(n){return Object.prototype.toString.call(n)}function e(n){return n<10?"0"+n.toString(10):n.toString(10)}k.debuglog=function(t){if(w(n)&&(n=r.env.NODE_DEBUG||""),t=t.toUpperCase(),!o[t])if(new RegExp("\\b"+t+"\\b","i").test(n)){var e=r.pid;o[t]=function(){var n=k.format.apply(k,arguments);console.error("%s %d: %s",t,e,n)}}else o[t]=function(){};return o[t]},(k.inspect=c).colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},c.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},k.isArray=g,k.isBoolean=m,k.isNull=y,k.isNullOrUndefined=function(n){return null==n},k.isNumber=b,k.isString=_,k.isSymbol=function(n){return"symbol"==typeof n},k.isUndefined=w,k.isRegExp=E,k.isObject=l,k.isDate=O,k.isError=A,k.isFunction=x,k.isPrimitive=function(n){return null===n||"boolean"==typeof n||"number"==typeof n||"string"==typeof n||"symbol"==typeof n||void 0===n},k.isBuffer=h("./support/isBuffer");var f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function j(n,t){return Object.prototype.hasOwnProperty.call(n,t)}k.log=function(){var n,t;console.log("%s - %s",(n=new Date,t=[e(n.getHours()),e(n.getMinutes()),e(n.getSeconds())].join(":"),[n.getDate(),f[n.getMonth()],t].join(" ")),k.format.apply(k,arguments))},k.inherits=h("inherits"),k._extend=function(n,t){if(!t||!l(t))return n;for(var e=Object.keys(t),r=e.length;r--;)n[e[r]]=t[e[r]];return n}}).call(this,h("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":27,_process:24,inherits:26}],29:[function(n,t,e){t.exports=function n(i,t){if(i&&t)return n(i)(t);if("function"!=typeof i)throw new TypeError("need wrapper function");Object.keys(i).forEach(function(n){e[n]=i[n]});return e;function e(){for(var n=new Array(arguments.length),t=0;t<n.length;t++)n[t]=arguments[t];var e=i.apply(this,n),r=n[n.length-1];return"function"==typeof e&&e!==r&&Object.keys(r).forEach(function(n){e[n]=r[n]}),e}}},{}]},{},[7])(7)});
\ No newline at end of file
diff --git a/assets/javascripts/modernizr.1aa3b519.js b/assets/javascripts/modernizr.1aa3b519.js
deleted file mode 100644
index 14e111f..0000000
--- a/assets/javascripts/modernizr.1aa3b519.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){for(var n in t)e[n]=t[n]}(window,function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=4)}({4:function(e,t,n){"use strict";n(5)},5:function(e,t){!function(t){!function(e,t,n){function r(e,t){return typeof e===t}function o(e){var t=_.className,n=C._config.classPrefix||"";if(T&&(t=t.baseVal),C._config.enableJSClass){var r=new RegExp("(^|\\s)"+n+"no-js(\\s|$)");t=t.replace(r,"$1"+n+"js$2")}C._config.enableClasses&&(t+=" "+n+e.join(" "+n),T?_.className.baseVal=t:_.className=t)}function i(e,t){if("object"==typeof e)for(var n in e)b(e,n)&&i(n,e[n]);else{e=e.toLowerCase();var r=e.split("."),s=C[r[0]];if(2==r.length&&(s=s[r[1]]),void 0!==s)return C;t="function"==typeof t?t():t,1==r.length?C[r[0]]=t:(!C[r[0]]||C[r[0]]instanceof Boolean||(C[r[0]]=new Boolean(C[r[0]])),C[r[0]][r[1]]=t),o([(t&&0!=t?"":"no-")+r.join("-")]),C._trigger(e,t)}return C}function s(){return"function"!=typeof t.createElement?t.createElement(arguments[0]):T?t.createElementNS.call(t,"http://www.w3.org/2000/svg",arguments[0]):t.createElement.apply(t,arguments)}function a(){var e=t.body;return e||(e=s(T?"svg":"body"),e.fake=!0),e}function u(e,n,r,o){var i,u,l,f,c="modernizr",d=s("div"),p=a();if(parseInt(r,10))for(;r--;)l=s("div"),l.id=o?o[r]:c+(r+1),d.appendChild(l);return i=s("style"),i.type="text/css",i.id="s"+c,(p.fake?p:d).appendChild(i),p.appendChild(d),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(t.createTextNode(e)),d.id=c,p.fake&&(p.style.background="",p.style.overflow="hidden",f=_.style.overflow,_.style.overflow="hidden",_.appendChild(p)),u=n(d,e),p.fake?(p.parentNode.removeChild(p),_.style.overflow=f,_.offsetHeight):d.parentNode.removeChild(d),!!u}function l(e,t){return!!~(""+e).indexOf(t)}function f(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function c(t,n,r){var o;if("getComputedStyle"in e){o=getComputedStyle.call(e,t,n);var i=e.console;if(null!==o)r&&(o=o.getPropertyValue(r));else if(i){var s=i.error?"error":"log";i[s].call(i,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}}else o=!n&&t.currentStyle&&t.currentStyle[r];return o}function d(t,r){var o=t.length;if("CSS"in e&&"supports"in e.CSS){for(;o--;)if(e.CSS.supports(f(t[o]),r))return!0;return!1}if("CSSSupportsRule"in e){for(var i=[];o--;)i.push("("+f(t[o])+":"+r+")");return i=i.join(" or "),u("@supports ("+i+") { #modernizr { position: absolute; } }",function(e){return"absolute"==c(e,null,"position")})}return n}function p(e){return e.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")}function h(e,t,o,i){function a(){f&&(delete j.style,delete j.modElem)}if(i=!r(i,"undefined")&&i,!r(o,"undefined")){var u=d(e,o);if(!r(u,"undefined"))return u}for(var f,c,h,m,v,g=["modernizr","tspan","samp"];!j.style&&g.length;)f=!0,j.modElem=s(g.shift()),j.style=j.modElem.style;for(h=e.length,c=0;h>c;c++)if(m=e[c],v=j.style[m],l(m,"-")&&(m=p(m)),j.style[m]!==n){if(i||r(o,"undefined"))return a(),"pfx"!=t||m;try{j.style[m]=o}catch(e){}if(j.style[m]!=v)return a(),"pfx"!=t||m}return a(),!1}function m(e,t){return function(){return e.apply(t,arguments)}}function v(e,t,n){var o;for(var i in e)if(e[i]in t)return!1===n?e[i]:(o=t[e[i]],r(o,"function")?m(o,n||t):o);return!1}function g(e,t,n,o,i){var s=e.charAt(0).toUpperCase()+e.slice(1),a=(e+" "+k.join(s+" ")+s).split(" ");return r(t,"string")||r(t,"undefined")?h(a,t,o,i):(a=(e+" "+A.join(s+" ")+s).split(" "),v(a,t,n))}function y(e,t,r){return g(e,n,n,t,r)}var w=[],S={_version:"3.5.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){w.push({name:e,fn:t,options:n})},addAsyncTest:function(e){w.push({name:null,fn:e})}},C=function(){};C.prototype=S,C=new C;var b,x=[],_=t.documentElement,T="svg"===_.nodeName.toLowerCase();!function(){var e={}.hasOwnProperty;b=r(e,"undefined")||r(e.call,"undefined")?function(e,t){return t in e&&r(e.constructor.prototype[t],"undefined")}:function(t,n){return e.call(t,n)}}(),S._l={},S.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),C.hasOwnProperty(e)&&setTimeout(function(){C._trigger(e,C[e])},0)},S._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e;for(e=0;e<n.length;e++)(0,n[e])(t)},0),delete this._l[e]}},C._q.push(function(){S.addTest=i}),C.addTest("json","JSON"in e&&"parse"in JSON&&"stringify"in JSON),C.addTest("svg",!!t.createElementNS&&!!t.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect);var P=S.testStyles=u;C.addTest("checked",function(){return P("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=s("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),C.addTest("target",function(){var t=e.document;if(!("querySelectorAll"in t))return!1;try{return t.querySelectorAll(":target"),!0}catch(e){return!1}}),C.addTest("dataset",function(){var e=s("div");return e.setAttribute("data-a-b","c"),!(!e.dataset||"c"!==e.dataset.aB)}),C.addTest("details",function(){var e,t=s("details");return"open"in t&&(P("#modernizr details{display:block}",function(n){n.appendChild(t),t.innerHTML="<summary>a</summary>b",e=t.offsetHeight,t.open=!0,e=e!=t.offsetHeight}),e)}),C.addTest("fetch","fetch"in e);var z="Moz O ms Webkit",k=S._config.usePrefixes?z.split(" "):[];S._cssomPrefixes=k;var N={elem:s("modernizr")};C._q.push(function(){delete N.elem});var j={style:N.elem.style};C._q.unshift(function(){delete j.style});var A=S._config.usePrefixes?z.toLowerCase().split(" "):[];S._domPrefixes=A,S.testAllProps=g,S.testAllProps=y;var E="CSS"in e&&"supports"in e.CSS,O="supportsCSS"in e;C.addTest("supports",E||O),C.addTest("csstransforms3d",function(){var e=!!y("perspective","1px",!0),t=C._config.usePrefixes;if(e&&(!t||"webkitPerspective"in _.style)){var n;C.supports?n="@supports (perspective: 1px)":(n="@media (transform-3d)",t&&(n+=",(-webkit-transform-3d)")),n+="{#modernizr{width:7px;height:18px;margin:0;padding:0;border:0}}",P("#modernizr{width:0;height:0}"+n,function(t){e=7===t.offsetWidth&&18===t.offsetHeight})}return e}),function(){var e,t,n,o,i,s,a;for(var u in w)if(w.hasOwnProperty(u)){if(e=[],t=w[u],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;n<t.options.aliases.length;n++)e.push(t.options.aliases[n].toLowerCase());for(o=r(t.fn,"function")?t.fn():t.fn,i=0;i<e.length;i++)s=e[i],a=s.split("."),1===a.length?C[a[0]]=o:(!C[a[0]]||C[a[0]]instanceof Boolean||(C[a[0]]=new Boolean(C[a[0]])),C[a[0]][a[1]]=o),x.push((o?"":"no-")+a.join("-"))}}(),o(x),delete S.addTest,delete S.addAsyncTest;for(var q=0;q<C._q.length;q++)C._q[q]();e.Modernizr=C}(t,document),e.exports=t.Modernizr}(window)}}));
\ No newline at end of file
diff --git a/assets/javascripts/modernizr.268332fc.js b/assets/javascripts/modernizr.268332fc.js
new file mode 100644
index 0000000..4ab44d7
--- /dev/null
+++ b/assets/javascripts/modernizr.268332fc.js
@@ -0,0 +1 @@
+!function(e,t){for(var n in t)e[n]=t[n]}(window,function(n){var r={};function o(e){if(r[e])return r[e].exports;var t=r[e]={i:e,l:!1,exports:{}};return n[e].call(t.exports,t,t.exports,o),t.l=!0,t.exports}return o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=11)}({11:function(e,t,n){"use strict";n.r(t);n(12)},12:function(e,t){var n;(function(i,d,p){function y(e,t){return typeof e===t}function s(e){var t=S.className,n=c._config.classPrefix||"";if(b&&(t=t.baseVal),c._config.enableJSClass){var r=new RegExp("(^|\\s)"+n+"no-js(\\s|$)");t=t.replace(r,"$1"+n+"js$2")}c._config.enableClasses&&(0<e.length&&(t+=" "+n+e.join(" "+n)),b?S.className.baseVal=t:S.className=t)}function a(e,t){if("object"==typeof e)for(var n in e)v(e,n)&&a(n,e[n]);else{var r=(e=e.toLowerCase()).split("."),o=c[r[0]];if(2===r.length&&(o=o[r[1]]),void 0!==o)return c;t="function"==typeof t?t():t,1===r.length?c[r[0]]=t:(!c[r[0]]||c[r[0]]instanceof Boolean||(c[r[0]]=new Boolean(c[r[0]])),c[r[0]][r[1]]=t),s([(t&&!1!==t?"":"no-")+r.join("-")]),c._trigger(e,t)}return c}function m(){return"function"!=typeof d.createElement?d.createElement(arguments[0]):b?d.createElementNS.call(d,"http://www.w3.org/2000/svg",arguments[0]):d.createElement.apply(d,arguments)}function o(e,t,n,r){var o,i,s,a,l,u="modernizr",f=m("div"),c=((l=d.body)||((l=m(b?"svg":"body")).fake=!0),l);if(parseInt(n,10))for(;n--;)(s=m("div")).id=r?r[n]:u+(n+1),f.appendChild(s);return(o=m("style")).type="text/css",o.id="s"+u,(c.fake?c:f).appendChild(o),c.appendChild(f),o.styleSheet?o.styleSheet.cssText=e:o.appendChild(d.createTextNode(e)),f.id=u,c.fake&&(c.style.background="",c.style.overflow="hidden",a=S.style.overflow,S.style.overflow="hidden",S.appendChild(c)),i=t(f,e),c.fake?(c.parentNode.removeChild(c),S.style.overflow=a,S.offsetHeight):f.parentNode.removeChild(f),!!i}function l(e){return e.replace(/([A-Z])/g,function(e,t){return"-"+t.toLowerCase()}).replace(/^ms-/,"-ms-")}function h(e,t){var n=e.length;if("CSS"in i&&"supports"in i.CSS){for(;n--;)if(i.CSS.supports(l(e[n]),t))return!0;return!1}if("CSSSupportsRule"in i){for(var r=[];n--;)r.push("("+l(e[n])+":"+t+")");return o("@supports ("+(r=r.join(" or "))+") { #modernizr { position: absolute; } }",function(e){return"absolute"===function(e,t,n){var r;if("getComputedStyle"in i){r=getComputedStyle.call(i,e,t);var o=i.console;null!==r?n&&(r=r.getPropertyValue(n)):o&&o[o.error?"error":"log"].call(o,"getComputedStyle returning null, its possible modernizr test results are inaccurate")}else r=!t&&e.currentStyle&&e.currentStyle[n];return r}(e,null,"position")})}return p}function u(e,t){return function(){return e.apply(t,arguments)}}function r(e,t,n,r,o){var i=e.charAt(0).toUpperCase()+e.slice(1),s=(e+" "+w.join(i+" ")+i).split(" ");return y(t,"string")||y(t,"undefined")?function(e,t,n,r){function o(){s&&(delete T.style,delete T.modElem)}if(r=!y(r,"undefined")&&r,!y(n,"undefined")){var i=h(e,n);if(!y(i,"undefined"))return i}for(var s,a,l,u,f,c=["modernizr","tspan","samp"];!T.style&&c.length;)s=!0,T.modElem=m(c.shift()),T.style=T.modElem.style;for(l=e.length,a=0;a<l;a++)if(u=e[a],f=T.style[u],!!~(""+u).indexOf("-")&&(u=u.replace(/([a-z])-([a-z])/g,function(e,t,n){return t+n.toUpperCase()}).replace(/^-/,"")),T.style[u]!==p){if(r||y(n,"undefined"))return o(),"pfx"!==t||u;try{T.style[u]=n}catch(e){}if(T.style[u]!==f)return o(),"pfx"!==t||u}return o(),!1}(s,t,r,o):function(e,t,n){var r;for(var o in e)if(e[o]in t)return!1===n?e[o]:y(r=t[e[o]],"function")?u(r,n||t):r;return!1}(s=(e+" "+P.join(i+" ")+i).split(" "),t,n)}function e(e,t,n){return r(e,p,p,t,n)}var f=[],t={_version:"3.8.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var n=this;setTimeout(function(){t(n[e])},0)},addTest:function(e,t,n){f.push({name:e,fn:t,options:n})},addAsyncTest:function(e){f.push({name:null,fn:e})}},c=function(){};c.prototype=t,c=new c;var v,n,g=[],S=d.documentElement,b="svg"===S.nodeName.toLowerCase();v=y(n={}.hasOwnProperty,"undefined")||y(n.call,"undefined")?function(e,t){return t in e&&y(e.constructor.prototype[t],"undefined")}:function(e,t){return n.call(e,t)},t._l={},t.on=function(e,t){this._l[e]||(this._l[e]=[]),this._l[e].push(t),c.hasOwnProperty(e)&&setTimeout(function(){c._trigger(e,c[e])},0)},t._trigger=function(e,t){if(this._l[e]){var n=this._l[e];setTimeout(function(){var e;for(e=0;e<n.length;e++)(0,n[e])(t)},0),delete this._l[e]}},c._q.push(function(){t.addTest=a}),c.addTest("json","JSON"in i&&"parse"in JSON&&"stringify"in JSON),c.addTest("svg",!!d.createElementNS&&!!d.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect);var C=t.testStyles=o;c.addTest("checked",function(){return C("#modernizr {position:absolute} #modernizr input {margin-left:10px} #modernizr :checked {margin-left:20px;display:block}",function(e){var t=m("input");return t.setAttribute("type","checkbox"),t.setAttribute("checked","checked"),e.appendChild(t),20===t.offsetLeft})}),c.addTest("target",function(){var e=i.document;if(!("querySelectorAll"in e))return!1;try{return e.querySelectorAll(":target"),!0}catch(e){return!1}}),c.addTest("dataset",function(){var e=m("div");return e.setAttribute("data-a-b","c"),!(!e.dataset||"c"!==e.dataset.aB)}),c.addTest("details",function(){var t,n=m("details");return"open"in n&&(C("#modernizr details{display:block}",function(e){e.appendChild(n),n.innerHTML="<summary>a</summary>b",t=n.offsetHeight,n.open=!0,t=t!==n.offsetHeight}),t)}),c.addTest("fetch","fetch"in i);var _="Moz O ms Webkit",w=t._config.usePrefixes?_.split(" "):[];t._cssomPrefixes=w;var x={elem:m("modernizr")};c._q.push(function(){delete x.elem});var T={style:x.elem.style};c._q.unshift(function(){delete T.style});var P=t._config.usePrefixes?_.toLowerCase().split(" "):[];t._domPrefixes=P,t.testAllProps=r,t.testAllProps=e;var j="CSS"in i&&"supports"in i.CSS,O="supportsCSS"in i;c.addTest("supports",j||O),c.addTest("csstransforms3d",function(){return!!e("perspective","1px",!0)}),function(){var e,t,n,r,o,i;for(var s in f)if(f.hasOwnProperty(s)){if(e=[],(t=f[s]).name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(n=0;n<t.options.aliases.length;n++)e.push(t.options.aliases[n].toLowerCase());for(r=y(t.fn,"function")?t.fn():t.fn,o=0;o<e.length;o++)1===(i=e[o].split(".")).length?c[i[0]]=r:(c[i[0]]&&(!c[i[0]]||c[i[0]]instanceof Boolean)||(c[i[0]]=new Boolean(c[i[0]])),c[i[0]][i[1]]=r),g.push((r?"":"no-")+i.join("-"))}}(),s(g),delete t.addTest,delete t.addAsyncTest;for(var z=0;z<c._q.length;z++)c._q[z]();i.Modernizr=c})(n=window,document),e.exports=n.Modernizr}}));
\ No newline at end of file
diff --git a/assets/stylesheets/application-palette.22915126.css b/assets/stylesheets/application-palette.22915126.css
deleted file mode 100644
index 3c8766e..0000000
--- a/assets/stylesheets/application-palette.22915126.css
+++ /dev/null
@@ -1,1176 +0,0 @@
-button[data-md-color-primary],
-button[data-md-color-accent] {
-  width: 13rem;
-  margin-bottom: 0.4rem;
-  padding: 2.4rem 0.8rem 0.4rem;
-  transition: background-color 0.25s, opacity          0.25s;
-  border-radius: 0.2rem;
-  color: white;
-  font-size: 1.28rem;
-  text-align: left;
-  cursor: pointer; }
-  button[data-md-color-primary]:hover,
-  button[data-md-color-accent]:hover {
-    opacity: 0.75; }
-
-button[data-md-color-primary="red"] {
-  background-color: #ef5350; }
-
-[data-md-color-primary="red"] .md-typeset a {
-  color: #ef5350; }
-
-[data-md-color-primary="red"] .md-header {
-  background-color: #ef5350; }
-
-[data-md-color-primary="red"] .md-hero {
-  background-color: #ef5350; }
-
-[data-md-color-primary="red"] .md-nav__link:active,
-[data-md-color-primary="red"] .md-nav__link--active {
-  color: #ef5350; }
-
-[data-md-color-primary="red"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="pink"] {
-  background-color: #e91e63; }
-
-[data-md-color-primary="pink"] .md-typeset a {
-  color: #e91e63; }
-
-[data-md-color-primary="pink"] .md-header {
-  background-color: #e91e63; }
-
-[data-md-color-primary="pink"] .md-hero {
-  background-color: #e91e63; }
-
-[data-md-color-primary="pink"] .md-nav__link:active,
-[data-md-color-primary="pink"] .md-nav__link--active {
-  color: #e91e63; }
-
-[data-md-color-primary="pink"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="purple"] {
-  background-color: #ab47bc; }
-
-[data-md-color-primary="purple"] .md-typeset a {
-  color: #ab47bc; }
-
-[data-md-color-primary="purple"] .md-header {
-  background-color: #ab47bc; }
-
-[data-md-color-primary="purple"] .md-hero {
-  background-color: #ab47bc; }
-
-[data-md-color-primary="purple"] .md-nav__link:active,
-[data-md-color-primary="purple"] .md-nav__link--active {
-  color: #ab47bc; }
-
-[data-md-color-primary="purple"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="deep-purple"] {
-  background-color: #7e57c2; }
-
-[data-md-color-primary="deep-purple"] .md-typeset a {
-  color: #7e57c2; }
-
-[data-md-color-primary="deep-purple"] .md-header {
-  background-color: #7e57c2; }
-
-[data-md-color-primary="deep-purple"] .md-hero {
-  background-color: #7e57c2; }
-
-[data-md-color-primary="deep-purple"] .md-nav__link:active,
-[data-md-color-primary="deep-purple"] .md-nav__link--active {
-  color: #7e57c2; }
-
-[data-md-color-primary="deep-purple"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="indigo"] {
-  background-color: #3f51b5; }
-
-[data-md-color-primary="indigo"] .md-typeset a {
-  color: #3f51b5; }
-
-[data-md-color-primary="indigo"] .md-header {
-  background-color: #3f51b5; }
-
-[data-md-color-primary="indigo"] .md-hero {
-  background-color: #3f51b5; }
-
-[data-md-color-primary="indigo"] .md-nav__link:active,
-[data-md-color-primary="indigo"] .md-nav__link--active {
-  color: #3f51b5; }
-
-[data-md-color-primary="indigo"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="blue"] {
-  background-color: #2196f3; }
-
-[data-md-color-primary="blue"] .md-typeset a {
-  color: #2196f3; }
-
-[data-md-color-primary="blue"] .md-header {
-  background-color: #2196f3; }
-
-[data-md-color-primary="blue"] .md-hero {
-  background-color: #2196f3; }
-
-[data-md-color-primary="blue"] .md-nav__link:active,
-[data-md-color-primary="blue"] .md-nav__link--active {
-  color: #2196f3; }
-
-[data-md-color-primary="blue"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="light-blue"] {
-  background-color: #03a9f4; }
-
-[data-md-color-primary="light-blue"] .md-typeset a {
-  color: #03a9f4; }
-
-[data-md-color-primary="light-blue"] .md-header {
-  background-color: #03a9f4; }
-
-[data-md-color-primary="light-blue"] .md-hero {
-  background-color: #03a9f4; }
-
-[data-md-color-primary="light-blue"] .md-nav__link:active,
-[data-md-color-primary="light-blue"] .md-nav__link--active {
-  color: #03a9f4; }
-
-[data-md-color-primary="light-blue"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="cyan"] {
-  background-color: #00bcd4; }
-
-[data-md-color-primary="cyan"] .md-typeset a {
-  color: #00bcd4; }
-
-[data-md-color-primary="cyan"] .md-header {
-  background-color: #00bcd4; }
-
-[data-md-color-primary="cyan"] .md-hero {
-  background-color: #00bcd4; }
-
-[data-md-color-primary="cyan"] .md-nav__link:active,
-[data-md-color-primary="cyan"] .md-nav__link--active {
-  color: #00bcd4; }
-
-[data-md-color-primary="cyan"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="teal"] {
-  background-color: #009688; }
-
-[data-md-color-primary="teal"] .md-typeset a {
-  color: #009688; }
-
-[data-md-color-primary="teal"] .md-header {
-  background-color: #009688; }
-
-[data-md-color-primary="teal"] .md-hero {
-  background-color: #009688; }
-
-[data-md-color-primary="teal"] .md-nav__link:active,
-[data-md-color-primary="teal"] .md-nav__link--active {
-  color: #009688; }
-
-[data-md-color-primary="teal"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="green"] {
-  background-color: #4caf50; }
-
-[data-md-color-primary="green"] .md-typeset a {
-  color: #4caf50; }
-
-[data-md-color-primary="green"] .md-header {
-  background-color: #4caf50; }
-
-[data-md-color-primary="green"] .md-hero {
-  background-color: #4caf50; }
-
-[data-md-color-primary="green"] .md-nav__link:active,
-[data-md-color-primary="green"] .md-nav__link--active {
-  color: #4caf50; }
-
-[data-md-color-primary="green"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="light-green"] {
-  background-color: #7cb342; }
-
-[data-md-color-primary="light-green"] .md-typeset a {
-  color: #7cb342; }
-
-[data-md-color-primary="light-green"] .md-header {
-  background-color: #7cb342; }
-
-[data-md-color-primary="light-green"] .md-hero {
-  background-color: #7cb342; }
-
-[data-md-color-primary="light-green"] .md-nav__link:active,
-[data-md-color-primary="light-green"] .md-nav__link--active {
-  color: #7cb342; }
-
-[data-md-color-primary="light-green"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="lime"] {
-  background-color: #c0ca33; }
-
-[data-md-color-primary="lime"] .md-typeset a {
-  color: #c0ca33; }
-
-[data-md-color-primary="lime"] .md-header {
-  background-color: #c0ca33; }
-
-[data-md-color-primary="lime"] .md-hero {
-  background-color: #c0ca33; }
-
-[data-md-color-primary="lime"] .md-nav__link:active,
-[data-md-color-primary="lime"] .md-nav__link--active {
-  color: #c0ca33; }
-
-[data-md-color-primary="lime"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="yellow"] {
-  background-color: #f9a825; }
-
-[data-md-color-primary="yellow"] .md-typeset a {
-  color: #f9a825; }
-
-[data-md-color-primary="yellow"] .md-header {
-  background-color: #f9a825; }
-
-[data-md-color-primary="yellow"] .md-hero {
-  background-color: #f9a825; }
-
-[data-md-color-primary="yellow"] .md-nav__link:active,
-[data-md-color-primary="yellow"] .md-nav__link--active {
-  color: #f9a825; }
-
-[data-md-color-primary="yellow"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="amber"] {
-  background-color: #ffa000; }
-
-[data-md-color-primary="amber"] .md-typeset a {
-  color: #ffa000; }
-
-[data-md-color-primary="amber"] .md-header {
-  background-color: #ffa000; }
-
-[data-md-color-primary="amber"] .md-hero {
-  background-color: #ffa000; }
-
-[data-md-color-primary="amber"] .md-nav__link:active,
-[data-md-color-primary="amber"] .md-nav__link--active {
-  color: #ffa000; }
-
-[data-md-color-primary="amber"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="orange"] {
-  background-color: #fb8c00; }
-
-[data-md-color-primary="orange"] .md-typeset a {
-  color: #fb8c00; }
-
-[data-md-color-primary="orange"] .md-header {
-  background-color: #fb8c00; }
-
-[data-md-color-primary="orange"] .md-hero {
-  background-color: #fb8c00; }
-
-[data-md-color-primary="orange"] .md-nav__link:active,
-[data-md-color-primary="orange"] .md-nav__link--active {
-  color: #fb8c00; }
-
-[data-md-color-primary="orange"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="deep-orange"] {
-  background-color: #ff7043; }
-
-[data-md-color-primary="deep-orange"] .md-typeset a {
-  color: #ff7043; }
-
-[data-md-color-primary="deep-orange"] .md-header {
-  background-color: #ff7043; }
-
-[data-md-color-primary="deep-orange"] .md-hero {
-  background-color: #ff7043; }
-
-[data-md-color-primary="deep-orange"] .md-nav__link:active,
-[data-md-color-primary="deep-orange"] .md-nav__link--active {
-  color: #ff7043; }
-
-[data-md-color-primary="deep-orange"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="brown"] {
-  background-color: #795548; }
-
-[data-md-color-primary="brown"] .md-typeset a {
-  color: #795548; }
-
-[data-md-color-primary="brown"] .md-header {
-  background-color: #795548; }
-
-[data-md-color-primary="brown"] .md-hero {
-  background-color: #795548; }
-
-[data-md-color-primary="brown"] .md-nav__link:active,
-[data-md-color-primary="brown"] .md-nav__link--active {
-  color: #795548; }
-
-[data-md-color-primary="brown"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="grey"] {
-  background-color: #757575; }
-
-[data-md-color-primary="grey"] .md-typeset a {
-  color: #757575; }
-
-[data-md-color-primary="grey"] .md-header {
-  background-color: #757575; }
-
-[data-md-color-primary="grey"] .md-hero {
-  background-color: #757575; }
-
-[data-md-color-primary="grey"] .md-nav__link:active,
-[data-md-color-primary="grey"] .md-nav__link--active {
-  color: #757575; }
-
-[data-md-color-primary="grey"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="blue-grey"] {
-  background-color: #546e7a; }
-
-[data-md-color-primary="blue-grey"] .md-typeset a {
-  color: #546e7a; }
-
-[data-md-color-primary="blue-grey"] .md-header {
-  background-color: #546e7a; }
-
-[data-md-color-primary="blue-grey"] .md-hero {
-  background-color: #546e7a; }
-
-[data-md-color-primary="blue-grey"] .md-nav__link:active,
-[data-md-color-primary="blue-grey"] .md-nav__link--active {
-  color: #546e7a; }
-
-[data-md-color-primary="blue-grey"] .md-nav__item--nested > .md-nav__link {
-  color: inherit; }
-
-button[data-md-color-primary="white"] {
-  background-color: white;
-  color: rgba(0, 0, 0, 0.87);
-  box-shadow: 0 0 0.1rem rgba(0, 0, 0, 0.54) inset; }
-
-[data-md-color-primary="white"] .md-header {
-  background-color: white;
-  color: rgba(0, 0, 0, 0.87); }
-
-[data-md-color-primary="white"] .md-hero {
-  background-color: white;
-  color: rgba(0, 0, 0, 0.87); }
-  [data-md-color-primary="white"] .md-hero--expand {
-    border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07); }
-
-button[data-md-color-accent="red"] {
-  background-color: #ff1744; }
-
-[data-md-color-accent="red"] .md-typeset a:hover,
-[data-md-color-accent="red"] .md-typeset a:active {
-  color: #ff1744; }
-
-[data-md-color-accent="red"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="red"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #ff1744; }
-
-[data-md-color-accent="red"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="red"] .md-typeset .md-clipboard:active::before {
-  color: #ff1744; }
-
-[data-md-color-accent="red"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="red"] .md-typeset .footnote li:target .footnote-backref {
-  color: #ff1744; }
-
-[data-md-color-accent="red"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="red"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="red"] .md-typeset [id] .headerlink:focus {
-  color: #ff1744; }
-
-[data-md-color-accent="red"] .md-nav__link:focus,
-[data-md-color-accent="red"] .md-nav__link:hover {
-  color: #ff1744; }
-
-[data-md-color-accent="red"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ff1744; }
-
-[data-md-color-accent="red"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="red"] .md-search-result__link:hover {
-  background-color: rgba(255, 23, 68, 0.1); }
-
-[data-md-color-accent="red"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ff1744; }
-
-[data-md-color-accent="red"] .md-source-file:hover::before {
-  background-color: #ff1744; }
-
-button[data-md-color-accent="pink"] {
-  background-color: #f50057; }
-
-[data-md-color-accent="pink"] .md-typeset a:hover,
-[data-md-color-accent="pink"] .md-typeset a:active {
-  color: #f50057; }
-
-[data-md-color-accent="pink"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="pink"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #f50057; }
-
-[data-md-color-accent="pink"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="pink"] .md-typeset .md-clipboard:active::before {
-  color: #f50057; }
-
-[data-md-color-accent="pink"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="pink"] .md-typeset .footnote li:target .footnote-backref {
-  color: #f50057; }
-
-[data-md-color-accent="pink"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="pink"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="pink"] .md-typeset [id] .headerlink:focus {
-  color: #f50057; }
-
-[data-md-color-accent="pink"] .md-nav__link:focus,
-[data-md-color-accent="pink"] .md-nav__link:hover {
-  color: #f50057; }
-
-[data-md-color-accent="pink"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #f50057; }
-
-[data-md-color-accent="pink"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="pink"] .md-search-result__link:hover {
-  background-color: rgba(245, 0, 87, 0.1); }
-
-[data-md-color-accent="pink"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #f50057; }
-
-[data-md-color-accent="pink"] .md-source-file:hover::before {
-  background-color: #f50057; }
-
-button[data-md-color-accent="purple"] {
-  background-color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-typeset a:hover,
-[data-md-color-accent="purple"] .md-typeset a:active {
-  color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="purple"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="purple"] .md-typeset .md-clipboard:active::before {
-  color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="purple"] .md-typeset .footnote li:target .footnote-backref {
-  color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="purple"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="purple"] .md-typeset [id] .headerlink:focus {
-  color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-nav__link:focus,
-[data-md-color-accent="purple"] .md-nav__link:hover {
-  color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="purple"] .md-search-result__link:hover {
-  background-color: rgba(224, 64, 251, 0.1); }
-
-[data-md-color-accent="purple"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #e040fb; }
-
-[data-md-color-accent="purple"] .md-source-file:hover::before {
-  background-color: #e040fb; }
-
-button[data-md-color-accent="deep-purple"] {
-  background-color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-typeset a:hover,
-[data-md-color-accent="deep-purple"] .md-typeset a:active {
-  color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="deep-purple"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="deep-purple"] .md-typeset .md-clipboard:active::before {
-  color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="deep-purple"] .md-typeset .footnote li:target .footnote-backref {
-  color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="deep-purple"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="deep-purple"] .md-typeset [id] .headerlink:focus {
-  color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-nav__link:focus,
-[data-md-color-accent="deep-purple"] .md-nav__link:hover {
-  color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="deep-purple"] .md-search-result__link:hover {
-  background-color: rgba(124, 77, 255, 0.1); }
-
-[data-md-color-accent="deep-purple"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #7c4dff; }
-
-[data-md-color-accent="deep-purple"] .md-source-file:hover::before {
-  background-color: #7c4dff; }
-
-button[data-md-color-accent="indigo"] {
-  background-color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-typeset a:hover,
-[data-md-color-accent="indigo"] .md-typeset a:active {
-  color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="indigo"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="indigo"] .md-typeset .md-clipboard:active::before {
-  color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="indigo"] .md-typeset .footnote li:target .footnote-backref {
-  color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="indigo"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="indigo"] .md-typeset [id] .headerlink:focus {
-  color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-nav__link:focus,
-[data-md-color-accent="indigo"] .md-nav__link:hover {
-  color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="indigo"] .md-search-result__link:hover {
-  background-color: rgba(83, 109, 254, 0.1); }
-
-[data-md-color-accent="indigo"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #536dfe; }
-
-[data-md-color-accent="indigo"] .md-source-file:hover::before {
-  background-color: #536dfe; }
-
-button[data-md-color-accent="blue"] {
-  background-color: #448aff; }
-
-[data-md-color-accent="blue"] .md-typeset a:hover,
-[data-md-color-accent="blue"] .md-typeset a:active {
-  color: #448aff; }
-
-[data-md-color-accent="blue"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="blue"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #448aff; }
-
-[data-md-color-accent="blue"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="blue"] .md-typeset .md-clipboard:active::before {
-  color: #448aff; }
-
-[data-md-color-accent="blue"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="blue"] .md-typeset .footnote li:target .footnote-backref {
-  color: #448aff; }
-
-[data-md-color-accent="blue"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="blue"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="blue"] .md-typeset [id] .headerlink:focus {
-  color: #448aff; }
-
-[data-md-color-accent="blue"] .md-nav__link:focus,
-[data-md-color-accent="blue"] .md-nav__link:hover {
-  color: #448aff; }
-
-[data-md-color-accent="blue"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #448aff; }
-
-[data-md-color-accent="blue"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="blue"] .md-search-result__link:hover {
-  background-color: rgba(68, 138, 255, 0.1); }
-
-[data-md-color-accent="blue"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #448aff; }
-
-[data-md-color-accent="blue"] .md-source-file:hover::before {
-  background-color: #448aff; }
-
-button[data-md-color-accent="light-blue"] {
-  background-color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-typeset a:hover,
-[data-md-color-accent="light-blue"] .md-typeset a:active {
-  color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="light-blue"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="light-blue"] .md-typeset .md-clipboard:active::before {
-  color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="light-blue"] .md-typeset .footnote li:target .footnote-backref {
-  color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="light-blue"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="light-blue"] .md-typeset [id] .headerlink:focus {
-  color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-nav__link:focus,
-[data-md-color-accent="light-blue"] .md-nav__link:hover {
-  color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="light-blue"] .md-search-result__link:hover {
-  background-color: rgba(0, 145, 234, 0.1); }
-
-[data-md-color-accent="light-blue"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #0091ea; }
-
-[data-md-color-accent="light-blue"] .md-source-file:hover::before {
-  background-color: #0091ea; }
-
-button[data-md-color-accent="cyan"] {
-  background-color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-typeset a:hover,
-[data-md-color-accent="cyan"] .md-typeset a:active {
-  color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="cyan"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="cyan"] .md-typeset .md-clipboard:active::before {
-  color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="cyan"] .md-typeset .footnote li:target .footnote-backref {
-  color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="cyan"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="cyan"] .md-typeset [id] .headerlink:focus {
-  color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-nav__link:focus,
-[data-md-color-accent="cyan"] .md-nav__link:hover {
-  color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="cyan"] .md-search-result__link:hover {
-  background-color: rgba(0, 184, 212, 0.1); }
-
-[data-md-color-accent="cyan"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #00b8d4; }
-
-[data-md-color-accent="cyan"] .md-source-file:hover::before {
-  background-color: #00b8d4; }
-
-button[data-md-color-accent="teal"] {
-  background-color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-typeset a:hover,
-[data-md-color-accent="teal"] .md-typeset a:active {
-  color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="teal"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="teal"] .md-typeset .md-clipboard:active::before {
-  color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="teal"] .md-typeset .footnote li:target .footnote-backref {
-  color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="teal"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="teal"] .md-typeset [id] .headerlink:focus {
-  color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-nav__link:focus,
-[data-md-color-accent="teal"] .md-nav__link:hover {
-  color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="teal"] .md-search-result__link:hover {
-  background-color: rgba(0, 191, 165, 0.1); }
-
-[data-md-color-accent="teal"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #00bfa5; }
-
-[data-md-color-accent="teal"] .md-source-file:hover::before {
-  background-color: #00bfa5; }
-
-button[data-md-color-accent="green"] {
-  background-color: #00c853; }
-
-[data-md-color-accent="green"] .md-typeset a:hover,
-[data-md-color-accent="green"] .md-typeset a:active {
-  color: #00c853; }
-
-[data-md-color-accent="green"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="green"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #00c853; }
-
-[data-md-color-accent="green"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="green"] .md-typeset .md-clipboard:active::before {
-  color: #00c853; }
-
-[data-md-color-accent="green"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="green"] .md-typeset .footnote li:target .footnote-backref {
-  color: #00c853; }
-
-[data-md-color-accent="green"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="green"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="green"] .md-typeset [id] .headerlink:focus {
-  color: #00c853; }
-
-[data-md-color-accent="green"] .md-nav__link:focus,
-[data-md-color-accent="green"] .md-nav__link:hover {
-  color: #00c853; }
-
-[data-md-color-accent="green"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #00c853; }
-
-[data-md-color-accent="green"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="green"] .md-search-result__link:hover {
-  background-color: rgba(0, 200, 83, 0.1); }
-
-[data-md-color-accent="green"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #00c853; }
-
-[data-md-color-accent="green"] .md-source-file:hover::before {
-  background-color: #00c853; }
-
-button[data-md-color-accent="light-green"] {
-  background-color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-typeset a:hover,
-[data-md-color-accent="light-green"] .md-typeset a:active {
-  color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="light-green"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="light-green"] .md-typeset .md-clipboard:active::before {
-  color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="light-green"] .md-typeset .footnote li:target .footnote-backref {
-  color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="light-green"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="light-green"] .md-typeset [id] .headerlink:focus {
-  color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-nav__link:focus,
-[data-md-color-accent="light-green"] .md-nav__link:hover {
-  color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="light-green"] .md-search-result__link:hover {
-  background-color: rgba(100, 221, 23, 0.1); }
-
-[data-md-color-accent="light-green"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #64dd17; }
-
-[data-md-color-accent="light-green"] .md-source-file:hover::before {
-  background-color: #64dd17; }
-
-button[data-md-color-accent="lime"] {
-  background-color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-typeset a:hover,
-[data-md-color-accent="lime"] .md-typeset a:active {
-  color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="lime"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="lime"] .md-typeset .md-clipboard:active::before {
-  color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="lime"] .md-typeset .footnote li:target .footnote-backref {
-  color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="lime"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="lime"] .md-typeset [id] .headerlink:focus {
-  color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-nav__link:focus,
-[data-md-color-accent="lime"] .md-nav__link:hover {
-  color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="lime"] .md-search-result__link:hover {
-  background-color: rgba(174, 234, 0, 0.1); }
-
-[data-md-color-accent="lime"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #aeea00; }
-
-[data-md-color-accent="lime"] .md-source-file:hover::before {
-  background-color: #aeea00; }
-
-button[data-md-color-accent="yellow"] {
-  background-color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-typeset a:hover,
-[data-md-color-accent="yellow"] .md-typeset a:active {
-  color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="yellow"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="yellow"] .md-typeset .md-clipboard:active::before {
-  color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="yellow"] .md-typeset .footnote li:target .footnote-backref {
-  color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="yellow"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="yellow"] .md-typeset [id] .headerlink:focus {
-  color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-nav__link:focus,
-[data-md-color-accent="yellow"] .md-nav__link:hover {
-  color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="yellow"] .md-search-result__link:hover {
-  background-color: rgba(255, 214, 0, 0.1); }
-
-[data-md-color-accent="yellow"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ffd600; }
-
-[data-md-color-accent="yellow"] .md-source-file:hover::before {
-  background-color: #ffd600; }
-
-button[data-md-color-accent="amber"] {
-  background-color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-typeset a:hover,
-[data-md-color-accent="amber"] .md-typeset a:active {
-  color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="amber"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="amber"] .md-typeset .md-clipboard:active::before {
-  color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="amber"] .md-typeset .footnote li:target .footnote-backref {
-  color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="amber"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="amber"] .md-typeset [id] .headerlink:focus {
-  color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-nav__link:focus,
-[data-md-color-accent="amber"] .md-nav__link:hover {
-  color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="amber"] .md-search-result__link:hover {
-  background-color: rgba(255, 171, 0, 0.1); }
-
-[data-md-color-accent="amber"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ffab00; }
-
-[data-md-color-accent="amber"] .md-source-file:hover::before {
-  background-color: #ffab00; }
-
-button[data-md-color-accent="orange"] {
-  background-color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-typeset a:hover,
-[data-md-color-accent="orange"] .md-typeset a:active {
-  color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="orange"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="orange"] .md-typeset .md-clipboard:active::before {
-  color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="orange"] .md-typeset .footnote li:target .footnote-backref {
-  color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="orange"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="orange"] .md-typeset [id] .headerlink:focus {
-  color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-nav__link:focus,
-[data-md-color-accent="orange"] .md-nav__link:hover {
-  color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="orange"] .md-search-result__link:hover {
-  background-color: rgba(255, 145, 0, 0.1); }
-
-[data-md-color-accent="orange"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ff9100; }
-
-[data-md-color-accent="orange"] .md-source-file:hover::before {
-  background-color: #ff9100; }
-
-button[data-md-color-accent="deep-orange"] {
-  background-color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-typeset a:hover,
-[data-md-color-accent="deep-orange"] .md-typeset a:active {
-  color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-typeset pre code::-webkit-scrollbar-thumb:hover,
-[data-md-color-accent="deep-orange"] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover {
-  background-color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-typeset .md-clipboard:hover::before,
-[data-md-color-accent="deep-orange"] .md-typeset .md-clipboard:active::before {
-  color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-typeset .footnote li:hover .footnote-backref:hover,
-[data-md-color-accent="deep-orange"] .md-typeset .footnote li:target .footnote-backref {
-  color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-typeset [id]:hover .headerlink:hover,
-[data-md-color-accent="deep-orange"] .md-typeset [id]:target .headerlink,
-[data-md-color-accent="deep-orange"] .md-typeset [id] .headerlink:focus {
-  color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-nav__link:focus,
-[data-md-color-accent="deep-orange"] .md-nav__link:hover {
-  color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-search-result__link[data-md-state="active"], [data-md-color-accent="deep-orange"] .md-search-result__link:hover {
-  background-color: rgba(255, 110, 64, 0.1); }
-
-[data-md-color-accent="deep-orange"] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-  background-color: #ff6e40; }
-
-[data-md-color-accent="deep-orange"] .md-source-file:hover::before {
-  background-color: #ff6e40; }
-
-@media only screen and (max-width: 59.9375em) {
-  [data-md-color-primary="red"] .md-nav__source {
-    background-color: rgba(190, 66, 64, 0.9675); }
-  [data-md-color-primary="pink"] .md-nav__source {
-    background-color: rgba(185, 24, 79, 0.9675); }
-  [data-md-color-primary="purple"] .md-nav__source {
-    background-color: rgba(136, 57, 150, 0.9675); }
-  [data-md-color-primary="deep-purple"] .md-nav__source {
-    background-color: rgba(100, 69, 154, 0.9675); }
-  [data-md-color-primary="indigo"] .md-nav__source {
-    background-color: rgba(50, 64, 144, 0.9675); }
-  [data-md-color-primary="blue"] .md-nav__source {
-    background-color: rgba(26, 119, 193, 0.9675); }
-  [data-md-color-primary="light-blue"] .md-nav__source {
-    background-color: rgba(2, 134, 194, 0.9675); }
-  [data-md-color-primary="cyan"] .md-nav__source {
-    background-color: rgba(0, 150, 169, 0.9675); }
-  [data-md-color-primary="teal"] .md-nav__source {
-    background-color: rgba(0, 119, 108, 0.9675); }
-  [data-md-color-primary="green"] .md-nav__source {
-    background-color: rgba(60, 139, 64, 0.9675); }
-  [data-md-color-primary="light-green"] .md-nav__source {
-    background-color: rgba(99, 142, 53, 0.9675); }
-  [data-md-color-primary="lime"] .md-nav__source {
-    background-color: rgba(153, 161, 41, 0.9675); }
-  [data-md-color-primary="yellow"] .md-nav__source {
-    background-color: rgba(198, 134, 29, 0.9675); }
-  [data-md-color-primary="amber"] .md-nav__source {
-    background-color: rgba(203, 127, 0, 0.9675); }
-  [data-md-color-primary="orange"] .md-nav__source {
-    background-color: rgba(200, 111, 0, 0.9675); }
-  [data-md-color-primary="deep-orange"] .md-nav__source {
-    background-color: rgba(203, 89, 53, 0.9675); }
-  [data-md-color-primary="brown"] .md-nav__source {
-    background-color: rgba(96, 68, 57, 0.9675); }
-  [data-md-color-primary="grey"] .md-nav__source {
-    background-color: rgba(93, 93, 93, 0.9675); }
-  [data-md-color-primary="blue-grey"] .md-nav__source {
-    background-color: rgba(67, 88, 97, 0.9675); }
-  [data-md-color-primary="white"] .md-nav__source {
-    background-color: rgba(0, 0, 0, 0.07);
-    color: rgba(0, 0, 0, 0.87); } }
-
-@media only screen and (max-width: 76.1875em) {
-  html [data-md-color-primary="red"] .md-nav--primary .md-nav__title--site {
-    background-color: #ef5350; }
-  html [data-md-color-primary="pink"] .md-nav--primary .md-nav__title--site {
-    background-color: #e91e63; }
-  html [data-md-color-primary="purple"] .md-nav--primary .md-nav__title--site {
-    background-color: #ab47bc; }
-  html [data-md-color-primary="deep-purple"] .md-nav--primary .md-nav__title--site {
-    background-color: #7e57c2; }
-  html [data-md-color-primary="indigo"] .md-nav--primary .md-nav__title--site {
-    background-color: #3f51b5; }
-  html [data-md-color-primary="blue"] .md-nav--primary .md-nav__title--site {
-    background-color: #2196f3; }
-  html [data-md-color-primary="light-blue"] .md-nav--primary .md-nav__title--site {
-    background-color: #03a9f4; }
-  html [data-md-color-primary="cyan"] .md-nav--primary .md-nav__title--site {
-    background-color: #00bcd4; }
-  html [data-md-color-primary="teal"] .md-nav--primary .md-nav__title--site {
-    background-color: #009688; }
-  html [data-md-color-primary="green"] .md-nav--primary .md-nav__title--site {
-    background-color: #4caf50; }
-  html [data-md-color-primary="light-green"] .md-nav--primary .md-nav__title--site {
-    background-color: #7cb342; }
-  html [data-md-color-primary="lime"] .md-nav--primary .md-nav__title--site {
-    background-color: #c0ca33; }
-  html [data-md-color-primary="yellow"] .md-nav--primary .md-nav__title--site {
-    background-color: #f9a825; }
-  html [data-md-color-primary="amber"] .md-nav--primary .md-nav__title--site {
-    background-color: #ffa000; }
-  html [data-md-color-primary="orange"] .md-nav--primary .md-nav__title--site {
-    background-color: #fb8c00; }
-  html [data-md-color-primary="deep-orange"] .md-nav--primary .md-nav__title--site {
-    background-color: #ff7043; }
-  html [data-md-color-primary="brown"] .md-nav--primary .md-nav__title--site {
-    background-color: #795548; }
-  html [data-md-color-primary="grey"] .md-nav--primary .md-nav__title--site {
-    background-color: #757575; }
-  html [data-md-color-primary="blue-grey"] .md-nav--primary .md-nav__title--site {
-    background-color: #546e7a; }
-  html [data-md-color-primary="white"] .md-nav--primary .md-nav__title--site {
-    background-color: white;
-    color: rgba(0, 0, 0, 0.87); }
-  [data-md-color-primary="white"] .md-hero {
-    border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07); } }
-
-@media only screen and (min-width: 76.25em) {
-  [data-md-color-primary="red"] .md-tabs {
-    background-color: #ef5350; }
-  [data-md-color-primary="pink"] .md-tabs {
-    background-color: #e91e63; }
-  [data-md-color-primary="purple"] .md-tabs {
-    background-color: #ab47bc; }
-  [data-md-color-primary="deep-purple"] .md-tabs {
-    background-color: #7e57c2; }
-  [data-md-color-primary="indigo"] .md-tabs {
-    background-color: #3f51b5; }
-  [data-md-color-primary="blue"] .md-tabs {
-    background-color: #2196f3; }
-  [data-md-color-primary="light-blue"] .md-tabs {
-    background-color: #03a9f4; }
-  [data-md-color-primary="cyan"] .md-tabs {
-    background-color: #00bcd4; }
-  [data-md-color-primary="teal"] .md-tabs {
-    background-color: #009688; }
-  [data-md-color-primary="green"] .md-tabs {
-    background-color: #4caf50; }
-  [data-md-color-primary="light-green"] .md-tabs {
-    background-color: #7cb342; }
-  [data-md-color-primary="lime"] .md-tabs {
-    background-color: #c0ca33; }
-  [data-md-color-primary="yellow"] .md-tabs {
-    background-color: #f9a825; }
-  [data-md-color-primary="amber"] .md-tabs {
-    background-color: #ffa000; }
-  [data-md-color-primary="orange"] .md-tabs {
-    background-color: #fb8c00; }
-  [data-md-color-primary="deep-orange"] .md-tabs {
-    background-color: #ff7043; }
-  [data-md-color-primary="brown"] .md-tabs {
-    background-color: #795548; }
-  [data-md-color-primary="grey"] .md-tabs {
-    background-color: #757575; }
-  [data-md-color-primary="blue-grey"] .md-tabs {
-    background-color: #546e7a; }
-  [data-md-color-primary="white"] .md-tabs {
-    border-bottom: 0.1rem solid rgba(0, 0, 0, 0.07);
-    background-color: white;
-    color: rgba(0, 0, 0, 0.87); } }
-
-@media only screen and (min-width: 60em) {
-  [data-md-color-primary="white"] .md-search__input {
-    background-color: rgba(0, 0, 0, 0.07); }
-    [data-md-color-primary="white"] .md-search__input::-webkit-input-placeholder {
-      color: rgba(0, 0, 0, 0.54); }
-    [data-md-color-primary="white"] .md-search__input:-ms-input-placeholder {
-      color: rgba(0, 0, 0, 0.54); }
-    [data-md-color-primary="white"] .md-search__input::-ms-input-placeholder {
-      color: rgba(0, 0, 0, 0.54); }
-    [data-md-color-primary="white"] .md-search__input::placeholder {
-      color: rgba(0, 0, 0, 0.54); } }
-
-/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhc3NldHMvc3R5bGVzaGVldHMvYXBwbGljYXRpb24tcGFsZXR0ZS4yMjkxNTEyNi5jc3MiLCJzb3VyY2VSb290IjoiIn0=*/
\ No newline at end of file
diff --git a/assets/stylesheets/application-palette.a8b3c06d.css b/assets/stylesheets/application-palette.a8b3c06d.css
new file mode 100644
index 0000000..e07df05
--- /dev/null
+++ b/assets/stylesheets/application-palette.a8b3c06d.css
@@ -0,0 +1 @@
+button[data-md-color-accent],button[data-md-color-primary]{width:6.5rem;margin-bottom:.2rem;padding:1.2rem .4rem .2rem;-webkit-transition:background-color .25s,opacity .25s;transition:background-color .25s,opacity .25s;border-radius:.1rem;color:#fff;font-size:.64rem;text-align:left;cursor:pointer}button[data-md-color-accent]:hover,button[data-md-color-primary]:hover{opacity:.75}button[data-md-color-primary=red]{background-color:#ef5350}[data-md-color-primary=red] .md-typeset a{color:#ef5350}[data-md-color-primary=red] .md-header,[data-md-color-primary=red] .md-hero{background-color:#ef5350}[data-md-color-primary=red] .md-nav__link--active,[data-md-color-primary=red] .md-nav__link:active{color:#ef5350}[data-md-color-primary=red] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=pink]{background-color:#e91e63}[data-md-color-primary=pink] .md-typeset a{color:#e91e63}[data-md-color-primary=pink] .md-header,[data-md-color-primary=pink] .md-hero{background-color:#e91e63}[data-md-color-primary=pink] .md-nav__link--active,[data-md-color-primary=pink] .md-nav__link:active{color:#e91e63}[data-md-color-primary=pink] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=purple]{background-color:#ab47bc}[data-md-color-primary=purple] .md-typeset a{color:#ab47bc}[data-md-color-primary=purple] .md-header,[data-md-color-primary=purple] .md-hero{background-color:#ab47bc}[data-md-color-primary=purple] .md-nav__link--active,[data-md-color-primary=purple] .md-nav__link:active{color:#ab47bc}[data-md-color-primary=purple] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=deep-purple]{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-typeset a{color:#7e57c2}[data-md-color-primary=deep-purple] .md-header,[data-md-color-primary=deep-purple] .md-hero{background-color:#7e57c2}[data-md-color-primary=deep-purple] .md-nav__link--active,[data-md-color-primary=deep-purple] .md-nav__link:active{color:#7e57c2}[data-md-color-primary=deep-purple] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=indigo]{background-color:#3f51b5}[data-md-color-primary=indigo] .md-typeset a{color:#3f51b5}[data-md-color-primary=indigo] .md-header,[data-md-color-primary=indigo] .md-hero{background-color:#3f51b5}[data-md-color-primary=indigo] .md-nav__link--active,[data-md-color-primary=indigo] .md-nav__link:active{color:#3f51b5}[data-md-color-primary=indigo] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=blue]{background-color:#2196f3}[data-md-color-primary=blue] .md-typeset a{color:#2196f3}[data-md-color-primary=blue] .md-header,[data-md-color-primary=blue] .md-hero{background-color:#2196f3}[data-md-color-primary=blue] .md-nav__link--active,[data-md-color-primary=blue] .md-nav__link:active{color:#2196f3}[data-md-color-primary=blue] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=light-blue]{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-typeset a{color:#03a9f4}[data-md-color-primary=light-blue] .md-header,[data-md-color-primary=light-blue] .md-hero{background-color:#03a9f4}[data-md-color-primary=light-blue] .md-nav__link--active,[data-md-color-primary=light-blue] .md-nav__link:active{color:#03a9f4}[data-md-color-primary=light-blue] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=cyan]{background-color:#00bcd4}[data-md-color-primary=cyan] .md-typeset a{color:#00bcd4}[data-md-color-primary=cyan] .md-header,[data-md-color-primary=cyan] .md-hero{background-color:#00bcd4}[data-md-color-primary=cyan] .md-nav__link--active,[data-md-color-primary=cyan] .md-nav__link:active{color:#00bcd4}[data-md-color-primary=cyan] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=teal]{background-color:#009688}[data-md-color-primary=teal] .md-typeset a{color:#009688}[data-md-color-primary=teal] .md-header,[data-md-color-primary=teal] .md-hero{background-color:#009688}[data-md-color-primary=teal] .md-nav__link--active,[data-md-color-primary=teal] .md-nav__link:active{color:#009688}[data-md-color-primary=teal] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=green]{background-color:#4caf50}[data-md-color-primary=green] .md-typeset a{color:#4caf50}[data-md-color-primary=green] .md-header,[data-md-color-primary=green] .md-hero{background-color:#4caf50}[data-md-color-primary=green] .md-nav__link--active,[data-md-color-primary=green] .md-nav__link:active{color:#4caf50}[data-md-color-primary=green] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=light-green]{background-color:#7cb342}[data-md-color-primary=light-green] .md-typeset a{color:#7cb342}[data-md-color-primary=light-green] .md-header,[data-md-color-primary=light-green] .md-hero{background-color:#7cb342}[data-md-color-primary=light-green] .md-nav__link--active,[data-md-color-primary=light-green] .md-nav__link:active{color:#7cb342}[data-md-color-primary=light-green] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=lime]{background-color:#c0ca33}[data-md-color-primary=lime] .md-typeset a{color:#c0ca33}[data-md-color-primary=lime] .md-header,[data-md-color-primary=lime] .md-hero{background-color:#c0ca33}[data-md-color-primary=lime] .md-nav__link--active,[data-md-color-primary=lime] .md-nav__link:active{color:#c0ca33}[data-md-color-primary=lime] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=yellow]{background-color:#f9a825}[data-md-color-primary=yellow] .md-typeset a{color:#f9a825}[data-md-color-primary=yellow] .md-header,[data-md-color-primary=yellow] .md-hero{background-color:#f9a825}[data-md-color-primary=yellow] .md-nav__link--active,[data-md-color-primary=yellow] .md-nav__link:active{color:#f9a825}[data-md-color-primary=yellow] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=amber]{background-color:#ffa000}[data-md-color-primary=amber] .md-typeset a{color:#ffa000}[data-md-color-primary=amber] .md-header,[data-md-color-primary=amber] .md-hero{background-color:#ffa000}[data-md-color-primary=amber] .md-nav__link--active,[data-md-color-primary=amber] .md-nav__link:active{color:#ffa000}[data-md-color-primary=amber] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=orange]{background-color:#fb8c00}[data-md-color-primary=orange] .md-typeset a{color:#fb8c00}[data-md-color-primary=orange] .md-header,[data-md-color-primary=orange] .md-hero{background-color:#fb8c00}[data-md-color-primary=orange] .md-nav__link--active,[data-md-color-primary=orange] .md-nav__link:active{color:#fb8c00}[data-md-color-primary=orange] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=deep-orange]{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-typeset a{color:#ff7043}[data-md-color-primary=deep-orange] .md-header,[data-md-color-primary=deep-orange] .md-hero{background-color:#ff7043}[data-md-color-primary=deep-orange] .md-nav__link--active,[data-md-color-primary=deep-orange] .md-nav__link:active{color:#ff7043}[data-md-color-primary=deep-orange] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=brown]{background-color:#795548}[data-md-color-primary=brown] .md-typeset a{color:#795548}[data-md-color-primary=brown] .md-header,[data-md-color-primary=brown] .md-hero{background-color:#795548}[data-md-color-primary=brown] .md-nav__link--active,[data-md-color-primary=brown] .md-nav__link:active{color:#795548}[data-md-color-primary=brown] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=grey]{background-color:#757575}[data-md-color-primary=grey] .md-typeset a{color:#757575}[data-md-color-primary=grey] .md-header,[data-md-color-primary=grey] .md-hero{background-color:#757575}[data-md-color-primary=grey] .md-nav__link--active,[data-md-color-primary=grey] .md-nav__link:active{color:#757575}[data-md-color-primary=grey] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=blue-grey]{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-typeset a{color:#546e7a}[data-md-color-primary=blue-grey] .md-header,[data-md-color-primary=blue-grey] .md-hero{background-color:#546e7a}[data-md-color-primary=blue-grey] .md-nav__link--active,[data-md-color-primary=blue-grey] .md-nav__link:active{color:#546e7a}[data-md-color-primary=blue-grey] .md-nav__item--nested>.md-nav__link{color:inherit}button[data-md-color-primary=white]{box-shadow:inset 0 0 .05rem rgba(0,0,0,.54)}[data-md-color-primary=white] .md-header,[data-md-color-primary=white] .md-hero,button[data-md-color-primary=white]{background-color:#fff;color:rgba(0,0,0,.87)}[data-md-color-primary=white] .md-hero--expand{border-bottom:.05rem solid rgba(0,0,0,.07)}[data-md-color-primary=black] .md-header,[data-md-color-primary=black] .md-hero,button[data-md-color-primary=black]{background-color:#000}button[data-md-color-accent=red]{background-color:#ff1744}[data-md-color-accent=red] .md-typeset a:active,[data-md-color-accent=red] .md-typeset a:hover{color:#ff1744}[data-md-color-accent=red] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=red] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-nav__link:focus,[data-md-color-accent=red] .md-nav__link:hover,[data-md-color-accent=red] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=red] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=red] .md-typeset .md-clipboard:active:before,[data-md-color-accent=red] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=red] .md-typeset [id] .headerlink:focus,[data-md-color-accent=red] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=red] .md-typeset [id]:target .headerlink{color:#ff1744}[data-md-color-accent=red] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-search-result__link:hover,[data-md-color-accent=red] .md-search-result__link[data-md-state=active]{background-color:rgba(255,23,68,.1)}[data-md-color-accent=red] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff1744}[data-md-color-accent=red] .md-source-file:hover:before{background-color:#ff1744}button[data-md-color-accent=pink]{background-color:#f50057}[data-md-color-accent=pink] .md-typeset a:active,[data-md-color-accent=pink] .md-typeset a:hover{color:#f50057}[data-md-color-accent=pink] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=pink] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-nav__link:focus,[data-md-color-accent=pink] .md-nav__link:hover,[data-md-color-accent=pink] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=pink] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=pink] .md-typeset .md-clipboard:active:before,[data-md-color-accent=pink] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=pink] .md-typeset [id] .headerlink:focus,[data-md-color-accent=pink] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=pink] .md-typeset [id]:target .headerlink{color:#f50057}[data-md-color-accent=pink] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-search-result__link:hover,[data-md-color-accent=pink] .md-search-result__link[data-md-state=active]{background-color:rgba(245,0,87,.1)}[data-md-color-accent=pink] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#f50057}[data-md-color-accent=pink] .md-source-file:hover:before{background-color:#f50057}button[data-md-color-accent=purple]{background-color:#e040fb}[data-md-color-accent=purple] .md-typeset a:active,[data-md-color-accent=purple] .md-typeset a:hover{color:#e040fb}[data-md-color-accent=purple] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=purple] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-nav__link:focus,[data-md-color-accent=purple] .md-nav__link:hover,[data-md-color-accent=purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=purple] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=purple] .md-typeset .md-clipboard:active:before,[data-md-color-accent=purple] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=purple] .md-typeset [id]:target .headerlink{color:#e040fb}[data-md-color-accent=purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-search-result__link:hover,[data-md-color-accent=purple] .md-search-result__link[data-md-state=active]{background-color:rgba(224,64,251,.1)}[data-md-color-accent=purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#e040fb}[data-md-color-accent=purple] .md-source-file:hover:before{background-color:#e040fb}button[data-md-color-accent=deep-purple]{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset a:active,[data-md-color-accent=deep-purple] .md-typeset a:hover{color:#7c4dff}[data-md-color-accent=deep-purple] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-purple] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-nav__link:focus,[data-md-color-accent=deep-purple] .md-nav__link:hover,[data-md-color-accent=deep-purple] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-purple] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=deep-purple] .md-typeset .md-clipboard:active:before,[data-md-color-accent=deep-purple] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=deep-purple] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-purple] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-purple] .md-typeset [id]:target .headerlink{color:#7c4dff}[data-md-color-accent=deep-purple] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-search-result__link:hover,[data-md-color-accent=deep-purple] .md-search-result__link[data-md-state=active]{background-color:rgba(124,77,255,.1)}[data-md-color-accent=deep-purple] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#7c4dff}[data-md-color-accent=deep-purple] .md-source-file:hover:before{background-color:#7c4dff}button[data-md-color-accent=indigo]{background-color:#536dfe}[data-md-color-accent=indigo] .md-typeset a:active,[data-md-color-accent=indigo] .md-typeset a:hover{color:#536dfe}[data-md-color-accent=indigo] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=indigo] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-nav__link:focus,[data-md-color-accent=indigo] .md-nav__link:hover,[data-md-color-accent=indigo] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=indigo] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=indigo] .md-typeset .md-clipboard:active:before,[data-md-color-accent=indigo] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=indigo] .md-typeset [id] .headerlink:focus,[data-md-color-accent=indigo] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=indigo] .md-typeset [id]:target .headerlink{color:#536dfe}[data-md-color-accent=indigo] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-search-result__link:hover,[data-md-color-accent=indigo] .md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}[data-md-color-accent=indigo] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}[data-md-color-accent=indigo] .md-source-file:hover:before{background-color:#536dfe}button[data-md-color-accent=blue]{background-color:#448aff}[data-md-color-accent=blue] .md-typeset a:active,[data-md-color-accent=blue] .md-typeset a:hover{color:#448aff}[data-md-color-accent=blue] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=blue] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-nav__link:focus,[data-md-color-accent=blue] .md-nav__link:hover,[data-md-color-accent=blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=blue] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=blue] .md-typeset .md-clipboard:active:before,[data-md-color-accent=blue] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=blue] .md-typeset [id]:target .headerlink{color:#448aff}[data-md-color-accent=blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-search-result__link:hover,[data-md-color-accent=blue] .md-search-result__link[data-md-state=active]{background-color:rgba(68,138,255,.1)}[data-md-color-accent=blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#448aff}[data-md-color-accent=blue] .md-source-file:hover:before{background-color:#448aff}button[data-md-color-accent=light-blue]{background-color:#0091ea}[data-md-color-accent=light-blue] .md-typeset a:active,[data-md-color-accent=light-blue] .md-typeset a:hover{color:#0091ea}[data-md-color-accent=light-blue] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-blue] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-nav__link:focus,[data-md-color-accent=light-blue] .md-nav__link:hover,[data-md-color-accent=light-blue] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-blue] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=light-blue] .md-typeset .md-clipboard:active:before,[data-md-color-accent=light-blue] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=light-blue] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-blue] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-blue] .md-typeset [id]:target .headerlink{color:#0091ea}[data-md-color-accent=light-blue] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-search-result__link:hover,[data-md-color-accent=light-blue] .md-search-result__link[data-md-state=active]{background-color:rgba(0,145,234,.1)}[data-md-color-accent=light-blue] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#0091ea}[data-md-color-accent=light-blue] .md-source-file:hover:before{background-color:#0091ea}button[data-md-color-accent=cyan]{background-color:#00b8d4}[data-md-color-accent=cyan] .md-typeset a:active,[data-md-color-accent=cyan] .md-typeset a:hover{color:#00b8d4}[data-md-color-accent=cyan] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=cyan] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-nav__link:focus,[data-md-color-accent=cyan] .md-nav__link:hover,[data-md-color-accent=cyan] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=cyan] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=cyan] .md-typeset .md-clipboard:active:before,[data-md-color-accent=cyan] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=cyan] .md-typeset [id] .headerlink:focus,[data-md-color-accent=cyan] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=cyan] .md-typeset [id]:target .headerlink{color:#00b8d4}[data-md-color-accent=cyan] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-search-result__link:hover,[data-md-color-accent=cyan] .md-search-result__link[data-md-state=active]{background-color:rgba(0,184,212,.1)}[data-md-color-accent=cyan] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00b8d4}[data-md-color-accent=cyan] .md-source-file:hover:before{background-color:#00b8d4}button[data-md-color-accent=teal]{background-color:#00bfa5}[data-md-color-accent=teal] .md-typeset a:active,[data-md-color-accent=teal] .md-typeset a:hover{color:#00bfa5}[data-md-color-accent=teal] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=teal] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-nav__link:focus,[data-md-color-accent=teal] .md-nav__link:hover,[data-md-color-accent=teal] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=teal] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=teal] .md-typeset .md-clipboard:active:before,[data-md-color-accent=teal] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=teal] .md-typeset [id] .headerlink:focus,[data-md-color-accent=teal] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=teal] .md-typeset [id]:target .headerlink{color:#00bfa5}[data-md-color-accent=teal] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-search-result__link:hover,[data-md-color-accent=teal] .md-search-result__link[data-md-state=active]{background-color:rgba(0,191,165,.1)}[data-md-color-accent=teal] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00bfa5}[data-md-color-accent=teal] .md-source-file:hover:before{background-color:#00bfa5}button[data-md-color-accent=green]{background-color:#00c853}[data-md-color-accent=green] .md-typeset a:active,[data-md-color-accent=green] .md-typeset a:hover{color:#00c853}[data-md-color-accent=green] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=green] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-nav__link:focus,[data-md-color-accent=green] .md-nav__link:hover,[data-md-color-accent=green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=green] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=green] .md-typeset .md-clipboard:active:before,[data-md-color-accent=green] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=green] .md-typeset [id]:target .headerlink{color:#00c853}[data-md-color-accent=green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-search-result__link:hover,[data-md-color-accent=green] .md-search-result__link[data-md-state=active]{background-color:rgba(0,200,83,.1)}[data-md-color-accent=green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#00c853}[data-md-color-accent=green] .md-source-file:hover:before{background-color:#00c853}button[data-md-color-accent=light-green]{background-color:#64dd17}[data-md-color-accent=light-green] .md-typeset a:active,[data-md-color-accent=light-green] .md-typeset a:hover{color:#64dd17}[data-md-color-accent=light-green] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=light-green] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-nav__link:focus,[data-md-color-accent=light-green] .md-nav__link:hover,[data-md-color-accent=light-green] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=light-green] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=light-green] .md-typeset .md-clipboard:active:before,[data-md-color-accent=light-green] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=light-green] .md-typeset [id] .headerlink:focus,[data-md-color-accent=light-green] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=light-green] .md-typeset [id]:target .headerlink{color:#64dd17}[data-md-color-accent=light-green] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-search-result__link:hover,[data-md-color-accent=light-green] .md-search-result__link[data-md-state=active]{background-color:rgba(100,221,23,.1)}[data-md-color-accent=light-green] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#64dd17}[data-md-color-accent=light-green] .md-source-file:hover:before{background-color:#64dd17}button[data-md-color-accent=lime]{background-color:#aeea00}[data-md-color-accent=lime] .md-typeset a:active,[data-md-color-accent=lime] .md-typeset a:hover{color:#aeea00}[data-md-color-accent=lime] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=lime] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-nav__link:focus,[data-md-color-accent=lime] .md-nav__link:hover,[data-md-color-accent=lime] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=lime] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=lime] .md-typeset .md-clipboard:active:before,[data-md-color-accent=lime] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=lime] .md-typeset [id] .headerlink:focus,[data-md-color-accent=lime] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=lime] .md-typeset [id]:target .headerlink{color:#aeea00}[data-md-color-accent=lime] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-search-result__link:hover,[data-md-color-accent=lime] .md-search-result__link[data-md-state=active]{background-color:rgba(174,234,0,.1)}[data-md-color-accent=lime] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#aeea00}[data-md-color-accent=lime] .md-source-file:hover:before{background-color:#aeea00}button[data-md-color-accent=yellow]{background-color:#ffd600}[data-md-color-accent=yellow] .md-typeset a:active,[data-md-color-accent=yellow] .md-typeset a:hover{color:#ffd600}[data-md-color-accent=yellow] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=yellow] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-nav__link:focus,[data-md-color-accent=yellow] .md-nav__link:hover,[data-md-color-accent=yellow] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=yellow] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=yellow] .md-typeset .md-clipboard:active:before,[data-md-color-accent=yellow] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=yellow] .md-typeset [id] .headerlink:focus,[data-md-color-accent=yellow] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=yellow] .md-typeset [id]:target .headerlink{color:#ffd600}[data-md-color-accent=yellow] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-search-result__link:hover,[data-md-color-accent=yellow] .md-search-result__link[data-md-state=active]{background-color:rgba(255,214,0,.1)}[data-md-color-accent=yellow] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffd600}[data-md-color-accent=yellow] .md-source-file:hover:before{background-color:#ffd600}button[data-md-color-accent=amber]{background-color:#ffab00}[data-md-color-accent=amber] .md-typeset a:active,[data-md-color-accent=amber] .md-typeset a:hover{color:#ffab00}[data-md-color-accent=amber] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=amber] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-nav__link:focus,[data-md-color-accent=amber] .md-nav__link:hover,[data-md-color-accent=amber] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=amber] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=amber] .md-typeset .md-clipboard:active:before,[data-md-color-accent=amber] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=amber] .md-typeset [id] .headerlink:focus,[data-md-color-accent=amber] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=amber] .md-typeset [id]:target .headerlink{color:#ffab00}[data-md-color-accent=amber] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-search-result__link:hover,[data-md-color-accent=amber] .md-search-result__link[data-md-state=active]{background-color:rgba(255,171,0,.1)}[data-md-color-accent=amber] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ffab00}[data-md-color-accent=amber] .md-source-file:hover:before{background-color:#ffab00}button[data-md-color-accent=orange]{background-color:#ff9100}[data-md-color-accent=orange] .md-typeset a:active,[data-md-color-accent=orange] .md-typeset a:hover{color:#ff9100}[data-md-color-accent=orange] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=orange] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-nav__link:focus,[data-md-color-accent=orange] .md-nav__link:hover,[data-md-color-accent=orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=orange] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=orange] .md-typeset .md-clipboard:active:before,[data-md-color-accent=orange] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=orange] .md-typeset [id]:target .headerlink{color:#ff9100}[data-md-color-accent=orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-search-result__link:hover,[data-md-color-accent=orange] .md-search-result__link[data-md-state=active]{background-color:rgba(255,145,0,.1)}[data-md-color-accent=orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff9100}[data-md-color-accent=orange] .md-source-file:hover:before{background-color:#ff9100}button[data-md-color-accent=deep-orange]{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset a:active,[data-md-color-accent=deep-orange] .md-typeset a:hover{color:#ff6e40}[data-md-color-accent=deep-orange] .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,[data-md-color-accent=deep-orange] .md-typeset pre code::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-nav__link:focus,[data-md-color-accent=deep-orange] .md-nav__link:hover,[data-md-color-accent=deep-orange] .md-typeset .footnote li:hover .footnote-backref:hover,[data-md-color-accent=deep-orange] .md-typeset .footnote li:target .footnote-backref,[data-md-color-accent=deep-orange] .md-typeset .md-clipboard:active:before,[data-md-color-accent=deep-orange] .md-typeset .md-clipboard:hover:before,[data-md-color-accent=deep-orange] .md-typeset [id] .headerlink:focus,[data-md-color-accent=deep-orange] .md-typeset [id]:hover .headerlink:hover,[data-md-color-accent=deep-orange] .md-typeset [id]:target .headerlink{color:#ff6e40}[data-md-color-accent=deep-orange] .md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-search-result__link:hover,[data-md-color-accent=deep-orange] .md-search-result__link[data-md-state=active]{background-color:rgba(255,110,64,.1)}[data-md-color-accent=deep-orange] .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#ff6e40}[data-md-color-accent=deep-orange] .md-source-file:hover:before{background-color:#ff6e40}@media only screen and (max-width:59.9375em){[data-md-color-primary=red] .md-nav__source{background-color:rgba(190,66,64,.9675)}[data-md-color-primary=pink] .md-nav__source{background-color:rgba(185,24,79,.9675)}[data-md-color-primary=purple] .md-nav__source{background-color:rgba(136,57,150,.9675)}[data-md-color-primary=deep-purple] .md-nav__source{background-color:rgba(100,69,154,.9675)}[data-md-color-primary=indigo] .md-nav__source{background-color:rgba(50,64,144,.9675)}[data-md-color-primary=blue] .md-nav__source{background-color:rgba(26,119,193,.9675)}[data-md-color-primary=light-blue] .md-nav__source{background-color:rgba(2,134,194,.9675)}[data-md-color-primary=cyan] .md-nav__source{background-color:rgba(0,150,169,.9675)}[data-md-color-primary=teal] .md-nav__source{background-color:rgba(0,119,108,.9675)}[data-md-color-primary=green] .md-nav__source{background-color:rgba(60,139,64,.9675)}[data-md-color-primary=light-green] .md-nav__source{background-color:rgba(99,142,53,.9675)}[data-md-color-primary=lime] .md-nav__source{background-color:rgba(153,161,41,.9675)}[data-md-color-primary=yellow] .md-nav__source{background-color:rgba(198,134,29,.9675)}[data-md-color-primary=amber] .md-nav__source{background-color:rgba(203,127,0,.9675)}[data-md-color-primary=orange] .md-nav__source{background-color:rgba(200,111,0,.9675)}[data-md-color-primary=deep-orange] .md-nav__source{background-color:rgba(203,89,53,.9675)}[data-md-color-primary=brown] .md-nav__source{background-color:rgba(96,68,57,.9675)}[data-md-color-primary=grey] .md-nav__source{background-color:rgba(93,93,93,.9675)}[data-md-color-primary=blue-grey] .md-nav__source{background-color:rgba(67,88,97,.9675)}[data-md-color-primary=white] .md-nav__source{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.87)}[data-md-color-primary=black] .md-nav__source{background-color:#404040}}@media only screen and (max-width:76.1875em){html [data-md-color-primary=red] .md-nav--primary .md-nav__title--site{background-color:#ef5350}html [data-md-color-primary=pink] .md-nav--primary .md-nav__title--site{background-color:#e91e63}html [data-md-color-primary=purple] .md-nav--primary .md-nav__title--site{background-color:#ab47bc}html [data-md-color-primary=deep-purple] .md-nav--primary .md-nav__title--site{background-color:#7e57c2}html [data-md-color-primary=indigo] .md-nav--primary .md-nav__title--site{background-color:#3f51b5}html [data-md-color-primary=blue] .md-nav--primary .md-nav__title--site{background-color:#2196f3}html [data-md-color-primary=light-blue] .md-nav--primary .md-nav__title--site{background-color:#03a9f4}html [data-md-color-primary=cyan] .md-nav--primary .md-nav__title--site{background-color:#00bcd4}html [data-md-color-primary=teal] .md-nav--primary .md-nav__title--site{background-color:#009688}html [data-md-color-primary=green] .md-nav--primary .md-nav__title--site{background-color:#4caf50}html [data-md-color-primary=light-green] .md-nav--primary .md-nav__title--site{background-color:#7cb342}html [data-md-color-primary=lime] .md-nav--primary .md-nav__title--site{background-color:#c0ca33}html [data-md-color-primary=yellow] .md-nav--primary .md-nav__title--site{background-color:#f9a825}html [data-md-color-primary=amber] .md-nav--primary .md-nav__title--site{background-color:#ffa000}html [data-md-color-primary=orange] .md-nav--primary .md-nav__title--site{background-color:#fb8c00}html [data-md-color-primary=deep-orange] .md-nav--primary .md-nav__title--site{background-color:#ff7043}html [data-md-color-primary=brown] .md-nav--primary .md-nav__title--site{background-color:#795548}html [data-md-color-primary=grey] .md-nav--primary .md-nav__title--site{background-color:#757575}html [data-md-color-primary=blue-grey] .md-nav--primary .md-nav__title--site{background-color:#546e7a}html [data-md-color-primary=white] .md-nav--primary .md-nav__title--site{background-color:#fff;color:rgba(0,0,0,.87)}[data-md-color-primary=white] .md-hero{border-bottom:.05rem solid rgba(0,0,0,.07)}html [data-md-color-primary=black] .md-nav--primary .md-nav__title--site{background-color:#000}}@media only screen and (min-width:76.25em){[data-md-color-primary=red] .md-tabs{background-color:#ef5350}[data-md-color-primary=pink] .md-tabs{background-color:#e91e63}[data-md-color-primary=purple] .md-tabs{background-color:#ab47bc}[data-md-color-primary=deep-purple] .md-tabs{background-color:#7e57c2}[data-md-color-primary=indigo] .md-tabs{background-color:#3f51b5}[data-md-color-primary=blue] .md-tabs{background-color:#2196f3}[data-md-color-primary=light-blue] .md-tabs{background-color:#03a9f4}[data-md-color-primary=cyan] .md-tabs{background-color:#00bcd4}[data-md-color-primary=teal] .md-tabs{background-color:#009688}[data-md-color-primary=green] .md-tabs{background-color:#4caf50}[data-md-color-primary=light-green] .md-tabs{background-color:#7cb342}[data-md-color-primary=lime] .md-tabs{background-color:#c0ca33}[data-md-color-primary=yellow] .md-tabs{background-color:#f9a825}[data-md-color-primary=amber] .md-tabs{background-color:#ffa000}[data-md-color-primary=orange] .md-tabs{background-color:#fb8c00}[data-md-color-primary=deep-orange] .md-tabs{background-color:#ff7043}[data-md-color-primary=brown] .md-tabs{background-color:#795548}[data-md-color-primary=grey] .md-tabs{background-color:#757575}[data-md-color-primary=blue-grey] .md-tabs{background-color:#546e7a}[data-md-color-primary=white] .md-tabs{border-bottom:.05rem solid rgba(0,0,0,.07);background-color:#fff;color:rgba(0,0,0,.87)}[data-md-color-primary=black] .md-tabs{background-color:#000}}@media only screen and (min-width:60em){[data-md-color-primary=white] .md-search__input{background-color:rgba(0,0,0,.07)}[data-md-color-primary=white] .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=white] .md-search__input::-moz-placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=white] .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=white] .md-search__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=white] .md-search__input::placeholder{color:rgba(0,0,0,.54)}[data-md-color-primary=black] .md-search__input{background-color:hsla(0,0%,100%,.3)}}
\ No newline at end of file
diff --git a/assets/stylesheets/application.1b62728e.css b/assets/stylesheets/application.1b62728e.css
new file mode 100644
index 0000000..3840dd1
--- /dev/null
+++ b/assets/stylesheets/application.1b62728e.css
@@ -0,0 +1 @@
+html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;-ms-text-size-adjust:none;text-size-adjust:none}body{margin:0}hr{overflow:visible;box-sizing:content-box}a{-webkit-text-decoration-skip:objects}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}small,sub,sup{font-size:80%}sub,sup{position:relative;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}table{border-collapse:separate;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{margin:0;padding:0;border:0;outline-style:none;background:transparent;font-size:inherit}input{border:0;outline:0}.md-clipboard:before,.md-icon,.md-nav__button,.md-nav__link:after,.md-nav__title:before,.md-search-result__article--document:before,.md-source-file:before,.md-typeset .admonition>.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset .critic.comment:before,.md-typeset .footnote-backref,.md-typeset .task-list-control .task-list-indicator:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before,.md-typeset summary:after{font-family:Material Icons;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none;white-space:nowrap;speak:none;word-wrap:normal;direction:ltr}.md-content__icon,.md-footer-nav__button,.md-header-nav__button,.md-nav__button,.md-nav__title:before,.md-search-result__article--document:before{display:inline-block;margin:.2rem;padding:.4rem;font-size:1.2rem;cursor:pointer}.md-icon--arrow-back:before{content:""}.md-icon--arrow-forward:before{content:""}.md-icon--menu:before{content:""}.md-icon--search:before{content:""}[dir=rtl] .md-icon--arrow-back:before{content:""}[dir=rtl] .md-icon--arrow-forward:before{content:""}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,input{color:rgba(0,0,0,.87);font-feature-settings:"kern","liga";font-family:Helvetica Neue,Helvetica,Arial,sans-serif}code,kbd,pre{color:rgba(0,0,0,.87);font-feature-settings:"kern";font-family:Courier New,Courier,monospace}.md-typeset{font-size:.8rem;line-height:1.6;-webkit-print-color-adjust:exact}.md-typeset blockquote,.md-typeset ol,.md-typeset p,.md-typeset ul{margin:1em 0}.md-typeset h1{margin:0 0 2rem;color:rgba(0,0,0,.54);font-size:1.5625rem;line-height:1.3}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{margin:2rem 0 .8rem;font-size:1.25rem;line-height:1.4}.md-typeset h3{margin:1.6rem 0 .8rem;font-size:1rem;font-weight:400;letter-spacing:-.01em;line-height:1.5}.md-typeset h2+h3{margin-top:.8rem}.md-typeset h4{font-size:.8rem}.md-typeset h4,.md-typeset h5,.md-typeset h6{margin:.8rem 0;font-weight:700;letter-spacing:-.01em}.md-typeset h5,.md-typeset h6{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset h5{text-transform:uppercase}.md-typeset hr{margin:1.5em 0;border-bottom:.05rem dotted rgba(0,0,0,.26)}.md-typeset a{color:#3f51b5;word-break:break-word}.md-typeset a,.md-typeset a:before{-webkit-transition:color .125s;transition:color .125s}.md-typeset a:active,.md-typeset a:hover{color:#536dfe}.md-typeset code,.md-typeset pre{background-color:hsla(0,0%,92.5%,.5);color:#37474f;font-size:85%;direction:ltr}.md-typeset code{margin:0 .29412em;padding:.07353em 0;border-radius:.1rem;box-shadow:.29412em 0 0 hsla(0,0%,92.5%,.5),-.29412em 0 0 hsla(0,0%,92.5%,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset h1 code,.md-typeset h2 code,.md-typeset h3 code,.md-typeset h4 code,.md-typeset h5 code,.md-typeset h6 code{margin:0;background-color:transparent;box-shadow:none}.md-typeset a>code{margin:inherit;padding:inherit;border-radius:initial;background-color:inherit;color:inherit;box-shadow:none}.md-typeset pre{position:relative;margin:1em 0;border-radius:.1rem;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset pre>code{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;font-size:inherit;box-shadow:none;-webkit-box-decoration-break:slice;box-decoration-break:slice;overflow:auto}.md-typeset pre>code::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset kbd{padding:0 .29412em;border-radius:.15rem;border:.05rem solid #c9c9c9;border-bottom-color:#bcbcbc;background-color:#fcfcfc;color:#555;font-size:85%;box-shadow:0 .05rem 0 #b0b0b0;word-break:break-word}.md-typeset mark{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;background-color:rgba(255,235,59,.5);box-shadow:.25em 0 0 rgba(255,235,59,.5),-.25em 0 0 rgba(255,235,59,.5);word-break:break-word;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset abbr{border-bottom:.05rem dotted rgba(0,0,0,.54);text-decoration:none;cursor:help}.md-typeset small{opacity:.75}.md-typeset sub,.md-typeset sup{margin-left:.07812em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.07812em;margin-left:0}.md-typeset blockquote{padding-left:.6rem;border-left:.2rem solid rgba(0,0,0,.26);color:rgba(0,0,0,.54)}[dir=rtl] .md-typeset blockquote{padding-right:.6rem;padding-left:0;border-right:.2rem solid rgba(0,0,0,.26);border-left:initial}.md-typeset ul{list-style-type:disc}.md-typeset ol,.md-typeset ul{margin-left:.625em;padding:0}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em;margin-left:0}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em;margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em;margin-left:0}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin:.5em 0 .5em .625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em;margin-left:0}.md-typeset dd{margin:1em 0 1em 1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em;margin-left:0}.md-typeset iframe,.md-typeset img,.md-typeset svg{max-width:100%}.md-typeset table:not([class]){box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);display:inline-block;max-width:100%;border-radius:.1rem;font-size:.64rem;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{min-width:5rem;padding:.6rem .8rem;background-color:rgba(0,0,0,.54);color:#fff;vertical-align:top}.md-typeset table:not([class]) td{padding:.6rem .8rem;border-top:.05rem solid rgba(0,0,0,.07);vertical-align:top}.md-typeset table:not([class]) tr{-webkit-transition:background-color .125s;transition:background-color .125s}.md-typeset table:not([class]) tr:hover{background-color:rgba(0,0,0,.035);box-shadow:inset 0 .05rem 0 #fff}.md-typeset table:not([class]) tr:first-child td{border-top:0}.md-typeset table:not([class]) a{word-break:normal}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;-webkit-overflow-scrolling:touch}.md-typeset .md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}.md-typeset .md-typeset__table table{display:table;width:100%;margin:0;overflow:hidden}html{font-size:125%;overflow-x:hidden}body,html{height:100%}body{position:relative;font-size:.5rem}hr{display:block;height:.05rem;padding:0;border:0}.md-svg{display:none}.md-grid{max-width:61rem;margin-right:auto;margin-left:auto}.md-container,.md-main{overflow:auto}.md-container{display:table;width:100%;height:100%;padding-top:2.4rem;table-layout:fixed}.md-main{display:table-row;height:100%}.md-main__inner{height:100%;padding-top:1.5rem;padding-bottom:.05rem}.md-toggle{display:none}.md-overlay{position:fixed;top:0;width:0;height:0;-webkit-transition:width 0s .25s,height 0s .25s,opacity .25s;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);opacity:0;z-index:3}.md-flex{display:table}.md-flex__cell{display:table-cell;position:relative;vertical-align:top}.md-flex__cell--shrink{width:0}.md-flex__cell--stretch{display:table;width:100%;table-layout:fixed}.md-flex__ellipsis{display:table-cell;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-skip{position:fixed;width:.05rem;height:.05rem;margin:.5rem;padding:.3rem .5rem;-webkit-transform:translateY(.4rem);transform:translateY(.4rem);border-radius:.1rem;background-color:rgba(0,0,0,.87);color:#fff;font-size:.64rem;opacity:0;overflow:hidden}.md-skip:focus{width:auto;height:auto;clip:auto;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;z-index:10}@page{margin:25mm}.md-clipboard{position:absolute;top:.3rem;right:.3rem;width:1.4rem;height:1.4rem;border-radius:.1rem;font-size:.8rem;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-clipboard:before{-webkit-transition:color .25s,opacity .25s;transition:color .25s,opacity .25s;color:rgba(0,0,0,.07);content:"\E14D"}.codehilite:hover .md-clipboard:before,.md-typeset .highlight:hover .md-clipboard:before,pre:hover .md-clipboard:before{color:rgba(0,0,0,.54)}.md-clipboard:focus:before,.md-clipboard:hover:before{color:#536dfe}.md-clipboard__message{display:block;position:absolute;top:0;right:1.7rem;padding:.3rem .5rem;-webkit-transform:translateX(.4rem);transform:translateX(.4rem);-webkit-transition:opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);transition:opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s;transition:transform .25s cubic-bezier(.9,.1,.9,0),opacity .175s,-webkit-transform .25s cubic-bezier(.9,.1,.9,0);border-radius:.1rem;background-color:rgba(0,0,0,.54);color:#fff;font-size:.64rem;white-space:nowrap;opacity:0;pointer-events:none}.md-clipboard__message--active{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .175s 75ms,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1;pointer-events:auto}.md-clipboard__message:before{content:attr(aria-label)}.md-clipboard__message:after{display:block;position:absolute;top:50%;right:-.2rem;width:0;margin-top:-.2rem;border-color:transparent rgba(0,0,0,.54);border-style:solid;border-width:.2rem 0 .2rem .2rem;content:""}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}.md-content__inner:before{display:block;height:.4rem;content:""}.md-content__inner>:last-child{margin-bottom:0}.md-content__icon{position:relative;margin:.4rem 0;padding:0;float:right}.md-typeset .md-content__icon{color:rgba(0,0,0,.26)}.md-header{position:fixed;top:0;right:0;left:0;height:2.4rem;-webkit-transition:background-color .25s,color .25s;transition:background-color .25s,color .25s;background-color:#3f51b5;color:#fff;box-shadow:none;z-index:2;-webkit-backface-visibility:hidden;backface-visibility:hidden}.no-js .md-header{-webkit-transition:none;transition:none;box-shadow:none}.md-header[data-md-state=shadow]{-webkit-transition:background-color .25s,color .25s,box-shadow .25s;transition:background-color .25s,color .25s,box-shadow .25s;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.md-header-nav{padding:0 .2rem}.md-header-nav__button{position:relative;-webkit-transition:opacity .25s;transition:opacity .25s;z-index:1}.md-header-nav__button:hover{opacity:.7}.md-header-nav__button.md-logo *{display:block}.no-js .md-header-nav__button.md-icon--search{display:none}.md-header-nav__topic{display:block;position:absolute;-webkit-transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem);-webkit-transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem)}.no-js .md-header-nav__topic{position:static}.no-js .md-header-nav__topic+.md-header-nav__topic{display:none}.md-header-nav__title{padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(-1.25rem);transform:translateX(-1.25rem);-webkit-transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s,-webkit-transform .4s cubic-bezier(1,.7,.1,.1);opacity:0;z-index:-1;pointer-events:none}[dir=rtl] .md-header-nav__title[data-md-state=active] .md-header-nav__topic{-webkit-transform:translateX(1.25rem);transform:translateX(1.25rem)}.md-header-nav__title[data-md-state=active] .md-header-nav__topic+.md-header-nav__topic{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);opacity:1;z-index:0;pointer-events:auto}.md-header-nav__source{display:none}.md-hero{-webkit-transition:background .25s;transition:background .25s;background-color:#3f51b5;color:#fff;font-size:1rem;overflow:hidden}.md-hero__inner{margin-top:1rem;padding:.8rem .8rem .4rem;-webkit-transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);-webkit-transition-delay:.1s;transition-delay:.1s}[data-md-state=hidden] .md-hero__inner{pointer-events:none;-webkit-transform:translateY(.625rem);transform:translateY(.625rem);-webkit-transition:opacity .1s 0s,-webkit-transform 0s .4s;transition:opacity .1s 0s,-webkit-transform 0s .4s;transition:transform 0s .4s,opacity .1s 0s;transition:transform 0s .4s,opacity .1s 0s,-webkit-transform 0s .4s;opacity:0}.md-hero--expand .md-hero__inner{margin-bottom:1.2rem}.md-footer-nav{background-color:rgba(0,0,0,.87);color:#fff}.md-footer-nav__inner{padding:.2rem;overflow:auto}.md-footer-nav__link{padding-top:1.4rem;padding-bottom:.4rem;-webkit-transition:opacity .25s;transition:opacity .25s}.md-footer-nav__link:hover{opacity:.7}.md-footer-nav__link--prev{width:25%;float:left}[dir=rtl] .md-footer-nav__link--prev{float:right}.md-footer-nav__link--next{width:75%;float:right;text-align:right}[dir=rtl] .md-footer-nav__link--next{float:left;text-align:left}.md-footer-nav__button{-webkit-transition:background .25s;transition:background .25s}.md-footer-nav__title{position:relative;padding:0 1rem;font-size:.9rem;line-height:2.4rem}.md-footer-nav__direction{position:absolute;right:0;left:0;margin-top:-1rem;padding:0 1rem;color:hsla(0,0%,100%,.7);font-size:.75rem}.md-footer-meta{background-color:rgba(0,0,0,.895)}.md-footer-meta__inner{padding:.2rem;overflow:auto}html .md-footer-meta.md-typeset a{color:hsla(0,0%,100%,.7)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:#fff}.md-footer-copyright{margin:0 .6rem;padding:.4rem 0;color:hsla(0,0%,100%,.3);font-size:.64rem}.md-footer-copyright__highlight{color:hsla(0,0%,100%,.7)}.md-footer-social{margin:0 .4rem;padding:.2rem 0 .6rem}.md-footer-social__link{display:inline-block;width:1.6rem;height:1.6rem;font-size:.8rem;text-align:center}.md-footer-social__link:before{line-height:1.9}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{display:block;padding:0 .6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden}.md-nav__title:before{display:none;content:"\E5C4"}[dir=rtl] .md-nav__title:before{content:"\E5C8"}.md-nav__title .md-nav__button{display:none}.md-nav__list{margin:0;padding:0;list-style:none}.md-nav__item{padding:0 .6rem}.md-nav__item:last-child{padding-bottom:.6rem}.md-nav__item .md-nav__item{padding-right:0}[dir=rtl] .md-nav__item .md-nav__item{padding-right:.6rem;padding-left:0}.md-nav__item .md-nav__item:last-child{padding-bottom:0}.md-nav__button img{width:100%;height:auto}.md-nav__link{display:block;margin-top:.625em;-webkit-transition:color .125s;transition:color .125s;text-overflow:ellipsis;cursor:pointer;overflow:hidden}.md-nav__item--nested>.md-nav__link:after{content:"\E313"}html .md-nav__link[for=__toc],html .md-nav__link[for=__toc]+.md-nav__link:after,html .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__link[data-md-state=blur]{color:rgba(0,0,0,.54)}.md-nav__link--active,.md-nav__link:active{color:#3f51b5}.md-nav__item--nested>.md-nav__link{color:inherit}.md-nav__link:focus,.md-nav__link:hover{color:#536dfe}.md-nav__source,.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}.md-search__form{position:relative}.md-search__input{position:relative;padding:0 2.2rem 0 3.6rem;text-overflow:ellipsis;z-index:2}[dir=rtl] .md-search__input{padding:0 3.6rem 0 2.2rem}.md-search__input::-webkit-input-placeholder{-webkit-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-moz-placeholder{-moz-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input:-ms-input-placeholder{-ms-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-ms-input-placeholder{-ms-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::placeholder{-webkit-transition:color .25s cubic-bezier(.1,.7,.1,1);transition:color .25s cubic-bezier(.1,.7,.1,1)}.md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}.md-search__input::-moz-placeholder{color:rgba(0,0,0,.54)}.md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}.md-search__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:rgba(0,0,0,.54)}.md-search__input::-ms-clear{display:none}.md-search__icon{position:absolute;-webkit-transition:color .25s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:color .25s cubic-bezier(.1,.7,.1,1),opacity .25s;font-size:1.2rem;cursor:pointer;z-index:2}.md-search__icon:hover{opacity:.7}.md-search__icon[for=__search]{top:.3rem;left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem;left:auto}.md-search__icon[for=__search]:before{content:"\E8B6"}.md-search__icon[type=reset]{top:.3rem;right:.5rem;-webkit-transform:scale(.125);transform:scale(.125);-webkit-transition:opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);transition:opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s;transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1);opacity:0}[dir=rtl] .md-search__icon[type=reset]{right:auto;left:.5rem}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]{-webkit-transform:scale(1);transform:scale(1);opacity:1}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__icon[type=reset]:hover{opacity:.7}.md-search__output{position:absolute;width:100%;border-radius:0 0 .1rem .1rem;overflow:hidden;z-index:1}.md-search__scrollwrap{height:100%;background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07);overflow-y:auto;-webkit-overflow-scrolling:touch}.md-search-result{color:rgba(0,0,0,.87);word-break:break-word}.md-search-result__meta{padding:0 .8rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.8rem}.md-search-result__list{margin:0;padding:0;border-top:.05rem solid rgba(0,0,0,.07);list-style:none}.md-search-result__item{box-shadow:0 -.05rem 0 rgba(0,0,0,.07)}.md-search-result__link{display:block;-webkit-transition:background .25s;transition:background .25s;outline:0;overflow:hidden}.md-search-result__link:hover,.md-search-result__link[data-md-state=active]{background-color:rgba(83,109,254,.1)}.md-search-result__link:hover .md-search-result__article:before,.md-search-result__link[data-md-state=active] .md-search-result__article:before{opacity:.7}.md-search-result__link:last-child .md-search-result__teaser{margin-bottom:.6rem}.md-search-result__article{position:relative;padding:0 .8rem;overflow:auto}.md-search-result__article--document:before{position:absolute;left:0;margin:.1rem;-webkit-transition:opacity .25s;transition:opacity .25s;color:rgba(0,0,0,.54);content:"\E880"}[dir=rtl] .md-search-result__article--document:before{right:0;left:auto}.md-search-result__article--document .md-search-result__title{margin:.55rem 0;font-size:.8rem;font-weight:400;line-height:1.4}.md-search-result__title{margin:.5em 0;font-size:.64rem;font-weight:700;line-height:1.4}.md-search-result__teaser{display:-webkit-box;max-height:1.65rem;margin:.5em 0;color:rgba(0,0,0,.54);font-size:.64rem;line-height:1.4;text-overflow:ellipsis;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.md-search-result em{font-style:normal;font-weight:700;text-decoration:underline}.md-sidebar{position:absolute;width:12.1rem;padding:1.2rem 0;overflow:hidden}.md-sidebar[data-md-state=lock]{position:fixed;top:2.4rem}.md-sidebar--secondary{display:none}.md-sidebar__scrollwrap{max-height:100%;margin:0 .2rem;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden}.md-sidebar__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}@-webkit-keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@keyframes md-source__facts--done{0%{height:0}to{height:.65rem}}@-webkit-keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}@keyframes md-source__fact--done{0%{-webkit-transform:translateY(100%);transform:translateY(100%);opacity:0}50%{opacity:0}to{-webkit-transform:translateY(0);transform:translateY(0);opacity:1}}.md-source{display:block;padding-right:.6rem;-webkit-transition:opacity .25s;transition:opacity .25s;font-size:.65rem;line-height:1.2;white-space:nowrap}[dir=rtl] .md-source{padding-right:0;padding-left:.6rem}.md-source:hover{opacity:.7}.md-source:after,.md-source__icon{display:inline-block;height:2.4rem;content:"";vertical-align:middle}.md-source__icon{width:2.4rem}.md-source__icon svg{width:1.2rem;height:1.2rem;margin-top:.6rem;margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem;margin-left:0}.md-source__icon+.md-source__repository{margin-left:-2rem;padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem;margin-left:0;padding-right:2rem;padding-left:0}.md-source__repository{display:inline-block;max-width:100%;margin-left:.6rem;font-weight:700;text-overflow:ellipsis;overflow:hidden;vertical-align:middle}.md-source__facts{margin:0;padding:0;font-size:.55rem;font-weight:700;list-style-type:none;opacity:.75;overflow:hidden}[data-md-state=done] .md-source__facts{-webkit-animation:md-source__facts--done .25s ease-in;animation:md-source__facts--done .25s ease-in}.md-source__fact{float:left}[dir=rtl] .md-source__fact{float:right}[data-md-state=done] .md-source__fact{-webkit-animation:md-source__fact--done .4s ease-out;animation:md-source__fact--done .4s ease-out}.md-source__fact:before{margin:0 .1rem;content:"\00B7"}.md-source__fact:first-child:before{display:none}.md-source-file{display:inline-block;margin:1em .5em 1em 0;padding-right:.25rem;border-radius:.1rem;background-color:rgba(0,0,0,.07);font-size:.64rem;list-style-type:none;cursor:pointer;overflow:hidden}.md-source-file:before{display:inline-block;margin-right:.25rem;padding:.25rem;background-color:rgba(0,0,0,.26);color:#fff;font-size:.8rem;content:"\E86F";vertical-align:middle}html .md-source-file{-webkit-transition:background .4s,color .4s,box-shadow .4s cubic-bezier(.4,0,.2,1);transition:background .4s,color .4s,box-shadow .4s cubic-bezier(.4,0,.2,1)}html .md-source-file:before{-webkit-transition:inherit;transition:inherit}html body .md-typeset .md-source-file{color:rgba(0,0,0,.54)}.md-source-file:hover{box-shadow:0 0 8px rgba(0,0,0,.18),0 8px 16px rgba(0,0,0,.36)}.md-source-file:hover:before{background-color:#536dfe}.md-tabs{width:100%;-webkit-transition:background .25s;transition:background .25s;background-color:#3f51b5;color:#fff;overflow:auto}.md-tabs__list{margin:0 0 0 .2rem;padding:0;list-style:none;white-space:nowrap}.md-tabs__item{display:inline-block;height:2.4rem;padding-right:.6rem;padding-left:.6rem}.md-tabs__link{display:block;margin-top:.8rem;-webkit-transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s,-webkit-transform .4s cubic-bezier(.1,.7,.1,1);font-size:.7rem;opacity:.7}.md-tabs__link--active,.md-tabs__link:hover{color:inherit;opacity:1}.md-tabs__item:nth-child(2) .md-tabs__link{-webkit-transition-delay:.02s;transition-delay:.02s}.md-tabs__item:nth-child(3) .md-tabs__link{-webkit-transition-delay:.04s;transition-delay:.04s}.md-tabs__item:nth-child(4) .md-tabs__link{-webkit-transition-delay:.06s;transition-delay:.06s}.md-tabs__item:nth-child(5) .md-tabs__link{-webkit-transition-delay:.08s;transition-delay:.08s}.md-tabs__item:nth-child(6) .md-tabs__link{-webkit-transition-delay:.1s;transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{-webkit-transition-delay:.12s;transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{-webkit-transition-delay:.14s;transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{-webkit-transition-delay:.16s;transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{-webkit-transition-delay:.18s;transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{-webkit-transition-delay:.2s;transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{-webkit-transition-delay:.22s;transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{-webkit-transition-delay:.24s;transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{-webkit-transition-delay:.26s;transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{-webkit-transition-delay:.28s;transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{-webkit-transition-delay:.3s;transition-delay:.3s}.md-tabs[data-md-state=hidden]{pointer-events:none}.md-tabs[data-md-state=hidden] .md-tabs__link{-webkit-transform:translateY(50%);transform:translateY(50%);-webkit-transition:color .25s,opacity .1s,-webkit-transform 0s .4s;transition:color .25s,opacity .1s,-webkit-transform 0s .4s;transition:color .25s,transform 0s .4s,opacity .1s;transition:color .25s,transform 0s .4s,opacity .1s,-webkit-transform 0s .4s;opacity:0}.md-typeset .admonition,.md-typeset details{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2);position:relative;margin:1.5625em 0;padding:0 .6rem;border-left:.2rem solid #448aff;border-radius:.1rem;font-size:.64rem;overflow:auto}[dir=rtl] .md-typeset .admonition,[dir=rtl] .md-typeset details{border-right:.2rem solid #448aff;border-left:none}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin:1em 0}.md-typeset .admonition>.admonition-title,.md-typeset .admonition>summary,.md-typeset details>.admonition-title,.md-typeset details>summary{margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;border-bottom:.05rem solid rgba(68,138,255,.1);background-color:rgba(68,138,255,.1);font-weight:700}[dir=rtl] .md-typeset .admonition>.admonition-title,[dir=rtl] .md-typeset .admonition>summary,[dir=rtl] .md-typeset details>.admonition-title,[dir=rtl] .md-typeset details>summary{padding:.4rem 2rem .4rem .6rem}.md-typeset .admonition>.admonition-title:last-child,.md-typeset .admonition>summary:last-child,.md-typeset details>.admonition-title:last-child,.md-typeset details>summary:last-child{margin-bottom:0}.md-typeset .admonition>.admonition-title:before,.md-typeset .admonition>summary:before,.md-typeset details>.admonition-title:before,.md-typeset details>summary:before{position:absolute;left:.6rem;color:#448aff;font-size:1rem;content:"\E3C9"}[dir=rtl] .md-typeset .admonition>.admonition-title:before,[dir=rtl] .md-typeset .admonition>summary:before,[dir=rtl] .md-typeset details>.admonition-title:before,[dir=rtl] .md-typeset details>summary:before{right:.6rem;left:auto}.md-typeset .admonition.abstract,.md-typeset .admonition.summary,.md-typeset .admonition.tldr,.md-typeset details.abstract,.md-typeset details.summary,.md-typeset details.tldr{border-left-color:#00b0ff}[dir=rtl] .md-typeset .admonition.abstract,[dir=rtl] .md-typeset .admonition.summary,[dir=rtl] .md-typeset .admonition.tldr,[dir=rtl] .md-typeset details.abstract,[dir=rtl] .md-typeset details.summary,[dir=rtl] .md-typeset details.tldr{border-right-color:#00b0ff}.md-typeset .admonition.abstract>.admonition-title,.md-typeset .admonition.abstract>summary,.md-typeset .admonition.summary>.admonition-title,.md-typeset .admonition.summary>summary,.md-typeset .admonition.tldr>.admonition-title,.md-typeset .admonition.tldr>summary,.md-typeset details.abstract>.admonition-title,.md-typeset details.abstract>summary,.md-typeset details.summary>.admonition-title,.md-typeset details.summary>summary,.md-typeset details.tldr>.admonition-title,.md-typeset details.tldr>summary{border-bottom-color:rgba(0,176,255,.1);background-color:rgba(0,176,255,.1)}.md-typeset .admonition.abstract>.admonition-title:before,.md-typeset .admonition.abstract>summary:before,.md-typeset .admonition.summary>.admonition-title:before,.md-typeset .admonition.summary>summary:before,.md-typeset .admonition.tldr>.admonition-title:before,.md-typeset .admonition.tldr>summary:before,.md-typeset details.abstract>.admonition-title:before,.md-typeset details.abstract>summary:before,.md-typeset details.summary>.admonition-title:before,.md-typeset details.summary>summary:before,.md-typeset details.tldr>.admonition-title:before,.md-typeset details.tldr>summary:before{color:#00b0ff;content:""}.md-typeset .admonition.info,.md-typeset .admonition.todo,.md-typeset details.info,.md-typeset details.todo{border-left-color:#00b8d4}[dir=rtl] .md-typeset .admonition.info,[dir=rtl] .md-typeset .admonition.todo,[dir=rtl] .md-typeset details.info,[dir=rtl] .md-typeset details.todo{border-right-color:#00b8d4}.md-typeset .admonition.info>.admonition-title,.md-typeset .admonition.info>summary,.md-typeset .admonition.todo>.admonition-title,.md-typeset .admonition.todo>summary,.md-typeset details.info>.admonition-title,.md-typeset details.info>summary,.md-typeset details.todo>.admonition-title,.md-typeset details.todo>summary{border-bottom-color:rgba(0,184,212,.1);background-color:rgba(0,184,212,.1)}.md-typeset .admonition.info>.admonition-title:before,.md-typeset .admonition.info>summary:before,.md-typeset .admonition.todo>.admonition-title:before,.md-typeset .admonition.todo>summary:before,.md-typeset details.info>.admonition-title:before,.md-typeset details.info>summary:before,.md-typeset details.todo>.admonition-title:before,.md-typeset details.todo>summary:before{color:#00b8d4;content:""}.md-typeset .admonition.hint,.md-typeset .admonition.important,.md-typeset .admonition.tip,.md-typeset details.hint,.md-typeset details.important,.md-typeset details.tip{border-left-color:#00bfa5}[dir=rtl] .md-typeset .admonition.hint,[dir=rtl] .md-typeset .admonition.important,[dir=rtl] .md-typeset .admonition.tip,[dir=rtl] .md-typeset details.hint,[dir=rtl] .md-typeset details.important,[dir=rtl] .md-typeset details.tip{border-right-color:#00bfa5}.md-typeset .admonition.hint>.admonition-title,.md-typeset .admonition.hint>summary,.md-typeset .admonition.important>.admonition-title,.md-typeset .admonition.important>summary,.md-typeset .admonition.tip>.admonition-title,.md-typeset .admonition.tip>summary,.md-typeset details.hint>.admonition-title,.md-typeset details.hint>summary,.md-typeset details.important>.admonition-title,.md-typeset details.important>summary,.md-typeset details.tip>.admonition-title,.md-typeset details.tip>summary{border-bottom-color:rgba(0,191,165,.1);background-color:rgba(0,191,165,.1)}.md-typeset .admonition.hint>.admonition-title:before,.md-typeset .admonition.hint>summary:before,.md-typeset .admonition.important>.admonition-title:before,.md-typeset .admonition.important>summary:before,.md-typeset .admonition.tip>.admonition-title:before,.md-typeset .admonition.tip>summary:before,.md-typeset details.hint>.admonition-title:before,.md-typeset details.hint>summary:before,.md-typeset details.important>.admonition-title:before,.md-typeset details.important>summary:before,.md-typeset details.tip>.admonition-title:before,.md-typeset details.tip>summary:before{color:#00bfa5;content:""}.md-typeset .admonition.check,.md-typeset .admonition.done,.md-typeset .admonition.success,.md-typeset details.check,.md-typeset details.done,.md-typeset details.success{border-left-color:#00c853}[dir=rtl] .md-typeset .admonition.check,[dir=rtl] .md-typeset .admonition.done,[dir=rtl] .md-typeset .admonition.success,[dir=rtl] .md-typeset details.check,[dir=rtl] .md-typeset details.done,[dir=rtl] .md-typeset details.success{border-right-color:#00c853}.md-typeset .admonition.check>.admonition-title,.md-typeset .admonition.check>summary,.md-typeset .admonition.done>.admonition-title,.md-typeset .admonition.done>summary,.md-typeset .admonition.success>.admonition-title,.md-typeset .admonition.success>summary,.md-typeset details.check>.admonition-title,.md-typeset details.check>summary,.md-typeset details.done>.admonition-title,.md-typeset details.done>summary,.md-typeset details.success>.admonition-title,.md-typeset details.success>summary{border-bottom-color:rgba(0,200,83,.1);background-color:rgba(0,200,83,.1)}.md-typeset .admonition.check>.admonition-title:before,.md-typeset .admonition.check>summary:before,.md-typeset .admonition.done>.admonition-title:before,.md-typeset .admonition.done>summary:before,.md-typeset .admonition.success>.admonition-title:before,.md-typeset .admonition.success>summary:before,.md-typeset details.check>.admonition-title:before,.md-typeset details.check>summary:before,.md-typeset details.done>.admonition-title:before,.md-typeset details.done>summary:before,.md-typeset details.success>.admonition-title:before,.md-typeset details.success>summary:before{color:#00c853;content:""}.md-typeset .admonition.faq,.md-typeset .admonition.help,.md-typeset .admonition.question,.md-typeset details.faq,.md-typeset details.help,.md-typeset details.question{border-left-color:#64dd17}[dir=rtl] .md-typeset .admonition.faq,[dir=rtl] .md-typeset .admonition.help,[dir=rtl] .md-typeset .admonition.question,[dir=rtl] .md-typeset details.faq,[dir=rtl] .md-typeset details.help,[dir=rtl] .md-typeset details.question{border-right-color:#64dd17}.md-typeset .admonition.faq>.admonition-title,.md-typeset .admonition.faq>summary,.md-typeset .admonition.help>.admonition-title,.md-typeset .admonition.help>summary,.md-typeset .admonition.question>.admonition-title,.md-typeset .admonition.question>summary,.md-typeset details.faq>.admonition-title,.md-typeset details.faq>summary,.md-typeset details.help>.admonition-title,.md-typeset details.help>summary,.md-typeset details.question>.admonition-title,.md-typeset details.question>summary{border-bottom-color:rgba(100,221,23,.1);background-color:rgba(100,221,23,.1)}.md-typeset .admonition.faq>.admonition-title:before,.md-typeset .admonition.faq>summary:before,.md-typeset .admonition.help>.admonition-title:before,.md-typeset .admonition.help>summary:before,.md-typeset .admonition.question>.admonition-title:before,.md-typeset .admonition.question>summary:before,.md-typeset details.faq>.admonition-title:before,.md-typeset details.faq>summary:before,.md-typeset details.help>.admonition-title:before,.md-typeset details.help>summary:before,.md-typeset details.question>.admonition-title:before,.md-typeset details.question>summary:before{color:#64dd17;content:""}.md-typeset .admonition.attention,.md-typeset .admonition.caution,.md-typeset .admonition.warning,.md-typeset details.attention,.md-typeset details.caution,.md-typeset details.warning{border-left-color:#ff9100}[dir=rtl] .md-typeset .admonition.attention,[dir=rtl] .md-typeset .admonition.caution,[dir=rtl] .md-typeset .admonition.warning,[dir=rtl] .md-typeset details.attention,[dir=rtl] .md-typeset details.caution,[dir=rtl] .md-typeset details.warning{border-right-color:#ff9100}.md-typeset .admonition.attention>.admonition-title,.md-typeset .admonition.attention>summary,.md-typeset .admonition.caution>.admonition-title,.md-typeset .admonition.caution>summary,.md-typeset .admonition.warning>.admonition-title,.md-typeset .admonition.warning>summary,.md-typeset details.attention>.admonition-title,.md-typeset details.attention>summary,.md-typeset details.caution>.admonition-title,.md-typeset details.caution>summary,.md-typeset details.warning>.admonition-title,.md-typeset details.warning>summary{border-bottom-color:rgba(255,145,0,.1);background-color:rgba(255,145,0,.1)}.md-typeset .admonition.attention>.admonition-title:before,.md-typeset .admonition.attention>summary:before,.md-typeset .admonition.caution>.admonition-title:before,.md-typeset .admonition.caution>summary:before,.md-typeset .admonition.warning>.admonition-title:before,.md-typeset .admonition.warning>summary:before,.md-typeset details.attention>.admonition-title:before,.md-typeset details.attention>summary:before,.md-typeset details.caution>.admonition-title:before,.md-typeset details.caution>summary:before,.md-typeset details.warning>.admonition-title:before,.md-typeset details.warning>summary:before{color:#ff9100;content:""}.md-typeset .admonition.fail,.md-typeset .admonition.failure,.md-typeset .admonition.missing,.md-typeset details.fail,.md-typeset details.failure,.md-typeset details.missing{border-left-color:#ff5252}[dir=rtl] .md-typeset .admonition.fail,[dir=rtl] .md-typeset .admonition.failure,[dir=rtl] .md-typeset .admonition.missing,[dir=rtl] .md-typeset details.fail,[dir=rtl] .md-typeset details.failure,[dir=rtl] .md-typeset details.missing{border-right-color:#ff5252}.md-typeset .admonition.fail>.admonition-title,.md-typeset .admonition.fail>summary,.md-typeset .admonition.failure>.admonition-title,.md-typeset .admonition.failure>summary,.md-typeset .admonition.missing>.admonition-title,.md-typeset .admonition.missing>summary,.md-typeset details.fail>.admonition-title,.md-typeset details.fail>summary,.md-typeset details.failure>.admonition-title,.md-typeset details.failure>summary,.md-typeset details.missing>.admonition-title,.md-typeset details.missing>summary{border-bottom-color:rgba(255,82,82,.1);background-color:rgba(255,82,82,.1)}.md-typeset .admonition.fail>.admonition-title:before,.md-typeset .admonition.fail>summary:before,.md-typeset .admonition.failure>.admonition-title:before,.md-typeset .admonition.failure>summary:before,.md-typeset .admonition.missing>.admonition-title:before,.md-typeset .admonition.missing>summary:before,.md-typeset details.fail>.admonition-title:before,.md-typeset details.fail>summary:before,.md-typeset details.failure>.admonition-title:before,.md-typeset details.failure>summary:before,.md-typeset details.missing>.admonition-title:before,.md-typeset details.missing>summary:before{color:#ff5252;content:""}.md-typeset .admonition.danger,.md-typeset .admonition.error,.md-typeset details.danger,.md-typeset details.error{border-left-color:#ff1744}[dir=rtl] .md-typeset .admonition.danger,[dir=rtl] .md-typeset .admonition.error,[dir=rtl] .md-typeset details.danger,[dir=rtl] .md-typeset details.error{border-right-color:#ff1744}.md-typeset .admonition.danger>.admonition-title,.md-typeset .admonition.danger>summary,.md-typeset .admonition.error>.admonition-title,.md-typeset .admonition.error>summary,.md-typeset details.danger>.admonition-title,.md-typeset details.danger>summary,.md-typeset details.error>.admonition-title,.md-typeset details.error>summary{border-bottom-color:rgba(255,23,68,.1);background-color:rgba(255,23,68,.1)}.md-typeset .admonition.danger>.admonition-title:before,.md-typeset .admonition.danger>summary:before,.md-typeset .admonition.error>.admonition-title:before,.md-typeset .admonition.error>summary:before,.md-typeset details.danger>.admonition-title:before,.md-typeset details.danger>summary:before,.md-typeset details.error>.admonition-title:before,.md-typeset details.error>summary:before{color:#ff1744;content:""}.md-typeset .admonition.bug,.md-typeset details.bug{border-left-color:#f50057}[dir=rtl] .md-typeset .admonition.bug,[dir=rtl] .md-typeset details.bug{border-right-color:#f50057}.md-typeset .admonition.bug>.admonition-title,.md-typeset .admonition.bug>summary,.md-typeset details.bug>.admonition-title,.md-typeset details.bug>summary{border-bottom-color:rgba(245,0,87,.1);background-color:rgba(245,0,87,.1)}.md-typeset .admonition.bug>.admonition-title:before,.md-typeset .admonition.bug>summary:before,.md-typeset details.bug>.admonition-title:before,.md-typeset details.bug>summary:before{color:#f50057;content:""}.md-typeset .admonition.example,.md-typeset details.example{border-left-color:#651fff}[dir=rtl] .md-typeset .admonition.example,[dir=rtl] .md-typeset details.example{border-right-color:#651fff}.md-typeset .admonition.example>.admonition-title,.md-typeset .admonition.example>summary,.md-typeset details.example>.admonition-title,.md-typeset details.example>summary{border-bottom-color:rgba(101,31,255,.1);background-color:rgba(101,31,255,.1)}.md-typeset .admonition.example>.admonition-title:before,.md-typeset .admonition.example>summary:before,.md-typeset details.example>.admonition-title:before,.md-typeset details.example>summary:before{color:#651fff;content:""}.md-typeset .admonition.cite,.md-typeset .admonition.quote,.md-typeset details.cite,.md-typeset details.quote{border-left-color:#9e9e9e}[dir=rtl] .md-typeset .admonition.cite,[dir=rtl] .md-typeset .admonition.quote,[dir=rtl] .md-typeset details.cite,[dir=rtl] .md-typeset details.quote{border-right-color:#9e9e9e}.md-typeset .admonition.cite>.admonition-title,.md-typeset .admonition.cite>summary,.md-typeset .admonition.quote>.admonition-title,.md-typeset .admonition.quote>summary,.md-typeset details.cite>.admonition-title,.md-typeset details.cite>summary,.md-typeset details.quote>.admonition-title,.md-typeset details.quote>summary{border-bottom-color:hsla(0,0%,62%,.1);background-color:hsla(0,0%,62%,.1)}.md-typeset .admonition.cite>.admonition-title:before,.md-typeset .admonition.cite>summary:before,.md-typeset .admonition.quote>.admonition-title:before,.md-typeset .admonition.quote>summary:before,.md-typeset details.cite>.admonition-title:before,.md-typeset details.cite>summary:before,.md-typeset details.quote>.admonition-title:before,.md-typeset details.quote>summary:before{color:#9e9e9e;content:""}.codehilite .o,.codehilite .ow,.md-typeset .highlight .o,.md-typeset .highlight .ow{color:inherit}.codehilite .ge,.md-typeset .highlight .ge{color:#000}.codehilite .gr,.md-typeset .highlight .gr{color:#a00}.codehilite .gh,.md-typeset .highlight .gh{color:#999}.codehilite .go,.md-typeset .highlight .go{color:#888}.codehilite .gp,.md-typeset .highlight .gp{color:#555}.codehilite .gs,.md-typeset .highlight .gs{color:inherit}.codehilite .gu,.md-typeset .highlight .gu{color:#aaa}.codehilite .gt,.md-typeset .highlight .gt{color:#a00}.codehilite .gd,.md-typeset .highlight .gd{background-color:#fdd}.codehilite .gi,.md-typeset .highlight .gi{background-color:#dfd}.codehilite .k,.md-typeset .highlight .k{color:#3b78e7}.codehilite .kc,.md-typeset .highlight .kc{color:#a71d5d}.codehilite .kd,.codehilite .kn,.md-typeset .highlight .kd,.md-typeset .highlight .kn{color:#3b78e7}.codehilite .kp,.md-typeset .highlight .kp{color:#a71d5d}.codehilite .kr,.codehilite .kt,.md-typeset .highlight .kr,.md-typeset .highlight .kt{color:#3e61a2}.codehilite .c,.codehilite .cm,.md-typeset .highlight .c,.md-typeset .highlight .cm{color:#999}.codehilite .cp,.md-typeset .highlight .cp{color:#666}.codehilite .c1,.codehilite .ch,.codehilite .cs,.md-typeset .highlight .c1,.md-typeset .highlight .ch,.md-typeset .highlight .cs{color:#999}.codehilite .na,.codehilite .nb,.md-typeset .highlight .na,.md-typeset .highlight .nb{color:#c2185b}.codehilite .bp,.md-typeset .highlight .bp{color:#3e61a2}.codehilite .nc,.md-typeset .highlight .nc{color:#c2185b}.codehilite .no,.md-typeset .highlight .no{color:#3e61a2}.codehilite .nd,.codehilite .ni,.md-typeset .highlight .nd,.md-typeset .highlight .ni{color:#666}.codehilite .ne,.codehilite .nf,.md-typeset .highlight .ne,.md-typeset .highlight .nf{color:#c2185b}.codehilite .nl,.md-typeset .highlight .nl{color:#3b5179}.codehilite .nn,.md-typeset .highlight .nn{color:#ec407a}.codehilite .nt,.md-typeset .highlight .nt{color:#3b78e7}.codehilite .nv,.codehilite .vc,.codehilite .vg,.codehilite .vi,.md-typeset .highlight .nv,.md-typeset .highlight .vc,.md-typeset .highlight .vg,.md-typeset .highlight .vi{color:#3e61a2}.codehilite .nx,.md-typeset .highlight .nx{color:#ec407a}.codehilite .il,.codehilite .m,.codehilite .mf,.codehilite .mh,.codehilite .mi,.codehilite .mo,.md-typeset .highlight .il,.md-typeset .highlight .m,.md-typeset .highlight .mf,.md-typeset .highlight .mh,.md-typeset .highlight .mi,.md-typeset .highlight .mo{color:#e74c3c}.codehilite .s,.codehilite .sb,.codehilite .sc,.md-typeset .highlight .s,.md-typeset .highlight .sb,.md-typeset .highlight .sc{color:#0d904f}.codehilite .sd,.md-typeset .highlight .sd{color:#999}.codehilite .s2,.md-typeset .highlight .s2{color:#0d904f}.codehilite .se,.codehilite .sh,.codehilite .si,.codehilite .sx,.md-typeset .highlight .se,.md-typeset .highlight .sh,.md-typeset .highlight .si,.md-typeset .highlight .sx{color:#183691}.codehilite .sr,.md-typeset .highlight .sr{color:#009926}.codehilite .s1,.codehilite .ss,.md-typeset .highlight .s1,.md-typeset .highlight .ss{color:#0d904f}.codehilite .err,.md-typeset .highlight .err{color:#a61717}.codehilite .w,.md-typeset .highlight .w{color:transparent}.codehilite .hll,.md-typeset .highlight .hll{display:block;margin:0 -.6rem;padding:0 .6rem;background-color:rgba(255,235,59,.5)}.md-typeset .codehilite,.md-typeset .highlight{position:relative;margin:1em 0;padding:0;border-radius:.1rem;background-color:hsla(0,0%,92.5%,.5);color:#37474f;line-height:1.4;-webkit-overflow-scrolling:touch}.md-typeset .codehilite code,.md-typeset .codehilite pre,.md-typeset .highlight code,.md-typeset .highlight pre{display:block;margin:0;padding:.525rem .6rem;background-color:transparent;overflow:auto;vertical-align:top}.md-typeset .codehilite code::-webkit-scrollbar,.md-typeset .codehilite pre::-webkit-scrollbar,.md-typeset .highlight code::-webkit-scrollbar,.md-typeset .highlight pre::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset .codehilite code::-webkit-scrollbar-thumb,.md-typeset .codehilite pre::-webkit-scrollbar-thumb,.md-typeset .highlight code::-webkit-scrollbar-thumb,.md-typeset .highlight pre::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-typeset .codehilite code::-webkit-scrollbar-thumb:hover,.md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover,.md-typeset .highlight code::-webkit-scrollbar-thumb:hover,.md-typeset .highlight pre::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-typeset pre.codehilite,.md-typeset pre.highlight{overflow:visible}.md-typeset pre.codehilite code,.md-typeset pre.highlight code{display:block;padding:.525rem .6rem;overflow:auto}.md-typeset .codehilitetable,.md-typeset .highlighttable{display:block;margin:1em 0;border-radius:.2em;font-size:.8rem;overflow:hidden}.md-typeset .codehilitetable tbody,.md-typeset .codehilitetable td,.md-typeset .highlighttable tbody,.md-typeset .highlighttable td{display:block;padding:0}.md-typeset .codehilitetable tr,.md-typeset .highlighttable tr{display:-webkit-box;display:flex}.md-typeset .codehilitetable .codehilite,.md-typeset .codehilitetable .highlight,.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .codehilite,.md-typeset .highlighttable .highlight,.md-typeset .highlighttable .linenodiv{margin:0;border-radius:0}.md-typeset .codehilitetable .linenodiv,.md-typeset .highlighttable .linenodiv{padding:.525rem .6rem}.md-typeset .codehilitetable .linenos,.md-typeset .highlighttable .linenos{background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.26);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.md-typeset .codehilitetable .linenos pre,.md-typeset .highlighttable .linenos pre{margin:0;padding:0;background-color:transparent;color:inherit;text-align:right}.md-typeset .codehilitetable .code,.md-typeset .highlighttable .code{-webkit-box-flex:1;flex:1;overflow:hidden}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{box-shadow:none}.md-typeset [id^="fnref:"]{display:inline-block}.md-typeset [id^="fnref:"]:target{margin-top:-3.8rem;padding-top:3.8rem;pointer-events:none}.md-typeset [id^="fn:"]:before{display:none;height:0;content:""}.md-typeset [id^="fn:"]:target:before{display:block;margin-top:-3.5rem;padding-top:3.5rem;pointer-events:none}.md-typeset .footnote{color:rgba(0,0,0,.54);font-size:.64rem}.md-typeset .footnote ol{margin-left:0}.md-typeset .footnote li{-webkit-transition:color .25s;transition:color .25s}.md-typeset .footnote li:target{color:rgba(0,0,0,.87)}.md-typeset .footnote li :first-child{margin-top:0}.md-typeset .footnote li:hover .footnote-backref,.md-typeset .footnote li:target .footnote-backref{-webkit-transform:translateX(0);transform:translateX(0);opacity:1}.md-typeset .footnote li:hover .footnote-backref:hover,.md-typeset .footnote li:target .footnote-backref{color:#536dfe}.md-typeset .footnote-ref{display:inline-block;pointer-events:auto}.md-typeset .footnote-ref:before{display:inline;margin:0 .2em;border-left:.05rem solid rgba(0,0,0,.26);font-size:1.25em;content:"";vertical-align:-.25rem}.md-typeset .footnote-backref{display:inline-block;-webkit-transform:translateX(.25rem);transform:translateX(.25rem);-webkit-transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:color .25s,opacity .125s .125s,-webkit-transform .25s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s;transition:transform .25s .125s,color .25s,opacity .125s .125s,-webkit-transform .25s .125s;color:rgba(0,0,0,.26);font-size:0;opacity:0;vertical-align:text-bottom}[dir=rtl] .md-typeset .footnote-backref{-webkit-transform:translateX(-.25rem);transform:translateX(-.25rem)}.md-typeset .footnote-backref:before{display:inline-block;font-size:.8rem;content:"\E31B"}[dir=rtl] .md-typeset .footnote-backref:before{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.md-typeset .headerlink{display:inline-block;margin-left:.5rem;-webkit-transform:translateY(.25rem);transform:translateY(.25rem);-webkit-transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:color .25s,opacity .125s .25s,-webkit-transform .25s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s;transition:transform .25s .25s,color .25s,opacity .125s .25s,-webkit-transform .25s .25s;opacity:0}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem;margin-left:0}html body .md-typeset .headerlink{color:rgba(0,0,0,.26)}.md-typeset h1[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h1[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink,.md-typeset h1[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h1[id] .headerlink:focus,.md-typeset h1[id]:hover .headerlink:hover,.md-typeset h1[id]:target .headerlink{color:#536dfe}.md-typeset h2[id]:before{display:block;margin-top:-8px;padding-top:8px;content:""}.md-typeset h2[id]:target:before{margin-top:-3.4rem;padding-top:3.4rem}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink,.md-typeset h2[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h2[id] .headerlink:focus,.md-typeset h2[id]:hover .headerlink:hover,.md-typeset h2[id]:target .headerlink{color:#536dfe}.md-typeset h3[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h3[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink,.md-typeset h3[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h3[id] .headerlink:focus,.md-typeset h3[id]:hover .headerlink:hover,.md-typeset h3[id]:target .headerlink{color:#536dfe}.md-typeset h4[id]:before{display:block;margin-top:-9px;padding-top:9px;content:""}.md-typeset h4[id]:target:before{margin-top:-3.45rem;padding-top:3.45rem}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink,.md-typeset h4[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h4[id] .headerlink:focus,.md-typeset h4[id]:hover .headerlink:hover,.md-typeset h4[id]:target .headerlink{color:#536dfe}.md-typeset h5[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h5[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink,.md-typeset h5[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h5[id] .headerlink:focus,.md-typeset h5[id]:hover .headerlink:hover,.md-typeset h5[id]:target .headerlink{color:#536dfe}.md-typeset h6[id]:before{display:block;margin-top:-11px;padding-top:11px;content:""}.md-typeset h6[id]:target:before{margin-top:-3.55rem;padding-top:3.55rem}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink,.md-typeset h6[id]:target .headerlink{-webkit-transform:translate(0);transform:translate(0);opacity:1}.md-typeset h6[id] .headerlink:focus,.md-typeset h6[id]:hover .headerlink:hover,.md-typeset h6[id]:target .headerlink{color:#536dfe}.md-typeset .MJXc-display{margin:.75em 0;padding:.75em 0;overflow:auto;-webkit-overflow-scrolling:touch}.md-typeset .MathJax_CHTML{outline:0}.md-typeset .critic.comment,.md-typeset del.critic,.md-typeset ins.critic{margin:0 .25em;padding:.0625em 0;border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset del.critic{background-color:#fdd;box-shadow:.25em 0 0 #fdd,-.25em 0 0 #fdd}.md-typeset ins.critic{background-color:#dfd;box-shadow:.25em 0 0 #dfd,-.25em 0 0 #dfd}.md-typeset .critic.comment{background-color:hsla(0,0%,92.5%,.5);color:#37474f;box-shadow:.25em 0 0 hsla(0,0%,92.5%,.5),-.25em 0 0 hsla(0,0%,92.5%,.5)}.md-typeset .critic.comment:before{padding-right:.125em;color:rgba(0,0,0,.26);content:"\E0B7";vertical-align:-.125em}.md-typeset .critic.block{display:block;margin:1em 0;padding-right:.8rem;padding-left:.8rem;box-shadow:none}.md-typeset .critic.block :first-child{margin-top:.5em}.md-typeset .critic.block :last-child{margin-bottom:.5em}.md-typeset details{display:block;padding-top:0}.md-typeset details[open]>summary:after{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.md-typeset details:not([open]){padding-bottom:0}.md-typeset details:not([open])>summary{border-bottom:none}.md-typeset details summary{padding-right:2rem}[dir=rtl] .md-typeset details summary{padding-left:2rem}.no-details .md-typeset details:not([open])>*{display:none}.no-details .md-typeset details:not([open]) summary{display:block}.md-typeset summary{display:block;outline:none;cursor:pointer}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset summary:after{position:absolute;top:.4rem;right:.6rem;color:rgba(0,0,0,.26);font-size:1rem;content:"\E313"}[dir=rtl] .md-typeset summary:after{right:auto;left:.6rem}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{width:1rem;vertical-align:text-top}.md-typeset code.codehilite,.md-typeset code.highlight{margin:0 .29412em;padding:.07353em 0}.md-typeset .superfences-content{display:none;-webkit-box-ordinal-group:100;order:99;width:100%;background-color:#fff}.md-typeset .superfences-content>*{margin:0;border-radius:0}.md-typeset .superfences-tabs{display:-webkit-box;display:flex;position:relative;flex-wrap:wrap;margin:1em 0;border:.05rem solid rgba(0,0,0,.07);border-radius:.2em}.md-typeset .superfences-tabs>input{display:none}.md-typeset .superfences-tabs>input:checked+label{font-weight:700}.md-typeset .superfences-tabs>input:checked+label+.superfences-content{display:block}.md-typeset .superfences-tabs>label{width:auto;padding:.6rem;-webkit-transition:color .125s;transition:color .125s;font-size:.64rem;cursor:pointer}html .md-typeset .superfences-tabs>label:hover{color:#536dfe}.md-typeset .task-list-item{position:relative;list-style-type:none}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em;left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em;left:auto}.md-typeset .task-list-control .task-list-indicator:before{position:absolute;top:.15em;left:-1.25em;color:rgba(0,0,0,.26);font-size:1.25em;content:"\E835";vertical-align:-.25em}[dir=rtl] .md-typeset .task-list-control .task-list-indicator:before{right:-1.25em;left:auto}.md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator:before{content:"\E834"}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}@media print{.md-typeset a:after{color:rgba(0,0,0,.54);content:" [" attr(href) "]"}.md-typeset code,.md-typeset pre{white-space:pre-wrap}.md-typeset code{box-shadow:none;-webkit-box-decoration-break:initial;box-decoration-break:slice}.md-clipboard,.md-content__icon,.md-footer,.md-header,.md-sidebar,.md-tabs,.md-typeset .headerlink{display:none}}@media only screen and (max-width:44.9375em){.md-typeset pre{margin:1em -.8rem;border-radius:0}.md-typeset pre>code{padding:.525rem .8rem}.md-footer-nav__link--prev .md-footer-nav__title{display:none}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}.codehilite .hll,.md-typeset .highlight .hll{margin:0 -.8rem;padding:0 .8rem}.md-typeset>.codehilite,.md-typeset>.highlight{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilite code,.md-typeset>.codehilite pre,.md-typeset>.highlight code,.md-typeset>.highlight pre{padding:.525rem .8rem}.md-typeset>.codehilitetable,.md-typeset>.highlighttable{margin:1em -.8rem;border-radius:0}.md-typeset>.codehilitetable .codehilite>code,.md-typeset>.codehilitetable .codehilite>pre,.md-typeset>.codehilitetable .highlight>code,.md-typeset>.codehilitetable .highlight>pre,.md-typeset>.codehilitetable .linenodiv,.md-typeset>.highlighttable .codehilite>code,.md-typeset>.highlighttable .codehilite>pre,.md-typeset>.highlighttable .highlight>code,.md-typeset>.highlighttable .highlight>pre,.md-typeset>.highlighttable .linenodiv{padding:.5rem .8rem}.md-typeset>p>.MJXc-display{margin:.75em -.8rem;padding:.25em .8rem}.md-typeset>.superfences-tabs{margin:1em -.8rem;border:0;border-top:.05rem solid rgba(0,0,0,.07);border-radius:0}.md-typeset>.superfences-tabs code,.md-typeset>.superfences-tabs pre{padding:.525rem .8rem}}@media only screen and (min-width:100em){html{font-size:137.5%}}@media only screen and (min-width:125em){html{font-size:150%}}@media only screen and (max-width:59.9375em){body[data-md-state=lock]{overflow:hidden}.ios body[data-md-state=lock] .md-container{display:none}html .md-nav__link[for=__toc]{display:block;padding-right:2.4rem}html .md-nav__link[for=__toc]:after{color:inherit;content:"\E8DE"}html .md-nav__link[for=__toc]+.md-nav__link{display:none}html .md-nav__link[for=__toc]~.md-nav{display:-webkit-box;display:flex}html [dir=rtl] .md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav__source{display:block;padding:0 .2rem;background-color:rgba(50,64,144,.9675);color:#fff}.md-search__overlay{position:absolute;top:.2rem;left:.2rem;width:1.8rem;height:1.8rem;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:opacity .2s .2s,-webkit-transform .3s .1s;transition:transform .3s .1s,opacity .2s .2s;transition:transform .3s .1s,opacity .2s .2s,-webkit-transform .3s .1s;border-radius:1rem;background-color:#fff;overflow:hidden;pointer-events:none}[dir=rtl] .md-search__overlay{right:.2rem;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transition:opacity .1s,-webkit-transform .4s;transition:opacity .1s,-webkit-transform .4s;transition:transform .4s,opacity .1s;transition:transform .4s,opacity .1s,-webkit-transform .4s;opacity:1}.md-search__inner{position:fixed;top:0;left:100%;width:100%;height:100%;-webkit-transform:translateX(5%);transform:translateX(5%);-webkit-transition:right 0s .3s,left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:right 0s .3s,left 0s .3s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;transition:right 0s .3s,left 0s .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.4,0,.2,1) .15s;opacity:0;z-index:2}[data-md-toggle=search]:checked~.md-header .md-search__inner{left:0;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:right 0s 0s,left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:right 0s 0s,left 0s 0s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;transition:right 0s 0s,left 0s 0s,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s,-webkit-transform .15s cubic-bezier(.1,.7,.1,1) .15s;opacity:1}[dir=rtl] [data-md-toggle=search]:checked~.md-header .md-search__inner{right:0;left:auto}html [dir=rtl] .md-search__inner{right:100%;left:auto;-webkit-transform:translateX(-5%);transform:translateX(-5%)}.md-search__input{width:100%;height:2.4rem;font-size:.9rem}.md-search__icon[for=__search]{top:.6rem;left:.8rem}.md-search__icon[for=__search][for=__search]:before{content:"\E5C4"}[dir=rtl] .md-search__icon[for=__search][for=__search]:before{content:"\E5C8"}.md-search__icon[type=reset]{top:.6rem;right:.8rem}.md-search__output{top:2.4rem;bottom:0}.md-search-result__article--document:before{display:none}}@media only screen and (max-width:76.1875em){[data-md-toggle=drawer]:checked~.md-overlay{width:100%;height:100%;-webkit-transition:width 0s,height 0s,opacity .25s;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-header-nav__button.md-icon--home,.md-header-nav__button.md-logo{display:none}.md-hero__inner{margin-top:2.4rem;margin-bottom:1.2rem}.md-nav{background-color:#fff}.md-nav--primary,.md-nav--primary .md-nav{display:-webkit-box;display:flex;position:absolute;top:0;right:0;left:0;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;height:100%;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}html .md-nav--primary .md-nav__title{position:relative;height:5.6rem;padding:3rem .8rem .2rem;background-color:rgba(0,0,0,.07);color:rgba(0,0,0,.54);font-weight:400;line-height:2.4rem;white-space:nowrap;cursor:pointer}html .md-nav--primary .md-nav__title:before{display:block;position:absolute;top:.2rem;left:.2rem;width:2rem;height:2rem;color:rgba(0,0,0,.54)}html .md-nav--primary .md-nav__title~.md-nav__list{background-color:#fff;box-shadow:inset 0 .05rem 0 rgba(0,0,0,.07)}html .md-nav--primary .md-nav__title~.md-nav__list>.md-nav__item:first-child{border-top:0}html .md-nav--primary .md-nav__title--site{position:relative;background-color:#3f51b5;color:#fff}html .md-nav--primary .md-nav__title--site .md-nav__button{display:block;position:absolute;top:.2rem;left:.2rem;width:3.2rem;height:3.2rem;font-size:2.4rem}html .md-nav--primary .md-nav__title--site:before{display:none}html [dir=rtl] .md-nav--primary .md-nav__title--site .md-nav__button,html [dir=rtl] .md-nav--primary .md-nav__title:before{right:.2rem;left:auto}.md-nav--primary .md-nav__list{-webkit-box-flex:1;flex:1;overflow-y:auto}.md-nav--primary .md-nav__item{padding:0;border-top:.05rem solid rgba(0,0,0,.07)}[dir=rtl] .md-nav--primary .md-nav__item{padding:0}.md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:2.4rem}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link{padding-right:.8rem;padding-left:2.4rem}.md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E315"}[dir=rtl] .md-nav--primary .md-nav__item--nested>.md-nav__link:after{content:"\E314"}.md-nav--primary .md-nav__link{position:relative;margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link:after{position:absolute;top:50%;right:.6rem;margin-top:-.6rem;color:inherit;font-size:1.2rem}[dir=rtl] .md-nav--primary .md-nav__link:after{right:auto;left:.6rem}.md-nav--primary .md-nav--secondary .md-nav__link{position:static}.md-nav--primary .md-nav--secondary .md-nav{position:static;background-color:transparent}.md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem;padding-left:0}.md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem;padding-left:0}.md-nav__toggle~.md-nav{display:-webkit-box;display:flex;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s;transition:transform .25s cubic-bezier(.8,0,.6,1),opacity .125s .05s,-webkit-transform .25s cubic-bezier(.8,0,.6,1);opacity:0}[dir=rtl] .md-nav__toggle~.md-nav{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.no-csstransforms3d .md-nav__toggle~.md-nav{display:none}.md-nav__toggle:checked~.md-nav{-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s;transition:transform .25s cubic-bezier(.4,0,.2,1),opacity .125s .125s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);opacity:1}.no-csstransforms3d .md-nav__toggle:checked~.md-nav{display:-webkit-box;display:flex}.md-sidebar--primary{position:fixed;top:0;left:-12.1rem;width:12.1rem;height:100%;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s,-webkit-transform .25s cubic-bezier(.4,0,.2,1);background-color:#fff;z-index:3}[dir=rtl] .md-sidebar--primary{right:-12.1rem;left:auto}.no-csstransforms3d .md-sidebar--primary{display:none}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:0 8px 10px 1px rgba(0,0,0,.14),0 3px 14px 2px rgba(0,0,0,.12),0 5px 5px -3px rgba(0,0,0,.4);-webkit-transform:translateX(12.1rem);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{-webkit-transform:translateX(-12.1rem);transform:translateX(-12.1rem)}.no-csstransforms3d [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{display:block}.md-sidebar--primary .md-sidebar__scrollwrap{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;margin:0}.md-tabs{display:none}}@media only screen and (min-width:60em){.md-content{margin-right:12.1rem}[dir=rtl] .md-content{margin-right:0;margin-left:12.1rem}.md-header-nav__button.md-icon--search{display:none}.md-header-nav__source{display:block;width:11.7rem;max-width:11.7rem;padding-right:.6rem}[dir=rtl] .md-header-nav__source{padding-right:0;padding-left:.6rem}.md-search{padding:.2rem}.md-search__overlay{position:fixed;top:0;left:0;width:0;height:0;-webkit-transition:width 0s .25s,height 0s .25s,opacity .25s;transition:width 0s .25s,height 0s .25s,opacity .25s;background-color:rgba(0,0,0,.54);cursor:pointer}[dir=rtl] .md-search__overlay{right:0;left:auto}[data-md-toggle=search]:checked~.md-header .md-search__overlay{width:100%;height:100%;-webkit-transition:width 0s,height 0s,opacity .25s;transition:width 0s,height 0s,opacity .25s;opacity:1}.md-search__inner{position:relative;width:11.5rem;margin-right:.8rem;padding:.1rem 0;float:right;-webkit-transition:width .25s cubic-bezier(.1,.7,.1,1);transition:width .25s cubic-bezier(.1,.7,.1,1)}[dir=rtl] .md-search__inner{margin-right:0;margin-left:.8rem;float:left}.md-search__form,.md-search__input{border-radius:.1rem}.md-search__input{width:100%;height:1.8rem;padding-left:2.2rem;-webkit-transition:background-color .25s cubic-bezier(.1,.7,.1,1),color .25s cubic-bezier(.1,.7,.1,1);transition:background-color .25s cubic-bezier(.1,.7,.1,1),color .25s cubic-bezier(.1,.7,.1,1);background-color:rgba(0,0,0,.26);color:inherit;font-size:.8rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input+.md-search__icon{color:inherit}.md-search__input::-webkit-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::-moz-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::-ms-input-placeholder{color:hsla(0,0%,100%,.7)}.md-search__input::placeholder{color:hsla(0,0%,100%,.7)}.md-search__input:hover{background-color:hsla(0,0%,100%,.12)}[data-md-toggle=search]:checked~.md-header .md-search__input{border-radius:.1rem .1rem 0 0;background-color:#fff;color:rgba(0,0,0,.87);text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input::-webkit-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input::-moz-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input:-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input::-ms-input-placeholder{color:rgba(0,0,0,.54)}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon,[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:rgba(0,0,0,.54)}.md-search__output{top:1.9rem;-webkit-transition:opacity .4s;transition:opacity .4s;opacity:0}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:0 6px 10px 0 rgba(0,0,0,.14),0 1px 18px 0 rgba(0,0,0,.12),0 3px 5px -1px rgba(0,0,0,.4);opacity:1}.md-search__scrollwrap{max-height:0}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap::-webkit-scrollbar{width:.2rem;height:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.26)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:#536dfe}.md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem;padding-left:0}.md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem;padding-left:.8rem}.md-sidebar--secondary{display:block;margin-left:100%;-webkit-transform:translate(-100%);transform:translate(-100%)}[dir=rtl] .md-sidebar--secondary{margin-right:100%;margin-left:0;-webkit-transform:translate(100%);transform:translate(100%)}}@media only screen and (min-width:76.25em){.md-content{margin-left:12.1rem}[dir=rtl] .md-content{margin-right:12.1rem}.md-content__inner{margin-right:1.2rem;margin-left:1.2rem}.md-header-nav__button.md-icon--menu{display:none}.md-nav[data-md-state=animate]{-webkit-transition:max-height .25s cubic-bezier(.86,0,.07,1);transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav__toggle~.md-nav{max-height:0;overflow:hidden}.no-js .md-nav__toggle~.md-nav{display:none}.md-nav[data-md-state=expand],.md-nav__toggle:checked~.md-nav{max-height:100%}.no-js .md-nav[data-md-state=expand],.no-js .md-nav__toggle:checked~.md-nav{display:block}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--nested>.md-nav__link:after{display:inline-block;-webkit-transform-origin:.45em .45em;transform-origin:.45em .45em;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;vertical-align:-.125em}.js .md-nav__item--nested>.md-nav__link:after{-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link:after{-webkit-transform:rotateX(180deg);transform:rotateX(180deg)}.md-search__inner{margin-right:1.2rem}[dir=rtl] .md-search__inner{margin-left:1.2rem}.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}.md-sidebar--secondary{margin-left:61rem}[dir=rtl] .md-sidebar--secondary{margin-right:61rem;margin-left:0}.md-tabs~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary .md-nav__title{display:block;padding:0}.md-tabs--active~.md-main .md-nav--primary .md-nav__title--site{display:none}.no-js .md-tabs--active~.md-main .md-nav--primary .md-nav{display:block}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item{font-size:0;visibility:hidden}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested{display:none;font-size:.7rem;overflow:auto;visibility:visible}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--nested>.md-nav__link{display:none}.md-tabs--active~.md-main .md-nav--primary>.md-nav__list>.md-nav__item--active{display:block}.md-tabs--active~.md-main .md-nav[data-md-level="1"]{max-height:none;overflow:visible}.md-tabs--active~.md-main .md-nav[data-md-level="1"]>.md-nav__list>.md-nav__item{padding-left:0}.md-tabs--active~.md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title{display:none}}@media only screen and (min-width:45em){.md-footer-nav__link{width:50%}.md-footer-copyright{max-width:75%;float:left}[dir=rtl] .md-footer-copyright{float:right}.md-footer-social{padding:.6rem 0;float:right}[dir=rtl] .md-footer-social{float:left}}@media only screen and (max-width:29.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(45);transform:scale(45)}}@media only screen and (min-width:30em) and (max-width:44.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(60);transform:scale(60)}}@media only screen and (min-width:45em) and (max-width:59.9375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{-webkit-transform:scale(75);transform:scale(75)}}@media only screen and (min-width:60em) and (max-width:76.1875em){.md-search__scrollwrap,[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}.md-search-result__teaser{max-height:2.5rem;-webkit-line-clamp:3}}
\ No newline at end of file
diff --git a/assets/stylesheets/application.451f80e5.css b/assets/stylesheets/application.451f80e5.css
deleted file mode 100644
index ec03938..0000000
--- a/assets/stylesheets/application.451f80e5.css
+++ /dev/null
@@ -1,2552 +0,0 @@
-@charset "UTF-8";
-html {
-  box-sizing: border-box; }
-
-*,
-*::before,
-*::after {
-  box-sizing: inherit; }
-
-html {
-  -webkit-text-size-adjust: none;
-     -moz-text-size-adjust: none;
-      -ms-text-size-adjust: none;
-          text-size-adjust: none; }
-
-body {
-  margin: 0; }
-
-hr {
-  overflow: visible;
-  box-sizing: content-box; }
-
-a {
-  -webkit-text-decoration-skip: objects; }
-
-a,
-button,
-label,
-input {
-  -webkit-tap-highlight-color: transparent; }
-
-a {
-  color: inherit;
-  text-decoration: none; }
-
-small {
-  font-size: 80%; }
-
-sub,
-sup {
-  position: relative;
-  font-size: 80%;
-  line-height: 0;
-  vertical-align: baseline; }
-
-sub {
-  bottom: -0.25em; }
-
-sup {
-  top: -0.5em; }
-
-img {
-  border-style: none; }
-
-table {
-  border-collapse: separate;
-  border-spacing: 0; }
-
-td,
-th {
-  font-weight: normal;
-  vertical-align: top; }
-
-button {
-  margin: 0;
-  padding: 0;
-  border: 0;
-  outline-style: none;
-  background: transparent;
-  font-size: inherit; }
-
-input {
-  border: 0;
-  outline: 0; }
-
-.md-icon, .md-clipboard::before, .md-nav__title::before, .md-nav__button, .md-nav__link::after, .md-search-result__article--document::before, .md-source-file::before, .md-typeset .admonition > .admonition-title::before, .md-typeset details > .admonition-title::before, .md-typeset .admonition > summary::before, .md-typeset details > summary::before, .md-typeset .footnote-backref, .md-typeset .critic.comment::before, .md-typeset summary::after, .md-typeset .task-list-control .task-list-indicator::before {
-  font-family: "Material Icons";
-  font-style: normal;
-  font-variant: normal;
-  font-weight: normal;
-  line-height: 1;
-  text-transform: none;
-  white-space: nowrap;
-  speak: none;
-  word-wrap: normal;
-  direction: ltr; }
-  .md-content__icon, .md-header-nav__button, .md-footer-nav__button, .md-nav__title::before, .md-nav__button, .md-search-result__article--document::before {
-    display: inline-block;
-    margin: 0.4rem;
-    padding: 0.8rem;
-    font-size: 2.4rem;
-    cursor: pointer; }
-
-.md-icon--arrow-back::before {
-  content: "\E5C4"; }
-
-.md-icon--arrow-forward::before {
-  content: "\E5C8"; }
-
-.md-icon--menu::before {
-  content: "\E5D2"; }
-
-.md-icon--search::before {
-  content: "\E8B6"; }
-
-[dir="rtl"] .md-icon--arrow-back::before {
-  content: "\E5C8"; }
-
-[dir="rtl"] .md-icon--arrow-forward::before {
-  content: "\E5C4"; }
-
-body {
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale; }
-
-body,
-input {
-  color: rgba(0, 0, 0, 0.87);
-  -webkit-font-feature-settings: "kern", "liga";
-          font-feature-settings: "kern", "liga";
-  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
-
-pre,
-code,
-kbd {
-  color: rgba(0, 0, 0, 0.87);
-  -webkit-font-feature-settings: "kern";
-          font-feature-settings: "kern";
-  font-family: "Courier New", Courier, monospace; }
-
-.md-typeset {
-  font-size: 1.6rem;
-  line-height: 1.6;
-  -webkit-print-color-adjust: exact; }
-  .md-typeset p,
-  .md-typeset ul,
-  .md-typeset ol,
-  .md-typeset blockquote {
-    margin: 1em 0; }
-  .md-typeset h1 {
-    margin: 0 0 4rem;
-    color: rgba(0, 0, 0, 0.54);
-    font-size: 3.125rem;
-    font-weight: 300;
-    letter-spacing: -0.01em;
-    line-height: 1.3; }
-  .md-typeset h2 {
-    margin: 4rem 0 1.6rem;
-    font-size: 2.5rem;
-    font-weight: 300;
-    letter-spacing: -0.01em;
-    line-height: 1.4; }
-  .md-typeset h3 {
-    margin: 3.2rem 0 1.6rem;
-    font-size: 2rem;
-    font-weight: 400;
-    letter-spacing: -0.01em;
-    line-height: 1.5; }
-  .md-typeset h2 + h3 {
-    margin-top: 1.6rem; }
-  .md-typeset h4 {
-    margin: 1.6rem 0;
-    font-size: 1.6rem;
-    font-weight: 700;
-    letter-spacing: -0.01em; }
-  .md-typeset h5,
-  .md-typeset h6 {
-    margin: 1.6rem 0;
-    color: rgba(0, 0, 0, 0.54);
-    font-size: 1.28rem;
-    font-weight: 700;
-    letter-spacing: -0.01em; }
-  .md-typeset h5 {
-    text-transform: uppercase; }
-  .md-typeset hr {
-    margin: 1.5em 0;
-    border-bottom: 0.1rem dotted rgba(0, 0, 0, 0.26); }
-  .md-typeset a {
-    color: #3f51b5;
-    word-break: break-word; }
-    .md-typeset a, .md-typeset a::before {
-      transition: color 0.125s; }
-    .md-typeset a:hover, .md-typeset a:active {
-      color: #536dfe; }
-  .md-typeset code,
-  .md-typeset pre {
-    background-color: rgba(236, 236, 236, 0.5);
-    color: #37474F;
-    font-size: 85%;
-    direction: ltr; }
-  .md-typeset code {
-    margin: 0 0.29412em;
-    padding: 0.07353em 0;
-    border-radius: 0.2rem;
-    box-shadow: 0.29412em 0 0 rgba(236, 236, 236, 0.5), -0.29412em 0 0 rgba(236, 236, 236, 0.5);
-    word-break: break-word;
-    -webkit-box-decoration-break: clone;
-            box-decoration-break: clone; }
-  .md-typeset h1 code,
-  .md-typeset h2 code,
-  .md-typeset h3 code,
-  .md-typeset h4 code,
-  .md-typeset h5 code,
-  .md-typeset h6 code {
-    margin: 0;
-    background-color: transparent;
-    box-shadow: none; }
-  .md-typeset a > code {
-    margin: inherit;
-    padding: inherit;
-    border-radius: none;
-    background-color: inherit;
-    color: inherit;
-    box-shadow: none; }
-  .md-typeset pre {
-    position: relative;
-    margin: 1em 0;
-    border-radius: 0.2rem;
-    line-height: 1.4;
-    -webkit-overflow-scrolling: touch; }
-    .md-typeset pre > code {
-      display: block;
-      margin: 0;
-      padding: 1.05rem 1.2rem;
-      background-color: transparent;
-      font-size: inherit;
-      box-shadow: none;
-      -webkit-box-decoration-break: none;
-              box-decoration-break: none;
-      overflow: auto; }
-      .md-typeset pre > code::-webkit-scrollbar {
-        width: 0.4rem;
-        height: 0.4rem; }
-      .md-typeset pre > code::-webkit-scrollbar-thumb {
-        background-color: rgba(0, 0, 0, 0.26); }
-        .md-typeset pre > code::-webkit-scrollbar-thumb:hover {
-          background-color: #536dfe; }
-  .md-typeset kbd {
-    padding: 0 0.29412em;
-    border: 0.1rem solid #c9c9c9;
-    border-radius: 0.3rem;
-    border-bottom-color: #bcbcbc;
-    background-color: #FCFCFC;
-    color: #555555;
-    font-size: 85%;
-    box-shadow: 0 0.1rem 0 #b0b0b0;
-    word-break: break-word; }
-  .md-typeset mark {
-    margin: 0 0.25em;
-    padding: 0.0625em 0;
-    border-radius: 0.2rem;
-    background-color: rgba(255, 235, 59, 0.5);
-    box-shadow: 0.25em 0 0 rgba(255, 235, 59, 0.5), -0.25em 0 0 rgba(255, 235, 59, 0.5);
-    word-break: break-word;
-    -webkit-box-decoration-break: clone;
-            box-decoration-break: clone; }
-  .md-typeset abbr {
-    border-bottom: 0.1rem dotted rgba(0, 0, 0, 0.54);
-    text-decoration: none;
-    cursor: help; }
-  .md-typeset small {
-    opacity: 0.75; }
-  .md-typeset sup,
-  .md-typeset sub {
-    margin-left: 0.07812em; }
-    [dir="rtl"] .md-typeset sup, [dir="rtl"]
-    .md-typeset sub {
-      margin-right: 0.07812em;
-      margin-left: initial; }
-  .md-typeset blockquote {
-    padding-left: 1.2rem;
-    border-left: 0.4rem solid rgba(0, 0, 0, 0.26);
-    color: rgba(0, 0, 0, 0.54); }
-    [dir="rtl"] .md-typeset blockquote {
-      padding-right: 1.2rem;
-      padding-left: initial;
-      border-right: 0.4rem solid rgba(0, 0, 0, 0.26);
-      border-left: initial; }
-  .md-typeset ul {
-    list-style-type: disc; }
-  .md-typeset ul,
-  .md-typeset ol {
-    margin-left: 0.625em;
-    padding: 0; }
-    [dir="rtl"] .md-typeset ul, [dir="rtl"]
-    .md-typeset ol {
-      margin-right: 0.625em;
-      margin-left: initial; }
-    .md-typeset ul ol,
-    .md-typeset ol ol {
-      list-style-type: lower-alpha; }
-      .md-typeset ul ol ol,
-      .md-typeset ol ol ol {
-        list-style-type: lower-roman; }
-    .md-typeset ul li,
-    .md-typeset ol li {
-      margin-bottom: 0.5em;
-      margin-left: 1.25em; }
-      [dir="rtl"] .md-typeset ul li, [dir="rtl"]
-      .md-typeset ol li {
-        margin-right: 1.25em;
-        margin-left: initial; }
-      .md-typeset ul li p,
-      .md-typeset ul li blockquote,
-      .md-typeset ol li p,
-      .md-typeset ol li blockquote {
-        margin: 0.5em 0; }
-      .md-typeset ul li:last-child,
-      .md-typeset ol li:last-child {
-        margin-bottom: 0; }
-      .md-typeset ul li ul,
-      .md-typeset ul li ol,
-      .md-typeset ol li ul,
-      .md-typeset ol li ol {
-        margin: 0.5em 0 0.5em 0.625em; }
-        [dir="rtl"] .md-typeset ul li ul, [dir="rtl"]
-        .md-typeset ul li ol, [dir="rtl"]
-        .md-typeset ol li ul, [dir="rtl"]
-        .md-typeset ol li ol {
-          margin-right: 0.625em;
-          margin-left: initial; }
-  .md-typeset dd {
-    margin: 1em 0 1em 1.875em; }
-    [dir="rtl"] .md-typeset dd {
-      margin-right: 1.875em;
-      margin-left: initial; }
-  .md-typeset iframe,
-  .md-typeset img,
-  .md-typeset svg {
-    max-width: 100%; }
-  .md-typeset table:not([class]) {
-    box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
-    display: inline-block;
-    max-width: 100%;
-    border-radius: 0.2rem;
-    font-size: 1.28rem;
-    overflow: auto;
-    -webkit-overflow-scrolling: touch; }
-    .md-typeset table:not([class]) + * {
-      margin-top: 1.5em; }
-    .md-typeset table:not([class]) th:not([align]),
-    .md-typeset table:not([class]) td:not([align]) {
-      text-align: left; }
-      [dir="rtl"] .md-typeset table:not([class]) th:not([align]), [dir="rtl"]
-      .md-typeset table:not([class]) td:not([align]) {
-        text-align: right; }
-    .md-typeset table:not([class]) th {
-      min-width: 10rem;
-      padding: 1.2rem 1.6rem;
-      background-color: rgba(0, 0, 0, 0.54);
-      color: white;
-      vertical-align: top; }
-    .md-typeset table:not([class]) td {
-      padding: 1.2rem 1.6rem;
-      border-top: 0.1rem solid rgba(0, 0, 0, 0.07);
-      vertical-align: top; }
-    .md-typeset table:not([class]) tr:first-child td {
-      border-top: 0; }
-    .md-typeset table:not([class]) a {
-      word-break: normal; }
-  .md-typeset__scrollwrap {
-    margin: 1em -1.6rem;
-    overflow-x: auto;
-    -webkit-overflow-scrolling: touch; }
-  .md-typeset .md-typeset__table {
-    display: inline-block;
-    margin-bottom: 0.5em;
-    padding: 0 1.6rem; }
-    .md-typeset .md-typeset__table table {
-      display: table;
-      width: 100%;
-      margin: 0;
-      overflow: hidden; }
-
-html {
-  height: 100%;
-  font-size: 62.5%;
-  overflow-x: hidden; }
-
-body {
-  position: relative;
-  height: 100%; }
-
-hr {
-  display: block;
-  height: 0.1rem;
-  padding: 0;
-  border: 0; }
-
-.md-svg {
-  display: none; }
-
-.md-grid {
-  max-width: 122rem;
-  margin-right: auto;
-  margin-left: auto; }
-
-.md-container,
-.md-main {
-  overflow: auto; }
-
-.md-container {
-  display: table;
-  width: 100%;
-  height: 100%;
-  padding-top: 4.8rem;
-  table-layout: fixed; }
-
-.md-main {
-  display: table-row;
-  height: 100%; }
-  .md-main__inner {
-    height: 100%;
-    padding-top: 3rem;
-    padding-bottom: 0.1rem; }
-
-.md-toggle {
-  display: none; }
-
-.md-overlay {
-  position: fixed;
-  top: 0;
-  width: 0;
-  height: 0;
-  transition: width   0s 0.25s, height  0s 0.25s, opacity 0.25s;
-  background-color: rgba(0, 0, 0, 0.54);
-  opacity: 0;
-  z-index: 3; }
-
-.md-flex {
-  display: table; }
-  .md-flex__cell {
-    display: table-cell;
-    position: relative;
-    vertical-align: top; }
-    .md-flex__cell--shrink {
-      width: 0%; }
-    .md-flex__cell--stretch {
-      display: table;
-      width: 100%;
-      table-layout: fixed; }
-  .md-flex__ellipsis {
-    display: table-cell;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    overflow: hidden; }
-
-.md-skip {
-  position: fixed;
-  width: 0.1rem;
-  height: 0.1rem;
-  margin: 1rem;
-  padding: 0.6rem 1rem;
-  clip: rect(0.1rem);
-  -webkit-transform: translateY(0.8rem);
-          transform: translateY(0.8rem);
-  border-radius: 0.2rem;
-  background-color: rgba(0, 0, 0, 0.87);
-  color: white;
-  font-size: 1.28rem;
-  opacity: 0;
-  overflow: hidden; }
-  .md-skip:focus {
-    width: auto;
-    height: auto;
-    clip: auto;
-    -webkit-transform: translateX(0);
-            transform: translateX(0);
-    transition: opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-    transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s;
-    transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-    opacity: 1;
-    z-index: 10; }
-
-@page {
-  margin: 25mm; }
-
-.md-clipboard {
-  position: absolute;
-  top: 0.6rem;
-  right: 0.6rem;
-  width: 2.8rem;
-  height: 2.8rem;
-  border-radius: 0.2rem;
-  font-size: 1.6rem;
-  cursor: pointer;
-  z-index: 1;
-  -webkit-backface-visibility: hidden;
-          backface-visibility: hidden; }
-  .md-clipboard::before {
-    transition: color   0.25s, opacity 0.25s;
-    color: rgba(0, 0, 0, 0.07);
-    content: "\E14D"; }
-    pre:hover .md-clipboard::before,
-    .codehilite:hover .md-clipboard::before, .md-typeset .highlight:hover .md-clipboard::before {
-      color: rgba(0, 0, 0, 0.54); }
-  .md-clipboard:focus::before, .md-clipboard:hover::before {
-    color: #536dfe; }
-  .md-clipboard__message {
-    display: block;
-    position: absolute;
-    top: 0;
-    right: 3.4rem;
-    padding: 0.6rem 1rem;
-    -webkit-transform: translateX(0.8rem);
-            transform: translateX(0.8rem);
-    transition: opacity 0.175s, -webkit-transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0);
-    transition: transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0), opacity 0.175s;
-    transition: transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0), opacity 0.175s, -webkit-transform 0.25s cubic-bezier(0.9, 0.1, 0.9, 0);
-    border-radius: 0.2rem;
-    background-color: rgba(0, 0, 0, 0.54);
-    color: white;
-    font-size: 1.28rem;
-    white-space: nowrap;
-    opacity: 0;
-    pointer-events: none; }
-    .md-clipboard__message--active {
-      -webkit-transform: translateX(0);
-              transform: translateX(0);
-      transition: opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-      transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s;
-      transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.175s 0.075s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-      opacity: 1;
-      pointer-events: initial; }
-    .md-clipboard__message::before {
-      content: attr(aria-label); }
-    .md-clipboard__message::after {
-      display: block;
-      position: absolute;
-      top: 50%;
-      right: -0.4rem;
-      width: 0;
-      margin-top: -0.4rem;
-      border-width: 0.4rem 0 0.4rem 0.4rem;
-      border-style: solid;
-      border-color: transparent rgba(0, 0, 0, 0.54);
-      content: ""; }
-
-.md-content__inner {
-  margin: 0 1.6rem 2.4rem;
-  padding-top: 1.2rem; }
-  .md-content__inner::before {
-    display: block;
-    height: 0.8rem;
-    content: ""; }
-  .md-content__inner > :last-child {
-    margin-bottom: 0; }
-
-.md-content__icon {
-  position: relative;
-  margin: 0.8rem 0;
-  padding: 0;
-  float: right; }
-  .md-typeset .md-content__icon {
-    color: rgba(0, 0, 0, 0.26); }
-
-.md-header {
-  position: fixed;
-  top: 0;
-  right: 0;
-  left: 0;
-  height: 4.8rem;
-  transition: background-color 0.25s, color 0.25s;
-  background-color: #3f51b5;
-  color: white;
-  box-shadow: none;
-  z-index: 2;
-  -webkit-backface-visibility: hidden;
-          backface-visibility: hidden; }
-  .no-js .md-header {
-    transition: none;
-    box-shadow: none; }
-  .md-header[data-md-state="shadow"] {
-    transition: background-color 0.25s, color 0.25s, box-shadow 0.25s;
-    box-shadow: 0 0 0.4rem rgba(0, 0, 0, 0.1), 0 0.4rem 0.8rem rgba(0, 0, 0, 0.2); }
-
-.md-header-nav {
-  padding: 0 0.4rem; }
-  .md-header-nav__button {
-    position: relative;
-    transition: opacity 0.25s;
-    z-index: 1; }
-    .md-header-nav__button:hover {
-      opacity: 0.7; }
-    .md-header-nav__button.md-logo * {
-      display: block; }
-    .no-js .md-header-nav__button.md-icon--search {
-      display: none; }
-  .md-header-nav__topic {
-    display: block;
-    position: absolute;
-    transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-    transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s;
-    transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    overflow: hidden; }
-    .md-header-nav__topic + .md-header-nav__topic {
-      -webkit-transform: translateX(2.5rem);
-              transform: translateX(2.5rem);
-      transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
-      transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s;
-      transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
-      opacity: 0;
-      z-index: -1;
-      pointer-events: none; }
-      [dir="rtl"] .md-header-nav__topic + .md-header-nav__topic {
-        -webkit-transform: translateX(-2.5rem);
-                transform: translateX(-2.5rem); }
-    .no-js .md-header-nav__topic {
-      position: initial; }
-    .no-js .md-header-nav__topic + .md-header-nav__topic {
-      display: none; }
-  .md-header-nav__title {
-    padding: 0 2rem;
-    font-size: 1.8rem;
-    line-height: 4.8rem; }
-    .md-header-nav__title[data-md-state="active"] .md-header-nav__topic {
-      -webkit-transform: translateX(-2.5rem);
-              transform: translateX(-2.5rem);
-      transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
-      transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s;
-      transition: transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(1, 0.7, 0.1, 0.1);
-      opacity: 0;
-      z-index: -1;
-      pointer-events: none; }
-      [dir="rtl"] .md-header-nav__title[data-md-state="active"] .md-header-nav__topic {
-        -webkit-transform: translateX(2.5rem);
-                transform: translateX(2.5rem); }
-      .md-header-nav__title[data-md-state="active"] .md-header-nav__topic + .md-header-nav__topic {
-        -webkit-transform: translateX(0);
-                transform: translateX(0);
-        transition: opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-        transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s;
-        transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-        opacity: 1;
-        z-index: 0;
-        pointer-events: initial; }
-  .md-header-nav__source {
-    display: none; }
-
-.md-hero {
-  transition: background 0.25s;
-  background-color: #3f51b5;
-  color: white;
-  font-size: 2rem;
-  overflow: hidden; }
-  .md-hero__inner {
-    margin-top: 2rem;
-    padding: 1.6rem 1.6rem 0.8rem;
-    transition: opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-    transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s;
-    transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-    transition-delay: 0.1s; }
-    [data-md-state="hidden"] .md-hero__inner {
-      pointer-events: none;
-      -webkit-transform: translateY(1.25rem);
-              transform: translateY(1.25rem);
-      transition: opacity   0.1s 0s, -webkit-transform 0s   0.4s;
-      transition: transform 0s   0.4s, opacity   0.1s 0s;
-      transition: transform 0s   0.4s, opacity   0.1s 0s, -webkit-transform 0s   0.4s;
-      opacity: 0; }
-    .md-hero--expand .md-hero__inner {
-      margin-bottom: 2.4rem; }
-
-.md-footer-nav {
-  background-color: rgba(0, 0, 0, 0.87);
-  color: white; }
-  .md-footer-nav__inner {
-    padding: 0.4rem;
-    overflow: auto; }
-  .md-footer-nav__link {
-    padding-top: 2.8rem;
-    padding-bottom: 0.8rem;
-    transition: opacity 0.25s; }
-    .md-footer-nav__link:hover {
-      opacity: 0.7; }
-    .md-footer-nav__link--prev {
-      width: 25%;
-      float: left; }
-      [dir="rtl"] .md-footer-nav__link--prev {
-        float: right; }
-    .md-footer-nav__link--next {
-      width: 75%;
-      float: right;
-      text-align: right; }
-      [dir="rtl"] .md-footer-nav__link--next {
-        float: left;
-        text-align: left; }
-  .md-footer-nav__button {
-    transition: background 0.25s; }
-  .md-footer-nav__title {
-    position: relative;
-    padding: 0 2rem;
-    font-size: 1.8rem;
-    line-height: 4.8rem; }
-  .md-footer-nav__direction {
-    position: absolute;
-    right: 0;
-    left: 0;
-    margin-top: -2rem;
-    padding: 0 2rem;
-    color: rgba(255, 255, 255, 0.7);
-    font-size: 1.5rem; }
-
-.md-footer-meta {
-  background-color: rgba(0, 0, 0, 0.895); }
-  .md-footer-meta__inner {
-    padding: 0.4rem;
-    overflow: auto; }
-  html .md-footer-meta.md-typeset a {
-    color: rgba(255, 255, 255, 0.7); }
-    html .md-footer-meta.md-typeset a:focus, html .md-footer-meta.md-typeset a:hover {
-      color: white; }
-
-.md-footer-copyright {
-  margin: 0 1.2rem;
-  padding: 0.8rem 0;
-  color: rgba(255, 255, 255, 0.3);
-  font-size: 1.28rem; }
-  .md-footer-copyright__highlight {
-    color: rgba(255, 255, 255, 0.7); }
-
-.md-footer-social {
-  margin: 0 0.8rem;
-  padding: 0.4rem 0 1.2rem; }
-  .md-footer-social__link {
-    display: inline-block;
-    width: 3.2rem;
-    height: 3.2rem;
-    font-size: 1.6rem;
-    text-align: center; }
-    .md-footer-social__link::before {
-      line-height: 1.9; }
-
-.md-nav {
-  font-size: 1.4rem;
-  line-height: 1.3; }
-  .md-nav__title {
-    display: block;
-    padding: 0 1.2rem;
-    font-weight: 700;
-    text-overflow: ellipsis;
-    overflow: hidden; }
-    .md-nav__title::before {
-      display: none;
-      content: "\E5C4"; }
-      [dir="rtl"] .md-nav__title::before {
-        content: "\E5C8"; }
-    .md-nav__title .md-nav__button {
-      display: none; }
-  .md-nav__list {
-    margin: 0;
-    padding: 0;
-    list-style: none; }
-  .md-nav__item {
-    padding: 0 1.2rem; }
-    .md-nav__item:last-child {
-      padding-bottom: 1.2rem; }
-    .md-nav__item .md-nav__item {
-      padding-right: 0; }
-      [dir="rtl"] .md-nav__item .md-nav__item {
-        padding-right: 1.2rem;
-        padding-left: 0; }
-      .md-nav__item .md-nav__item:last-child {
-        padding-bottom: 0; }
-  .md-nav__button img {
-    width: 100%;
-    height: auto; }
-  .md-nav__link {
-    display: block;
-    margin-top: 0.625em;
-    transition: color 0.125s;
-    text-overflow: ellipsis;
-    cursor: pointer;
-    overflow: hidden; }
-    .md-nav__item--nested > .md-nav__link::after {
-      content: "\E313"; }
-    html .md-nav__link[for="__toc"] {
-      display: none; }
-      html .md-nav__link[for="__toc"] ~ .md-nav {
-        display: none; }
-      html .md-nav__link[for="__toc"] + .md-nav__link::after {
-        display: none; }
-    .md-nav__link[data-md-state="blur"] {
-      color: rgba(0, 0, 0, 0.54); }
-    .md-nav__link:active, .md-nav__link--active {
-      color: #3f51b5; }
-    .md-nav__item--nested > .md-nav__link {
-      color: inherit; }
-    .md-nav__link:focus, .md-nav__link:hover {
-      color: #536dfe; }
-  .md-nav__source {
-    display: none; }
-
-.no-js .md-search {
-  display: none; }
-
-.md-search__overlay {
-  opacity: 0;
-  z-index: 1; }
-
-.md-search__form {
-  position: relative; }
-
-.md-search__input {
-  position: relative;
-  padding: 0 4.4rem 0 7.2rem;
-  text-overflow: ellipsis;
-  z-index: 2; }
-  [dir="rtl"] .md-search__input {
-    padding: 0 7.2rem 0 4.4rem; }
-  .md-search__input::-webkit-input-placeholder {
-    transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
-  .md-search__input:-ms-input-placeholder {
-    transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
-  .md-search__input::-ms-input-placeholder {
-    transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
-  .md-search__input::placeholder {
-    transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
-  .md-search__input ~ .md-search__icon, .md-search__input::-webkit-input-placeholder {
-    color: rgba(0, 0, 0, 0.54); }
-  .md-search__input ~ .md-search__icon, .md-search__input:-ms-input-placeholder {
-    color: rgba(0, 0, 0, 0.54); }
-  .md-search__input ~ .md-search__icon, .md-search__input::-ms-input-placeholder {
-    color: rgba(0, 0, 0, 0.54); }
-  .md-search__input ~ .md-search__icon, .md-search__input::placeholder {
-    color: rgba(0, 0, 0, 0.54); }
-  .md-search__input::-ms-clear {
-    display: none; }
-
-.md-search__icon {
-  position: absolute;
-  transition: color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s;
-  font-size: 2.4rem;
-  cursor: pointer;
-  z-index: 2; }
-  .md-search__icon:hover {
-    opacity: 0.7; }
-  .md-search__icon[for="__search"] {
-    top: 0.6rem;
-    left: 1rem; }
-    [dir="rtl"] .md-search__icon[for="__search"] {
-      right: 1rem;
-      left: initial; }
-    .md-search__icon[for="__search"]::before {
-      content: "\E8B6"; }
-  .md-search__icon[type="reset"] {
-    top: 0.6rem;
-    right: 1rem;
-    -webkit-transform: scale(0.125);
-            transform: scale(0.125);
-    transition: opacity 0.15s, -webkit-transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
-    transition: transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s;
-    transition: transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s, -webkit-transform 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
-    opacity: 0; }
-    [dir="rtl"] .md-search__icon[type="reset"] {
-      right: initial;
-      left: 1rem; }
-    [data-md-toggle="search"]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type="reset"] {
-      -webkit-transform: scale(1);
-              transform: scale(1);
-      opacity: 1; }
-      [data-md-toggle="search"]:checked ~ .md-header .md-search__input:valid ~ .md-search__icon[type="reset"]:hover {
-        opacity: 0.7; }
-
-.md-search__output {
-  position: absolute;
-  width: 100%;
-  border-radius: 0 0 0.2rem 0.2rem;
-  overflow: hidden;
-  z-index: 1; }
-
-.md-search__scrollwrap {
-  height: 100%;
-  background-color: white;
-  box-shadow: 0 0.1rem 0 rgba(0, 0, 0, 0.07) inset;
-  overflow-y: auto;
-  -webkit-overflow-scrolling: touch; }
-
-.md-search-result {
-  color: rgba(0, 0, 0, 0.87);
-  word-break: break-word; }
-  .md-search-result__meta {
-    padding: 0 1.6rem;
-    background-color: rgba(0, 0, 0, 0.07);
-    color: rgba(0, 0, 0, 0.54);
-    font-size: 1.28rem;
-    line-height: 3.6rem; }
-  .md-search-result__list {
-    margin: 0;
-    padding: 0;
-    border-top: 0.1rem solid rgba(0, 0, 0, 0.07);
-    list-style: none; }
-  .md-search-result__item {
-    box-shadow: 0 -0.1rem 0 rgba(0, 0, 0, 0.07); }
-  .md-search-result__link {
-    display: block;
-    transition: background 0.25s;
-    outline: 0;
-    overflow: hidden; }
-    .md-search-result__link[data-md-state="active"], .md-search-result__link:hover {
-      background-color: rgba(83, 109, 254, 0.1); }
-      .md-search-result__link[data-md-state="active"] .md-search-result__article::before, .md-search-result__link:hover .md-search-result__article::before {
-        opacity: 0.7; }
-    .md-search-result__link:last-child .md-search-result__teaser {
-      margin-bottom: 1.2rem; }
-  .md-search-result__article {
-    position: relative;
-    padding: 0 1.6rem;
-    overflow: auto; }
-    .md-search-result__article--document::before {
-      position: absolute;
-      left: 0;
-      margin: 0.2rem;
-      transition: opacity 0.25s;
-      color: rgba(0, 0, 0, 0.54);
-      content: "\E880"; }
-      [dir="rtl"] .md-search-result__article--document::before {
-        right: 0;
-        left: initial; }
-    .md-search-result__article--document .md-search-result__title {
-      margin: 1.1rem 0;
-      font-size: 1.6rem;
-      font-weight: 400;
-      line-height: 1.4; }
-  .md-search-result__title {
-    margin: 0.5em 0;
-    font-size: 1.28rem;
-    font-weight: 700;
-    line-height: 1.4; }
-  .md-search-result__teaser {
-    display: -webkit-box;
-    max-height: 3.3rem;
-    margin: 0.5em 0;
-    color: rgba(0, 0, 0, 0.54);
-    font-size: 1.28rem;
-    line-height: 1.4;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    -webkit-line-clamp: 2; }
-  .md-search-result em {
-    font-style: normal;
-    font-weight: 700;
-    text-decoration: underline; }
-
-.md-sidebar {
-  position: absolute;
-  width: 24.2rem;
-  padding: 2.4rem 0;
-  overflow: hidden; }
-  .md-sidebar[data-md-state="lock"] {
-    position: fixed;
-    top: 4.8rem; }
-  .md-sidebar--secondary {
-    display: none; }
-  .md-sidebar__scrollwrap {
-    max-height: 100%;
-    margin: 0 0.4rem;
-    overflow-y: auto;
-    -webkit-backface-visibility: hidden;
-            backface-visibility: hidden; }
-    .md-sidebar__scrollwrap::-webkit-scrollbar {
-      width: 0.4rem;
-      height: 0.4rem; }
-    .md-sidebar__scrollwrap::-webkit-scrollbar-thumb {
-      background-color: rgba(0, 0, 0, 0.26); }
-      .md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover {
-        background-color: #536dfe; }
-
-@-webkit-keyframes md-source__facts--done {
-  0% {
-    height: 0; }
-  100% {
-    height: 1.3rem; } }
-
-@keyframes md-source__facts--done {
-  0% {
-    height: 0; }
-  100% {
-    height: 1.3rem; } }
-
-@-webkit-keyframes md-source__fact--done {
-  0% {
-    -webkit-transform: translateY(100%);
-            transform: translateY(100%);
-    opacity: 0; }
-  50% {
-    opacity: 0; }
-  100% {
-    -webkit-transform: translateY(0%);
-            transform: translateY(0%);
-    opacity: 1; } }
-
-@keyframes md-source__fact--done {
-  0% {
-    -webkit-transform: translateY(100%);
-            transform: translateY(100%);
-    opacity: 0; }
-  50% {
-    opacity: 0; }
-  100% {
-    -webkit-transform: translateY(0%);
-            transform: translateY(0%);
-    opacity: 1; } }
-
-.md-source {
-  display: block;
-  padding-right: 1.2rem;
-  transition: opacity 0.25s;
-  font-size: 1.3rem;
-  line-height: 1.2;
-  white-space: nowrap; }
-  [dir="rtl"] .md-source {
-    padding-right: initial;
-    padding-left: 1.2rem; }
-  .md-source:hover {
-    opacity: 0.7; }
-  .md-source::after {
-    display: inline-block;
-    height: 4.8rem;
-    content: "";
-    vertical-align: middle; }
-  .md-source__icon {
-    display: inline-block;
-    width: 4.8rem;
-    height: 4.8rem;
-    content: "";
-    vertical-align: middle; }
-    .md-source__icon svg {
-      width: 2.4rem;
-      height: 2.4rem;
-      margin-top: 1.2rem;
-      margin-left: 1.2rem; }
-      [dir="rtl"] .md-source__icon svg {
-        margin-right: 1.2rem;
-        margin-left: initial; }
-    .md-source__icon + .md-source__repository {
-      margin-left: -4.4rem;
-      padding-left: 4rem; }
-      [dir="rtl"] .md-source__icon + .md-source__repository {
-        margin-right: -4.4rem;
-        margin-left: initial;
-        padding-right: 4rem;
-        padding-left: initial; }
-  .md-source__repository {
-    display: inline-block;
-    max-width: 100%;
-    margin-left: 1.2rem;
-    font-weight: 700;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    vertical-align: middle; }
-  .md-source__facts {
-    margin: 0;
-    padding: 0;
-    font-size: 1.1rem;
-    font-weight: 700;
-    list-style-type: none;
-    opacity: 0.75;
-    overflow: hidden; }
-    [data-md-state="done"] .md-source__facts {
-      -webkit-animation: md-source__facts--done 0.25s ease-in;
-              animation: md-source__facts--done 0.25s ease-in; }
-  .md-source__fact {
-    float: left; }
-    [dir="rtl"] .md-source__fact {
-      float: right; }
-    [data-md-state="done"] .md-source__fact {
-      -webkit-animation: md-source__fact--done 0.4s ease-out;
-              animation: md-source__fact--done 0.4s ease-out; }
-    .md-source__fact::before {
-      margin: 0 0.2rem;
-      content: "\B7"; }
-    .md-source__fact:first-child::before {
-      display: none; }
-
-.md-source-file {
-  display: inline-block;
-  margin: 1em 0.5em 1em 0;
-  padding-right: 0.5rem;
-  border-radius: 0.2rem;
-  background-color: rgba(0, 0, 0, 0.07);
-  font-size: 1.28rem;
-  list-style-type: none;
-  cursor: pointer;
-  overflow: hidden; }
-  .md-source-file::before {
-    display: inline-block;
-    margin-right: 0.5rem;
-    padding: 0.5rem;
-    background-color: rgba(0, 0, 0, 0.26);
-    color: white;
-    font-size: 1.6rem;
-    content: "\E86F";
-    vertical-align: middle; }
-  html .md-source-file {
-    transition: background 0.4s, color 0.4s, box-shadow 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
-    html .md-source-file::before {
-      transition: inherit; }
-  html body .md-typeset .md-source-file {
-    color: rgba(0, 0, 0, 0.54); }
-  .md-source-file:hover {
-    box-shadow: 0 0 8px rgba(0, 0, 0, 0.18), 0 8px 16px rgba(0, 0, 0, 0.36); }
-    .md-source-file:hover::before {
-      background-color: #536dfe; }
-
-.md-tabs {
-  width: 100%;
-  transition: background 0.25s;
-  background-color: #3f51b5;
-  color: white;
-  overflow: auto; }
-  .md-tabs__list {
-    margin: 0;
-    margin-left: 0.4rem;
-    padding: 0;
-    list-style: none;
-    white-space: nowrap; }
-  .md-tabs__item {
-    display: inline-block;
-    height: 4.8rem;
-    padding-right: 1.2rem;
-    padding-left: 1.2rem; }
-  .md-tabs__link {
-    display: block;
-    margin-top: 1.6rem;
-    transition: opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-    transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s;
-    transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.25s, -webkit-transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1);
-    font-size: 1.4rem;
-    opacity: 0.7; }
-    .md-tabs__link--active, .md-tabs__link:hover {
-      color: inherit;
-      opacity: 1; }
-    .md-tabs__item:nth-child(2) .md-tabs__link {
-      transition-delay: 0.02s; }
-    .md-tabs__item:nth-child(3) .md-tabs__link {
-      transition-delay: 0.04s; }
-    .md-tabs__item:nth-child(4) .md-tabs__link {
-      transition-delay: 0.06s; }
-    .md-tabs__item:nth-child(5) .md-tabs__link {
-      transition-delay: 0.08s; }
-    .md-tabs__item:nth-child(6) .md-tabs__link {
-      transition-delay: 0.1s; }
-    .md-tabs__item:nth-child(7) .md-tabs__link {
-      transition-delay: 0.12s; }
-    .md-tabs__item:nth-child(8) .md-tabs__link {
-      transition-delay: 0.14s; }
-    .md-tabs__item:nth-child(9) .md-tabs__link {
-      transition-delay: 0.16s; }
-    .md-tabs__item:nth-child(10) .md-tabs__link {
-      transition-delay: 0.18s; }
-    .md-tabs__item:nth-child(11) .md-tabs__link {
-      transition-delay: 0.2s; }
-    .md-tabs__item:nth-child(12) .md-tabs__link {
-      transition-delay: 0.22s; }
-    .md-tabs__item:nth-child(13) .md-tabs__link {
-      transition-delay: 0.24s; }
-    .md-tabs__item:nth-child(14) .md-tabs__link {
-      transition-delay: 0.26s; }
-    .md-tabs__item:nth-child(15) .md-tabs__link {
-      transition-delay: 0.28s; }
-    .md-tabs__item:nth-child(16) .md-tabs__link {
-      transition-delay: 0.3s; }
-  .md-tabs[data-md-state="hidden"] {
-    pointer-events: none; }
-    .md-tabs[data-md-state="hidden"] .md-tabs__link {
-      -webkit-transform: translateY(50%);
-              transform: translateY(50%);
-      transition: color     0.25s, opacity   0.1s, -webkit-transform 0s 0.4s;
-      transition: color     0.25s, transform 0s 0.4s, opacity   0.1s;
-      transition: color     0.25s, transform 0s 0.4s, opacity   0.1s, -webkit-transform 0s 0.4s;
-      opacity: 0; }
-
-.md-typeset .admonition, .md-typeset details {
-  box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);
-  position: relative;
-  margin: 1.5625em 0;
-  padding: 0 1.2rem;
-  border-left: 0.4rem solid #448aff;
-  border-radius: 0.2rem;
-  font-size: 1.28rem;
-  overflow: auto; }
-  [dir="rtl"] .md-typeset .admonition, [dir="rtl"] .md-typeset details {
-    border-right: 0.4rem solid #448aff;
-    border-left: none; }
-  html .md-typeset .admonition > :last-child, html .md-typeset details > :last-child {
-    margin-bottom: 1.2rem; }
-  .md-typeset .admonition .admonition, .md-typeset details .admonition, .md-typeset .admonition details, .md-typeset details details {
-    margin: 1em 0; }
-  .md-typeset .admonition > .admonition-title, .md-typeset details > .admonition-title, .md-typeset .admonition > summary, .md-typeset details > summary {
-    margin: 0 -1.2rem;
-    padding: 0.8rem 1.2rem 0.8rem 4rem;
-    border-bottom: 0.1rem solid rgba(68, 138, 255, 0.1);
-    background-color: rgba(68, 138, 255, 0.1);
-    font-weight: 700; }
-    [dir="rtl"] .md-typeset .admonition > .admonition-title, [dir="rtl"] .md-typeset details > .admonition-title, [dir="rtl"] .md-typeset .admonition > summary, [dir="rtl"] .md-typeset details > summary {
-      padding: 0.8rem 4rem 0.8rem 1.2rem; }
-    .md-typeset .admonition > .admonition-title:last-child, .md-typeset details > .admonition-title:last-child, .md-typeset .admonition > summary:last-child, .md-typeset details > summary:last-child {
-      margin-bottom: 0; }
-    .md-typeset .admonition > .admonition-title::before, .md-typeset details > .admonition-title::before, .md-typeset .admonition > summary::before, .md-typeset details > summary::before {
-      position: absolute;
-      left: 1.2rem;
-      color: #448aff;
-      font-size: 2rem;
-      content: "\E3C9"; }
-      [dir="rtl"] .md-typeset .admonition > .admonition-title::before, [dir="rtl"] .md-typeset details > .admonition-title::before, [dir="rtl"] .md-typeset .admonition > summary::before, [dir="rtl"] .md-typeset details > summary::before {
-        right: 1.2rem;
-        left: initial; }
-  .md-typeset .admonition.summary, .md-typeset details.summary, .md-typeset .admonition.tldr, .md-typeset details.tldr, .md-typeset .admonition.abstract, .md-typeset details.abstract {
-    border-left-color: #00b0ff; }
-    [dir="rtl"] .md-typeset .admonition.summary, [dir="rtl"] .md-typeset details.summary, [dir="rtl"] .md-typeset .admonition.tldr, [dir="rtl"] .md-typeset details.tldr, [dir="rtl"] .md-typeset .admonition.abstract, [dir="rtl"] .md-typeset details.abstract {
-      border-right-color: #00b0ff; }
-    .md-typeset .admonition.summary > .admonition-title, .md-typeset details.summary > .admonition-title, .md-typeset .admonition.tldr > .admonition-title, .md-typeset details.tldr > .admonition-title, .md-typeset .admonition.summary > summary, .md-typeset details.summary > summary, .md-typeset .admonition.tldr > summary, .md-typeset details.tldr > summary, .md-typeset .admonition.abstract > .admonition-title, .md-typeset details.abstract > .admonition-title, .md-typeset .admonition.abstract > summary, .md-typeset details.abstract > summary {
-      border-bottom-color: 0.1rem solid rgba(0, 176, 255, 0.1);
-      background-color: rgba(0, 176, 255, 0.1); }
-      .md-typeset .admonition.summary > .admonition-title::before, .md-typeset details.summary > .admonition-title::before, .md-typeset .admonition.tldr > .admonition-title::before, .md-typeset details.tldr > .admonition-title::before, .md-typeset .admonition.summary > summary::before, .md-typeset details.summary > summary::before, .md-typeset .admonition.tldr > summary::before, .md-typeset details.tldr > summary::before, .md-typeset .admonition.abstract > .admonition-title::before, .md-typeset details.abstract > .admonition-title::before, .md-typeset .admonition.abstract > summary::before, .md-typeset details.abstract > summary::before {
-        color: #00b0ff;
-        content: "\E8D2"; }
-  .md-typeset .admonition.todo, .md-typeset details.todo, .md-typeset .admonition.info, .md-typeset details.info {
-    border-left-color: #00b8d4; }
-    [dir="rtl"] .md-typeset .admonition.todo, [dir="rtl"] .md-typeset details.todo, [dir="rtl"] .md-typeset .admonition.info, [dir="rtl"] .md-typeset details.info {
-      border-right-color: #00b8d4; }
-    .md-typeset .admonition.todo > .admonition-title, .md-typeset details.todo > .admonition-title, .md-typeset .admonition.todo > summary, .md-typeset details.todo > summary, .md-typeset .admonition.info > .admonition-title, .md-typeset details.info > .admonition-title, .md-typeset .admonition.info > summary, .md-typeset details.info > summary {
-      border-bottom-color: 0.1rem solid rgba(0, 184, 212, 0.1);
-      background-color: rgba(0, 184, 212, 0.1); }
-      .md-typeset .admonition.todo > .admonition-title::before, .md-typeset details.todo > .admonition-title::before, .md-typeset .admonition.todo > summary::before, .md-typeset details.todo > summary::before, .md-typeset .admonition.info > .admonition-title::before, .md-typeset details.info > .admonition-title::before, .md-typeset .admonition.info > summary::before, .md-typeset details.info > summary::before {
-        color: #00b8d4;
-        content: "\E88E"; }
-  .md-typeset .admonition.hint, .md-typeset details.hint, .md-typeset .admonition.important, .md-typeset details.important, .md-typeset .admonition.tip, .md-typeset details.tip {
-    border-left-color: #00bfa5; }
-    [dir="rtl"] .md-typeset .admonition.hint, [dir="rtl"] .md-typeset details.hint, [dir="rtl"] .md-typeset .admonition.important, [dir="rtl"] .md-typeset details.important, [dir="rtl"] .md-typeset .admonition.tip, [dir="rtl"] .md-typeset details.tip {
-      border-right-color: #00bfa5; }
-    .md-typeset .admonition.hint > .admonition-title, .md-typeset details.hint > .admonition-title, .md-typeset .admonition.important > .admonition-title, .md-typeset details.important > .admonition-title, .md-typeset .admonition.hint > summary, .md-typeset details.hint > summary, .md-typeset .admonition.important > summary, .md-typeset details.important > summary, .md-typeset .admonition.tip > .admonition-title, .md-typeset details.tip > .admonition-title, .md-typeset .admonition.tip > summary, .md-typeset details.tip > summary {
-      border-bottom-color: 0.1rem solid rgba(0, 191, 165, 0.1);
-      background-color: rgba(0, 191, 165, 0.1); }
-      .md-typeset .admonition.hint > .admonition-title::before, .md-typeset details.hint > .admonition-title::before, .md-typeset .admonition.important > .admonition-title::before, .md-typeset details.important > .admonition-title::before, .md-typeset .admonition.hint > summary::before, .md-typeset details.hint > summary::before, .md-typeset .admonition.important > summary::before, .md-typeset details.important > summary::before, .md-typeset .admonition.tip > .admonition-title::before, .md-typeset details.tip > .admonition-title::before, .md-typeset .admonition.tip > summary::before, .md-typeset details.tip > summary::before {
-        color: #00bfa5;
-        content: "\E80E"; }
-  .md-typeset .admonition.check, .md-typeset details.check, .md-typeset .admonition.done, .md-typeset details.done, .md-typeset .admonition.success, .md-typeset details.success {
-    border-left-color: #00c853; }
-    [dir="rtl"] .md-typeset .admonition.check, [dir="rtl"] .md-typeset details.check, [dir="rtl"] .md-typeset .admonition.done, [dir="rtl"] .md-typeset details.done, [dir="rtl"] .md-typeset .admonition.success, [dir="rtl"] .md-typeset details.success {
-      border-right-color: #00c853; }
-    .md-typeset .admonition.check > .admonition-title, .md-typeset details.check > .admonition-title, .md-typeset .admonition.done > .admonition-title, .md-typeset details.done > .admonition-title, .md-typeset .admonition.check > summary, .md-typeset details.check > summary, .md-typeset .admonition.done > summary, .md-typeset details.done > summary, .md-typeset .admonition.success > .admonition-title, .md-typeset details.success > .admonition-title, .md-typeset .admonition.success > summary, .md-typeset details.success > summary {
-      border-bottom-color: 0.1rem solid rgba(0, 200, 83, 0.1);
-      background-color: rgba(0, 200, 83, 0.1); }
-      .md-typeset .admonition.check > .admonition-title::before, .md-typeset details.check > .admonition-title::before, .md-typeset .admonition.done > .admonition-title::before, .md-typeset details.done > .admonition-title::before, .md-typeset .admonition.check > summary::before, .md-typeset details.check > summary::before, .md-typeset .admonition.done > summary::before, .md-typeset details.done > summary::before, .md-typeset .admonition.success > .admonition-title::before, .md-typeset details.success > .admonition-title::before, .md-typeset .admonition.success > summary::before, .md-typeset details.success > summary::before {
-        color: #00c853;
-        content: "\E876"; }
-  .md-typeset .admonition.help, .md-typeset details.help, .md-typeset .admonition.faq, .md-typeset details.faq, .md-typeset .admonition.question, .md-typeset details.question {
-    border-left-color: #64dd17; }
-    [dir="rtl"] .md-typeset .admonition.help, [dir="rtl"] .md-typeset details.help, [dir="rtl"] .md-typeset .admonition.faq, [dir="rtl"] .md-typeset details.faq, [dir="rtl"] .md-typeset .admonition.question, [dir="rtl"] .md-typeset details.question {
-      border-right-color: #64dd17; }
-    .md-typeset .admonition.help > .admonition-title, .md-typeset details.help > .admonition-title, .md-typeset .admonition.faq > .admonition-title, .md-typeset details.faq > .admonition-title, .md-typeset .admonition.help > summary, .md-typeset details.help > summary, .md-typeset .admonition.faq > summary, .md-typeset details.faq > summary, .md-typeset .admonition.question > .admonition-title, .md-typeset details.question > .admonition-title, .md-typeset .admonition.question > summary, .md-typeset details.question > summary {
-      border-bottom-color: 0.1rem solid rgba(100, 221, 23, 0.1);
-      background-color: rgba(100, 221, 23, 0.1); }
-      .md-typeset .admonition.help > .admonition-title::before, .md-typeset details.help > .admonition-title::before, .md-typeset .admonition.faq > .admonition-title::before, .md-typeset details.faq > .admonition-title::before, .md-typeset .admonition.help > summary::before, .md-typeset details.help > summary::before, .md-typeset .admonition.faq > summary::before, .md-typeset details.faq > summary::before, .md-typeset .admonition.question > .admonition-title::before, .md-typeset details.question > .admonition-title::before, .md-typeset .admonition.question > summary::before, .md-typeset details.question > summary::before {
-        color: #64dd17;
-        content: "\E887"; }
-  .md-typeset .admonition.caution, .md-typeset details.caution, .md-typeset .admonition.attention, .md-typeset details.attention, .md-typeset .admonition.warning, .md-typeset details.warning {
-    border-left-color: #ff9100; }
-    [dir="rtl"] .md-typeset .admonition.caution, [dir="rtl"] .md-typeset details.caution, [dir="rtl"] .md-typeset .admonition.attention, [dir="rtl"] .md-typeset details.attention, [dir="rtl"] .md-typeset .admonition.warning, [dir="rtl"] .md-typeset details.warning {
-      border-right-color: #ff9100; }
-    .md-typeset .admonition.caution > .admonition-title, .md-typeset details.caution > .admonition-title, .md-typeset .admonition.attention > .admonition-title, .md-typeset details.attention > .admonition-title, .md-typeset .admonition.caution > summary, .md-typeset details.caution > summary, .md-typeset .admonition.attention > summary, .md-typeset details.attention > summary, .md-typeset .admonition.warning > .admonition-title, .md-typeset details.warning > .admonition-title, .md-typeset .admonition.warning > summary, .md-typeset details.warning > summary {
-      border-bottom-color: 0.1rem solid rgba(255, 145, 0, 0.1);
-      background-color: rgba(255, 145, 0, 0.1); }
-      .md-typeset .admonition.caution > .admonition-title::before, .md-typeset details.caution > .admonition-title::before, .md-typeset .admonition.attention > .admonition-title::before, .md-typeset details.attention > .admonition-title::before, .md-typeset .admonition.caution > summary::before, .md-typeset details.caution > summary::before, .md-typeset .admonition.attention > summary::before, .md-typeset details.attention > summary::before, .md-typeset .admonition.warning > .admonition-title::before, .md-typeset details.warning > .admonition-title::before, .md-typeset .admonition.warning > summary::before, .md-typeset details.warning > summary::before {
-        color: #ff9100;
-        content: "\E002"; }
-  .md-typeset .admonition.fail, .md-typeset details.fail, .md-typeset .admonition.missing, .md-typeset details.missing, .md-typeset .admonition.failure, .md-typeset details.failure {
-    border-left-color: #ff5252; }
-    [dir="rtl"] .md-typeset .admonition.fail, [dir="rtl"] .md-typeset details.fail, [dir="rtl"] .md-typeset .admonition.missing, [dir="rtl"] .md-typeset details.missing, [dir="rtl"] .md-typeset .admonition.failure, [dir="rtl"] .md-typeset details.failure {
-      border-right-color: #ff5252; }
-    .md-typeset .admonition.fail > .admonition-title, .md-typeset details.fail > .admonition-title, .md-typeset .admonition.missing > .admonition-title, .md-typeset details.missing > .admonition-title, .md-typeset .admonition.fail > summary, .md-typeset details.fail > summary, .md-typeset .admonition.missing > summary, .md-typeset details.missing > summary, .md-typeset .admonition.failure > .admonition-title, .md-typeset details.failure > .admonition-title, .md-typeset .admonition.failure > summary, .md-typeset details.failure > summary {
-      border-bottom-color: 0.1rem solid rgba(255, 82, 82, 0.1);
-      background-color: rgba(255, 82, 82, 0.1); }
-      .md-typeset .admonition.fail > .admonition-title::before, .md-typeset details.fail > .admonition-title::before, .md-typeset .admonition.missing > .admonition-title::before, .md-typeset details.missing > .admonition-title::before, .md-typeset .admonition.fail > summary::before, .md-typeset details.fail > summary::before, .md-typeset .admonition.missing > summary::before, .md-typeset details.missing > summary::before, .md-typeset .admonition.failure > .admonition-title::before, .md-typeset details.failure > .admonition-title::before, .md-typeset .admonition.failure > summary::before, .md-typeset details.failure > summary::before {
-        color: #ff5252;
-        content: "\E14C"; }
-  .md-typeset .admonition.error, .md-typeset details.error, .md-typeset .admonition.danger, .md-typeset details.danger {
-    border-left-color: #ff1744; }
-    [dir="rtl"] .md-typeset .admonition.error, [dir="rtl"] .md-typeset details.error, [dir="rtl"] .md-typeset .admonition.danger, [dir="rtl"] .md-typeset details.danger {
-      border-right-color: #ff1744; }
-    .md-typeset .admonition.error > .admonition-title, .md-typeset details.error > .admonition-title, .md-typeset .admonition.error > summary, .md-typeset details.error > summary, .md-typeset .admonition.danger > .admonition-title, .md-typeset details.danger > .admonition-title, .md-typeset .admonition.danger > summary, .md-typeset details.danger > summary {
-      border-bottom-color: 0.1rem solid rgba(255, 23, 68, 0.1);
-      background-color: rgba(255, 23, 68, 0.1); }
-      .md-typeset .admonition.error > .admonition-title::before, .md-typeset details.error > .admonition-title::before, .md-typeset .admonition.error > summary::before, .md-typeset details.error > summary::before, .md-typeset .admonition.danger > .admonition-title::before, .md-typeset details.danger > .admonition-title::before, .md-typeset .admonition.danger > summary::before, .md-typeset details.danger > summary::before {
-        color: #ff1744;
-        content: "\E3E7"; }
-  .md-typeset .admonition.bug, .md-typeset details.bug {
-    border-left-color: #f50057; }
-    [dir="rtl"] .md-typeset .admonition.bug, [dir="rtl"] .md-typeset details.bug {
-      border-right-color: #f50057; }
-    .md-typeset .admonition.bug > .admonition-title, .md-typeset details.bug > .admonition-title, .md-typeset .admonition.bug > summary, .md-typeset details.bug > summary {
-      border-bottom-color: 0.1rem solid rgba(245, 0, 87, 0.1);
-      background-color: rgba(245, 0, 87, 0.1); }
-      .md-typeset .admonition.bug > .admonition-title::before, .md-typeset details.bug > .admonition-title::before, .md-typeset .admonition.bug > summary::before, .md-typeset details.bug > summary::before {
-        color: #f50057;
-        content: "\E868"; }
-  .md-typeset .admonition.example, .md-typeset details.example {
-    border-left-color: #651fff; }
-    [dir="rtl"] .md-typeset .admonition.example, [dir="rtl"] .md-typeset details.example {
-      border-right-color: #651fff; }
-    .md-typeset .admonition.example > .admonition-title, .md-typeset details.example > .admonition-title, .md-typeset .admonition.example > summary, .md-typeset details.example > summary {
-      border-bottom-color: 0.1rem solid rgba(101, 31, 255, 0.1);
-      background-color: rgba(101, 31, 255, 0.1); }
-      .md-typeset .admonition.example > .admonition-title::before, .md-typeset details.example > .admonition-title::before, .md-typeset .admonition.example > summary::before, .md-typeset details.example > summary::before {
-        color: #651fff;
-        content: "\E242"; }
-  .md-typeset .admonition.cite, .md-typeset details.cite, .md-typeset .admonition.quote, .md-typeset details.quote {
-    border-left-color: #9e9e9e; }
-    [dir="rtl"] .md-typeset .admonition.cite, [dir="rtl"] .md-typeset details.cite, [dir="rtl"] .md-typeset .admonition.quote, [dir="rtl"] .md-typeset details.quote {
-      border-right-color: #9e9e9e; }
-    .md-typeset .admonition.cite > .admonition-title, .md-typeset details.cite > .admonition-title, .md-typeset .admonition.cite > summary, .md-typeset details.cite > summary, .md-typeset .admonition.quote > .admonition-title, .md-typeset details.quote > .admonition-title, .md-typeset .admonition.quote > summary, .md-typeset details.quote > summary {
-      border-bottom-color: 0.1rem solid rgba(158, 158, 158, 0.1);
-      background-color: rgba(158, 158, 158, 0.1); }
-      .md-typeset .admonition.cite > .admonition-title::before, .md-typeset details.cite > .admonition-title::before, .md-typeset .admonition.cite > summary::before, .md-typeset details.cite > summary::before, .md-typeset .admonition.quote > .admonition-title::before, .md-typeset details.quote > .admonition-title::before, .md-typeset .admonition.quote > summary::before, .md-typeset details.quote > summary::before {
-        color: #9e9e9e;
-        content: "\E244"; }
-
-.codehilite .o, .md-typeset .highlight .o {
-  color: inherit; }
-
-.codehilite .ow, .md-typeset .highlight .ow {
-  color: inherit; }
-
-.codehilite .ge, .md-typeset .highlight .ge {
-  color: #000000; }
-
-.codehilite .gr, .md-typeset .highlight .gr {
-  color: #AA0000; }
-
-.codehilite .gh, .md-typeset .highlight .gh {
-  color: #999999; }
-
-.codehilite .go, .md-typeset .highlight .go {
-  color: #888888; }
-
-.codehilite .gp, .md-typeset .highlight .gp {
-  color: #555555; }
-
-.codehilite .gs, .md-typeset .highlight .gs {
-  color: inherit; }
-
-.codehilite .gu, .md-typeset .highlight .gu {
-  color: #AAAAAA; }
-
-.codehilite .gt, .md-typeset .highlight .gt {
-  color: #AA0000; }
-
-.codehilite .gd, .md-typeset .highlight .gd {
-  background-color: #FFDDDD; }
-
-.codehilite .gi, .md-typeset .highlight .gi {
-  background-color: #DDFFDD; }
-
-.codehilite .k, .md-typeset .highlight .k {
-  color: #3B78E7; }
-
-.codehilite .kc, .md-typeset .highlight .kc {
-  color: #A71D5D; }
-
-.codehilite .kd, .md-typeset .highlight .kd {
-  color: #3B78E7; }
-
-.codehilite .kn, .md-typeset .highlight .kn {
-  color: #3B78E7; }
-
-.codehilite .kp, .md-typeset .highlight .kp {
-  color: #A71D5D; }
-
-.codehilite .kr, .md-typeset .highlight .kr {
-  color: #3E61A2; }
-
-.codehilite .kt, .md-typeset .highlight .kt {
-  color: #3E61A2; }
-
-.codehilite .c, .md-typeset .highlight .c {
-  color: #999999; }
-
-.codehilite .cm, .md-typeset .highlight .cm {
-  color: #999999; }
-
-.codehilite .cp, .md-typeset .highlight .cp {
-  color: #666666; }
-
-.codehilite .c1, .md-typeset .highlight .c1 {
-  color: #999999; }
-
-.codehilite .ch, .md-typeset .highlight .ch {
-  color: #999999; }
-
-.codehilite .cs, .md-typeset .highlight .cs {
-  color: #999999; }
-
-.codehilite .na, .md-typeset .highlight .na {
-  color: #C2185B; }
-
-.codehilite .nb, .md-typeset .highlight .nb {
-  color: #C2185B; }
-
-.codehilite .bp, .md-typeset .highlight .bp {
-  color: #3E61A2; }
-
-.codehilite .nc, .md-typeset .highlight .nc {
-  color: #C2185B; }
-
-.codehilite .no, .md-typeset .highlight .no {
-  color: #3E61A2; }
-
-.codehilite .nd, .md-typeset .highlight .nd {
-  color: #666666; }
-
-.codehilite .ni, .md-typeset .highlight .ni {
-  color: #666666; }
-
-.codehilite .ne, .md-typeset .highlight .ne {
-  color: #C2185B; }
-
-.codehilite .nf, .md-typeset .highlight .nf {
-  color: #C2185B; }
-
-.codehilite .nl, .md-typeset .highlight .nl {
-  color: #3B5179; }
-
-.codehilite .nn, .md-typeset .highlight .nn {
-  color: #EC407A; }
-
-.codehilite .nt, .md-typeset .highlight .nt {
-  color: #3B78E7; }
-
-.codehilite .nv, .md-typeset .highlight .nv {
-  color: #3E61A2; }
-
-.codehilite .vc, .md-typeset .highlight .vc {
-  color: #3E61A2; }
-
-.codehilite .vg, .md-typeset .highlight .vg {
-  color: #3E61A2; }
-
-.codehilite .vi, .md-typeset .highlight .vi {
-  color: #3E61A2; }
-
-.codehilite .nx, .md-typeset .highlight .nx {
-  color: #EC407A; }
-
-.codehilite .m, .md-typeset .highlight .m {
-  color: #E74C3C; }
-
-.codehilite .mf, .md-typeset .highlight .mf {
-  color: #E74C3C; }
-
-.codehilite .mh, .md-typeset .highlight .mh {
-  color: #E74C3C; }
-
-.codehilite .mi, .md-typeset .highlight .mi {
-  color: #E74C3C; }
-
-.codehilite .il, .md-typeset .highlight .il {
-  color: #E74C3C; }
-
-.codehilite .mo, .md-typeset .highlight .mo {
-  color: #E74C3C; }
-
-.codehilite .s, .md-typeset .highlight .s {
-  color: #0D904F; }
-
-.codehilite .sb, .md-typeset .highlight .sb {
-  color: #0D904F; }
-
-.codehilite .sc, .md-typeset .highlight .sc {
-  color: #0D904F; }
-
-.codehilite .sd, .md-typeset .highlight .sd {
-  color: #999999; }
-
-.codehilite .s2, .md-typeset .highlight .s2 {
-  color: #0D904F; }
-
-.codehilite .se, .md-typeset .highlight .se {
-  color: #183691; }
-
-.codehilite .sh, .md-typeset .highlight .sh {
-  color: #183691; }
-
-.codehilite .si, .md-typeset .highlight .si {
-  color: #183691; }
-
-.codehilite .sx, .md-typeset .highlight .sx {
-  color: #183691; }
-
-.codehilite .sr, .md-typeset .highlight .sr {
-  color: #009926; }
-
-.codehilite .s1, .md-typeset .highlight .s1 {
-  color: #0D904F; }
-
-.codehilite .ss, .md-typeset .highlight .ss {
-  color: #0D904F; }
-
-.codehilite .err, .md-typeset .highlight .err {
-  color: #A61717; }
-
-.codehilite .w, .md-typeset .highlight .w {
-  color: transparent; }
-
-.codehilite .hll, .md-typeset .highlight .hll {
-  display: block;
-  margin: 0 -1.2rem;
-  padding: 0 1.2rem;
-  background-color: rgba(255, 235, 59, 0.5); }
-
-.md-typeset .codehilite, .md-typeset .highlight {
-  position: relative;
-  margin: 1em 0;
-  padding: 0;
-  border-radius: 0.2rem;
-  background-color: rgba(236, 236, 236, 0.5);
-  color: #37474F;
-  line-height: 1.4;
-  -webkit-overflow-scrolling: touch; }
-  .md-typeset .codehilite pre, .md-typeset .highlight pre,
-  .md-typeset .codehilite code, .md-typeset .highlight code {
-    display: block;
-    margin: 0;
-    padding: 1.05rem 1.2rem;
-    background-color: transparent;
-    overflow: auto;
-    vertical-align: top; }
-    .md-typeset .codehilite pre::-webkit-scrollbar, .md-typeset .highlight pre::-webkit-scrollbar,
-    .md-typeset .codehilite code::-webkit-scrollbar, .md-typeset .highlight code::-webkit-scrollbar {
-      width: 0.4rem;
-      height: 0.4rem; }
-    .md-typeset .codehilite pre::-webkit-scrollbar-thumb, .md-typeset .highlight pre::-webkit-scrollbar-thumb,
-    .md-typeset .codehilite code::-webkit-scrollbar-thumb, .md-typeset .highlight code::-webkit-scrollbar-thumb {
-      background-color: rgba(0, 0, 0, 0.26); }
-      .md-typeset .codehilite pre::-webkit-scrollbar-thumb:hover, .md-typeset .highlight pre::-webkit-scrollbar-thumb:hover,
-      .md-typeset .codehilite code::-webkit-scrollbar-thumb:hover, .md-typeset .highlight code::-webkit-scrollbar-thumb:hover {
-        background-color: #536dfe; }
-
-.md-typeset pre.codehilite, .md-typeset pre.highlight {
-  overflow: visible; }
-  .md-typeset pre.codehilite code, .md-typeset pre.highlight code {
-    display: block;
-    padding: 1.05rem 1.2rem;
-    overflow: auto; }
-
-.md-typeset .codehilitetable, .md-typeset .highlighttable {
-  display: block;
-  margin: 1em 0;
-  border-radius: 0.2em;
-  font-size: 1.6rem;
-  overflow: hidden; }
-  .md-typeset .codehilitetable tbody, .md-typeset .highlighttable tbody,
-  .md-typeset .codehilitetable td, .md-typeset .highlighttable td {
-    display: block;
-    padding: 0; }
-  .md-typeset .codehilitetable tr, .md-typeset .highlighttable tr {
-    display: flex; }
-  .md-typeset .codehilitetable .codehilite, .md-typeset .highlighttable .codehilite, .md-typeset .codehilitetable .highlight, .md-typeset .highlighttable .highlight,
-  .md-typeset .codehilitetable .linenodiv, .md-typeset .highlighttable .linenodiv {
-    margin: 0;
-    border-radius: 0; }
-  .md-typeset .codehilitetable .linenodiv, .md-typeset .highlighttable .linenodiv {
-    padding: 1.05rem 1.2rem; }
-  .md-typeset .codehilitetable .linenos, .md-typeset .highlighttable .linenos {
-    background-color: rgba(0, 0, 0, 0.07);
-    color: rgba(0, 0, 0, 0.26);
-    -webkit-user-select: none;
-       -moz-user-select: none;
-        -ms-user-select: none;
-            user-select: none; }
-    .md-typeset .codehilitetable .linenos pre, .md-typeset .highlighttable .linenos pre {
-      margin: 0;
-      padding: 0;
-      background-color: transparent;
-      color: inherit;
-      text-align: right; }
-  .md-typeset .codehilitetable .code, .md-typeset .highlighttable .code {
-    flex: 1;
-    overflow: hidden; }
-
-.md-typeset > .codehilitetable, .md-typeset > .highlighttable {
-  box-shadow: none; }
-
-.md-typeset [id^="fnref:"] {
-  display: inline-block; }
-  .md-typeset [id^="fnref:"]:target {
-    margin-top: -7.6rem;
-    padding-top: 7.6rem;
-    pointer-events: none; }
-
-.md-typeset [id^="fn:"]::before {
-  display: none;
-  height: 0;
-  content: ""; }
-
-.md-typeset [id^="fn:"]:target::before {
-  display: block;
-  margin-top: -7rem;
-  padding-top: 7rem;
-  pointer-events: none; }
-
-.md-typeset .footnote {
-  color: rgba(0, 0, 0, 0.54);
-  font-size: 1.28rem; }
-  .md-typeset .footnote ol {
-    margin-left: 0; }
-  .md-typeset .footnote li {
-    transition: color 0.25s; }
-    .md-typeset .footnote li:target {
-      color: rgba(0, 0, 0, 0.87); }
-    .md-typeset .footnote li :first-child {
-      margin-top: 0; }
-    .md-typeset .footnote li:hover .footnote-backref,
-    .md-typeset .footnote li:target .footnote-backref {
-      -webkit-transform: translateX(0);
-              transform: translateX(0);
-      opacity: 1; }
-    .md-typeset .footnote li:hover .footnote-backref:hover,
-    .md-typeset .footnote li:target .footnote-backref {
-      color: #536dfe; }
-
-.md-typeset .footnote-ref {
-  display: inline-block;
-  pointer-events: initial; }
-  .md-typeset .footnote-ref::before {
-    display: inline;
-    margin: 0 0.2em;
-    border-left: 0.1rem solid rgba(0, 0, 0, 0.26);
-    font-size: 1.25em;
-    content: "";
-    vertical-align: -0.5rem; }
-
-.md-typeset .footnote-backref {
-  display: inline-block;
-  -webkit-transform: translateX(0.5rem);
-          transform: translateX(0.5rem);
-  transition: color     0.25s, opacity   0.125s 0.125s, -webkit-transform 0.25s  0.125s;
-  transition: transform 0.25s  0.125s, color     0.25s, opacity   0.125s 0.125s;
-  transition: transform 0.25s  0.125s, color     0.25s, opacity   0.125s 0.125s, -webkit-transform 0.25s  0.125s;
-  color: rgba(0, 0, 0, 0.26);
-  font-size: 0;
-  opacity: 0;
-  vertical-align: text-bottom; }
-  [dir="rtl"] .md-typeset .footnote-backref {
-    -webkit-transform: translateX(-0.5rem);
-            transform: translateX(-0.5rem); }
-  .md-typeset .footnote-backref::before {
-    display: inline-block;
-    font-size: 1.6rem;
-    content: "\E31B"; }
-    [dir="rtl"] .md-typeset .footnote-backref::before {
-      -webkit-transform: scaleX(-1);
-              transform: scaleX(-1); }
-
-.md-typeset .headerlink {
-  display: inline-block;
-  margin-left: 1rem;
-  -webkit-transform: translate(0, 0.5rem);
-          transform: translate(0, 0.5rem);
-  transition: color     0.25s, opacity   0.125s 0.25s, -webkit-transform 0.25s  0.25s;
-  transition: transform 0.25s  0.25s, color     0.25s, opacity   0.125s 0.25s;
-  transition: transform 0.25s  0.25s, color     0.25s, opacity   0.125s 0.25s, -webkit-transform 0.25s  0.25s;
-  opacity: 0; }
-  [dir="rtl"] .md-typeset .headerlink {
-    margin-right: 1rem;
-    margin-left: initial; }
-  html body .md-typeset .headerlink {
-    color: rgba(0, 0, 0, 0.26); }
-
-.md-typeset h1[id]::before {
-  display: block;
-  margin-top: -0.9rem;
-  padding-top: 0.9rem;
-  content: ""; }
-
-.md-typeset h1[id]:target::before {
-  margin-top: -6.9rem;
-  padding-top: 6.9rem; }
-
-.md-typeset h1[id]:hover .headerlink,
-.md-typeset h1[id]:target .headerlink,
-.md-typeset h1[id] .headerlink:focus {
-  -webkit-transform: translate(0, 0);
-          transform: translate(0, 0);
-  opacity: 1; }
-
-.md-typeset h1[id]:hover .headerlink:hover,
-.md-typeset h1[id]:target .headerlink,
-.md-typeset h1[id] .headerlink:focus {
-  color: #536dfe; }
-
-.md-typeset h2[id]::before {
-  display: block;
-  margin-top: -0.8rem;
-  padding-top: 0.8rem;
-  content: ""; }
-
-.md-typeset h2[id]:target::before {
-  margin-top: -6.8rem;
-  padding-top: 6.8rem; }
-
-.md-typeset h2[id]:hover .headerlink,
-.md-typeset h2[id]:target .headerlink,
-.md-typeset h2[id] .headerlink:focus {
-  -webkit-transform: translate(0, 0);
-          transform: translate(0, 0);
-  opacity: 1; }
-
-.md-typeset h2[id]:hover .headerlink:hover,
-.md-typeset h2[id]:target .headerlink,
-.md-typeset h2[id] .headerlink:focus {
-  color: #536dfe; }
-
-.md-typeset h3[id]::before {
-  display: block;
-  margin-top: -0.9rem;
-  padding-top: 0.9rem;
-  content: ""; }
-
-.md-typeset h3[id]:target::before {
-  margin-top: -6.9rem;
-  padding-top: 6.9rem; }
-
-.md-typeset h3[id]:hover .headerlink,
-.md-typeset h3[id]:target .headerlink,
-.md-typeset h3[id] .headerlink:focus {
-  -webkit-transform: translate(0, 0);
-          transform: translate(0, 0);
-  opacity: 1; }
-
-.md-typeset h3[id]:hover .headerlink:hover,
-.md-typeset h3[id]:target .headerlink,
-.md-typeset h3[id] .headerlink:focus {
-  color: #536dfe; }
-
-.md-typeset h4[id]::before {
-  display: block;
-  margin-top: -0.9rem;
-  padding-top: 0.9rem;
-  content: ""; }
-
-.md-typeset h4[id]:target::before {
-  margin-top: -6.9rem;
-  padding-top: 6.9rem; }
-
-.md-typeset h4[id]:hover .headerlink,
-.md-typeset h4[id]:target .headerlink,
-.md-typeset h4[id] .headerlink:focus {
-  -webkit-transform: translate(0, 0);
-          transform: translate(0, 0);
-  opacity: 1; }
-
-.md-typeset h4[id]:hover .headerlink:hover,
-.md-typeset h4[id]:target .headerlink,
-.md-typeset h4[id] .headerlink:focus {
-  color: #536dfe; }
-
-.md-typeset h5[id]::before {
-  display: block;
-  margin-top: -1.1rem;
-  padding-top: 1.1rem;
-  content: ""; }
-
-.md-typeset h5[id]:target::before {
-  margin-top: -7.1rem;
-  padding-top: 7.1rem; }
-
-.md-typeset h5[id]:hover .headerlink,
-.md-typeset h5[id]:target .headerlink,
-.md-typeset h5[id] .headerlink:focus {
-  -webkit-transform: translate(0, 0);
-          transform: translate(0, 0);
-  opacity: 1; }
-
-.md-typeset h5[id]:hover .headerlink:hover,
-.md-typeset h5[id]:target .headerlink,
-.md-typeset h5[id] .headerlink:focus {
-  color: #536dfe; }
-
-.md-typeset h6[id]::before {
-  display: block;
-  margin-top: -1.1rem;
-  padding-top: 1.1rem;
-  content: ""; }
-
-.md-typeset h6[id]:target::before {
-  margin-top: -7.1rem;
-  padding-top: 7.1rem; }
-
-.md-typeset h6[id]:hover .headerlink,
-.md-typeset h6[id]:target .headerlink,
-.md-typeset h6[id] .headerlink:focus {
-  -webkit-transform: translate(0, 0);
-          transform: translate(0, 0);
-  opacity: 1; }
-
-.md-typeset h6[id]:hover .headerlink:hover,
-.md-typeset h6[id]:target .headerlink,
-.md-typeset h6[id] .headerlink:focus {
-  color: #536dfe; }
-
-.md-typeset .MJXc-display {
-  margin: 0.75em 0;
-  padding: 0.75em 0;
-  overflow: auto;
-  -webkit-overflow-scrolling: touch; }
-
-.md-typeset .MathJax_CHTML {
-  outline: 0; }
-
-.md-typeset del.critic,
-.md-typeset ins.critic,
-.md-typeset .critic.comment {
-  margin: 0 0.25em;
-  padding: 0.0625em 0;
-  border-radius: 0.2rem;
-  -webkit-box-decoration-break: clone;
-          box-decoration-break: clone; }
-
-.md-typeset del.critic {
-  background-color: #FFDDDD;
-  box-shadow: 0.25em 0 0 #FFDDDD, -0.25em 0 0 #FFDDDD; }
-
-.md-typeset ins.critic {
-  background-color: #DDFFDD;
-  box-shadow: 0.25em 0 0 #DDFFDD, -0.25em 0 0 #DDFFDD; }
-
-.md-typeset .critic.comment {
-  background-color: rgba(236, 236, 236, 0.5);
-  color: #37474F;
-  box-shadow: 0.25em 0 0 rgba(236, 236, 236, 0.5), -0.25em 0 0 rgba(236, 236, 236, 0.5); }
-  .md-typeset .critic.comment::before {
-    padding-right: 0.125em;
-    color: rgba(0, 0, 0, 0.26);
-    content: "\E0B7";
-    vertical-align: -0.125em; }
-
-.md-typeset .critic.block {
-  display: block;
-  margin: 1em 0;
-  padding-right: 1.6rem;
-  padding-left: 1.6rem;
-  box-shadow: none; }
-  .md-typeset .critic.block :first-child {
-    margin-top: 0.5em; }
-  .md-typeset .critic.block :last-child {
-    margin-bottom: 0.5em; }
-
-.md-typeset details {
-  display: block;
-  padding-top: 0; }
-  .md-typeset details[open] > summary::after {
-    -webkit-transform: rotate(180deg);
-            transform: rotate(180deg); }
-  .md-typeset details:not([open]) {
-    padding-bottom: 0; }
-    .md-typeset details:not([open]) > summary {
-      border-bottom: none; }
-  .md-typeset details summary {
-    padding-right: 4rem; }
-    [dir="rtl"] .md-typeset details summary {
-      padding-left: 4rem; }
-  .no-details .md-typeset details:not([open]) > * {
-    display: none; }
-  .no-details .md-typeset details:not([open]) summary {
-    display: block; }
-
-.md-typeset summary {
-  display: block;
-  outline: none;
-  cursor: pointer; }
-  .md-typeset summary::-webkit-details-marker {
-    display: none; }
-  .md-typeset summary::after {
-    position: absolute;
-    top: 0.8rem;
-    right: 1.2rem;
-    color: rgba(0, 0, 0, 0.26);
-    font-size: 2rem;
-    content: "\E313"; }
-    [dir="rtl"] .md-typeset summary::after {
-      right: initial;
-      left: 1.2rem; }
-
-.md-typeset .emojione {
-  width: 2rem;
-  vertical-align: text-top; }
-
-.md-typeset code.codehilite, .md-typeset code.highlight {
-  margin: 0 0.29412em;
-  padding: 0.07353em 0; }
-
-.md-typeset .superfences-content {
-  display: none;
-  order: 99;
-  width: 100%;
-  background-color: white; }
-  .md-typeset .superfences-content > * {
-    margin: 0;
-    border-radius: 0; }
-
-.md-typeset .superfences-tabs {
-  display: flex;
-  position: relative;
-  flex-wrap: wrap;
-  margin: 1em 0;
-  border: 0.1rem solid rgba(0, 0, 0, 0.07);
-  border-radius: 0.2em; }
-  .md-typeset .superfences-tabs > input {
-    display: none; }
-    .md-typeset .superfences-tabs > input:checked + label {
-      font-weight: 700; }
-      .md-typeset .superfences-tabs > input:checked + label + .superfences-content {
-        display: block; }
-  .md-typeset .superfences-tabs > label {
-    width: auto;
-    padding: 1.2rem 1.2rem;
-    transition: color 0.125s;
-    font-size: 1.28rem;
-    cursor: pointer; }
-    html .md-typeset .superfences-tabs > label:hover {
-      color: #536dfe; }
-
-.md-typeset .task-list-item {
-  position: relative;
-  list-style-type: none; }
-  .md-typeset .task-list-item [type="checkbox"] {
-    position: absolute;
-    top: 0.45em;
-    left: -2em; }
-    [dir="rtl"] .md-typeset .task-list-item [type="checkbox"] {
-      right: -2em;
-      left: initial; }
-
-.md-typeset .task-list-control .task-list-indicator::before {
-  position: absolute;
-  top: 0.15em;
-  left: -1.25em;
-  color: rgba(0, 0, 0, 0.26);
-  font-size: 1.25em;
-  content: "\E835";
-  vertical-align: -0.25em; }
-  [dir="rtl"] .md-typeset .task-list-control .task-list-indicator::before {
-    right: -1.25em;
-    left: initial; }
-
-.md-typeset .task-list-control [type="checkbox"]:checked + .task-list-indicator::before {
-  content: "\E834"; }
-
-.md-typeset .task-list-control [type="checkbox"] {
-  opacity: 0;
-  z-index: -1; }
-
-@media print {
-      .md-typeset a::after {
-        color: rgba(0, 0, 0, 0.54);
-        content: " [" attr(href) "]"; }
-      .md-typeset code,
-      .md-typeset pre {
-        white-space: pre-wrap; }
-      .md-typeset code {
-        box-shadow: none;
-        -webkit-box-decoration-break: initial;
-                box-decoration-break: initial; }
-    .md-clipboard {
-      display: none; }
-    .md-content__icon {
-      display: none; }
-    .md-header {
-      display: none; }
-  .md-footer {
-    display: none; }
-    .md-sidebar {
-      display: none; }
-    .md-tabs {
-      display: none; }
-    .md-typeset .headerlink {
-      display: none; } }
-
-@media only screen and (max-width: 44.9375em) {
-      .md-typeset pre {
-        margin: 1em -1.6rem;
-        border-radius: 0; }
-        .md-typeset pre > code {
-          padding: 1.05rem 1.6rem; }
-        .md-footer-nav__link--prev .md-footer-nav__title {
-          display: none; }
-      .md-search-result__teaser {
-        max-height: 5rem;
-        -webkit-line-clamp: 3; }
-    .codehilite .hll, .md-typeset .highlight .hll {
-      margin: 0 -1.6rem;
-      padding: 0 1.6rem; }
-  .md-typeset > .codehilite, .md-typeset > .highlight {
-    margin: 1em -1.6rem;
-    border-radius: 0; }
-    .md-typeset > .codehilite pre, .md-typeset > .highlight pre,
-    .md-typeset > .codehilite code,
-    .md-typeset > .highlight code {
-      padding: 1.05rem 1.6rem; }
-    .md-typeset > .codehilitetable, .md-typeset > .highlighttable {
-      margin: 1em -1.6rem;
-      border-radius: 0; }
-      .md-typeset > .codehilitetable .codehilite > pre, .md-typeset > .highlighttable .codehilite > pre, .md-typeset > .codehilitetable .highlight > pre, .md-typeset > .highlighttable .highlight > pre,
-      .md-typeset > .codehilitetable .codehilite > code,
-      .md-typeset > .highlighttable .codehilite > code, .md-typeset > .codehilitetable .highlight > code, .md-typeset > .highlighttable .highlight > code,
-      .md-typeset > .codehilitetable .linenodiv,
-      .md-typeset > .highlighttable .linenodiv {
-        padding: 1rem 1.6rem; }
-  .md-typeset > p > .MJXc-display {
-    margin: 0.75em -1.6rem;
-    padding: 0.25em 1.6rem; }
-  .md-typeset > .superfences-tabs {
-    margin: 1em -1.6rem;
-    border: 0;
-    border-top: 0.1rem solid rgba(0, 0, 0, 0.07);
-    border-radius: 0; }
-    .md-typeset > .superfences-tabs pre,
-    .md-typeset > .superfences-tabs code {
-      padding: 1.05rem 1.6rem; } }
-
-@media only screen and (min-width: 100em) {
-    html {
-      font-size: 68.75%; } }
-
-@media only screen and (min-width: 125em) {
-    html {
-      font-size: 75%; } }
-
-@media only screen and (max-width: 59.9375em) {
-    body[data-md-state="lock"] {
-      overflow: hidden; }
-      .ios body[data-md-state="lock"] .md-container {
-        display: none; }
-    html .md-nav__link[for="__toc"] {
-      display: block;
-      padding-right: 4.8rem; }
-      html .md-nav__link[for="__toc"]::after {
-        color: inherit;
-        content: "\E8DE"; }
-      html .md-nav__link[for="__toc"] + .md-nav__link {
-        display: none; }
-      html .md-nav__link[for="__toc"] ~ .md-nav {
-        display: flex; }
-    html [dir="rtl"] .md-nav__link {
-      padding-right: 1.6rem;
-      padding-left: 4.8rem; }
-    .md-nav__source {
-      display: block;
-      padding: 0 0.4rem;
-      background-color: rgba(50, 64, 144, 0.9675);
-      color: white; }
-    .md-search__overlay {
-      position: absolute;
-      top: 0.4rem;
-      left: 0.4rem;
-      width: 3.6rem;
-      height: 3.6rem;
-      -webkit-transform-origin: center;
-              transform-origin: center;
-      transition: opacity   0.2s 0.2s, -webkit-transform 0.3s 0.1s;
-      transition: transform 0.3s 0.1s, opacity   0.2s 0.2s;
-      transition: transform 0.3s 0.1s, opacity   0.2s 0.2s, -webkit-transform 0.3s 0.1s;
-      border-radius: 2rem;
-      background-color: white;
-      overflow: hidden;
-      pointer-events: none; }
-      [dir="rtl"] .md-search__overlay {
-        right: 0.4rem;
-        left: initial; }
-      [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
-        transition: opacity   0.1s, -webkit-transform 0.4s;
-        transition: transform 0.4s, opacity   0.1s;
-        transition: transform 0.4s, opacity   0.1s, -webkit-transform 0.4s;
-        opacity: 1; }
-  .md-search__inner {
-    position: fixed;
-    top: 0;
-    left: 100%;
-    width: 100%;
-    height: 100%;
-    -webkit-transform: translateX(5%);
-            transform: translateX(5%);
-    transition: right 0s 0.3s, left 0s 0.3s, opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1);
-    transition: right 0s 0.3s, left 0s 0.3s, transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.15s 0.15s;
-    transition: right 0s 0.3s, left 0s 0.3s, transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.4, 0, 0.2, 1);
-    opacity: 0;
-    z-index: 2; }
-    [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
-      left: 0;
-      -webkit-transform: translateX(0);
-              transform: translateX(0);
-      transition: right 0s 0s, left 0s 0s, opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
-      transition: right 0s 0s, left 0s 0s, transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s 0.15s;
-      transition: right 0s 0s, left 0s 0s, transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.15s 0.15s, -webkit-transform 0.15s 0.15s cubic-bezier(0.1, 0.7, 0.1, 1);
-      opacity: 1; }
-      [dir="rtl"] [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
-        right: 0;
-        left: initial; }
-    html [dir="rtl"] .md-search__inner {
-      right: 100%;
-      left: initial;
-      -webkit-transform: translateX(-5%);
-              transform: translateX(-5%); }
-    .md-search__input {
-      width: 100%;
-      height: 4.8rem;
-      font-size: 1.8rem; }
-      .md-search__icon[for="__search"] {
-        top: 1.2rem;
-        left: 1.6rem; }
-        .md-search__icon[for="__search"][for="__search"]::before {
-          content: "\E5C4"; }
-          [dir="rtl"] .md-search__icon[for="__search"][for="__search"]::before {
-            content: "\E5C8"; }
-      .md-search__icon[type="reset"] {
-        top: 1.2rem;
-        right: 1.6rem; }
-    .md-search__output {
-      top: 4.8rem;
-      bottom: 0; }
-        .md-search-result__article--document::before {
-          display: none; } }
-
-@media only screen and (max-width: 76.1875em) {
-    [data-md-toggle="drawer"]:checked ~ .md-overlay {
-      width: 100%;
-      height: 100%;
-      transition: width   0s, height  0s, opacity 0.25s;
-      opacity: 1; }
-      .md-header-nav__button.md-icon--home, .md-header-nav__button.md-logo {
-        display: none; }
-      .md-hero__inner {
-        margin-top: 4.8rem;
-        margin-bottom: 2.4rem; }
-    .md-nav {
-      background-color: white; }
-      .md-nav--primary,
-      .md-nav--primary .md-nav {
-        display: flex;
-        position: absolute;
-        top: 0;
-        right: 0;
-        left: 0;
-        flex-direction: column;
-        height: 100%;
-        z-index: 1; }
-      .md-nav--primary .md-nav__title,
-      .md-nav--primary .md-nav__item {
-        font-size: 1.6rem;
-        line-height: 1.5; }
-      html .md-nav--primary .md-nav__title {
-        position: relative;
-        height: 11.2rem;
-        padding: 6rem 1.6rem 0.4rem;
-        background-color: rgba(0, 0, 0, 0.07);
-        color: rgba(0, 0, 0, 0.54);
-        font-weight: 400;
-        line-height: 4.8rem;
-        white-space: nowrap;
-        cursor: pointer; }
-        html .md-nav--primary .md-nav__title::before {
-          display: block;
-          position: absolute;
-          top: 0.4rem;
-          left: 0.4rem;
-          width: 4rem;
-          height: 4rem;
-          color: rgba(0, 0, 0, 0.54); }
-        html .md-nav--primary .md-nav__title ~ .md-nav__list {
-          background-color: white;
-          box-shadow: 0 0.1rem 0 rgba(0, 0, 0, 0.07) inset; }
-          html .md-nav--primary .md-nav__title ~ .md-nav__list > .md-nav__item:first-child {
-            border-top: 0; }
-        html .md-nav--primary .md-nav__title--site {
-          position: relative;
-          background-color: #3f51b5;
-          color: white; }
-          html .md-nav--primary .md-nav__title--site .md-nav__button {
-            display: block;
-            position: absolute;
-            top: 0.4rem;
-            left: 0.4rem;
-            width: 6.4rem;
-            height: 6.4rem;
-            font-size: 4.8rem; }
-          html .md-nav--primary .md-nav__title--site::before {
-            display: none; }
-      html [dir="rtl"] .md-nav--primary .md-nav__title::before {
-        right: 0.4rem;
-        left: initial; }
-      html [dir="rtl"] .md-nav--primary .md-nav__title--site .md-nav__button {
-        right: 0.4rem;
-        left: initial; }
-      .md-nav--primary .md-nav__list {
-        flex: 1;
-        overflow-y: auto; }
-      .md-nav--primary .md-nav__item {
-        padding: 0;
-        border-top: 0.1rem solid rgba(0, 0, 0, 0.07); }
-        [dir="rtl"] .md-nav--primary .md-nav__item {
-          padding: 0; }
-        .md-nav--primary .md-nav__item--nested > .md-nav__link {
-          padding-right: 4.8rem; }
-          [dir="rtl"] .md-nav--primary .md-nav__item--nested > .md-nav__link {
-            padding-right: 1.6rem;
-            padding-left: 4.8rem; }
-          .md-nav--primary .md-nav__item--nested > .md-nav__link::after {
-            content: "\E315"; }
-            [dir="rtl"] .md-nav--primary .md-nav__item--nested > .md-nav__link::after {
-              content: "\E314"; }
-      .md-nav--primary .md-nav__link {
-        position: relative;
-        margin-top: 0;
-        padding: 1.2rem 1.6rem; }
-        .md-nav--primary .md-nav__link::after {
-          position: absolute;
-          top: 50%;
-          right: 1.2rem;
-          margin-top: -1.2rem;
-          color: inherit;
-          font-size: 2.4rem; }
-          [dir="rtl"] .md-nav--primary .md-nav__link::after {
-            right: initial;
-            left: 1.2rem; }
-      .md-nav--primary .md-nav--secondary .md-nav__link {
-        position: static; }
-      .md-nav--primary .md-nav--secondary .md-nav {
-        position: static;
-        background-color: transparent; }
-        .md-nav--primary .md-nav--secondary .md-nav .md-nav__link {
-          padding-left: 2.8rem; }
-          [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link {
-            padding-right: 2.8rem;
-            padding-left: initial; }
-        .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link {
-          padding-left: 4rem; }
-          [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link {
-            padding-right: 4rem;
-            padding-left: initial; }
-        .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link {
-          padding-left: 5.2rem; }
-          [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link {
-            padding-right: 5.2rem;
-            padding-left: initial; }
-        .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link {
-          padding-left: 6.4rem; }
-          [dir="rtl"] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link {
-            padding-right: 6.4rem;
-            padding-left: initial; }
-      .md-nav__toggle ~ .md-nav {
-        display: flex;
-        -webkit-transform: translateX(100%);
-                transform: translateX(100%);
-        transition: opacity 0.125s 0.05s, -webkit-transform 0.25s cubic-bezier(0.8, 0, 0.6, 1);
-        transition: transform 0.25s cubic-bezier(0.8, 0, 0.6, 1), opacity 0.125s 0.05s;
-        transition: transform 0.25s cubic-bezier(0.8, 0, 0.6, 1), opacity 0.125s 0.05s, -webkit-transform 0.25s cubic-bezier(0.8, 0, 0.6, 1);
-        opacity: 0; }
-        [dir="rtl"] .md-nav__toggle ~ .md-nav {
-          -webkit-transform: translateX(-100%);
-                  transform: translateX(-100%); }
-        .no-csstransforms3d .md-nav__toggle ~ .md-nav {
-          display: none; }
-      .md-nav__toggle:checked ~ .md-nav {
-        -webkit-transform: translateX(0);
-                transform: translateX(0);
-        transition: opacity 0.125s 0.125s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-        transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.125s 0.125s;
-        transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.125s 0.125s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-        opacity: 1; }
-        .no-csstransforms3d .md-nav__toggle:checked ~ .md-nav {
-          display: flex; }
-    .md-sidebar--primary {
-      position: fixed;
-      top: 0;
-      left: -24.2rem;
-      width: 24.2rem;
-      height: 100%;
-      -webkit-transform: translateX(0);
-              transform: translateX(0);
-      transition: box-shadow 0.25s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-      transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.25s;
-      transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.25s, -webkit-transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
-      background-color: white;
-      z-index: 3; }
-      [dir="rtl"] .md-sidebar--primary {
-        right: -24.2rem;
-        left: initial; }
-      .no-csstransforms3d .md-sidebar--primary {
-        display: none; }
-      [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
-        box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.4);
-        -webkit-transform: translateX(24.2rem);
-                transform: translateX(24.2rem); }
-        [dir="rtl"] [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
-          -webkit-transform: translateX(-24.2rem);
-                  transform: translateX(-24.2rem); }
-        .no-csstransforms3d [data-md-toggle="drawer"]:checked ~ .md-container .md-sidebar--primary {
-          display: block; }
-      .md-sidebar--primary .md-sidebar__scrollwrap {
-        overflow: hidden; }
-      .md-sidebar--primary .md-sidebar__scrollwrap {
-        position: absolute;
-        top: 0;
-        right: 0;
-        bottom: 0;
-        left: 0;
-        margin: 0; }
-    .md-tabs {
-      display: none; } }
-
-@media only screen and (min-width: 60em) {
-  .md-content {
-    margin-right: 24.2rem; }
-    [dir="rtl"] .md-content {
-      margin-right: initial;
-      margin-left: 24.2rem; }
-      .md-header-nav__button.md-icon--search {
-        display: none; }
-      .md-header-nav__source {
-        display: block;
-        width: 23rem;
-        max-width: 23rem;
-        margin-left: 2.8rem;
-        padding-right: 1.2rem; }
-        [dir="rtl"] .md-header-nav__source {
-          margin-right: 2.8rem;
-          margin-left: initial;
-          padding-right: initial;
-          padding-left: 1.2rem; }
-  .md-search {
-    padding: 0.4rem; }
-    .md-search__overlay {
-      position: fixed;
-      top: 0;
-      left: 0;
-      width: 0;
-      height: 0;
-      transition: width   0s 0.25s, height  0s 0.25s, opacity 0.25s;
-      background-color: rgba(0, 0, 0, 0.54);
-      cursor: pointer; }
-      [dir="rtl"] .md-search__overlay {
-        right: 0;
-        left: initial; }
-      [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
-        width: 100%;
-        height: 100%;
-        transition: width   0s, height  0s, opacity 0.25s;
-        opacity: 1; }
-  .md-search__inner {
-    position: relative;
-    width: 23rem;
-    padding: 0.2rem 0;
-    float: right;
-    transition: width 0.25s cubic-bezier(0.1, 0.7, 0.1, 1); }
-    [dir="rtl"] .md-search__inner {
-      float: left; }
-    .md-search__form {
-      border-radius: 0.2rem; }
-    .md-search__input {
-      width: 100%;
-      height: 3.6rem;
-      padding-left: 4.4rem;
-      transition: background-color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1), color 0.25s cubic-bezier(0.1, 0.7, 0.1, 1);
-      border-radius: 0.2rem;
-      background-color: rgba(0, 0, 0, 0.26);
-      color: inherit;
-      font-size: 1.6rem; }
-      [dir="rtl"] .md-search__input {
-        padding-right: 4.4rem; }
-      .md-search__input + .md-search__icon {
-        color: inherit; }
-      .md-search__input::-webkit-input-placeholder {
-        color: rgba(255, 255, 255, 0.7); }
-      .md-search__input:-ms-input-placeholder {
-        color: rgba(255, 255, 255, 0.7); }
-      .md-search__input::-ms-input-placeholder {
-        color: rgba(255, 255, 255, 0.7); }
-      .md-search__input::placeholder {
-        color: rgba(255, 255, 255, 0.7); }
-      .md-search__input:hover {
-        background-color: rgba(255, 255, 255, 0.12); }
-      [data-md-toggle="search"]:checked ~ .md-header .md-search__input {
-        border-radius: 0.2rem 0.2rem 0 0;
-        background-color: white;
-        color: rgba(0, 0, 0, 0.87);
-        text-overflow: none; }
-        [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::-webkit-input-placeholder {
-          color: rgba(0, 0, 0, 0.54); }
-        [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input:-ms-input-placeholder {
-          color: rgba(0, 0, 0, 0.54); }
-        [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::-ms-input-placeholder {
-          color: rgba(0, 0, 0, 0.54); }
-        [data-md-toggle="search"]:checked ~ .md-header .md-search__input + .md-search__icon, [data-md-toggle="search"]:checked ~ .md-header .md-search__input::placeholder {
-          color: rgba(0, 0, 0, 0.54); }
-    .md-search__output {
-      top: 3.8rem;
-      transition: opacity 0.4s;
-      opacity: 0; }
-      [data-md-toggle="search"]:checked ~ .md-header .md-search__output {
-        box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.4);
-        opacity: 1; }
-    .md-search__scrollwrap {
-      max-height: 0; }
-      [data-md-toggle="search"]:checked ~ .md-header .md-search__scrollwrap {
-        max-height: 75vh; }
-      .md-search__scrollwrap::-webkit-scrollbar {
-        width: 0.4rem;
-        height: 0.4rem; }
-      .md-search__scrollwrap::-webkit-scrollbar-thumb {
-        background-color: rgba(0, 0, 0, 0.26); }
-        .md-search__scrollwrap::-webkit-scrollbar-thumb:hover {
-          background-color: #536dfe; }
-      .md-search-result__meta {
-        padding-left: 4.4rem; }
-        [dir="rtl"] .md-search-result__meta {
-          padding-right: 4.4rem;
-          padding-left: initial; }
-      .md-search-result__article {
-        padding-left: 4.4rem; }
-        [dir="rtl"] .md-search-result__article {
-          padding-right: 4.4rem;
-          padding-left: 1.6rem; }
-      .md-sidebar--secondary {
-        display: block;
-        margin-left: 100%;
-        -webkit-transform: translate(-100%, 0);
-                transform: translate(-100%, 0); }
-        [dir="rtl"] .md-sidebar--secondary {
-          margin-right: 100%;
-          margin-left: initial;
-          -webkit-transform: translate(100%, 0);
-                  transform: translate(100%, 0); } }
-
-@media only screen and (min-width: 76.25em) {
-  .md-content {
-    margin-left: 24.2rem; }
-    [dir="rtl"] .md-content {
-      margin-right: 24.2rem; }
-    .md-content__inner {
-      margin-right: 2.4rem;
-      margin-left: 2.4rem; }
-      .md-header-nav__button.md-icon--menu {
-        display: none; }
-    .md-nav[data-md-state="animate"] {
-      transition: max-height 0.25s cubic-bezier(0.86, 0, 0.07, 1); }
-    .md-nav__toggle ~ .md-nav {
-      max-height: 0;
-      overflow: hidden; }
-      .no-js .md-nav__toggle ~ .md-nav {
-        display: none; }
-    .md-nav__toggle:checked ~ .md-nav, .md-nav[data-md-state="expand"] {
-      max-height: 100%; }
-      .no-js .md-nav__toggle:checked ~ .md-nav, .no-js .md-nav[data-md-state="expand"] {
-        display: block; }
-    .md-nav__item--nested > .md-nav > .md-nav__title {
-      display: none; }
-    .md-nav__item--nested > .md-nav__link::after {
-      display: inline-block;
-      -webkit-transform-origin: 0.45em 0.45em;
-              transform-origin: 0.45em 0.45em;
-      -webkit-transform-style: preserve-3d;
-              transform-style: preserve-3d;
-      vertical-align: -0.125em; }
-      .js .md-nav__item--nested > .md-nav__link::after {
-        transition: -webkit-transform 0.4s;
-        transition: transform 0.4s;
-        transition: transform 0.4s, -webkit-transform 0.4s; }
-    .md-nav__item--nested .md-nav__toggle:checked ~ .md-nav__link::after {
-      -webkit-transform: rotateX(180deg);
-              transform: rotateX(180deg); }
-  [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
-    width: 68.8rem; }
-    .md-search__scrollwrap {
-      width: 68.8rem; }
-      .md-sidebar--secondary {
-        margin-left: 122rem; }
-        [dir="rtl"] .md-sidebar--secondary {
-          margin-right: 122rem;
-          margin-left: initial; }
-    .md-tabs ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested {
-      font-size: 0;
-      visibility: hidden; }
-    .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title {
-      display: block;
-      padding: 0; }
-    .md-tabs--active ~ .md-main .md-nav--primary .md-nav__title--site {
-      display: none; }
-    .no-js .md-tabs--active ~ .md-main .md-nav--primary .md-nav {
-      display: block; }
-    .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item {
-      font-size: 0;
-      visibility: hidden; }
-      .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested {
-        display: none;
-        font-size: 1.4rem;
-        overflow: auto;
-        visibility: visible; }
-        .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--nested > .md-nav__link {
-          display: none; }
-      .md-tabs--active ~ .md-main .md-nav--primary > .md-nav__list > .md-nav__item--active {
-        display: block; }
-    .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] {
-      max-height: initial;
-      overflow: visible; }
-      .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] > .md-nav__list > .md-nav__item {
-        padding-left: 0; }
-      .md-tabs--active ~ .md-main .md-nav[data-md-level="1"] .md-nav .md-nav__title {
-        display: none; } }
-
-@media only screen and (min-width: 45em) {
-      .md-footer-nav__link {
-        width: 50%; }
-    .md-footer-copyright {
-      max-width: 75%;
-      float: left; }
-      [dir="rtl"] .md-footer-copyright {
-        float: right; }
-    .md-footer-social {
-      padding: 1.2rem 0;
-      float: right; }
-      [dir="rtl"] .md-footer-social {
-        float: left; } }
-
-@media only screen and (max-width: 29.9375em) {
-    [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
-      -webkit-transform: scale(45);
-              transform: scale(45); } }
-
-@media only screen and (min-width: 30em) and (max-width: 44.9375em) {
-    [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
-      -webkit-transform: scale(60);
-              transform: scale(60); } }
-
-@media only screen and (min-width: 45em) and (max-width: 59.9375em) {
-    [data-md-toggle="search"]:checked ~ .md-header .md-search__overlay {
-      -webkit-transform: scale(75);
-              transform: scale(75); } }
-
-@media only screen and (min-width: 60em) and (max-width: 76.1875em) {
-  [data-md-toggle="search"]:checked ~ .md-header .md-search__inner {
-    width: 46.8rem; }
-    .md-search__scrollwrap {
-      width: 46.8rem; }
-      .md-search-result__teaser {
-        max-height: 5rem;
-        -webkit-line-clamp: 3; } }
-
-/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJhc3NldHMvc3R5bGVzaGVldHMvYXBwbGljYXRpb24uNDUxZjgwZTUuY3NzIiwic291cmNlUm9vdCI6IiJ9*/
\ No newline at end of file
diff --git a/cmdline_general/index.html b/cmdline_general/index.html
index b98e77c..0a2f308 100644
--- a/cmdline_general/index.html
+++ b/cmdline_general/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3567,6 +3546,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/cmdline_migration/index.html b/cmdline_migration/index.html
index be90b52..86fedc5 100644
--- a/cmdline_migration/index.html
+++ b/cmdline_migration/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -944,14 +923,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#compatible-options" title="Compatible options" class="md-nav__link">
+  <a href="#compatible-options" class="md-nav__link">
     Compatible options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#equivalent-options" title="Equivalent options" class="md-nav__link">
+  <a href="#equivalent-options" class="md-nav__link">
     Equivalent options
   </a>
   
@@ -3334,14 +3313,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#compatible-options" title="Compatible options" class="md-nav__link">
+  <a href="#compatible-options" class="md-nav__link">
     Compatible options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#equivalent-options" title="Equivalent options" class="md-nav__link">
+  <a href="#equivalent-options" class="md-nav__link">
     Equivalent options
   </a>
   
@@ -3743,6 +3722,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/cmdline_specifying/index.html b/cmdline_specifying/index.html
index f4a55b7..6b6a166 100644
--- a/cmdline_specifying/index.html
+++ b/cmdline_specifying/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -920,14 +899,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#quotation-marks" title="Quotation marks" class="md-nav__link">
+  <a href="#quotation-marks" class="md-nav__link">
     Quotation marks
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#precedence" title="Precedence" class="md-nav__link">
+  <a href="#precedence" class="md-nav__link">
     Precedence
   </a>
   
@@ -3334,14 +3313,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#quotation-marks" title="Quotation marks" class="md-nav__link">
+  <a href="#quotation-marks" class="md-nav__link">
     Quotation marks
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#precedence" title="Precedence" class="md-nav__link">
+  <a href="#precedence" class="md-nav__link">
     Precedence
   </a>
   
@@ -3668,6 +3647,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/d_jvm_commands/index.html b/d_jvm_commands/index.html
index eb6c8ef..49e014a 100644
--- a/d_jvm_commands/index.html
+++ b/d_jvm_commands/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3532,6 +3511,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmenableclasscaching/index.html b/dcomibmenableclasscaching/index.html
index 9a3b3b2..93f4805 100644
--- a/dcomibmenableclasscaching/index.html
+++ b/dcomibmenableclasscaching/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -989,21 +968,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3626,6 +3605,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmenablelegacydumpsecurity/index.html b/dcomibmenablelegacydumpsecurity/index.html
index 6f51c78..bd7f634 100644
--- a/dcomibmenablelegacydumpsecurity/index.html
+++ b/dcomibmenablelegacydumpsecurity/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1001,21 +980,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3632,6 +3611,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmenablelegacylogsecurity/index.html b/dcomibmenablelegacylogsecurity/index.html
index dd2f263..ea9727d 100644
--- a/dcomibmenablelegacylogsecurity/index.html
+++ b/dcomibmenablelegacylogsecurity/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1013,21 +992,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3631,6 +3610,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmenablelegacytracesecurity/index.html b/dcomibmenablelegacytracesecurity/index.html
index d3579d4..5206376 100644
--- a/dcomibmenablelegacytracesecurity/index.html
+++ b/dcomibmenablelegacytracesecurity/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1025,21 +1004,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3636,6 +3615,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmgpudisable/index.html b/dcomibmgpudisable/index.html
index 8223af5..c6964cb 100644
--- a/dcomibmgpudisable/index.html
+++ b/dcomibmgpudisable/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1037,21 +1016,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmgpuenable/index.html b/dcomibmgpuenable/index.html
index 4a76b65..abe9b4e 100644
--- a/dcomibmgpuenable/index.html
+++ b/dcomibmgpuenable/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1049,21 +1028,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3627,6 +3606,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmgpuverbose/index.html b/dcomibmgpuverbose/index.html
index f233da9..9cefc02 100644
--- a/dcomibmgpuverbose/index.html
+++ b/dcomibmgpuverbose/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1061,21 +1040,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3609,6 +3588,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmlangmanagementosmxbeaniscputime100ns/index.html b/dcomibmlangmanagementosmxbeaniscputime100ns/index.html
index 38027e0..1752572 100644
--- a/dcomibmlangmanagementosmxbeaniscputime100ns/index.html
+++ b/dcomibmlangmanagementosmxbeaniscputime100ns/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1073,21 +1052,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3629,6 +3608,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmlangmanagementverbose/index.html b/dcomibmlangmanagementverbose/index.html
index 1aee864..dab0f09 100644
--- a/dcomibmlangmanagementverbose/index.html
+++ b/dcomibmlangmanagementverbose/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1085,7 +1064,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3572,6 +3551,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmtoolsattachdirectory/index.html b/dcomibmtoolsattachdirectory/index.html
index a3fb37b..b71aa4d 100644
--- a/dcomibmtoolsattachdirectory/index.html
+++ b/dcomibmtoolsattachdirectory/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1097,14 +1076,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3611,6 +3590,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmtoolsattachdisplayname/index.html b/dcomibmtoolsattachdisplayname/index.html
index 544f8f1..9e15310 100644
--- a/dcomibmtoolsattachdisplayname/index.html
+++ b/dcomibmtoolsattachdisplayname/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1109,14 +1088,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmtoolsattachenable/index.html b/dcomibmtoolsattachenable/index.html
index 2338083..8742042 100644
--- a/dcomibmtoolsattachenable/index.html
+++ b/dcomibmtoolsattachenable/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1121,21 +1100,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3658,6 +3637,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmtoolsattachid/index.html b/dcomibmtoolsattachid/index.html
index abce446..dc8abbf 100644
--- a/dcomibmtoolsattachid/index.html
+++ b/dcomibmtoolsattachid/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1133,14 +1112,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dcomibmtoolsattachtimeout/index.html b/dcomibmtoolsattachtimeout/index.html
index 76b0d39..a3f244e 100644
--- a/dcomibmtoolsattachtimeout/index.html
+++ b/dcomibmtoolsattachtimeout/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1145,21 +1124,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3626,6 +3605,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dfileencoding/index.html b/dfileencoding/index.html
index e93685a..d9a6dc7 100644
--- a/dfileencoding/index.html
+++ b/dfileencoding/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1157,14 +1136,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3606,6 +3585,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/diag_overview/index.html b/diag_overview/index.html
index 62ed7a0..a9b4511 100644
--- a/diag_overview/index.html
+++ b/diag_overview/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -644,28 +623,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#dumps" title="Dumps" class="md-nav__link">
+  <a href="#dumps" class="md-nav__link">
     Dumps
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#verbose-log-files" title="Verbose log files" class="md-nav__link">
+  <a href="#verbose-log-files" class="md-nav__link">
     Verbose log files
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#trace-files" title="Trace files" class="md-nav__link">
+  <a href="#trace-files" class="md-nav__link">
     Trace files
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#diagnostic-tools" title="Diagnostic tools" class="md-nav__link">
+  <a href="#diagnostic-tools" class="md-nav__link">
     Diagnostic tools
   </a>
   
@@ -673,42 +652,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#dump-extractor" title="Dump extractor" class="md-nav__link">
+  <a href="#dump-extractor" class="md-nav__link">
     Dump extractor
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump-viewer" title="Dump viewer" class="md-nav__link">
+  <a href="#dump-viewer" class="md-nav__link">
     Dump viewer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#trace-formatter" title="Trace formatter" class="md-nav__link">
+  <a href="#trace-formatter" class="md-nav__link">
     Trace formatter
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-builder" title="Option builder" class="md-nav__link">
+  <a href="#option-builder" class="md-nav__link">
     Option builder
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hotspot-compatible-tools" title="HotSpot-compatible tools" class="md-nav__link">
+  <a href="#hotspot-compatible-tools" class="md-nav__link">
     HotSpot-compatible tools
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#eclipse-marketplace-tools" title="Eclipse marketplace tools" class="md-nav__link">
+  <a href="#eclipse-marketplace-tools" class="md-nav__link">
     Eclipse marketplace tools
   </a>
   
@@ -720,7 +699,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#interfaces" title="Interfaces" class="md-nav__link">
+  <a href="#interfaces" class="md-nav__link">
     Interfaces
   </a>
   
@@ -728,28 +707,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvm-tool-interface-jvmti" title="JVM tool interface (JVMTI)" class="md-nav__link">
+  <a href="#jvm-tool-interface-jvmti" class="md-nav__link">
     JVM tool interface (JVMTI)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dtfj-interface" title="DTFJ Interface" class="md-nav__link">
+  <a href="#dtfj-interface" class="md-nav__link">
     DTFJ Interface
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#javalangmanagement-api" title="java.lang.management API" class="md-nav__link">
+  <a href="#javalangmanagement-api" class="md-nav__link">
     java.lang.management API
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jpda-tools" title="JPDA tools" class="md-nav__link">
+  <a href="#jpda-tools" class="md-nav__link">
     JPDA tools
   </a>
   
@@ -3437,28 +3416,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#dumps" title="Dumps" class="md-nav__link">
+  <a href="#dumps" class="md-nav__link">
     Dumps
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#verbose-log-files" title="Verbose log files" class="md-nav__link">
+  <a href="#verbose-log-files" class="md-nav__link">
     Verbose log files
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#trace-files" title="Trace files" class="md-nav__link">
+  <a href="#trace-files" class="md-nav__link">
     Trace files
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#diagnostic-tools" title="Diagnostic tools" class="md-nav__link">
+  <a href="#diagnostic-tools" class="md-nav__link">
     Diagnostic tools
   </a>
   
@@ -3466,42 +3445,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#dump-extractor" title="Dump extractor" class="md-nav__link">
+  <a href="#dump-extractor" class="md-nav__link">
     Dump extractor
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump-viewer" title="Dump viewer" class="md-nav__link">
+  <a href="#dump-viewer" class="md-nav__link">
     Dump viewer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#trace-formatter" title="Trace formatter" class="md-nav__link">
+  <a href="#trace-formatter" class="md-nav__link">
     Trace formatter
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-builder" title="Option builder" class="md-nav__link">
+  <a href="#option-builder" class="md-nav__link">
     Option builder
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hotspot-compatible-tools" title="HotSpot-compatible tools" class="md-nav__link">
+  <a href="#hotspot-compatible-tools" class="md-nav__link">
     HotSpot-compatible tools
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#eclipse-marketplace-tools" title="Eclipse marketplace tools" class="md-nav__link">
+  <a href="#eclipse-marketplace-tools" class="md-nav__link">
     Eclipse marketplace tools
   </a>
   
@@ -3513,7 +3492,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#interfaces" title="Interfaces" class="md-nav__link">
+  <a href="#interfaces" class="md-nav__link">
     Interfaces
   </a>
   
@@ -3521,28 +3500,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvm-tool-interface-jvmti" title="JVM tool interface (JVMTI)" class="md-nav__link">
+  <a href="#jvm-tool-interface-jvmti" class="md-nav__link">
     JVM tool interface (JVMTI)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dtfj-interface" title="DTFJ Interface" class="md-nav__link">
+  <a href="#dtfj-interface" class="md-nav__link">
     DTFJ Interface
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#javalangmanagement-api" title="java.lang.management API" class="md-nav__link">
+  <a href="#javalangmanagement-api" class="md-nav__link">
     java.lang.management API
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jpda-tools" title="JPDA tools" class="md-nav__link">
+  <a href="#jpda-tools" class="md-nav__link">
     JPDA tools
   </a>
   
@@ -3852,6 +3831,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/djavacompiler/index.html b/djavacompiler/index.html
index 87990e9..a12e091 100644
--- a/djavacompiler/index.html
+++ b/djavacompiler/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1169,7 +1148,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3576,6 +3555,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/djdknativecbc/index.html b/djdknativecbc/index.html
index 72eb28e..c285d15 100644
--- a/djdknativecbc/index.html
+++ b/djdknativecbc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1181,14 +1160,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/djdknativechacha20/index.html b/djdknativechacha20/index.html
index 7620fd3..9f949e6 100644
--- a/djdknativechacha20/index.html
+++ b/djdknativechacha20/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1193,14 +1172,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3613,6 +3592,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/djdknativecrypto/index.html b/djdknativecrypto/index.html
index 54208e0..9803530 100644
--- a/djdknativecrypto/index.html
+++ b/djdknativecrypto/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1205,14 +1184,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3617,6 +3596,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/djdknativedigest/index.html b/djdknativedigest/index.html
index e8782b8..f56a5b9 100644
--- a/djdknativedigest/index.html
+++ b/djdknativedigest/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1217,14 +1196,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/djdknativegcm/index.html b/djdknativegcm/index.html
index f01671d..6dfecdf 100644
--- a/djdknativegcm/index.html
+++ b/djdknativegcm/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1229,14 +1208,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/djdknativersa/index.html b/djdknativersa/index.html
index 28a79bc..61fcaa8 100644
--- a/djdknativersa/index.html
+++ b/djdknativersa/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1241,14 +1220,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dump_heapdump/index.html b/dump_heapdump/index.html
index 9d8718f..5c7cf44 100644
--- a/dump_heapdump/index.html
+++ b/dump_heapdump/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -689,7 +668,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3584,6 +3563,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dump_javadump/index.html b/dump_javadump/index.html
index bde3ea3..8134112 100644
--- a/dump_javadump/index.html
+++ b/dump_javadump/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -677,7 +656,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#java-dump-contents" title="Java dump contents" class="md-nav__link">
+  <a href="#java-dump-contents" class="md-nav__link">
     Java dump contents
   </a>
   
@@ -685,70 +664,70 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#title" title="TITLE" class="md-nav__link">
+  <a href="#title" class="md-nav__link">
     TITLE
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#gpinfo" title="GPINFO" class="md-nav__link">
+  <a href="#gpinfo" class="md-nav__link">
     GPINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#envinfo" title="ENVINFO" class="md-nav__link">
+  <a href="#envinfo" class="md-nav__link">
     ENVINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nativememinfo" title="NATIVEMEMINFO" class="md-nav__link">
+  <a href="#nativememinfo" class="md-nav__link">
     NATIVEMEMINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#meminfo" title="MEMINFO" class="md-nav__link">
+  <a href="#meminfo" class="md-nav__link">
     MEMINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#locks" title="LOCKS" class="md-nav__link">
+  <a href="#locks" class="md-nav__link">
     LOCKS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#threads" title="THREADS" class="md-nav__link">
+  <a href="#threads" class="md-nav__link">
     THREADS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hooks" title="HOOKS" class="md-nav__link">
+  <a href="#hooks" class="md-nav__link">
     HOOKS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#shared-classes" title="SHARED CLASSES" class="md-nav__link">
+  <a href="#shared-classes" class="md-nav__link">
     SHARED CLASSES
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#classes" title="CLASSES" class="md-nav__link">
+  <a href="#classes" class="md-nav__link">
     CLASSES
   </a>
   
@@ -760,7 +739,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#scenarios" title="Scenarios" class="md-nav__link">
+  <a href="#scenarios" class="md-nav__link">
     Scenarios
   </a>
   
@@ -768,35 +747,35 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#general-protection-fault" title="General Protection Fault" class="md-nav__link">
+  <a href="#general-protection-fault" class="md-nav__link">
     General Protection Fault
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#java-outofmemoryerror" title="Java OutOfMemoryError" class="md-nav__link">
+  <a href="#java-outofmemoryerror" class="md-nav__link">
     Java OutOfMemoryError
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#native-outofmemoryerror" title="Native OutOfMemoryError" class="md-nav__link">
+  <a href="#native-outofmemoryerror" class="md-nav__link">
     Native OutOfMemoryError
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#deadlock" title="Deadlock" class="md-nav__link">
+  <a href="#deadlock" class="md-nav__link">
     Deadlock
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hang" title="Hang" class="md-nav__link">
+  <a href="#hang" class="md-nav__link">
     Hang
   </a>
   
@@ -3453,7 +3432,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#java-dump-contents" title="Java dump contents" class="md-nav__link">
+  <a href="#java-dump-contents" class="md-nav__link">
     Java dump contents
   </a>
   
@@ -3461,70 +3440,70 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#title" title="TITLE" class="md-nav__link">
+  <a href="#title" class="md-nav__link">
     TITLE
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#gpinfo" title="GPINFO" class="md-nav__link">
+  <a href="#gpinfo" class="md-nav__link">
     GPINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#envinfo" title="ENVINFO" class="md-nav__link">
+  <a href="#envinfo" class="md-nav__link">
     ENVINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nativememinfo" title="NATIVEMEMINFO" class="md-nav__link">
+  <a href="#nativememinfo" class="md-nav__link">
     NATIVEMEMINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#meminfo" title="MEMINFO" class="md-nav__link">
+  <a href="#meminfo" class="md-nav__link">
     MEMINFO
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#locks" title="LOCKS" class="md-nav__link">
+  <a href="#locks" class="md-nav__link">
     LOCKS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#threads" title="THREADS" class="md-nav__link">
+  <a href="#threads" class="md-nav__link">
     THREADS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hooks" title="HOOKS" class="md-nav__link">
+  <a href="#hooks" class="md-nav__link">
     HOOKS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#shared-classes" title="SHARED CLASSES" class="md-nav__link">
+  <a href="#shared-classes" class="md-nav__link">
     SHARED CLASSES
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#classes" title="CLASSES" class="md-nav__link">
+  <a href="#classes" class="md-nav__link">
     CLASSES
   </a>
   
@@ -3536,7 +3515,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#scenarios" title="Scenarios" class="md-nav__link">
+  <a href="#scenarios" class="md-nav__link">
     Scenarios
   </a>
   
@@ -3544,35 +3523,35 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#general-protection-fault" title="General Protection Fault" class="md-nav__link">
+  <a href="#general-protection-fault" class="md-nav__link">
     General Protection Fault
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#java-outofmemoryerror" title="Java OutOfMemoryError" class="md-nav__link">
+  <a href="#java-outofmemoryerror" class="md-nav__link">
     Java OutOfMemoryError
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#native-outofmemoryerror" title="Native OutOfMemoryError" class="md-nav__link">
+  <a href="#native-outofmemoryerror" class="md-nav__link">
     Native OutOfMemoryError
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#deadlock" title="Deadlock" class="md-nav__link">
+  <a href="#deadlock" class="md-nav__link">
     Deadlock
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hang" title="Hang" class="md-nav__link">
+  <a href="#hang" class="md-nav__link">
     Hang
   </a>
   
@@ -5039,6 +5018,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/dump_systemdump/index.html b/dump_systemdump/index.html
index 63bd84f..a574c88 100644
--- a/dump_systemdump/index.html
+++ b/dump_systemdump/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -701,7 +680,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3577,6 +3556,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/env_var/index.html b/env_var/index.html
index 9e33661..95ec409 100644
--- a/env_var/index.html
+++ b/env_var/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3272,21 +3251,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#finding-and-setting-environment-variables" title="Finding and setting environment variables" class="md-nav__link">
+  <a href="#finding-and-setting-environment-variables" class="md-nav__link">
     Finding and setting environment variables
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#general-options" title="General options" class="md-nav__link">
+  <a href="#general-options" class="md-nav__link">
     General options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-agent-options" title="Dump agent options" class="md-nav__link">
+  <a href="#dump-agent-options" class="md-nav__link">
     Dump agent options
   </a>
   
@@ -3294,7 +3273,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#signal-mapping" title="Signal mapping" class="md-nav__link">
+  <a href="#signal-mapping" class="md-nav__link">
     Signal mapping
   </a>
   
@@ -3306,28 +3285,28 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-dump-options" title="Java dump options" class="md-nav__link">
+  <a href="#java-dump-options" class="md-nav__link">
     Java dump options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#heap-dump-options" title="Heap dump options" class="md-nav__link">
+  <a href="#heap-dump-options" class="md-nav__link">
     Heap dump options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#other-diagnostic-options" title="Other diagnostic options" class="md-nav__link">
+  <a href="#other-diagnostic-options" class="md-nav__link">
     Other diagnostic options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#deprecated-jit-options" title="Deprecated JIT options" class="md-nav__link">
+  <a href="#deprecated-jit-options" class="md-nav__link">
     Deprecated JIT options
   </a>
   
@@ -3382,21 +3361,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#finding-and-setting-environment-variables" title="Finding and setting environment variables" class="md-nav__link">
+  <a href="#finding-and-setting-environment-variables" class="md-nav__link">
     Finding and setting environment variables
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#general-options" title="General options" class="md-nav__link">
+  <a href="#general-options" class="md-nav__link">
     General options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-agent-options" title="Dump agent options" class="md-nav__link">
+  <a href="#dump-agent-options" class="md-nav__link">
     Dump agent options
   </a>
   
@@ -3404,7 +3383,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#signal-mapping" title="Signal mapping" class="md-nav__link">
+  <a href="#signal-mapping" class="md-nav__link">
     Signal mapping
   </a>
   
@@ -3416,28 +3395,28 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-dump-options" title="Java dump options" class="md-nav__link">
+  <a href="#java-dump-options" class="md-nav__link">
     Java dump options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#heap-dump-options" title="Heap dump options" class="md-nav__link">
+  <a href="#heap-dump-options" class="md-nav__link">
     Heap dump options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#other-diagnostic-options" title="Other diagnostic options" class="md-nav__link">
+  <a href="#other-diagnostic-options" class="md-nav__link">
     Other diagnostic options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#deprecated-jit-options" title="Deprecated JIT options" class="md-nav__link">
+  <a href="#deprecated-jit-options" class="md-nav__link">
     Deprecated JIT options
   </a>
   
@@ -3962,6 +3941,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/gc/index.html b/gc/index.html
index 8cc0d66..f6931c7 100644
--- a/gc/index.html
+++ b/gc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -539,7 +518,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#the-allocator" title="The Allocator" class="md-nav__link">
+  <a href="#the-allocator" class="md-nav__link">
     The Allocator
   </a>
   
@@ -547,7 +526,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#thread-local-heaps-tlh" title="Thread local heaps (TLH)" class="md-nav__link">
+  <a href="#thread-local-heaps-tlh" class="md-nav__link">
     Thread local heaps (TLH)
   </a>
   
@@ -559,7 +538,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#garbage-collection_1" title="Garbage collection" class="md-nav__link">
+  <a href="#garbage-collection_1" class="md-nav__link">
     Garbage collection
   </a>
   
@@ -567,14 +546,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#generational-concurrent-policy" title="Generational Concurrent policy" class="md-nav__link">
+  <a href="#generational-concurrent-policy" class="md-nav__link">
     Generational Concurrent policy
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#other-policies" title="Other policies" class="md-nav__link">
+  <a href="#other-policies" class="md-nav__link">
     Other policies
   </a>
   
@@ -586,7 +565,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#troubleshooting" title="Troubleshooting" class="md-nav__link">
+  <a href="#troubleshooting" class="md-nav__link">
     Troubleshooting
   </a>
   
@@ -3372,7 +3351,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#the-allocator" title="The Allocator" class="md-nav__link">
+  <a href="#the-allocator" class="md-nav__link">
     The Allocator
   </a>
   
@@ -3380,7 +3359,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#thread-local-heaps-tlh" title="Thread local heaps (TLH)" class="md-nav__link">
+  <a href="#thread-local-heaps-tlh" class="md-nav__link">
     Thread local heaps (TLH)
   </a>
   
@@ -3392,7 +3371,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#garbage-collection_1" title="Garbage collection" class="md-nav__link">
+  <a href="#garbage-collection_1" class="md-nav__link">
     Garbage collection
   </a>
   
@@ -3400,14 +3379,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#generational-concurrent-policy" title="Generational Concurrent policy" class="md-nav__link">
+  <a href="#generational-concurrent-policy" class="md-nav__link">
     Generational Concurrent policy
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#other-policies" title="Other policies" class="md-nav__link">
+  <a href="#other-policies" class="md-nav__link">
     Other policies
   </a>
   
@@ -3419,7 +3398,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#troubleshooting" title="Troubleshooting" class="md-nav__link">
+  <a href="#troubleshooting" class="md-nav__link">
     Troubleshooting
   </a>
   
@@ -3735,6 +3714,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/index.html b/index.html
index 13da99a..c1687f8 100644
--- a/index.html
+++ b/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -323,21 +302,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#supported-environments" title="Supported environments" class="md-nav__link">
+  <a href="#supported-environments" class="md-nav__link">
     Supported environments
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#documentation-for-specific-releases" title="Documentation for specific releases" class="md-nav__link">
+  <a href="#documentation-for-specific-releases" class="md-nav__link">
     Documentation for specific releases
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#useful-links" title="Useful links" class="md-nav__link">
+  <a href="#useful-links" class="md-nav__link">
     Useful links
   </a>
   
@@ -3339,21 +3318,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#supported-environments" title="Supported environments" class="md-nav__link">
+  <a href="#supported-environments" class="md-nav__link">
     Supported environments
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#documentation-for-specific-releases" title="Documentation for specific releases" class="md-nav__link">
+  <a href="#documentation-for-specific-releases" class="md-nav__link">
     Documentation for specific releases
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#useful-links" title="Useful links" class="md-nav__link">
+  <a href="#useful-links" class="md-nav__link">
     Useful links
   </a>
   
@@ -3602,6 +3581,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/interface_dtfj/index.html b/interface_dtfj/index.html
index 2b5aefc..23c7e5f 100644
--- a/interface_dtfj/index.html
+++ b/interface_dtfj/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -881,7 +860,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#using-the-dtfj-interface" title="Using the DTFJ interface" class="md-nav__link">
+  <a href="#using-the-dtfj-interface" class="md-nav__link">
     Using the DTFJ interface
   </a>
   
@@ -889,14 +868,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#working-with-a-system-dump" title="Working with a system dump" class="md-nav__link">
+  <a href="#working-with-a-system-dump" class="md-nav__link">
     Working with a system dump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#working-with-a-java-dump" title="Working with a Java dump" class="md-nav__link">
+  <a href="#working-with-a-java-dump" class="md-nav__link">
     Working with a Java dump
   </a>
   
@@ -908,14 +887,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#analyze-the-dump" title="Analyze the dump" class="md-nav__link">
+  <a href="#analyze-the-dump" class="md-nav__link">
     Analyze the dump
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#dtfj-example-application" title="DTFJ example application" class="md-nav__link">
+  <a href="#dtfj-example-application" class="md-nav__link">
     DTFJ example application
   </a>
   
@@ -3363,7 +3342,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#using-the-dtfj-interface" title="Using the DTFJ interface" class="md-nav__link">
+  <a href="#using-the-dtfj-interface" class="md-nav__link">
     Using the DTFJ interface
   </a>
   
@@ -3371,14 +3350,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#working-with-a-system-dump" title="Working with a system dump" class="md-nav__link">
+  <a href="#working-with-a-system-dump" class="md-nav__link">
     Working with a system dump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#working-with-a-java-dump" title="Working with a Java dump" class="md-nav__link">
+  <a href="#working-with-a-java-dump" class="md-nav__link">
     Working with a Java dump
   </a>
   
@@ -3390,14 +3369,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#analyze-the-dump" title="Analyze the dump" class="md-nav__link">
+  <a href="#analyze-the-dump" class="md-nav__link">
     Analyze the dump
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#dtfj-example-application" title="DTFJ example application" class="md-nav__link">
+  <a href="#dtfj-example-application" class="md-nav__link">
     DTFJ example application
   </a>
   
@@ -3483,8 +3462,9 @@
 </code></pre>
 
 <p>In this case, the DTFJ implementation is expecting a dump file to exist. Different errors are caught if the file existed but was not recognized as a valid dump file.</p>
-<p><details>
-  <summary>Example of working with a system dump</summary></p>
+<details>
+  <summary>Example of working with a system dump</summary>
+
 <pre><code>import java.io.File;
 import java.util.Iterator;
 import java.io.IOException;
@@ -3538,11 +3518,14 @@
 }
 </code></pre>
 
-<p></details></p>
+
+</details>
+
 <h3 id="working-with-a-java-dump">Working with a Java dump</h3>
 <p>To work with a Java dump, change the factory class to <code>com.ibm.dtfj.image.javacore.JCImageFactory</code> and pass the Java dump file to the <code>getImage()</code> method.</p>
-<p><details>
-  <summary>Example of working with a Java dump</summary></p>
+<details>
+  <summary>Example of working with a Java dump</summary>
+
 <pre><code>import java.io.File;
 import java.util.Iterator;
 import java.io.IOException;
@@ -3598,7 +3581,9 @@
 }
 </code></pre>
 
-<p></details></p>
+
+</details>
+
 <h2 id="analyze-the-dump">Analyze the dump</h2>
 <p>After you have obtained an <code>Image</code> instance, you can begin analyzing the dump. The <code>Image</code> instance is the second instance in the class hierarchy for DTFJ illustrated by the following diagram:</p>
 <p><img alt="Class hierarchy for DTFJ" src="../cr/dtfj.png" /></p>
@@ -3615,8 +3600,9 @@
 </ul>
 <h2 id="dtfj-example-application">DTFJ example application</h2>
 <p>This example is a fully working DTFJ application. Many DTFJ applications will follow a similar model.</p>
-<p><details>
-  <summary>Sample DTFJ application</summary></p>
+<details>
+  <summary>Sample DTFJ application</summary>
+
 <pre><code>import java.io.File;
 import java.util.Iterator;
 import com.ibm.dtfj.image.CorruptData;
@@ -3747,7 +3733,9 @@
 }
 </code></pre>
 
-<p></details></p>
+
+</details>
+
 <p>For clarity, the example does not perform full error checking when constructing the main Image object and does not perform <code>CorruptData</code> handling in all of the iterators. In a production environment, you use the techniques illustrated in the previous examples under <a href="#working-with-a-system-dump">Working with a system dump</a> and <a href="#working-with-a-java-dump">Working with a Java dump</a>.</p>
 <p>In the example, the program iterates through every available Java thread and checks whether it is equal to any of the available image threads. When they are found to be equal, the program displays the following message: "Found a match".</p>
 <p>The example demonstrates:</p>
@@ -3942,6 +3930,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/interface_jvmti/index.html b/interface_jvmti/index.html
index 2eb79cd..0988fe0 100644
--- a/interface_jvmti/index.html
+++ b/interface_jvmti/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -869,21 +848,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#overview" title="Overview" class="md-nav__link">
+  <a href="#overview" class="md-nav__link">
     Overview
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#openj9-extensions" title="OpenJ9 extensions" class="md-nav__link">
+  <a href="#openj9-extensions" class="md-nav__link">
     OpenJ9 extensions
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#sample-jvmti-agent" title="Sample JVMTI agent" class="md-nav__link">
+  <a href="#sample-jvmti-agent" class="md-nav__link">
     Sample JVMTI agent
   </a>
   
@@ -891,21 +870,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#agent_onload" title="Agent_OnLoad()" class="md-nav__link">
+  <a href="#agent_onload" class="md-nav__link">
     Agent_OnLoad()
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dumpstartcallback" title="DumpStartCallback()" class="md-nav__link">
+  <a href="#dumpstartcallback" class="md-nav__link">
     DumpStartCallback()
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-the-sample-jvmti-agent" title="Using the sample JVMTI agent" class="md-nav__link">
+  <a href="#using-the-sample-jvmti-agent" class="md-nav__link">
     Using the sample JVMTI agent
   </a>
   
@@ -917,7 +896,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#api-reference" title="API reference" class="md-nav__link">
+  <a href="#api-reference" class="md-nav__link">
     API reference
   </a>
   
@@ -925,63 +904,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#getosthreadid" title="GetOSThreadID" class="md-nav__link">
+  <a href="#getosthreadid" class="md-nav__link">
     GetOSThreadID
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#queryvmdump" title="QueryVmDump" class="md-nav__link">
+  <a href="#queryvmdump" class="md-nav__link">
     QueryVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#setvmdump" title="SetVmDump" class="md-nav__link">
+  <a href="#setvmdump" class="md-nav__link">
     SetVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#triggervmdump" title="TriggerVmDump" class="md-nav__link">
+  <a href="#triggervmdump" class="md-nav__link">
     TriggerVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#resetvmdump" title="ResetVmDump" class="md-nav__link">
+  <a href="#resetvmdump" class="md-nav__link">
     ResetVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vmdumpstart" title="VMDumpStart" class="md-nav__link">
+  <a href="#vmdumpstart" class="md-nav__link">
     VMDumpStart
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vmdumpend" title="VMDumpEnd" class="md-nav__link">
+  <a href="#vmdumpend" class="md-nav__link">
     VMDumpEnd
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#setvmtrace" title="SetVmTrace" class="md-nav__link">
+  <a href="#setvmtrace" class="md-nav__link">
     SetVmTrace
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#registertracepointsubscriber" title="RegisterTracePointSubscriber" class="md-nav__link">
+  <a href="#registertracepointsubscriber" class="md-nav__link">
     RegisterTracePointSubscriber
   </a>
   
@@ -989,14 +968,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvmtitracesubscriber-function" title="jvmtiTraceSubscriber function" class="md-nav__link">
+  <a href="#jvmtitracesubscriber-function" class="md-nav__link">
     jvmtiTraceSubscriber function
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jvmtitracealarm-function" title="jvmtiTraceAlarm function" class="md-nav__link">
+  <a href="#jvmtitracealarm-function" class="md-nav__link">
     jvmtiTraceAlarm function
   </a>
   
@@ -1008,35 +987,35 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#deregistertracepointsubscriber" title="DeregisterTracePointSubscriber" class="md-nav__link">
+  <a href="#deregistertracepointsubscriber" class="md-nav__link">
     DeregisterTracePointSubscriber
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#getmemorycategories" title="GetMemoryCategories" class="md-nav__link">
+  <a href="#getmemorycategories" class="md-nav__link">
     GetMemoryCategories
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#queryvmlogoptions" title="QueryVmLogOptions" class="md-nav__link">
+  <a href="#queryvmlogoptions" class="md-nav__link">
     QueryVmLogOptions
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#setvmlogoptions" title="SetVmLogOptions" class="md-nav__link">
+  <a href="#setvmlogoptions" class="md-nav__link">
     SetVmLogOptions
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#iteratesharedcaches" title="IterateSharedCaches" class="md-nav__link">
+  <a href="#iteratesharedcaches" class="md-nav__link">
     IterateSharedCaches
   </a>
   
@@ -1044,14 +1023,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvmtiiteratesharedcachescallback-function" title="jvmtiIterateSharedCachesCallback function" class="md-nav__link">
+  <a href="#jvmtiiteratesharedcachescallback-function" class="md-nav__link">
     jvmtiIterateSharedCachesCallback function
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jvmtisharedcacheinfo-structure" title="jvmtiSharedCacheInfo structure" class="md-nav__link">
+  <a href="#jvmtisharedcacheinfo-structure" class="md-nav__link">
     jvmtiSharedCacheInfo structure
   </a>
   
@@ -1063,14 +1042,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroysharedcache" title="DestroySharedCache" class="md-nav__link">
+  <a href="#destroysharedcache" class="md-nav__link">
     DestroySharedCache
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#registerverbosegcsubscriber" title="RegisterVerboseGCSubscriber" class="md-nav__link">
+  <a href="#registerverbosegcsubscriber" class="md-nav__link">
     RegisterVerboseGCSubscriber
   </a>
   
@@ -1078,14 +1057,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvmtiverbosegcsubscriber-function" title="jvmtiVerboseGCSubscriber function" class="md-nav__link">
+  <a href="#jvmtiverbosegcsubscriber-function" class="md-nav__link">
     jvmtiVerboseGCSubscriber function
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jvmtiverbosegcalarm-function" title="jvmtiVerboseGCAlarm function" class="md-nav__link">
+  <a href="#jvmtiverbosegcalarm-function" class="md-nav__link">
     jvmtiVerboseGCAlarm function
   </a>
   
@@ -1097,7 +1076,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#deregisterverbosegcsubscriber" title="DeregisterVerboseGCSubscriber" class="md-nav__link">
+  <a href="#deregisterverbosegcsubscriber" class="md-nav__link">
     DeregisterVerboseGCSubscriber
   </a>
   
@@ -3562,21 +3541,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#overview" title="Overview" class="md-nav__link">
+  <a href="#overview" class="md-nav__link">
     Overview
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#openj9-extensions" title="OpenJ9 extensions" class="md-nav__link">
+  <a href="#openj9-extensions" class="md-nav__link">
     OpenJ9 extensions
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#sample-jvmti-agent" title="Sample JVMTI agent" class="md-nav__link">
+  <a href="#sample-jvmti-agent" class="md-nav__link">
     Sample JVMTI agent
   </a>
   
@@ -3584,21 +3563,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#agent_onload" title="Agent_OnLoad()" class="md-nav__link">
+  <a href="#agent_onload" class="md-nav__link">
     Agent_OnLoad()
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dumpstartcallback" title="DumpStartCallback()" class="md-nav__link">
+  <a href="#dumpstartcallback" class="md-nav__link">
     DumpStartCallback()
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-the-sample-jvmti-agent" title="Using the sample JVMTI agent" class="md-nav__link">
+  <a href="#using-the-sample-jvmti-agent" class="md-nav__link">
     Using the sample JVMTI agent
   </a>
   
@@ -3610,7 +3589,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#api-reference" title="API reference" class="md-nav__link">
+  <a href="#api-reference" class="md-nav__link">
     API reference
   </a>
   
@@ -3618,63 +3597,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#getosthreadid" title="GetOSThreadID" class="md-nav__link">
+  <a href="#getosthreadid" class="md-nav__link">
     GetOSThreadID
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#queryvmdump" title="QueryVmDump" class="md-nav__link">
+  <a href="#queryvmdump" class="md-nav__link">
     QueryVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#setvmdump" title="SetVmDump" class="md-nav__link">
+  <a href="#setvmdump" class="md-nav__link">
     SetVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#triggervmdump" title="TriggerVmDump" class="md-nav__link">
+  <a href="#triggervmdump" class="md-nav__link">
     TriggerVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#resetvmdump" title="ResetVmDump" class="md-nav__link">
+  <a href="#resetvmdump" class="md-nav__link">
     ResetVmDump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vmdumpstart" title="VMDumpStart" class="md-nav__link">
+  <a href="#vmdumpstart" class="md-nav__link">
     VMDumpStart
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vmdumpend" title="VMDumpEnd" class="md-nav__link">
+  <a href="#vmdumpend" class="md-nav__link">
     VMDumpEnd
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#setvmtrace" title="SetVmTrace" class="md-nav__link">
+  <a href="#setvmtrace" class="md-nav__link">
     SetVmTrace
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#registertracepointsubscriber" title="RegisterTracePointSubscriber" class="md-nav__link">
+  <a href="#registertracepointsubscriber" class="md-nav__link">
     RegisterTracePointSubscriber
   </a>
   
@@ -3682,14 +3661,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvmtitracesubscriber-function" title="jvmtiTraceSubscriber function" class="md-nav__link">
+  <a href="#jvmtitracesubscriber-function" class="md-nav__link">
     jvmtiTraceSubscriber function
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jvmtitracealarm-function" title="jvmtiTraceAlarm function" class="md-nav__link">
+  <a href="#jvmtitracealarm-function" class="md-nav__link">
     jvmtiTraceAlarm function
   </a>
   
@@ -3701,35 +3680,35 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#deregistertracepointsubscriber" title="DeregisterTracePointSubscriber" class="md-nav__link">
+  <a href="#deregistertracepointsubscriber" class="md-nav__link">
     DeregisterTracePointSubscriber
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#getmemorycategories" title="GetMemoryCategories" class="md-nav__link">
+  <a href="#getmemorycategories" class="md-nav__link">
     GetMemoryCategories
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#queryvmlogoptions" title="QueryVmLogOptions" class="md-nav__link">
+  <a href="#queryvmlogoptions" class="md-nav__link">
     QueryVmLogOptions
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#setvmlogoptions" title="SetVmLogOptions" class="md-nav__link">
+  <a href="#setvmlogoptions" class="md-nav__link">
     SetVmLogOptions
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#iteratesharedcaches" title="IterateSharedCaches" class="md-nav__link">
+  <a href="#iteratesharedcaches" class="md-nav__link">
     IterateSharedCaches
   </a>
   
@@ -3737,14 +3716,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvmtiiteratesharedcachescallback-function" title="jvmtiIterateSharedCachesCallback function" class="md-nav__link">
+  <a href="#jvmtiiteratesharedcachescallback-function" class="md-nav__link">
     jvmtiIterateSharedCachesCallback function
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jvmtisharedcacheinfo-structure" title="jvmtiSharedCacheInfo structure" class="md-nav__link">
+  <a href="#jvmtisharedcacheinfo-structure" class="md-nav__link">
     jvmtiSharedCacheInfo structure
   </a>
   
@@ -3756,14 +3735,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroysharedcache" title="DestroySharedCache" class="md-nav__link">
+  <a href="#destroysharedcache" class="md-nav__link">
     DestroySharedCache
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#registerverbosegcsubscriber" title="RegisterVerboseGCSubscriber" class="md-nav__link">
+  <a href="#registerverbosegcsubscriber" class="md-nav__link">
     RegisterVerboseGCSubscriber
   </a>
   
@@ -3771,14 +3750,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#jvmtiverbosegcsubscriber-function" title="jvmtiVerboseGCSubscriber function" class="md-nav__link">
+  <a href="#jvmtiverbosegcsubscriber-function" class="md-nav__link">
     jvmtiVerboseGCSubscriber function
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jvmtiverbosegcalarm-function" title="jvmtiVerboseGCAlarm function" class="md-nav__link">
+  <a href="#jvmtiverbosegcalarm-function" class="md-nav__link">
     jvmtiVerboseGCAlarm function
   </a>
   
@@ -3790,7 +3769,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#deregisterverbosegcsubscriber" title="DeregisterVerboseGCSubscriber" class="md-nav__link">
+  <a href="#deregisterverbosegcsubscriber" class="md-nav__link">
     DeregisterVerboseGCSubscriber
   </a>
   
@@ -3913,8 +3892,9 @@
 <p>The definitions that you need when you write a JVMTI agent are provided in the header files <code>jvmti.h</code> and <code>ibmjvmti.h</code>, in the  <code>include</code> directory.</p>
 <h2 id="sample-jvmti-agent">Sample JVMTI agent</h2>
 <p>The following sample shows you how to write a simple JVMTI agent that uses OpenJ9 extensions to the JVMTI.</p>
-<p><details>
-  <summary>Sample JVMTI agent written in C/C++, which uses the OpenJ9 extensions</summary></p>
+<details>
+  <summary>Sample JVMTI agent written in C/C++, which uses the OpenJ9 extensions</summary>
+
 <pre><code>/*
  * tiSample.c
  *
@@ -3994,7 +3974,9 @@
 }
 </code></pre>
 
-<p></details></p>
+
+</details>
+
 <p>The sample JVMTI agent consists of two functions, <code>Agent_OnLoad()</code> and <code>DumpStartCallback()</code>:</p>
 <h3 id="agent_onload"><code>Agent_OnLoad()</code></h3>
 <p>This function is called by the VM when the agent is loaded at VM startup, which allows the JVMTI agent to modify VM behavior before initialization is complete. The sample agent obtains access to the JVMTI interface by using the JNI Invocation API function <code>GetEnv()</code>. The agent calls the APIs <code>GetExtensionEvents()</code> and <code>GetExtensionFunctions()</code> to find the JVMTI extensions that are supported by the VM. These APIs provide access to the list of extensions available in the <code>jvmtiExtensionEventInfo</code> and <code>jvmtiExtensionFunctionInfo</code> structures. The sample uses an extension event and an extension function in the following way:</p>
@@ -4814,6 +4796,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/introduction/index.html b/introduction/index.html
index 5b4454c..8cef3a3 100644
--- a/introduction/index.html
+++ b/introduction/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -347,14 +326,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#configuring-your-system" title="Configuring your system" class="md-nav__link">
+  <a href="#configuring-your-system" class="md-nav__link">
     Configuring your system
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#performance-tuning" title="Performance tuning" class="md-nav__link">
+  <a href="#performance-tuning" class="md-nav__link">
     Performance tuning
   </a>
   
@@ -362,42 +341,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#garbage-collection-policies" title="Garbage collection policies" class="md-nav__link">
+  <a href="#garbage-collection-policies" class="md-nav__link">
     Garbage collection policies
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-data-sharing" title="Class data sharing" class="md-nav__link">
+  <a href="#class-data-sharing" class="md-nav__link">
     Class data sharing
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#native-data-operations" title="Native data operations" class="md-nav__link">
+  <a href="#native-data-operations" class="md-nav__link">
     Native data operations
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cloud-optimizations" title="Cloud optimizations" class="md-nav__link">
+  <a href="#cloud-optimizations" class="md-nav__link">
     Cloud optimizations
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cryptographic-operations" title="Cryptographic operations" class="md-nav__link">
+  <a href="#cryptographic-operations" class="md-nav__link">
     Cryptographic operations
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exploiting-gpus" title="Exploiting GPUs" class="md-nav__link">
+  <a href="#exploiting-gpus" class="md-nav__link">
     Exploiting GPUs
   </a>
   
@@ -409,28 +388,28 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#runtime-options" title="Runtime options" class="md-nav__link">
+  <a href="#runtime-options" class="md-nav__link">
     Runtime options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-settings" title="Default settings" class="md-nav__link">
+  <a href="#default-settings" class="md-nav__link">
     Default settings
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#using-jlink" title="Using Jlink" class="md-nav__link">
+  <a href="#using-jlink" class="md-nav__link">
     Using Jlink
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#troubleshooting" title="Troubleshooting" class="md-nav__link">
+  <a href="#troubleshooting" class="md-nav__link">
     Troubleshooting
   </a>
   
@@ -3408,14 +3387,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#configuring-your-system" title="Configuring your system" class="md-nav__link">
+  <a href="#configuring-your-system" class="md-nav__link">
     Configuring your system
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#performance-tuning" title="Performance tuning" class="md-nav__link">
+  <a href="#performance-tuning" class="md-nav__link">
     Performance tuning
   </a>
   
@@ -3423,42 +3402,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#garbage-collection-policies" title="Garbage collection policies" class="md-nav__link">
+  <a href="#garbage-collection-policies" class="md-nav__link">
     Garbage collection policies
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-data-sharing" title="Class data sharing" class="md-nav__link">
+  <a href="#class-data-sharing" class="md-nav__link">
     Class data sharing
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#native-data-operations" title="Native data operations" class="md-nav__link">
+  <a href="#native-data-operations" class="md-nav__link">
     Native data operations
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cloud-optimizations" title="Cloud optimizations" class="md-nav__link">
+  <a href="#cloud-optimizations" class="md-nav__link">
     Cloud optimizations
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cryptographic-operations" title="Cryptographic operations" class="md-nav__link">
+  <a href="#cryptographic-operations" class="md-nav__link">
     Cryptographic operations
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exploiting-gpus" title="Exploiting GPUs" class="md-nav__link">
+  <a href="#exploiting-gpus" class="md-nav__link">
     Exploiting GPUs
   </a>
   
@@ -3470,28 +3449,28 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#runtime-options" title="Runtime options" class="md-nav__link">
+  <a href="#runtime-options" class="md-nav__link">
     Runtime options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-settings" title="Default settings" class="md-nav__link">
+  <a href="#default-settings" class="md-nav__link">
     Default settings
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#using-jlink" title="Using Jlink" class="md-nav__link">
+  <a href="#using-jlink" class="md-nav__link">
     Using Jlink
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#troubleshooting" title="Troubleshooting" class="md-nav__link">
+  <a href="#troubleshooting" class="md-nav__link">
     Troubleshooting
   </a>
   
@@ -3801,6 +3780,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/jit/index.html b/jit/index.html
index f76e502..4b85376 100644
--- a/jit/index.html
+++ b/jit/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -551,14 +530,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#optimization-levels" title="Optimization levels" class="md-nav__link">
+  <a href="#optimization-levels" class="md-nav__link">
     Optimization levels
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#troubleshooting" title="Troubleshooting" class="md-nav__link">
+  <a href="#troubleshooting" class="md-nav__link">
     Troubleshooting
   </a>
   
@@ -566,7 +545,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#understanding-jit-verbose-logs" title="Understanding JIT verbose logs" class="md-nav__link">
+  <a href="#understanding-jit-verbose-logs" class="md-nav__link">
     Understanding JIT verbose logs
   </a>
   
@@ -578,7 +557,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3352,14 +3331,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#optimization-levels" title="Optimization levels" class="md-nav__link">
+  <a href="#optimization-levels" class="md-nav__link">
     Optimization levels
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#troubleshooting" title="Troubleshooting" class="md-nav__link">
+  <a href="#troubleshooting" class="md-nav__link">
     Troubleshooting
   </a>
   
@@ -3367,7 +3346,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#understanding-jit-verbose-logs" title="Understanding JIT verbose logs" class="md-nav__link">
+  <a href="#understanding-jit-verbose-logs" class="md-nav__link">
     Understanding JIT verbose logs
   </a>
   
@@ -3379,7 +3358,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3799,6 +3778,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/legal/index.html b/legal/index.html
index 6c7d6bc..136253e 100644
--- a/legal/index.html
+++ b/legal/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3287,28 +3266,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#license-agreement" title="License agreement" class="md-nav__link">
+  <a href="#license-agreement" class="md-nav__link">
     License agreement
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#notices" title="Notices" class="md-nav__link">
+  <a href="#notices" class="md-nav__link">
     Notices
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#copyright-information" title="Copyright information" class="md-nav__link">
+  <a href="#copyright-information" class="md-nav__link">
     Copyright information
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#trademarks" title="Trademarks" class="md-nav__link">
+  <a href="#trademarks" class="md-nav__link">
     Trademarks
   </a>
   
@@ -3346,28 +3325,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#license-agreement" title="License agreement" class="md-nav__link">
+  <a href="#license-agreement" class="md-nav__link">
     License agreement
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#notices" title="Notices" class="md-nav__link">
+  <a href="#notices" class="md-nav__link">
     Notices
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#copyright-information" title="Copyright information" class="md-nav__link">
+  <a href="#copyright-information" class="md-nav__link">
     Copyright information
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#trademarks" title="Trademarks" class="md-nav__link">
+  <a href="#trademarks" class="md-nav__link">
     Trademarks
   </a>
   
@@ -3605,6 +3584,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/messages_intro/index.html b/messages_intro/index.html
index ea87e4a..6555ba9 100644
--- a/messages_intro/index.html
+++ b/messages_intro/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3260,14 +3239,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#message-categories" title="Message categories" class="md-nav__link">
+  <a href="#message-categories" class="md-nav__link">
     Message categories
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#finding-logged-messages" title="Finding logged messages" class="md-nav__link">
+  <a href="#finding-logged-messages" class="md-nav__link">
     Finding logged messages
   </a>
   
@@ -3275,35 +3254,35 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#finding-aix-messages" title="Finding AIX messages" class="md-nav__link">
+  <a href="#finding-aix-messages" class="md-nav__link">
     Finding AIX messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-linux-messages" title="Finding Linux messages" class="md-nav__link">
+  <a href="#finding-linux-messages" class="md-nav__link">
     Finding Linux messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-macos-messages" title="Finding macOS messages" class="md-nav__link">
+  <a href="#finding-macos-messages" class="md-nav__link">
     Finding macOS messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-windows-messages" title="Finding Windows messages" class="md-nav__link">
+  <a href="#finding-windows-messages" class="md-nav__link">
     Finding Windows messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-zos-messages" title="Finding z/OS messages" class="md-nav__link">
+  <a href="#finding-zos-messages" class="md-nav__link">
     Finding z/OS messages
   </a>
   
@@ -3315,7 +3294,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#obtaining-detailed-message-descriptions" title="Obtaining detailed message descriptions" class="md-nav__link">
+  <a href="#obtaining-detailed-message-descriptions" class="md-nav__link">
     Obtaining detailed message descriptions
   </a>
   
@@ -3382,14 +3361,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#message-categories" title="Message categories" class="md-nav__link">
+  <a href="#message-categories" class="md-nav__link">
     Message categories
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#finding-logged-messages" title="Finding logged messages" class="md-nav__link">
+  <a href="#finding-logged-messages" class="md-nav__link">
     Finding logged messages
   </a>
   
@@ -3397,35 +3376,35 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#finding-aix-messages" title="Finding AIX messages" class="md-nav__link">
+  <a href="#finding-aix-messages" class="md-nav__link">
     Finding AIX messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-linux-messages" title="Finding Linux messages" class="md-nav__link">
+  <a href="#finding-linux-messages" class="md-nav__link">
     Finding Linux messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-macos-messages" title="Finding macOS messages" class="md-nav__link">
+  <a href="#finding-macos-messages" class="md-nav__link">
     Finding macOS messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-windows-messages" title="Finding Windows messages" class="md-nav__link">
+  <a href="#finding-windows-messages" class="md-nav__link">
     Finding Windows messages
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#finding-zos-messages" title="Finding z/OS messages" class="md-nav__link">
+  <a href="#finding-zos-messages" class="md-nav__link">
     Finding z/OS messages
   </a>
   
@@ -3437,7 +3416,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#obtaining-detailed-message-descriptions" title="Obtaining detailed message descriptions" class="md-nav__link">
+  <a href="#obtaining-detailed-message-descriptions" class="md-nav__link">
     Obtaining detailed message descriptions
   </a>
   
@@ -3530,13 +3509,13 @@
 <pre><code>        user.debug errlog
 </code></pre>
 
-<ol>
+<ol start="2">
 <li>If <strong>syslogd</strong> is already running, reload the updated configuration by running the following command:</li>
 </ol>
 <pre><code>        refresh -s syslogd
 </code></pre>
 
-<ol>
+<ol start="3">
 <li>The updated configuration is used each time <strong>syslogd</strong> starts. 4.  Use the AIX <strong>errpt</strong> command or the System Management Interface Tool (SMIT) to read the messages sent to the error log.</li>
 </ol>
 <p>For more information about AIX logging, see: <a href="http://www.ibm.com/support/knowledgecenter/ssw_aix_61/com.ibm.aix.genprogc/logoverview.htm">Error-logging overview</a>.</p>
@@ -3739,6 +3718,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/openj9_defaults/index.html b/openj9_defaults/index.html
index 0e344f4..db15fc1 100644
--- a/openj9_defaults/index.html
+++ b/openj9_defaults/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3870,6 +3849,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/openj9_directories/index.html b/openj9_directories/index.html
index 78361ce..d715e91 100644
--- a/openj9_directories/index.html
+++ b/openj9_directories/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3600,6 +3579,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/openj9_newuser/index.html b/openj9_newuser/index.html
index d90a033..c82d288 100644
--- a/openj9_newuser/index.html
+++ b/openj9_newuser/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -359,21 +338,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#command-line-options" title="Command-line options" class="md-nav__link">
+  <a href="#command-line-options" class="md-nav__link">
     Command-line options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#garbage-collection-policies" title="Garbage collection policies" class="md-nav__link">
+  <a href="#garbage-collection-policies" class="md-nav__link">
     Garbage collection policies
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#operational-tooling" title="Operational tooling" class="md-nav__link">
+  <a href="#operational-tooling" class="md-nav__link">
     Operational tooling
   </a>
   
@@ -381,21 +360,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#dumps-logs-and-trace-files" title="Dumps, logs, and trace files" class="md-nav__link">
+  <a href="#dumps-logs-and-trace-files" class="md-nav__link">
     Dumps, logs, and trace files
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tools" title="Tools" class="md-nav__link">
+  <a href="#tools" class="md-nav__link">
     Tools
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#interfaces" title="Interfaces" class="md-nav__link">
+  <a href="#interfaces" class="md-nav__link">
     Interfaces
   </a>
   
@@ -407,7 +386,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#other-differences" title="Other differences" class="md-nav__link">
+  <a href="#other-differences" class="md-nav__link">
     Other differences
   </a>
   
@@ -3373,21 +3352,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#command-line-options" title="Command-line options" class="md-nav__link">
+  <a href="#command-line-options" class="md-nav__link">
     Command-line options
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#garbage-collection-policies" title="Garbage collection policies" class="md-nav__link">
+  <a href="#garbage-collection-policies" class="md-nav__link">
     Garbage collection policies
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#operational-tooling" title="Operational tooling" class="md-nav__link">
+  <a href="#operational-tooling" class="md-nav__link">
     Operational tooling
   </a>
   
@@ -3395,21 +3374,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#dumps-logs-and-trace-files" title="Dumps, logs, and trace files" class="md-nav__link">
+  <a href="#dumps-logs-and-trace-files" class="md-nav__link">
     Dumps, logs, and trace files
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tools" title="Tools" class="md-nav__link">
+  <a href="#tools" class="md-nav__link">
     Tools
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#interfaces" title="Interfaces" class="md-nav__link">
+  <a href="#interfaces" class="md-nav__link">
     Interfaces
   </a>
   
@@ -3421,7 +3400,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#other-differences" title="Other differences" class="md-nav__link">
+  <a href="#other-differences" class="md-nav__link">
     Other differences
   </a>
   
@@ -3745,6 +3724,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/openj9_support/index.html b/openj9_support/index.html
index 406d49a..67cf1cd 100644
--- a/openj9_support/index.html
+++ b/openj9_support/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3224,14 +3203,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#eclipse-openj9-releases" title="Eclipse OpenJ9 releases" class="md-nav__link">
+  <a href="#eclipse-openj9-releases" class="md-nav__link">
     Eclipse OpenJ9 releases
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#platform-support" title="Platform support" class="md-nav__link">
+  <a href="#platform-support" class="md-nav__link">
     Platform support
   </a>
   
@@ -3239,21 +3218,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#openjdk-8" title="OpenJDK 8" class="md-nav__link">
+  <a href="#openjdk-8" class="md-nav__link">
     OpenJDK 8
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-11" title="OpenJDK 11" class="md-nav__link">
+  <a href="#openjdk-11" class="md-nav__link">
     OpenJDK 11
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-13" title="OpenJDK 13" class="md-nav__link">
+  <a href="#openjdk-13" class="md-nav__link">
     OpenJDK 13
   </a>
   
@@ -3265,7 +3244,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#build-environments" title="Build environments" class="md-nav__link">
+  <a href="#build-environments" class="md-nav__link">
     Build environments
   </a>
   
@@ -3273,21 +3252,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#openjdk-8_1" title="OpenJDK 8" class="md-nav__link">
+  <a href="#openjdk-8_1" class="md-nav__link">
     OpenJDK 8
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-11_1" title="OpenJDK 11" class="md-nav__link">
+  <a href="#openjdk-11_1" class="md-nav__link">
     OpenJDK 11
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-13_1" title="OpenJDK 13" class="md-nav__link">
+  <a href="#openjdk-13_1" class="md-nav__link">
     OpenJDK 13
   </a>
   
@@ -3395,14 +3374,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#eclipse-openj9-releases" title="Eclipse OpenJ9 releases" class="md-nav__link">
+  <a href="#eclipse-openj9-releases" class="md-nav__link">
     Eclipse OpenJ9 releases
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#platform-support" title="Platform support" class="md-nav__link">
+  <a href="#platform-support" class="md-nav__link">
     Platform support
   </a>
   
@@ -3410,21 +3389,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#openjdk-8" title="OpenJDK 8" class="md-nav__link">
+  <a href="#openjdk-8" class="md-nav__link">
     OpenJDK 8
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-11" title="OpenJDK 11" class="md-nav__link">
+  <a href="#openjdk-11" class="md-nav__link">
     OpenJDK 11
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-13" title="OpenJDK 13" class="md-nav__link">
+  <a href="#openjdk-13" class="md-nav__link">
     OpenJDK 13
   </a>
   
@@ -3436,7 +3415,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#build-environments" title="Build environments" class="md-nav__link">
+  <a href="#build-environments" class="md-nav__link">
     Build environments
   </a>
   
@@ -3444,21 +3423,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#openjdk-8_1" title="OpenJDK 8" class="md-nav__link">
+  <a href="#openjdk-8_1" class="md-nav__link">
     OpenJDK 8
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-11_1" title="OpenJDK 11" class="md-nav__link">
+  <a href="#openjdk-11_1" class="md-nav__link">
     OpenJDK 11
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openjdk-13_1" title="OpenJDK 13" class="md-nav__link">
+  <a href="#openjdk-13_1" class="md-nav__link">
     OpenJDK 13
   </a>
   
@@ -4355,6 +4334,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/search/search_index.json b/search/search_index.json
index 330af55..1cac6a5 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Eclipse OpenJ9 Welcome to the user documentation for the Eclipse OpenJ9 virtual machine (VM). This user documentation supports the configuration, tuning, and diagnosis of the OpenJ9 VM in an OpenJDK runtime. However, due to differences between the Java SE class libraries, specific options might apply only to one Java SE version. Icons are used to indicate where differences apply. For example: This sentence applies only to Java 8 binaries that include the OpenJ9 VM. Icons for LTS releases are this colour. This sentence applies only to Java 13 or later binaries that include the OpenJ9 VM. Icons for feature releases are this colour. To see which Java releases are LTS releases and which are feature releases, and for information about release cadence, supported platforms, and build environments, see Supported environments . Note: Documentation to support OpenJ9 is still under construction. The current content covers some high level information about OpenJ9 components together with the command-line options and environment variables that you can use to configure the VM when you start your application. We expect further content to be contributed over time. Because OpenJ9 was contributed to the Eclipse Foundation by IBM, this content contains some links to additional information that forms part of the IBM\u00ae SDK, Java\u2122 Technology Edition product documentation in IBM Knowledge Center. That content supplements the documentation here until a more complete set of user documentation is available. We welcome contributions to the user documentation. If you would like to get involved, please read our Contribution guidelines . If you spot any errors in the documentation, please raise an issue at our GitHub repository. Supported environments OpenJDK binaries that contain the OpenJ9 VM are supported on a range of hardware and operating systems. This range is expanding as work progresses at the Eclipse foundation. See the current list of supported environments for details. Note: This user guide contains information about configuring, tuning, and debugging OpenJ9 on the z/OS\u00ae platform. This content was contributed by IBM so that it is available when the work to create OpenJDK binaries for the z/OS platform is complete. Documentation for specific releases Several versions of the documentation are available, covering all releases of OpenJ9: Online documentation for the last release Online, in-progress documentation for the forthcoming release Downloads of earlier releases : to download a zip file, click the filename, then click Download . After downloading a .zip file, extract it, then open the index.html file in your browser. Useful links Eclipse OpenJ9 website home page Eclipse OpenJ9 GitHub repository Eclipse Foundation OpenJ9 project page Pre-built binaries from the AdoptOpenJDK project","title":"About"},{"location":"#eclipse-openj9","text":"Welcome to the user documentation for the Eclipse OpenJ9 virtual machine (VM). This user documentation supports the configuration, tuning, and diagnosis of the OpenJ9 VM in an OpenJDK runtime. However, due to differences between the Java SE class libraries, specific options might apply only to one Java SE version. Icons are used to indicate where differences apply. For example: This sentence applies only to Java 8 binaries that include the OpenJ9 VM. Icons for LTS releases are this colour. This sentence applies only to Java 13 or later binaries that include the OpenJ9 VM. Icons for feature releases are this colour. To see which Java releases are LTS releases and which are feature releases, and for information about release cadence, supported platforms, and build environments, see Supported environments . Note: Documentation to support OpenJ9 is still under construction. The current content covers some high level information about OpenJ9 components together with the command-line options and environment variables that you can use to configure the VM when you start your application. We expect further content to be contributed over time. Because OpenJ9 was contributed to the Eclipse Foundation by IBM, this content contains some links to additional information that forms part of the IBM\u00ae SDK, Java\u2122 Technology Edition product documentation in IBM Knowledge Center. That content supplements the documentation here until a more complete set of user documentation is available. We welcome contributions to the user documentation. If you would like to get involved, please read our Contribution guidelines . If you spot any errors in the documentation, please raise an issue at our GitHub repository.","title":"Eclipse OpenJ9"},{"location":"#supported-environments","text":"OpenJDK binaries that contain the OpenJ9 VM are supported on a range of hardware and operating systems. This range is expanding as work progresses at the Eclipse foundation. See the current list of supported environments for details. Note: This user guide contains information about configuring, tuning, and debugging OpenJ9 on the z/OS\u00ae platform. This content was contributed by IBM so that it is available when the work to create OpenJDK binaries for the z/OS platform is complete.","title":"Supported environments"},{"location":"#documentation-for-specific-releases","text":"Several versions of the documentation are available, covering all releases of OpenJ9: Online documentation for the last release Online, in-progress documentation for the forthcoming release Downloads of earlier releases : to download a zip file, click the filename, then click Download . After downloading a .zip file, extract it, then open the index.html file in your browser.","title":"Documentation for specific releases"},{"location":"#useful-links","text":"Eclipse OpenJ9 website home page Eclipse OpenJ9 GitHub repository Eclipse Foundation OpenJ9 project page Pre-built binaries from the AdoptOpenJDK project","title":"Useful links"},{"location":"adoptopenjdk/","text":"AdoptOpenJDK builds The AdoptOpenJDK community project provide pre-built binaries of OpenJDK with OpenJ9, which have been rigorously tested to meet expected quality standards. Binaries for the latest release of Eclipse OpenJ9 can be obtained from the following links: OpenJDK8 with OpenJ9 OpenJDK11 with OpenJ9 OpenJDK13 with OpenJ9 Nightly builds of OpenJDK with OpenJ9 are also available from the project. Supported platforms The community develop and maintain a build and test infrastructure for the OpenJDK source across a broad range of platforms. For information about the platforms and minimum operating system levels supported for the builds, see the AdoptOpenJDK Platform support matrix . Installation pre-requisites If you obtain binaries from the AdoptOpenJDK community, the following pre-requisites are required: From Eclipse OpenJ9 release 0.13.0, OpenJDK binaries for Linux and AIX platforms from the AdoptOpenJDK community no longer bundle the OpenSSL cryptographic library. The library is expected to be found on the system path. If you want to use OpenSSL cryptographic acceleration, you must install OpenSSL 1.0.2 or 1.1.X on your system. If the library is not found on the system path, the in-built Java crytographic implementation is used instead, which performs less well. On Linux systems, the fontconfig.x86_64 package should be installed to avoid a NullPointerException error when the AWT font subsystem is initialized. Work is ongoing at the AdoptOpenJDK project to fix this issue for their OpenJDK binaries. From Eclipse OpenJ9 release 0.16.0 (OpenJDK 13) and release 0.17.0 (OpenJDK 8 and 11), CUDA is now enabled on Windows (x86-64) and Linux (x86-64 and IBM POWER LE) platforms, which allows you to offload certain Java application processing tasks to a general purpose graphics processing unit (GPU). To take advantage of this feature, your system must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0.","title":"AdoptOpenJDK builds"},{"location":"adoptopenjdk/#adoptopenjdk-builds","text":"The AdoptOpenJDK community project provide pre-built binaries of OpenJDK with OpenJ9, which have been rigorously tested to meet expected quality standards. Binaries for the latest release of Eclipse OpenJ9 can be obtained from the following links: OpenJDK8 with OpenJ9 OpenJDK11 with OpenJ9 OpenJDK13 with OpenJ9 Nightly builds of OpenJDK with OpenJ9 are also available from the project.","title":"AdoptOpenJDK builds"},{"location":"adoptopenjdk/#supported-platforms","text":"The community develop and maintain a build and test infrastructure for the OpenJDK source across a broad range of platforms. For information about the platforms and minimum operating system levels supported for the builds, see the AdoptOpenJDK Platform support matrix .","title":"Supported platforms"},{"location":"adoptopenjdk/#installation-pre-requisites","text":"If you obtain binaries from the AdoptOpenJDK community, the following pre-requisites are required: From Eclipse OpenJ9 release 0.13.0, OpenJDK binaries for Linux and AIX platforms from the AdoptOpenJDK community no longer bundle the OpenSSL cryptographic library. The library is expected to be found on the system path. If you want to use OpenSSL cryptographic acceleration, you must install OpenSSL 1.0.2 or 1.1.X on your system. If the library is not found on the system path, the in-built Java crytographic implementation is used instead, which performs less well. On Linux systems, the fontconfig.x86_64 package should be installed to avoid a NullPointerException error when the AWT font subsystem is initialized. Work is ongoing at the AdoptOpenJDK project to fix this issue for their OpenJDK binaries. From Eclipse OpenJ9 release 0.16.0 (OpenJDK 13) and release 0.17.0 (OpenJDK 8 and 11), CUDA is now enabled on Windows (x86-64) and Linux (x86-64 and IBM POWER LE) platforms, which allows you to offload certain Java application processing tasks to a general purpose graphics processing unit (GPU). To take advantage of this feature, your system must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0.","title":"Installation pre-requisites"},{"location":"aot/","text":"Ahead-Of-Time (AOT) compiler The AOT compiler dynamically compiles Java methods into native AOT code at runtime and stores them in the shared classes cache. This activity enables the VM to start an application faster the next time it runs because it doesn't need to spend time interpreting Java methods. The VM automatically chooses which methods should be AOT-compiled based on heuristics that identify the start-up phase of large applications. AOT code is always used in combination with class data sharing and is enabled automatically when -Xshareclasses is set on the command line. When a cached AOT method is run it might also be optimized further by the Just-In-Time (JIT) compiler. If you want to turn off AOT compilation and disable the use of AOT-compiled code, set the -Xnoaot suboption. When the AOT compiler is disabled, the JIT compiles frequently used methods into native code. However, because the JIT compiler operates while the application is running, the startup time for an application will increase. See also Diagnosing a JIT or AOT problem JIT compiler Class data sharing","title":"AOT Compiler"},{"location":"aot/#ahead-of-time-aot-compiler","text":"The AOT compiler dynamically compiles Java methods into native AOT code at runtime and stores them in the shared classes cache. This activity enables the VM to start an application faster the next time it runs because it doesn't need to spend time interpreting Java methods. The VM automatically chooses which methods should be AOT-compiled based on heuristics that identify the start-up phase of large applications. AOT code is always used in combination with class data sharing and is enabled automatically when -Xshareclasses is set on the command line. When a cached AOT method is run it might also be optimized further by the Just-In-Time (JIT) compiler. If you want to turn off AOT compilation and disable the use of AOT-compiled code, set the -Xnoaot suboption. When the AOT compiler is disabled, the JIT compiles frequently used methods into native code. However, because the JIT compiler operates while the application is running, the startup time for an application will increase.","title":"Ahead-Of-Time (AOT) compiler"},{"location":"aot/#see-also","text":"Diagnosing a JIT or AOT problem JIT compiler Class data sharing","title":"See also"},{"location":"cmdline_general/","text":"Standard command-line options The OpenJ9 virtual machine supports the standard Java\u2122 options that are common to all Java virtual machine implementations, including Oracle's Hotspot VM. Some of the common options supported are summarised in the following table: Standard option name Purpose -classpath:<resource_name>[:<resource_name>] Sets the search path for application classes and resources (directories and compressed or .jar files). cp can be used instead of classpath . -help , -? Prints a usage message. -fullversion Prints the build and version information for a VM -showversion Prints product version and continues. -verbose:<option>[,<option>] Enables verbose output. Options include class , dynload , gc , init , jni , sizes and stack . (See Notes ) -version Prints the full build and version information a VM Notes: -verbose:class : Writes an entry to stderr for each class that is loaded. -verbose:dynload : Writes detailed class information to stderr as each bootstrap class is loaded by the VM: -verbose:gc : Provides verbose garbage collection information. -verbose:init : Writes information to stderr describing VM initialization and termination. -verbose:jni : Writes information to stderr describing the JNI services called by the application and VM. -verbose:sizes : Writes information to stderr describing the active memory usage settings. -verbose:stack : Writes information to stderr describing the Java and C stack usage for each thread. For more information about standard options, see Oracle Java SE Standard Options","title":"Standard options"},{"location":"cmdline_general/#standard-command-line-options","text":"The OpenJ9 virtual machine supports the standard Java\u2122 options that are common to all Java virtual machine implementations, including Oracle's Hotspot VM. Some of the common options supported are summarised in the following table: Standard option name Purpose -classpath:<resource_name>[:<resource_name>] Sets the search path for application classes and resources (directories and compressed or .jar files). cp can be used instead of classpath . -help , -? Prints a usage message. -fullversion Prints the build and version information for a VM -showversion Prints product version and continues. -verbose:<option>[,<option>] Enables verbose output. Options include class , dynload , gc , init , jni , sizes and stack . (See Notes ) -version Prints the full build and version information a VM Notes: -verbose:class : Writes an entry to stderr for each class that is loaded. -verbose:dynload : Writes detailed class information to stderr as each bootstrap class is loaded by the VM: -verbose:gc : Provides verbose garbage collection information. -verbose:init : Writes information to stderr describing VM initialization and termination. -verbose:jni : Writes information to stderr describing the JNI services called by the application and VM. -verbose:sizes : Writes information to stderr describing the active memory usage settings. -verbose:stack : Writes information to stderr describing the Java and C stack usage for each thread. For more information about standard options, see Oracle Java SE Standard Options","title":"Standard command-line options"},{"location":"cmdline_migration/","text":"Switching to OpenJ9 If you are already familiar with HotSpot command-line options but want the advantages of OpenJ9, the following information will prove helpful. In all cases, check individual topics for minor discrepancies in the way these options might work. Note: For information about HotSpot equivalences and differences for items other than command-line options, see New to OpenJ9? Compatible options You can use the following command-line options in OpenJ9, just as you did in Hotspot; you can continue to use the HotSpot option in OpenJ9 without having to change your code: Option Usage -X Displays help on nonstandard options. -Xbootclasspath Specifies the search path for bootstrap classes and resources. -Xcheck:jni Runs additional checks for JNI functions during VM startup. -Xfuture Turns on strict class-file format checks. -Xint Runs an application in interpreted-only mode. -Xmn Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon. -Xms Sets the initial size of the heap. (Equivalent to -XX:InitialHeapSize ) -Xmx Specifies the maximum size of the object memory allocation pool. (Equivalent to -XX:MaxHeapSize ) -Xnoclassgc Disables class garbage collection (GC). -Xrs Prevents the OpenJ9 run time environment from handling signals. -Xss Sets the Java\u2122 thread stack size. (Equivalent to -XX:ThreadStackSize ). Note: Unlike HotSpot, this option applies only to the Java stack. OpenJ9 has a separate native stack for operating system threads (see -Xmso ) -Xverify:mode Enables or disables the verifier. -XX:[+|-]CompactStrings Enables/disables String compression -XX:[+|-]DisableExplicitGC Enables/disables System.gc() calls. (Alias for -Xdisableexplicitgc / -Xenableexplicitgc ) -XX:[+|-]HeapDumpOnOutOfMemory Enables/disables dumps on out-of-memory conditions. -XX:HeapDumpPath Specifies a directory for all VM dumps including heap dumps, javacores, and system dumps. (Alias for -Xdump:directory ) -XX:[+|-]IgnoreUnrecognizedVMOptions Specifies whether to ignore unrecognized top-level VM options -XX:InitialHeapSize Sets the initial size of the heap. (Alias for -Xms ) -XX:InitialRAMPercentage Sets the initial size of the Java heap as a percentage of total memory. -XX:OnOutOfMemoryError Runs specified commands when a java.lang.OutOfMemoryError is thrown. (Equivalent to -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec= ) -XX:MaxDirectMemorySize Sets a limit on the amount of memory that can be reserved for all direct byte buffers. -XX:MaxHeapSize Specifies the maximum size of the object memory allocation pool. (Alias for -Xmx ) -XX:MaxRAMPercentage Sets the maximum size of the Java heap as a percentage of total memory. -XX:[+|-]UseCompressedOops Disables compressed references in 64-bit JVMs. (See also -Xcompressedrefs ) -XX:[+|-]UseContainerSupport Sets a larger fraction of memory to the Java heap when the VM detects that it is running in a container. -XX:[+|-]CompactStrings Equivalent options These Hotspot command-line options have equivalents in OpenJ9 that are not specified in the same way, but perform a related function: HotSpot Option OpenJ9 Option Usage -Xcomp -Xjit:count=0 1 -Xcomp disables interpreted method invocations. -Xgc -Xgcpolicy 2 Configuring your garbage collection policy. -XX:ParallelGCThreads -Xgcthreads Configure number of GC threads. -XX:+UseNUMA -Xnuma:none 3 Controls non-uniform memory architecture (NUMA) awareness. Notes: Hotspot uses -Xcomp to force compilation of methods on first invocation. However, this option is deprecated. Whilst it can be used for compatibility, using -Xjit:count=0 is preferred. Hotspot uses -Xgc to both select policies and configure them; OpenJ9 uses -Xgcpolicy to select policies, reserving -Xgc for configuration. In Hotspot, NUMA awareness is turned off by default and is turned on by using the -XX:+UseNUMA option. Conversely, the OpenJ9 VM automatically enables NUMA awareness and uses -Xnuma:none to turn it off . If you were previously using Hotspot in its default mode, you must now explicitly turn off NUMA awareness in OpenJ9. If you are used to using -XX:+UseNUMA in Hotspot, you no longer need to explicitly turn on NUMA awareness; it's on by default.","title":"Switching to OpenJ9"},{"location":"cmdline_migration/#switching-to-openj9","text":"If you are already familiar with HotSpot command-line options but want the advantages of OpenJ9, the following information will prove helpful. In all cases, check individual topics for minor discrepancies in the way these options might work. Note: For information about HotSpot equivalences and differences for items other than command-line options, see New to OpenJ9?","title":"Switching to OpenJ9"},{"location":"cmdline_migration/#compatible-options","text":"You can use the following command-line options in OpenJ9, just as you did in Hotspot; you can continue to use the HotSpot option in OpenJ9 without having to change your code: Option Usage -X Displays help on nonstandard options. -Xbootclasspath Specifies the search path for bootstrap classes and resources. -Xcheck:jni Runs additional checks for JNI functions during VM startup. -Xfuture Turns on strict class-file format checks. -Xint Runs an application in interpreted-only mode. -Xmn Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon. -Xms Sets the initial size of the heap. (Equivalent to -XX:InitialHeapSize ) -Xmx Specifies the maximum size of the object memory allocation pool. (Equivalent to -XX:MaxHeapSize ) -Xnoclassgc Disables class garbage collection (GC). -Xrs Prevents the OpenJ9 run time environment from handling signals. -Xss Sets the Java\u2122 thread stack size. (Equivalent to -XX:ThreadStackSize ). Note: Unlike HotSpot, this option applies only to the Java stack. OpenJ9 has a separate native stack for operating system threads (see -Xmso ) -Xverify:mode Enables or disables the verifier. -XX:[+|-]CompactStrings Enables/disables String compression -XX:[+|-]DisableExplicitGC Enables/disables System.gc() calls. (Alias for -Xdisableexplicitgc / -Xenableexplicitgc ) -XX:[+|-]HeapDumpOnOutOfMemory Enables/disables dumps on out-of-memory conditions. -XX:HeapDumpPath Specifies a directory for all VM dumps including heap dumps, javacores, and system dumps. (Alias for -Xdump:directory ) -XX:[+|-]IgnoreUnrecognizedVMOptions Specifies whether to ignore unrecognized top-level VM options -XX:InitialHeapSize Sets the initial size of the heap. (Alias for -Xms ) -XX:InitialRAMPercentage Sets the initial size of the Java heap as a percentage of total memory. -XX:OnOutOfMemoryError Runs specified commands when a java.lang.OutOfMemoryError is thrown. (Equivalent to -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec= ) -XX:MaxDirectMemorySize Sets a limit on the amount of memory that can be reserved for all direct byte buffers. -XX:MaxHeapSize Specifies the maximum size of the object memory allocation pool. (Alias for -Xmx ) -XX:MaxRAMPercentage Sets the maximum size of the Java heap as a percentage of total memory. -XX:[+|-]UseCompressedOops Disables compressed references in 64-bit JVMs. (See also -Xcompressedrefs ) -XX:[+|-]UseContainerSupport Sets a larger fraction of memory to the Java heap when the VM detects that it is running in a container. -XX:[+|-]CompactStrings","title":"Compatible options"},{"location":"cmdline_migration/#equivalent-options","text":"These Hotspot command-line options have equivalents in OpenJ9 that are not specified in the same way, but perform a related function: HotSpot Option OpenJ9 Option Usage -Xcomp -Xjit:count=0 1 -Xcomp disables interpreted method invocations. -Xgc -Xgcpolicy 2 Configuring your garbage collection policy. -XX:ParallelGCThreads -Xgcthreads Configure number of GC threads. -XX:+UseNUMA -Xnuma:none 3 Controls non-uniform memory architecture (NUMA) awareness. Notes: Hotspot uses -Xcomp to force compilation of methods on first invocation. However, this option is deprecated. Whilst it can be used for compatibility, using -Xjit:count=0 is preferred. Hotspot uses -Xgc to both select policies and configure them; OpenJ9 uses -Xgcpolicy to select policies, reserving -Xgc for configuration. In Hotspot, NUMA awareness is turned off by default and is turned on by using the -XX:+UseNUMA option. Conversely, the OpenJ9 VM automatically enables NUMA awareness and uses -Xnuma:none to turn it off . If you were previously using Hotspot in its default mode, you must now explicitly turn off NUMA awareness in OpenJ9. If you are used to using -XX:+UseNUMA in Hotspot, you no longer need to explicitly turn on NUMA awareness; it's on by default.","title":"Equivalent options"},{"location":"cmdline_specifying/","text":"OpenJ9 command-line options When you start a Java\u2122 application you can specify various options on the command line to configure the runtime environment. These options include: System properties Standard options Nonstandard (or -X) options -XX options Although the command line is the traditional way to specify command-line options, you can also pass options to the OpenJ9 virtual machine (VM) by using a manifest file, options files, and environment variables. Options specified on the command line override the equivalent environment variables. For example, specifying java -cp <dir1> completely overrides setting the environment variable CLASSPATH=<dir2> . Quotation marks Use single or double quotation marks for command-line options only when explicitly directed to do so. Single and double quotation marks have different meanings on different platforms, operating systems, and shells. Do not use '-X<option>' or \"-X<option>\" . Instead, you must use -X<option> . For example, do not use '-Xmx500m' and \"-Xmx500m\" . Write this option as -Xmx500m . Precedence The sequence of the Java options on the command line defines which options take precedence during startup. Rightmost options have precedence over leftmost options. In the following example, the -Xjit option takes precedence: java -Xint -Xjit myClass At startup, the list of VM arguments is constructed in the following order, with the lowest precedence first: Certain options are created automatically by the VM, which specify arguments such as search paths and version information. The VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. You can modify the options.default file to include any options that you want to specify for your application instead of entering these options on the command line. For more information about the path and construction of the file, see -Xoptionsfile . Options can be specified in an executable JAR file by using the META-INF/MANIFEST.MF file. Options are placed in the main section in a header named IBM-Java-Options . Only one IBM-Java-Options header is permitted, but the header can contain multiple options, separated by spaces. A long sequence of options can be split using a header continuation but are treated as a single line. Example manifest file: Manifest-Version: 1.0 Class-Path: . Main-Class: HelloWorld IBM-Java-Options: -Xshareclasses:name=mycache,nonfa tal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.pro perty=\"this is a long system property value to demonstrate long VM arguments in the manifest file\" This example manifest file is parsed as the following string: -Xshareclasses:name=mycache,nonfatal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.property=this is a long system property value to demonstrate long VM arguments in the manifest file Options specified in the manifest file are subject to the same restrictions as options files. For more information, see the -Xoptionsfile topic in the user guide. Environment variables that are described in OpenJ9 environment variables are translated into command-line options. For example, the following environment variable adds the parameter -Xrs to the list of arguments: On Windows\u2122 systems: set IBM_NOSIGHANDLER=<non_null_string> On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: export IBM_NOSIGHANDLER=<non_null_string> The OPENJ9_JAVA_OPTIONS environment variable. You can set command-line options using this environment variable. The options that you specify with this environment variable are added to the command line when a VM starts in that environment. The environment variable can contain multiple blank-delimited argument strings, but must not contain comments. For example: On Windows systems: set OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" On AIX, Linux, macOS, and z/OS systems: export OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" Note: The environment variable JAVA_TOOLS_OPTIONS is equivalent to OPENJ9_JAVA_OPTIONS and is available for compatibility with JVMTI. The equivalent IBM_JAVA_OPTIONS environment variable is deprecated and will be removed in a future release. Options that are specified on the command line. For example: java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MyJavaClass The Java launcher adds some automatically generated arguments to this list, such as the names of the main class. You can also use the -Xoptionsfile parameter to specify VM options. This parameter can be used on the command line, or as part of the OPENJ9_JAVA_OPTIONS environment variable. The contents of an option file are expanded in place during startup. For more information about the structure and contents of this type of file, see -Xoptionsfile . To troubleshoot startup problems, you can check which options are used by the OpenJ9 VM. Append the following command-line option, and inspect the Java core file that is generated: -Xdump:java:events=vmstart Here is an extract from a Java core file that shows the options that are used: 2CIUSERARG -Xdump:java:file=/home/test_javacore.txt,events=vmstop 2CIUSERARG -Dtest.cmdlineOption=1 2CIUSERARG -XXallowvmshutdown:true 2CIUSERARG -Xoptionsfile=test1.test_options_file","title":"Specifying options"},{"location":"cmdline_specifying/#openj9-command-line-options","text":"When you start a Java\u2122 application you can specify various options on the command line to configure the runtime environment. These options include: System properties Standard options Nonstandard (or -X) options -XX options Although the command line is the traditional way to specify command-line options, you can also pass options to the OpenJ9 virtual machine (VM) by using a manifest file, options files, and environment variables. Options specified on the command line override the equivalent environment variables. For example, specifying java -cp <dir1> completely overrides setting the environment variable CLASSPATH=<dir2> .","title":"OpenJ9 command-line options"},{"location":"cmdline_specifying/#quotation-marks","text":"Use single or double quotation marks for command-line options only when explicitly directed to do so. Single and double quotation marks have different meanings on different platforms, operating systems, and shells. Do not use '-X<option>' or \"-X<option>\" . Instead, you must use -X<option> . For example, do not use '-Xmx500m' and \"-Xmx500m\" . Write this option as -Xmx500m .","title":"Quotation marks"},{"location":"cmdline_specifying/#precedence","text":"The sequence of the Java options on the command line defines which options take precedence during startup. Rightmost options have precedence over leftmost options. In the following example, the -Xjit option takes precedence: java -Xint -Xjit myClass At startup, the list of VM arguments is constructed in the following order, with the lowest precedence first: Certain options are created automatically by the VM, which specify arguments such as search paths and version information. The VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. You can modify the options.default file to include any options that you want to specify for your application instead of entering these options on the command line. For more information about the path and construction of the file, see -Xoptionsfile . Options can be specified in an executable JAR file by using the META-INF/MANIFEST.MF file. Options are placed in the main section in a header named IBM-Java-Options . Only one IBM-Java-Options header is permitted, but the header can contain multiple options, separated by spaces. A long sequence of options can be split using a header continuation but are treated as a single line. Example manifest file: Manifest-Version: 1.0 Class-Path: . Main-Class: HelloWorld IBM-Java-Options: -Xshareclasses:name=mycache,nonfa tal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.pro perty=\"this is a long system property value to demonstrate long VM arguments in the manifest file\" This example manifest file is parsed as the following string: -Xshareclasses:name=mycache,nonfatal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.property=this is a long system property value to demonstrate long VM arguments in the manifest file Options specified in the manifest file are subject to the same restrictions as options files. For more information, see the -Xoptionsfile topic in the user guide. Environment variables that are described in OpenJ9 environment variables are translated into command-line options. For example, the following environment variable adds the parameter -Xrs to the list of arguments: On Windows\u2122 systems: set IBM_NOSIGHANDLER=<non_null_string> On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: export IBM_NOSIGHANDLER=<non_null_string> The OPENJ9_JAVA_OPTIONS environment variable. You can set command-line options using this environment variable. The options that you specify with this environment variable are added to the command line when a VM starts in that environment. The environment variable can contain multiple blank-delimited argument strings, but must not contain comments. For example: On Windows systems: set OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" On AIX, Linux, macOS, and z/OS systems: export OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" Note: The environment variable JAVA_TOOLS_OPTIONS is equivalent to OPENJ9_JAVA_OPTIONS and is available for compatibility with JVMTI. The equivalent IBM_JAVA_OPTIONS environment variable is deprecated and will be removed in a future release. Options that are specified on the command line. For example: java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MyJavaClass The Java launcher adds some automatically generated arguments to this list, such as the names of the main class. You can also use the -Xoptionsfile parameter to specify VM options. This parameter can be used on the command line, or as part of the OPENJ9_JAVA_OPTIONS environment variable. The contents of an option file are expanded in place during startup. For more information about the structure and contents of this type of file, see -Xoptionsfile . To troubleshoot startup problems, you can check which options are used by the OpenJ9 VM. Append the following command-line option, and inspect the Java core file that is generated: -Xdump:java:events=vmstart Here is an extract from a Java core file that shows the options that are used: 2CIUSERARG -Xdump:java:file=/home/test_javacore.txt,events=vmstop 2CIUSERARG -Dtest.cmdlineOption=1 2CIUSERARG -XXallowvmshutdown:true 2CIUSERARG -Xoptionsfile=test1.test_options_file","title":"Precedence"},{"location":"d_jvm_commands/","text":"Using system property command-line options Java\u2122 system properties determine the environment in which a Java program runs by starting a Java virtual machine with a set of values. You can choose to use the default values for Java system properties or you can specify values for them by adding parameters to the command line when you start your application. To set a system property from the command line, use: java -D<property_name>=<value> <program_name> For example, to specify the UTF-8 file encoding for your application MyProgram , use: java -Dfile.encoding=UTF-8 MyProgram","title":"Using System properties"},{"location":"d_jvm_commands/#using-system-property-command-line-options","text":"Java\u2122 system properties determine the environment in which a Java program runs by starting a Java virtual machine with a set of values. You can choose to use the default values for Java system properties or you can specify values for them by adding parameters to the command line when you start your application. To set a system property from the command line, use: java -D<property_name>=<value> <program_name> For example, to specify the UTF-8 file encoding for your application MyProgram , use: java -Dfile.encoding=UTF-8 MyProgram","title":"Using system property command-line options"},{"location":"dcomibmenableclasscaching/","text":"-Dcom.ibm.enableClassCaching Setting this property to true enables caching of the Latest User Defined Class Loader (LUDCL). Syntax -Dcom.ibm.enableClassCaching=[true|false] Setting Effect Default true Enable false Disable yes Explanation By reducing repeated lookups, Java\u2122 applications that use deserialization extensively can see a performance improvement. See also Java Object Serialization Specification","title":"-Dcom.ibm.enableClassCaching"},{"location":"dcomibmenableclasscaching/#-dcomibmenableclasscaching","text":"Setting this property to true enables caching of the Latest User Defined Class Loader (LUDCL).","title":"-Dcom.ibm.enableClassCaching"},{"location":"dcomibmenableclasscaching/#syntax","text":"-Dcom.ibm.enableClassCaching=[true|false] Setting Effect Default true Enable false Disable yes","title":"Syntax"},{"location":"dcomibmenableclasscaching/#explanation","text":"By reducing repeated lookups, Java\u2122 applications that use deserialization extensively can see a performance improvement.","title":"Explanation"},{"location":"dcomibmenableclasscaching/#see-also","text":"Java Object Serialization Specification","title":"See also"},{"location":"dcomibmenablelegacydumpsecurity/","text":"-Dcom.ibm.enableLegacyDumpSecurity To improve security, the security checks in the certain com.ibm.jvm.Dump APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs. Syntax -Dcom.ibm.enableLegacyDumpSecurity=[true|false] Setting Effect Default true Enable yes false Disable Explanation Security checking is enabled in the following APIs: com.ibm.jvm.Dump.JavaDump() com.ibm.jvm.Dump.HeapDump() com.ibm.jvm.Dump.SnapDump() See also -Dcom.ibm.enableLegacyLogSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"-Dcom.ibm.enableLegacyDumpSecurity"},{"location":"dcomibmenablelegacydumpsecurity/#-dcomibmenablelegacydumpsecurity","text":"To improve security, the security checks in the certain com.ibm.jvm.Dump APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs.","title":"-Dcom.ibm.enableLegacyDumpSecurity"},{"location":"dcomibmenablelegacydumpsecurity/#syntax","text":"-Dcom.ibm.enableLegacyDumpSecurity=[true|false] Setting Effect Default true Enable yes false Disable","title":"Syntax"},{"location":"dcomibmenablelegacydumpsecurity/#explanation","text":"Security checking is enabled in the following APIs: com.ibm.jvm.Dump.JavaDump() com.ibm.jvm.Dump.HeapDump() com.ibm.jvm.Dump.SnapDump()","title":"Explanation"},{"location":"dcomibmenablelegacydumpsecurity/#see-also","text":"-Dcom.ibm.enableLegacyLogSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"See also"},{"location":"dcomibmenablelegacylogsecurity/","text":"-Dcom.ibm.enableLegacyLogSecurity To improve security, the security checks in the certain com.ibm.jvm.Log APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs. Syntax -Dcom.ibm.enableLegacyLogSecurity=[true|false] Setting Effect Default true Enable yes false Disable Explanation Security checking is enabled in the following APIs: com.ibm.jvm.Log.QueryOptions() com.ibm.jvm.Log.SetOptions(String) See also -Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"-Dcom.ibm.enableLegacyLogSecurity"},{"location":"dcomibmenablelegacylogsecurity/#-dcomibmenablelegacylogsecurity","text":"To improve security, the security checks in the certain com.ibm.jvm.Log APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs.","title":"-Dcom.ibm.enableLegacyLogSecurity"},{"location":"dcomibmenablelegacylogsecurity/#syntax","text":"-Dcom.ibm.enableLegacyLogSecurity=[true|false] Setting Effect Default true Enable yes false Disable","title":"Syntax"},{"location":"dcomibmenablelegacylogsecurity/#explanation","text":"Security checking is enabled in the following APIs: com.ibm.jvm.Log.QueryOptions() com.ibm.jvm.Log.SetOptions(String)","title":"Explanation"},{"location":"dcomibmenablelegacylogsecurity/#see-also","text":"-Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"See also"},{"location":"dcomibmenablelegacytracesecurity/","text":"-Dcom.ibm.enableLegacyTraceSecurity To improve security, the security checks in certain com.ibm.jvm.Trace APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs. Syntax -Dcom.ibm.enableLegacyTraceSecurity=[true|false] Setting Effect Default true Enable yes false Disable Explanation Security checking is enabled in the following APIs: com.ibm.jvm.Trace.set(String) com.ibm.jvm.Trace.snap() com.ibm.jvm.Trace.suspend() com.ibm.jvm.Trace.suspendThis() com.ibm.jvm.Trace.resume() com.ibm.jvm.Trace.resumeThis() com.ibm.jvm.Trace.registerApplication(String, String[]) See also -Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyLogSecurity","title":"-Dcom.ibm.enableLegacyTraceSecurity"},{"location":"dcomibmenablelegacytracesecurity/#-dcomibmenablelegacytracesecurity","text":"To improve security, the security checks in certain com.ibm.jvm.Trace APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs.","title":"-Dcom.ibm.enableLegacyTraceSecurity"},{"location":"dcomibmenablelegacytracesecurity/#syntax","text":"-Dcom.ibm.enableLegacyTraceSecurity=[true|false] Setting Effect Default true Enable yes false Disable","title":"Syntax"},{"location":"dcomibmenablelegacytracesecurity/#explanation","text":"Security checking is enabled in the following APIs: com.ibm.jvm.Trace.set(String) com.ibm.jvm.Trace.snap() com.ibm.jvm.Trace.suspend() com.ibm.jvm.Trace.suspendThis() com.ibm.jvm.Trace.resume() com.ibm.jvm.Trace.resumeThis() com.ibm.jvm.Trace.registerApplication(String, String[])","title":"Explanation"},{"location":"dcomibmenablelegacytracesecurity/#see-also","text":"-Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyLogSecurity","title":"See also"},{"location":"dcomibmgpudisable/","text":"-Dcom.ibm.gpu.disable Restriction: This system property is supported only on Java\u2122 11 and later If you have enabled GPU processing with -Dcom.ibm.gpu.enable , use this system property to turn off processing that can be offloaded to a graphics processing unit (GPU). Syntax -Dcom.ibm.gpu.disable Explanation Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. GPU processing is therefore disabled by default. However, if you have enabled GPU processing with -Dcom.ibm.gpu.enable , this property turns GPU processing off. See also Exploiting GPUs -Dcom.ibm.gpu.enable -Dcom.ibm.gpu.verbose","title":"-Dcom.ibm.gpu.disable"},{"location":"dcomibmgpudisable/#-dcomibmgpudisable","text":"Restriction: This system property is supported only on Java\u2122 11 and later If you have enabled GPU processing with -Dcom.ibm.gpu.enable , use this system property to turn off processing that can be offloaded to a graphics processing unit (GPU).","title":"-Dcom.ibm.gpu.disable"},{"location":"dcomibmgpudisable/#syntax","text":"-Dcom.ibm.gpu.disable","title":"Syntax"},{"location":"dcomibmgpudisable/#explanation","text":"Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. GPU processing is therefore disabled by default. However, if you have enabled GPU processing with -Dcom.ibm.gpu.enable , this property turns GPU processing off.","title":"Explanation"},{"location":"dcomibmgpudisable/#see-also","text":"Exploiting GPUs -Dcom.ibm.gpu.enable -Dcom.ibm.gpu.verbose","title":"See also"},{"location":"dcomibmgpuenable/","text":"-Dcom.ibm.gpu.enable Restriction: This system property is supported only on Java\u2122 11 and later Use this system property to control the type of processing that can be offloaded to a graphics processing unit (GPU) when processing requirements meet a specific threshold. This feature can improve the performance of certain Java functions. Syntax -Dcom.ibm.gpu.enable=[all|sort] Setting Effect all Turns on GPU processing for all possible Java functions. sort Turns on GPU processing only for the Java sort() function. By default, this property is not set. Explanation Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. When set, this property enables GPU processing for any array that meets a minimum size. See also Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.verbose","title":"-Dcom.ibm.gpu.enable"},{"location":"dcomibmgpuenable/#-dcomibmgpuenable","text":"Restriction: This system property is supported only on Java\u2122 11 and later Use this system property to control the type of processing that can be offloaded to a graphics processing unit (GPU) when processing requirements meet a specific threshold. This feature can improve the performance of certain Java functions.","title":"-Dcom.ibm.gpu.enable"},{"location":"dcomibmgpuenable/#syntax","text":"-Dcom.ibm.gpu.enable=[all|sort] Setting Effect all Turns on GPU processing for all possible Java functions. sort Turns on GPU processing only for the Java sort() function. By default, this property is not set.","title":"Syntax"},{"location":"dcomibmgpuenable/#explanation","text":"Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. When set, this property enables GPU processing for any array that meets a minimum size.","title":"Explanation"},{"location":"dcomibmgpuenable/#see-also","text":"Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.verbose","title":"See also"},{"location":"dcomibmgpuverbose/","text":"-Dcom.ibm.gpu.verbose Restriction: This system property is supported only on Java\u2122 11 and later This system property can be used to help identify problems with graphics processing unit (GPU) processing. Syntax -Dcom.ibm.gpu.verbose This property is not set by default. Explanation When specified, this option generates verbose output to STDOUT, which can be piped to a file. See also Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.enable","title":"-Dcom.ibm.gpu.verbose"},{"location":"dcomibmgpuverbose/#-dcomibmgpuverbose","text":"Restriction: This system property is supported only on Java\u2122 11 and later This system property can be used to help identify problems with graphics processing unit (GPU) processing.","title":"-Dcom.ibm.gpu.verbose"},{"location":"dcomibmgpuverbose/#syntax","text":"-Dcom.ibm.gpu.verbose This property is not set by default.","title":"Syntax"},{"location":"dcomibmgpuverbose/#explanation","text":"When specified, this option generates verbose output to STDOUT, which can be piped to a file.","title":"Explanation"},{"location":"dcomibmgpuverbose/#see-also","text":"Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.enable","title":"See also"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/","text":"-Dcom.ibm.lang.management. OperatingSystemMXBean.isCpuTime100ns Changes the unit of the return value of the OperatingSystemMXBean.getProcessCpuTime() method. Syntax -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns=[true|false] Setting Effect Default true Enable false Disable yes Explanation The Oracle java.lang.management package includes MBean categories such as Memory , OperatingSystem , and GarbageCollector . The OpenJ9 VM provides additional MXBeans to extend the monitoring and management capabilities. For example, the OperatingSystemMXBean , which monitors operating system settings such as physical and virtual memory size, processor capacity, and processor utilization. The OperatingSystemMXBean.getProcessCpuTime() method returns a value in nanoseconds (10 -9 s), for compatibility with the com.sun.management.OperatingSystemMXBean and UnixOperatingSystemMXBean interfaces. In earlier VM releases, the return value was in hundreds of nanoseconds. If you want to revert to this behavior, set the -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns property to true . The default value for this property is false . See also com.ibm.lang.management API documentation","title":"-Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#-dcomibmlangmanagementoperatingsystemmxbeaniscputime100ns","text":"Changes the unit of the return value of the OperatingSystemMXBean.getProcessCpuTime() method.","title":"-Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#syntax","text":"-Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns=[true|false] Setting Effect Default true Enable false Disable yes","title":"Syntax"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#explanation","text":"The Oracle java.lang.management package includes MBean categories such as Memory , OperatingSystem , and GarbageCollector . The OpenJ9 VM provides additional MXBeans to extend the monitoring and management capabilities. For example, the OperatingSystemMXBean , which monitors operating system settings such as physical and virtual memory size, processor capacity, and processor utilization. The OperatingSystemMXBean.getProcessCpuTime() method returns a value in nanoseconds (10 -9 s), for compatibility with the com.sun.management.OperatingSystemMXBean and UnixOperatingSystemMXBean interfaces. In earlier VM releases, the return value was in hundreds of nanoseconds. If you want to revert to this behavior, set the -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns property to true . The default value for this property is false .","title":"Explanation"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#see-also","text":"com.ibm.lang.management API documentation","title":"See also"},{"location":"dcomibmlangmanagementverbose/","text":"-Dcom.ibm.lang.management.verbose Enables verbose information from java.lang.management operations to be written to the output channel during VM operations. Syntax -Dcom.ibm.lang.management.verbose There are no options for this system property.","title":"-Dcom.ibm.lang.management.verbose"},{"location":"dcomibmlangmanagementverbose/#-dcomibmlangmanagementverbose","text":"Enables verbose information from java.lang.management operations to be written to the output channel during VM operations.","title":"-Dcom.ibm.lang.management.verbose"},{"location":"dcomibmlangmanagementverbose/#syntax","text":"-Dcom.ibm.lang.management.verbose There are no options for this system property.","title":"Syntax"},{"location":"dcomibmtoolsattachdirectory/","text":"-Dcom.ibm.tools.attach.directory Specify a different common directory for Attach API working files. Syntax -Dcom.ibm.tools.attach.directory=<directory_name> Setting Value Default <directory_name> [string] .com_ibm_tools_attach To change the value for directory_name , specify a different directory name. If the directory does not exist, it is created. However, if a parent directory is specified, it must exist. See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.directory"},{"location":"dcomibmtoolsattachdirectory/#-dcomibmtoolsattachdirectory","text":"Specify a different common directory for Attach API working files.","title":"-Dcom.ibm.tools.attach.directory"},{"location":"dcomibmtoolsattachdirectory/#syntax","text":"-Dcom.ibm.tools.attach.directory=<directory_name> Setting Value Default <directory_name> [string] .com_ibm_tools_attach To change the value for directory_name , specify a different directory name. If the directory does not exist, it is created. However, if a parent directory is specified, it must exist.","title":"Syntax"},{"location":"dcomibmtoolsattachdirectory/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachdisplayname/","text":"-Dcom.ibm.tools.attach.displayName Change the default display name for the target virtual machine. Syntax -Dcom.ibm.tools.attach.displayName=<display_name> Setting Value Default <display_name> [string] The command line invocation used to start the application To change the value for <display_name> , enter a character string of your choice. See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.displayName"},{"location":"dcomibmtoolsattachdisplayname/#-dcomibmtoolsattachdisplayname","text":"Change the default display name for the target virtual machine.","title":"-Dcom.ibm.tools.attach.displayName"},{"location":"dcomibmtoolsattachdisplayname/#syntax","text":"-Dcom.ibm.tools.attach.displayName=<display_name> Setting Value Default <display_name> [string] The command line invocation used to start the application To change the value for <display_name> , enter a character string of your choice.","title":"Syntax"},{"location":"dcomibmtoolsattachdisplayname/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachenable/","text":"-Dcom.ibm.tools.attach.enable Enable the Attach API for this application. Syntax -Dcom.ibm.tools.attach.enable=[yes|no] On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 systems, the following default applies: Value Effect Default yes Enable yes no Disable On z/OS\u00ae systems, the following default applies: Value Effect Default yes Enable no Disable yes Explanation A useful reference for information about the Java\u2122 Attach API can be found at http://docs.oracle.com/javase/8/docs/technotes/guides/attach/index.html . The following extract is taken from the Oracle documentation: The Attach API is an extension that provides a mechanism to attach to a Java virtual machine. A tool written in the Java Language, uses this API to attach to a target virtual machine and load its tool agent into that virtual machine. For example, to late attach the IBM\u00ae Health Center agent to a virtual machine (VM) that is already running. The OpenJ9 implementation of the Attach API is equivalent to the Oracle implementation. However, the OpenJ9 implementation cannot be used to attach to, or accept attach requests from, other VM implementations. See also Support for the Java Attach API -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.enable"},{"location":"dcomibmtoolsattachenable/#-dcomibmtoolsattachenable","text":"Enable the Attach API for this application.","title":"-Dcom.ibm.tools.attach.enable"},{"location":"dcomibmtoolsattachenable/#syntax","text":"-Dcom.ibm.tools.attach.enable=[yes|no] On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 systems, the following default applies: Value Effect Default yes Enable yes no Disable On z/OS\u00ae systems, the following default applies: Value Effect Default yes Enable no Disable yes","title":"Syntax"},{"location":"dcomibmtoolsattachenable/#explanation","text":"A useful reference for information about the Java\u2122 Attach API can be found at http://docs.oracle.com/javase/8/docs/technotes/guides/attach/index.html . The following extract is taken from the Oracle documentation: The Attach API is an extension that provides a mechanism to attach to a Java virtual machine. A tool written in the Java Language, uses this API to attach to a target virtual machine and load its tool agent into that virtual machine. For example, to late attach the IBM\u00ae Health Center agent to a virtual machine (VM) that is already running. The OpenJ9 implementation of the Attach API is equivalent to the Oracle implementation. However, the OpenJ9 implementation cannot be used to attach to, or accept attach requests from, other VM implementations.","title":"Explanation"},{"location":"dcomibmtoolsattachenable/#see-also","text":"Support for the Java Attach API -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachid/","text":"-Dcom.ibm.tools.attach.id Specify a different target virtual machine (VM) to attach to. Syntax -Dcom.ibm.tools.attach.id=<process_ID> Setting Value Default <process_ID> [string] Target VM process ID To use a different target, change the value for <process_ID> . See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.id"},{"location":"dcomibmtoolsattachid/#-dcomibmtoolsattachid","text":"Specify a different target virtual machine (VM) to attach to.","title":"-Dcom.ibm.tools.attach.id"},{"location":"dcomibmtoolsattachid/#syntax","text":"-Dcom.ibm.tools.attach.id=<process_ID> Setting Value Default <process_ID> [string] Target VM process ID To use a different target, change the value for <process_ID> .","title":"Syntax"},{"location":"dcomibmtoolsattachid/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachtimeout/","text":"-Dcom.ibm.tools.attach.timeout Specify a time that an application should wait when attempting to connect to a target virtual machine (VM) before ending. Syntax -Dcom.ibm.tools.attach.timeout=<ms> Setting Value Default <ms> [1 millisecond or greater] 120000 milliseconds (120 seconds) Example To timeout after 60 seconds, specify: -Dcom.ibm.tools.attach.timeout=60000 See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id","title":"-Dcom.ibm.tools.attach.timeout"},{"location":"dcomibmtoolsattachtimeout/#-dcomibmtoolsattachtimeout","text":"Specify a time that an application should wait when attempting to connect to a target virtual machine (VM) before ending.","title":"-Dcom.ibm.tools.attach.timeout"},{"location":"dcomibmtoolsattachtimeout/#syntax","text":"-Dcom.ibm.tools.attach.timeout=<ms> Setting Value Default <ms> [1 millisecond or greater] 120000 milliseconds (120 seconds)","title":"Syntax"},{"location":"dcomibmtoolsattachtimeout/#example","text":"To timeout after 60 seconds, specify: -Dcom.ibm.tools.attach.timeout=60000","title":"Example"},{"location":"dcomibmtoolsattachtimeout/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id","title":"See also"},{"location":"dfileencoding/","text":"-Dfile.encoding Use this OpenJDK property to define the file encoding that is required. Syntax -Dfile.encoding=<value> Setting Value Default <value> [string] Unicode 3.0 standards where <value> defines the file encoding that is required. Explanation By default the GBK converter follows Unicode 3.0 standards. To force the GBK converter to follow Unicode 2.0 standards, use a value of bestfit936 .","title":"-Dfile.encoding"},{"location":"dfileencoding/#-dfileencoding","text":"Use this OpenJDK property to define the file encoding that is required.","title":"-Dfile.encoding"},{"location":"dfileencoding/#syntax","text":"-Dfile.encoding=<value> Setting Value Default <value> [string] Unicode 3.0 standards where <value> defines the file encoding that is required.","title":"Syntax"},{"location":"dfileencoding/#explanation","text":"By default the GBK converter follows Unicode 3.0 standards. To force the GBK converter to follow Unicode 2.0 standards, use a value of bestfit936 .","title":"Explanation"},{"location":"diag_overview/","text":"Diagnostic data and tooling OpenJ9 contains a broad range of diagnostic capabilities to help identify, isolate, and solve run time problems. These capabilities include dump files, verbose logs, and trace files, which are supported by a variety of diagnostic tools and interfaces. Dumps Various types of dumps are produced by default in response to certain events, such as a GPF fault or an OutOfMemoryError exception. You can also trigger the production of dumps by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. All dumps are produced by dump agents, which are initialized when the OpenJ9 VM starts. Different dumps target different areas of the runtime environment. If you want to generate a dump to diagnose a particular type of problem, you need to understand what data the dump will provide. The following dumps are typically used for problem diagnosis: Java dumps ( -Xdump:java ) contain information that relates to the OpenJ9 VM and the Java\u2122 application, such as the operating environment, locks, threads, hooks, shared classes, and class loaders. Heap dumps ( -Xdump:heap ) show the content of the Java heap. System dumps ( -Xdump:system ) contain a raw process image or address space of an application. Other types of dump include binary JIT dumps, stack dumps, and snap dumps. For a complete list of dump agents and the diagnostic data they produce, see Dump agents . Verbose log files Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination. Class data sharing provides a number of -Xshareclasses suboptions to provide detailed data about the content of a shared classes cache, cache I/O activity, and information about the Java Helper API (where used). For example, the -Xshareclasses:printAllStats suboption lists every class in chronological order with a reference to the location from which it was loaded. For more information, see -Xshareclasses . Garbage collection operations can be analyzed by producing verbose output from the -verbose:gc standard option. This output can be redirected to a file by specifying the -Xverbosegclog option. Information can be obtained about GC initialization, stop-the-world processing, finalization, reference processing, and allocation failures. Even more granular information can be obtained with the -Xtgc option. The JIT compiler provides verbose logging, which records all compiler operations. To find out how to enable logging, read the JIT troubleshooting content. Class loader operations can be analyzed by producing verbose output from the -verbose:dynload standard option, which shows detailed information as each class is loaded by the VM. Trace files The OpenJ9 trace facility can be used to trace applications, Java methods, or internal JVM operations with minimal impact on performance. Trace is configured by using the -Xtrace command line option, which allows you to control what is traced and when. Trace data is produced in binary format and must be processed by the OpenJ9 trace formatter to convert it to a readable form. For more information, see Trace formatter . Diagnostic tools A number of diagnostic tools are available with OpenJ9 to assist with the analysis of dump and trace files. Dump extractor The dump extractor ( jextract ) supports a full analysis of core files on specific platforms by collecting key files from a system and packaging them into an archive along with a core dump. This archive file is extremely useful when reporting issues to the OpenJ9 community, helping to ensure a faster analysis and turnaround. For more information, see Dump extractor . Dump viewer Because system dumps are binary files, OpenJ9 provides a dump viewer tool ( jdmpview ) to analyze the contents. This tool can work with dumps from any platforms independently of a system debugger. For more information, see Dump viewer . Trace formatter The trace formatter tool converts binary trace point data in a trace file into a readable format for analysis. For more information, see Trace formatter . Option builder OpenJ9 contains an extensive set of command-line options to assist with problem diagnosis. Certain options are complex, containing many sub-options with numerous parameters. Whilst these offer a great degree of flexibility, the syntax can be difficult to construct. Option builder tools are available that provide a simple graphical user interface to help you construct your command-line argument. For more information, see Option builder . HotSpot-compatible tools A number of tools are available for compatibility with the reference implementation. These tools are independently implemented by OpenJ9 but have similar functions, allowing users to migrate more easily. The available tools are listed in the Tools section. Note: If you are already familiar with tools that are provided with HotSpot, see Switching to OpenJ9 , which explains some of the differences you might encounter when using OpenJ9. Eclipse marketplace tools OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center. Interfaces JVM tool interface (JVMTI) OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information, see Java Virtual Machine Tool Interface . DTFJ Interface OpenJ9 includes the Diagnostic Tool Framework for Java (DTFJ) API. Custom applications can be written that use this API to access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information, see Diagnostic Tool Framework for Java . java.lang.management API OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center. JPDA tools OpenJ9 is compliant with the Java Platform Debugging Architecture (JPDA), which means you can use any JPDA tool for diagnosis, including Eclipse JDT Debug .","title":"Overview"},{"location":"diag_overview/#diagnostic-data-and-tooling","text":"OpenJ9 contains a broad range of diagnostic capabilities to help identify, isolate, and solve run time problems. These capabilities include dump files, verbose logs, and trace files, which are supported by a variety of diagnostic tools and interfaces.","title":"Diagnostic data and tooling"},{"location":"diag_overview/#dumps","text":"Various types of dumps are produced by default in response to certain events, such as a GPF fault or an OutOfMemoryError exception. You can also trigger the production of dumps by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. All dumps are produced by dump agents, which are initialized when the OpenJ9 VM starts. Different dumps target different areas of the runtime environment. If you want to generate a dump to diagnose a particular type of problem, you need to understand what data the dump will provide. The following dumps are typically used for problem diagnosis: Java dumps ( -Xdump:java ) contain information that relates to the OpenJ9 VM and the Java\u2122 application, such as the operating environment, locks, threads, hooks, shared classes, and class loaders. Heap dumps ( -Xdump:heap ) show the content of the Java heap. System dumps ( -Xdump:system ) contain a raw process image or address space of an application. Other types of dump include binary JIT dumps, stack dumps, and snap dumps. For a complete list of dump agents and the diagnostic data they produce, see Dump agents .","title":"Dumps"},{"location":"diag_overview/#verbose-log-files","text":"Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination. Class data sharing provides a number of -Xshareclasses suboptions to provide detailed data about the content of a shared classes cache, cache I/O activity, and information about the Java Helper API (where used). For example, the -Xshareclasses:printAllStats suboption lists every class in chronological order with a reference to the location from which it was loaded. For more information, see -Xshareclasses . Garbage collection operations can be analyzed by producing verbose output from the -verbose:gc standard option. This output can be redirected to a file by specifying the -Xverbosegclog option. Information can be obtained about GC initialization, stop-the-world processing, finalization, reference processing, and allocation failures. Even more granular information can be obtained with the -Xtgc option. The JIT compiler provides verbose logging, which records all compiler operations. To find out how to enable logging, read the JIT troubleshooting content. Class loader operations can be analyzed by producing verbose output from the -verbose:dynload standard option, which shows detailed information as each class is loaded by the VM.","title":"Verbose log files"},{"location":"diag_overview/#trace-files","text":"The OpenJ9 trace facility can be used to trace applications, Java methods, or internal JVM operations with minimal impact on performance. Trace is configured by using the -Xtrace command line option, which allows you to control what is traced and when. Trace data is produced in binary format and must be processed by the OpenJ9 trace formatter to convert it to a readable form. For more information, see Trace formatter .","title":"Trace files"},{"location":"diag_overview/#diagnostic-tools","text":"A number of diagnostic tools are available with OpenJ9 to assist with the analysis of dump and trace files.","title":"Diagnostic tools"},{"location":"diag_overview/#dump-extractor","text":"The dump extractor ( jextract ) supports a full analysis of core files on specific platforms by collecting key files from a system and packaging them into an archive along with a core dump. This archive file is extremely useful when reporting issues to the OpenJ9 community, helping to ensure a faster analysis and turnaround. For more information, see Dump extractor .","title":"Dump extractor"},{"location":"diag_overview/#dump-viewer","text":"Because system dumps are binary files, OpenJ9 provides a dump viewer tool ( jdmpview ) to analyze the contents. This tool can work with dumps from any platforms independently of a system debugger. For more information, see Dump viewer .","title":"Dump viewer"},{"location":"diag_overview/#trace-formatter","text":"The trace formatter tool converts binary trace point data in a trace file into a readable format for analysis. For more information, see Trace formatter .","title":"Trace formatter"},{"location":"diag_overview/#option-builder","text":"OpenJ9 contains an extensive set of command-line options to assist with problem diagnosis. Certain options are complex, containing many sub-options with numerous parameters. Whilst these offer a great degree of flexibility, the syntax can be difficult to construct. Option builder tools are available that provide a simple graphical user interface to help you construct your command-line argument. For more information, see Option builder .","title":"Option builder"},{"location":"diag_overview/#hotspot-compatible-tools","text":"A number of tools are available for compatibility with the reference implementation. These tools are independently implemented by OpenJ9 but have similar functions, allowing users to migrate more easily. The available tools are listed in the Tools section. Note: If you are already familiar with tools that are provided with HotSpot, see Switching to OpenJ9 , which explains some of the differences you might encounter when using OpenJ9.","title":"HotSpot-compatible tools"},{"location":"diag_overview/#eclipse-marketplace-tools","text":"OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center.","title":"Eclipse marketplace tools"},{"location":"diag_overview/#interfaces","text":"","title":"Interfaces"},{"location":"diag_overview/#jvm-tool-interface-jvmti","text":"OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information, see Java Virtual Machine Tool Interface .","title":"JVM tool interface (JVMTI)"},{"location":"diag_overview/#dtfj-interface","text":"OpenJ9 includes the Diagnostic Tool Framework for Java (DTFJ) API. Custom applications can be written that use this API to access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information, see Diagnostic Tool Framework for Java .","title":"DTFJ Interface"},{"location":"diag_overview/#javalangmanagement-api","text":"OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center.","title":"java.lang.management API"},{"location":"diag_overview/#jpda-tools","text":"OpenJ9 is compliant with the Java Platform Debugging Architecture (JPDA), which means you can use any JPDA tool for diagnosis, including Eclipse JDT Debug .","title":"JPDA tools"},{"location":"djavacompiler/","text":"-Djava.compiler This Oracle Hotspot property is used for loading a JIT compiler from a named, native library. This option can be used on the command line to specify the JIT compiler for the OpenJ9 VM. Syntax -Djava.compiler=j9jit29","title":"-Djava.compiler"},{"location":"djavacompiler/#-djavacompiler","text":"This Oracle Hotspot property is used for loading a JIT compiler from a named, native library. This option can be used on the command line to specify the JIT compiler for the OpenJ9 VM.","title":"-Djava.compiler"},{"location":"djavacompiler/#syntax","text":"-Djava.compiler=j9jit29","title":"Syntax"},{"location":"djdknativecbc/","text":"-Djdk.nativeCBC This option enables or disables OpenSSL native cryptographic support for the CBC algorithm. Syntax -Djdk.nativeCBC=[true|false] Setting value Default -Djdk.nativeCBC true yes -Djdk.nativeCBC false Explanation OpenSSL support is enabled by default for the CBC algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeCBC"},{"location":"djdknativecbc/#-djdknativecbc","text":"This option enables or disables OpenSSL native cryptographic support for the CBC algorithm.","title":"-Djdk.nativeCBC"},{"location":"djdknativecbc/#syntax","text":"-Djdk.nativeCBC=[true|false] Setting value Default -Djdk.nativeCBC true yes -Djdk.nativeCBC false","title":"Syntax"},{"location":"djdknativecbc/#explanation","text":"OpenSSL support is enabled by default for the CBC algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativechacha20/","text":"-Djdk.nativeChaCha20 This option enables or disables OpenSSL native cryptographic support for the ChaCha20 and ChaCha20-Poly1305 algorithms. Restrictions: These algorithms are not supported on Java 8. These algorithms are not supported on OpenSSL 1.0.x. Syntax -Djdk.nativeChaCha20=[true|false] Setting value Default -Djdk.nativeChaCha20 true yes -Djdk.nativeChaCha20 false Explanation OpenSSL support is enabled by default for the ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off support for these algorithms only, set this option to false . To turn off support for these and other algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeChaCha20"},{"location":"djdknativechacha20/#-djdknativechacha20","text":"This option enables or disables OpenSSL native cryptographic support for the ChaCha20 and ChaCha20-Poly1305 algorithms. Restrictions: These algorithms are not supported on Java 8. These algorithms are not supported on OpenSSL 1.0.x.","title":"-Djdk.nativeChaCha20"},{"location":"djdknativechacha20/#syntax","text":"-Djdk.nativeChaCha20=[true|false] Setting value Default -Djdk.nativeChaCha20 true yes -Djdk.nativeChaCha20 false","title":"Syntax"},{"location":"djdknativechacha20/#explanation","text":"OpenSSL support is enabled by default for the ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off support for these algorithms only, set this option to false . To turn off support for these and other algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativecrypto/","text":"-Djdk.nativeCrypto This option controls the use of OpenSSL native cryptographic support. Syntax -Djdk.nativeCrypto=[true|false] Setting value Default -Djdk.nativeCrypto true yes -Djdk.nativeCrypto false Explanation OpenSSL support is enabled by default for the Digest, CBC, GCM, RSA, and ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off the OpenSSL implementation, set this option to false . Restriction: The ChaCha20 and ChaCha20-Poly1305 algorithms are not supported on Java 8. If you want to turn off the algorithms individually, use the following system properties: -Djdk.nativeCBC -Djdk.nativeChaCha20 ( Not supported on Java 8. ) -Djdk.nativeGCM -Djdk.nativeRSA -Djdk.nativeDigest","title":"-Djdk.nativeCrypto"},{"location":"djdknativecrypto/#-djdknativecrypto","text":"This option controls the use of OpenSSL native cryptographic support.","title":"-Djdk.nativeCrypto"},{"location":"djdknativecrypto/#syntax","text":"-Djdk.nativeCrypto=[true|false] Setting value Default -Djdk.nativeCrypto true yes -Djdk.nativeCrypto false","title":"Syntax"},{"location":"djdknativecrypto/#explanation","text":"OpenSSL support is enabled by default for the Digest, CBC, GCM, RSA, and ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off the OpenSSL implementation, set this option to false . Restriction: The ChaCha20 and ChaCha20-Poly1305 algorithms are not supported on Java 8. If you want to turn off the algorithms individually, use the following system properties: -Djdk.nativeCBC -Djdk.nativeChaCha20 ( Not supported on Java 8. ) -Djdk.nativeGCM -Djdk.nativeRSA -Djdk.nativeDigest","title":"Explanation"},{"location":"djdknativedigest/","text":"-Djdk.nativeDigest This option enables or disables OpenSSL native cryptographic support for the Digest algorithm. Syntax -Djdk.nativeDigest=[true|false] Setting value Default -Djdk.nativeDigest true yes -Djdk.nativeDigest false Explanation To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeDigest"},{"location":"djdknativedigest/#-djdknativedigest","text":"This option enables or disables OpenSSL native cryptographic support for the Digest algorithm.","title":"-Djdk.nativeDigest"},{"location":"djdknativedigest/#syntax","text":"-Djdk.nativeDigest=[true|false] Setting value Default -Djdk.nativeDigest true yes -Djdk.nativeDigest false","title":"Syntax"},{"location":"djdknativedigest/#explanation","text":"To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativegcm/","text":"-Djdk.nativeGCM This option enables or disables OpenSSL native cryptographic support for the GCM algorithm. Syntax -Djdk.nativeGCM=[true|false] Setting value Default -Djdk.nativeGCM true yes -Djdk.nativeGCM false Explanation OpenSSL support is enabled by default for the GCM algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeGCM"},{"location":"djdknativegcm/#-djdknativegcm","text":"This option enables or disables OpenSSL native cryptographic support for the GCM algorithm.","title":"-Djdk.nativeGCM"},{"location":"djdknativegcm/#syntax","text":"-Djdk.nativeGCM=[true|false] Setting value Default -Djdk.nativeGCM true yes -Djdk.nativeGCM false","title":"Syntax"},{"location":"djdknativegcm/#explanation","text":"OpenSSL support is enabled by default for the GCM algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativersa/","text":"-Djdk.nativeRSA This option enables or disables OpenSSL native cryptographic support for the RSA algorithm. Syntax -Djdk.nativeRSA=[true|false] Setting value Default -Djdk.nativeRSA true yes -Djdk.nativeRSA false Explanation OpenSSL support is enabled by default for the RSA algorithm. If you want to turn off support for this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeRSA"},{"location":"djdknativersa/#-djdknativersa","text":"This option enables or disables OpenSSL native cryptographic support for the RSA algorithm.","title":"-Djdk.nativeRSA"},{"location":"djdknativersa/#syntax","text":"-Djdk.nativeRSA=[true|false] Setting value Default -Djdk.nativeRSA true yes -Djdk.nativeRSA false","title":"Syntax"},{"location":"djdknativersa/#explanation","text":"OpenSSL support is enabled by default for the RSA algorithm. If you want to turn off support for this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"dump_heapdump/","text":"Heap dump Heap dumps contain a snapshot of all the live objects that are being used by a running Java application on the Java heap. There are two formats for heap dumps; the classic format, which is ascii text and the PHD format, which is compressed and not readable. A heap dump contains a list of all object instances. For each object instance you can find the following additional data: The object address The type or class name The size Any references to other objects For a visual analysis of a heap dump as an aid to problem determination, use the Eclipse Memory Analyzer tool (MAT) or the IBM Memory Analyzer tool . Both tools require the Diagnostic Tool Framework for Java (DTFJ) plugin. To install the DTFJ plugin in the Eclipse IDE, select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java For more information about using the Heapdump feature, see Using Heapdump . See also Using DTFJ","title":"Heap dump"},{"location":"dump_heapdump/#heap-dump","text":"Heap dumps contain a snapshot of all the live objects that are being used by a running Java application on the Java heap. There are two formats for heap dumps; the classic format, which is ascii text and the PHD format, which is compressed and not readable. A heap dump contains a list of all object instances. For each object instance you can find the following additional data: The object address The type or class name The size Any references to other objects For a visual analysis of a heap dump as an aid to problem determination, use the Eclipse Memory Analyzer tool (MAT) or the IBM Memory Analyzer tool . Both tools require the Diagnostic Tool Framework for Java (DTFJ) plugin. To install the DTFJ plugin in the Eclipse IDE, select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java For more information about using the Heapdump feature, see Using Heapdump .","title":"Heap dump"},{"location":"dump_heapdump/#see-also","text":"Using DTFJ","title":"See also"},{"location":"dump_javadump/","text":"Java dump Java dumps, sometimes referred to as Java cores , are produced when the VM ends unexpectedly because of an operating system signal, OutOfMemoryError , or a user-initiated keystroke combination. You can also generate a Java dump by calling the Dump API programmatically from your application or specifying the -Xdump:java option on the command line. If your Java application crashes or hangs, Java dumps can provide useful information to help you diagnose the root cause. If your application crashes, Java dumps are generated automatically for the following types of failure: the VM receives an unexpected signal or an assertion failure the VM runs out of memory If your application hangs, you can trigger the generation of a Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. Note: On Windows, if you started the VM in a console window you can force the VM to produce a Java dump in response to a SIGBREAK signal (Ctrl-Break keyboard combination). If you didn't start in a console window there is no equivalent to a Linux kill command on Windows for sending signals. The only option here is to trigger a full system dump by finding the VM process in the Processes tab of the Windows Task Manager and clicking Create dump file . To help you understand how a Java dump can help you with problem diagnosis, this topic includes a few scenarios to help you interpret the data: A crash caused by a general protection fault (gpf) A Java heap OutOfMemoryError (OOM) A native OutOfMemoryError (OOM) A deadlock situation A hang Java dump contents Java dumps summarize the state of the VM when the event occurs, with most of the information relating to components of the VM. The file is made up of a number of sections that provide different types of information. TITLE The first section of the Java dump file provides information about the event that triggered the production of the dump. In the following example you can see that a vmstop event triggered the dump at a specified date and time. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"vmstop\" (00000002) Detail \"#0000000000000000\" received 1TIDATETIME Date: 2018/08/30 at 21:55:47:607 1TINANOTIME System nanotime: 22012355276134 1TIFILENAME Javacore filename: /home/doc-javacore/javacore.20180830.215547.30285.0001.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x106 (vm_access+exclusive_vm_access+trace_disabled) GPINFO The GPINFO section provides general information about the system that the VM is running on. The following example is taken from a Java dump that was generated on a Linux system. NULL ------------------------------------------------------------------------ 0SECTION GPINFO subcomponent dump routine NULL ================================ 2XHOSLEVEL OS Level : Linux 3.10.0-862.11.6.el7.x86_64 2XHCPUS Processors - 3XHCPUARCH Architecture : amd64 3XHNUMCPUS How Many : 4 3XHNUMASUP NUMA is either not supported or has been disabled by user NULL 1XHERROR2 Register dump section only produced for SIGSEGV, SIGILL or SIGFPE. NULL The content of this section can vary, depending on the cause of the dump. For example, if the dump was caused by a general protection fault (gpf), the library in which the crash occurred is also recorded, together with a value shown as VM flags . This value can provide some clues about which component of the VM might have been involved. Look for the following line in the output: 1XHFLAGS VM flags:0000000000000000 The hexadecimal number recorded for VM flags ends in MSSSS, where M is the VM component and SSSS is component-specific code as shown in the following table: Component Code value INTERPRETER 0x10000 GC 0x20000 GROW_STACK 0x30000 JNI 0x40000 JIT_CODEGEN 0x50000 BCVERIFY 0x60000 RTVERIFY 0x70000 SHAREDCLASSES 0x80000 A value of 0000000000000000 (0x00000) indicates that a crash occurred outside of the VM. ENVINFO This section contains useful information about the environment in which the crash took place, including the following data: Java version ( 1CIJAVAVERSION ) OpenJ9 VM and subcomponent version information ( 1CIVMVERSION , 1CIJ9VMVERSION , 1CIJITVERSION , 1CIOMRVERSION , 1CIJCLVERSION ) VM start time ( 1CISTARTTIME ) and process information ( 1CIPROCESSID ) Java home ( 1CIJAVAHOMEDIR ) and DLL ( 1CIJAVADLLDIR ) directories User arguments passed on the command line ( 1CIUSERARG ) User limits imposed by the system ( 1CIUSERLIMITS ) Environment variables in place ( 1CIENVVARS ) System information ( 1CISYSINFO ) CPU information ( 1CICPUINFO ) Control group (Cgroup) information ( 1CICGRPINFO ) For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION ENVINFO subcomponent dump routine NULL ================================= 1CIJAVAVERSION JRE 9 Linux amd64-64 (build 9.0.4-internal+0-adhoc..openj9-openjdk-jdk9) 1CIVMVERSION 20180830_000000 1CIJ9VMVERSION 8e7c6ec 1CIJITVERSION 8e7c6ec 1CIOMRVERSION 553811b_CMPRSS 1CIJCLVERSION ec1d223 based on jdk-9.0.4+12 1CIJITMODES JIT enabled, AOT enabled, FSD disabled, HCR enabled 1CIRUNNINGAS Running as a standalone JVM 1CIVMIDLESTATE VM Idle State: ACTIVE 1CICONTINFO Running in container : FALSE 1CICGRPINFO JVM support for cgroups enabled : TRUE 1CISTARTTIME JVM start time: 2018/08/30 at 21:55:47:387 1CISTARTNANO JVM start nanotime: 22012135233549 1CIPROCESSID Process ID: 30285 (0x764D) 1CICMDLINE [not available] 1CIJAVAHOMEDIR Java Home Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk 1CIJAVADLLDIR Java DLL Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/bin 1CISYSCP Sys Classpath: 1CIUSERARGS UserArgs: 2CIUSERARG -Xoptionsfile=/home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/options.default ... NULL 1CIUSERLIMITS User Limits (in bytes except for NOFILE and NPROC) NULL ------------------------------------------------------------------------ NULL type soft limit hard limit 2CIUSERLIMIT RLIMIT_AS unlimited unlimited 2CIUSERLIMIT RLIMIT_CORE 0 unlimited 2CIUSERLIMIT RLIMIT_CPU unlimited unlimited 2CIUSERLIMIT RLIMIT_DATA unlimited unlimited 2CIUSERLIMIT RLIMIT_FSIZE unlimited unlimited 2CIUSERLIMIT RLIMIT_LOCKS unlimited unlimited 2CIUSERLIMIT RLIMIT_MEMLOCK 65536 65536 2CIUSERLIMIT RLIMIT_NOFILE 4096 4096 2CIUSERLIMIT RLIMIT_NPROC 4096 30592 2CIUSERLIMIT RLIMIT_RSS unlimited unlimited 2CIUSERLIMIT RLIMIT_STACK 8388608 unlimited 2CIUSERLIMIT RLIMIT_MSGQUEUE 819200 819200 2CIUSERLIMIT RLIMIT_NICE 0 0 2CIUSERLIMIT RLIMIT_RTPRIO 0 0 2CIUSERLIMIT RLIMIT_SIGPENDING 30592 30592 NULL 1CIENVVARS Environment Variables NULL ------------------------------------------------------------------------ 2CIENVVAR XDG_VTNR=1 2CIENVVAR SSH_AGENT_PID=2653 ... NULL 1CISYSINFO System Information NULL ------------------------------------------------------------------------ 2CISYSINFO /proc/sys/kernel/core_pattern = core 2CISYSINFO /proc/sys/kernel/core_uses_pid = 1 NULL 1CICPUINFO CPU Information NULL ------------------------------------------------------------------------ 2CIPHYSCPU Physical CPUs: 4 2CIONLNCPU Online CPUs: 4 2CIBOUNDCPU Bound CPUs: 4 2CIACTIVECPU Active CPUs: 0 2CITARGETCPU Target CPUs: 4 NULL 1CICGRPINFO Cgroup Information NULL ------------------------------------------------------------------------ 2CICGRPINFO subsystem : cpu 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU Period : 100000 microseconds 3CICGRPINFO CPU Quota : Not Set 3CICGRPINFO CPU Shares : 1024 3CICGRPINFO Period intervals elapsed count : 0 3CICGRPINFO Throttled count : 0 3CICGRPINFO Total throttle time : 0 nanoseconds 2CICGRPINFO subsystem : cpuset 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU exclusive : 1 3CICGRPINFO Mem exclusive : 1 3CICGRPINFO CPUs : 0-3 3CICGRPINFO Mems : 0 2CICGRPINFO subsystem : memory 2CICGRPINFO cgroup name : / 3CICGRPINFO Memory Limit : Not Set 3CICGRPINFO Memory + Swap Limit : Not Set 3CICGRPINFO Memory Usage : 5363396608 bytes 3CICGRPINFO Memory + Swap Usage : 5363396608 bytes 3CICGRPINFO Memory Max Usage : 0 bytes 3CICGRPINFO Memory + Swap Max Usage : 0 bytes 3CICGRPINFO Memory limit exceeded count : 0 3CICGRPINFO Memory + Swap limit exceeded count : 0 3CICGRPINFO OOM Killer Disabled : 0 3CICGRPINFO Under OOM : 0 NULL NATIVEMEMINFO This section records information about native memory that is requested by using library functions such as malloc() and mmap() . Values are provided as a breakdown, per component, indicating the total number of bytes allocated and the number of native memory allocations. In the following example, 4,682,840 bytes of native memory are allocated (but not yet freed) to VM Classes, which corresponds to 141 allocations. NULL ------------------------------------------------------------------------ 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 2,569,088,312 bytes / 4653 allocations 1MEMUSER | 2MEMUSER +--VM: 2,280,088,336 bytes / 2423 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 4,682,840 bytes / 141 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 2,054,966,784 bytes / 433 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 2,014,113,792 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 40,852,992 bytes / 432 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,970,016 bytes / 156 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 197,760 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 155,424 bytes / 123 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 180,056 bytes / 263 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,776 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 36,184 bytes / 52 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 208,179,632 bytes / 72 allocations 3MEMUSER | | | 4MEMUSER | | +--Unused <32bit allocation regions: 208,168,752 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,880 bytes / 71 allocations 2MEMUSER | | 3MEMUSER | +--Other: 1,055,048 bytes / 1293 allocations 1MEMUSER | 2MEMUSER +--JIT: 288,472,816 bytes / 140 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 268,435,456 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 2,097,216 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 17,940,144 bytes / 138 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 13,432 bytes / 25 allocations 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 13,432 bytes / 25 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 3,184 bytes / 13 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 1,056 bytes / 12 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Other: 2,128 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,248 bytes / 12 allocations 1MEMUSER | 2MEMUSER +--Unknown: 513,728 bytes / 2065 allocations NULL This section does not record memory that is allocated by application or JNI code and is typically a little less than the value recorded by operating system tools. MEMINFO This section relates to memory management, providing a breakdown of memory usage in the VM for the object heap, internal memory, memory used for classes, the JIT code cache, and JIT data cache in decimal and hexadecimal format. You can also find out which garbage collection policy is in use when the dump is produced. The object memory area ( 1STHEAPTYPE ) records each memory region in use, its start and end address, and region size. Further information is recorded about the memory segments used for internal memory, class memory, the JIT code cache and JIT data cache ( 1STSEGMENT ). This information includes the address of the segment control data structure, the start and end address of the native memory segment, as well as the segment size. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0x00007FF4F00744A0 -- -- -- Generational 1STHEAPREGION 0x00007FF4F0074CE0 0x0000000087F40000 0x0000000088540000 0x0000000000600000 Generational/Tenured Region 1STHEAPREGION 0x00007FF4F0074930 0x00000000FFE00000 0x00000000FFF00000 0x0000000000100000 Generational/Nursery Region 1STHEAPREGION 0x00007FF4F0074580 0x00000000FFF00000 0x0000000100000000 0x0000000000100000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 8388608 (0x0000000000800000) 1STHEAPINUSE Total memory in use: 2030408 (0x00000000001EFB48) 1STHEAPFREE Total memory free: 6358200 (0x00000000006104B8) NULL 1STSEGTYPE Internal Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F004CBC8 0x00007FF4CD33C000 0x00007FF4CD33C000 0x00007FF4CE33C000 0x01000440 0x0000000001000000 1STSEGMENT 0x00007FF4F004CB08 0x00007FF4DE43D030 0x00007FF4DE517770 0x00007FF4DE53D030 0x00800040 0x0000000000100000 NULL 1STSEGTOTAL Total memory: 17825792 (0x0000000001100000) 1STSEGINUSE Total memory in use: 894784 (0x00000000000DA740) 1STSEGFREE Total memory free: 16931008 (0x00000000010258C0) NULL 1STSEGTYPE Class Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F03B5638 0x0000000001053D98 0x000000000105BD98 0x000000000105BD98 0x00010040 0x0000000000008000 1STSEGMENT 0x00007FF4F03B5578 0x0000000001048188 0x0000000001050188 0x0000000001050188 0x00010040 0x0000000000008000 ... NULL 1STSEGTOTAL Total memory: 3512520 (0x00000000003598C8) 1STSEGINUSE Total memory in use: 3433944 (0x00000000003465D8) 1STSEGFREE Total memory free: 78576 (0x00000000000132F0) NULL 1STSEGTYPE JIT Code Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F00961F8 0x00007FF4CE43D000 0x00007FF4CE445790 0x00007FF4DE43D000 0x00000068 0x0000000010000000 NULL 1STSEGTOTAL Total memory: 268435456 (0x0000000010000000) 1STSEGINUSE Total memory in use: 34704 (0x0000000000008790) 1STSEGFREE Total memory free: 268400752 (0x000000000FFF7870) 1STSEGLIMIT Allocation limit: 268435456 (0x0000000010000000) NULL 1STSEGTYPE JIT Data Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F0096668 0x00007FF4CC553030 0x00007FF4CC753030 0x00007FF4CC753030 0x00000048 0x0000000000200000 NULL 1STSEGTOTAL Total memory: 2097152 (0x0000000000200000) 1STSEGINUSE Total memory in use: 2097152 (0x0000000000200000) 1STSEGFREE Total memory free: 0 (0x0000000000000000) 1STSEGLIMIT Allocation limit: 402653184 (0x0000000018000000) NULL 1STGCHTYPE GC History NULL In the example, the GC History ( 1STGCHTYPE ) section is blank. This section is populated if a garbage collection cycle occurred in a VM that is being diagnosed with the trace facility. LOCKS This section of the Java dump provides information about locks, which protect shared resources from being accessed by more than one entity at a time. The information is essential in a deadlock situation, where two threads attempt to synchronize on an object and lock an instance of a class. Precise information is recorded about the threads that are causing the problem, which enables you to identify the root cause. The following example shows a typical LOCKS section, where no deadlocks existed at the time the dump was triggered. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 3 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x00007FF4B0001D78 infl_mon_t: 0x00007FF4B0001DF8: 3LKMONOBJECT java/lang/ref/ReferenceQueue@0x00000000FFE26A10: <unowned> 3LKNOTIFYQ Waiting to be notified: 3LKWAITNOTIFY \"Common-Cleaner\" (J9VMThread:0x0000000000FD0100) NULL 1LKREGMONDUMP JVM System Monitor Dump (registered monitors): 2LKREGMON Thread global lock (0x00007FF4F0004FE8): <unowned> 2LKREGMON &(PPG_mem_mem32_subAllocHeapMem32.monitor) lock (0x00007FF4F0005098): <unowned> 2LKREGMON NLS hash table lock (0x00007FF4F0005148): <unowned> ... NULL THREADS The THREADS section of a Java dump file provides summary information about the VM thread pool and detailed information about Java threads, native threads, and stack traces. Understanding the content of this section can help you diagnose problems that are caused by blocked or waiting threads. A Java thread runs on a native thread. Several lines are recorded for each Java thread in the Thread Details subsection, which include the following key pieces of information: 3XMTHREADINFO : The thread name, address information for the VM thread structures and Java thread object, the thread state, and thread priority. 3XMJAVALTHREAD : The Java thread ID and daemon status from the thread object. 3XMTHREADINFO1 : The native operating system thread ID, priority, scheduling policy, internal VM thread state, and VM thread flags. 3XMTHREADINFO2 : The native stack address range. 3XMTHREADINFO3 : Java callstack information ( 4XESTACKTRACE ) or Native call stack information ( 4XENATIVESTACK ). 5XESTACKTRACE : This line indicates whether locks were taken by a specific method. Java thread priorities are mapped to operating system priority values. Thread states are shown in the following table: Thread state value Status Description R Runnable The thread is able to run CW Condition Wait The thread is waiting S Suspended The thread is suspended by another thread Z Zombie The thread is destroyed P Parked The thread is parked by java.util.concurrent B Blocked The thread is waiting to obtain a lock For threads that are parked (P), blocked (B), or waiting (CW), an additional line ( 3XMTHREADBLOCK ) is included in the output that shows what the thread is parked on, blocked on, or waiting for. For clarity, the following example shows a shortened version of a typical THREADS section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 18 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMTHDINFO Thread Details NULL 3XMTHREADINFO \"JIT Diagnostic Compilation Thread-7 Suspended\" J9VMThread:0x0000000000EFC500, omrthread_t:0x00007FF4F00A77E8, java/lang/Thread:0x00000000FFE97480, state:R, prio=10 3XMJAVALTHREAD (java/lang/Thread getId:0xA, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7657, native priority:0xB, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CCC36000, to:0x00007FF4CCD36000, size:0x100000) 3XMCPUTIME CPU usage total: 0.000037663 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 3XMTHREADINFO \"Common-Cleaner\" J9VMThread:0x0000000000FD0100, omrthread_t:0x00007FF4F022A520, java/lang/Thread:0x00000000FFE26F40, state:CW, prio=8 3XMJAVALTHREAD (java/lang/Thread getId:0x2, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x765A, native priority:0x8, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00080181) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CC0B8000, to:0x00007FF4CC0F8000, size:0x40000) 3XMCPUTIME CPU usage total: 0.000150926 secs, current category=\"Application\" 3XMTHREADBLOCK Waiting on: java/lang/ref/ReferenceQueue@0x00000000FFE26A10 Owned by: <unowned> 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Object.wait(Native Method) 4XESTACKTRACE at java/lang/Object.wait(Object.java:221) 4XESTACKTRACE at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:138) 5XESTACKTRACE (entered lock: java/lang/ref/ReferenceQueue@0x00000000FFE26A10, entry count: 1) 4XESTACKTRACE at jdk/internal/ref/CleanerImpl.run(CleanerImpl.java:148) 4XESTACKTRACE at java/lang/Thread.run(Thread.java:835) 4XESTACKTRACE at jdk/internal/misc/InnocuousThread.run(InnocuousThread.java:122) 3XMTHREADINFO3 No native callstack available for this thread NULL NULL 3XMTHREADINFO \"IProfiler\" J9VMThread:0x0000000000F03D00, omrthread_t:0x00007FF4F00B06F8, java/lang/Thread:0x00000000FFE97B60, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0xC, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7659, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4F8940000, to:0x00007FF4F8960000, size:0x20000) 3XMCPUTIME CPU usage total: 0.004753103 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 1XMWLKTHDERR The following was reported while collecting native stacks: 2XMWLKTHDERR unable to count threads(3, -2) NULL 1XMTHDSUMMARY Threads CPU Usage Summary NULL ========================= NULL 1XMTHDCATINFO Warning: to get more accurate CPU times for the GC, the option -XX:-ReduceCPUMonitorOverhead can be used. See the user guide for more information. NULL 1XMTHDCATEGORY All JVM attached threads: 0.280083000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--System-JVM: 0.270814000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--GC: 0.000599000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--JIT: 0.071904000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--Application: 0.009269000 secs NULL HOOKS This section shows internal VM event callbacks, which are used for diagnosing performance problems in the VM. Multiple hook interfaces are listed, which include their individual hook events. The following example shows data for the J9VMHookInterface , including the total time for all previous events, the call site location (<source file>:<line number>), start time, and duration of the last callback and the longest callback (all times measured in microseconds). The hook data is reset after each Java dump. NULL ------------------------------------------------------------------------ SECTION HOOK subcomponent dump routine NULL ========================= 1NOTE These data are reset every time a javacore is taken 1HKINTERFACE MM_OMRHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_PrivateHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_HookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9VMHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 1 3HKCALLCOUNT 1239 3HKTOTALTIME 219564us 3HKLAST Last Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T00:15:14.664 4HKDURATION Duration : 16us 3HKLONGST Longest Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T21:28:34.895 4HKDURATION Duration : 5012us NULL ... 1HKINTERFACE J9VMZipCachePoolHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9JITHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 3 3HKCALLCOUNT 3113 3HKTOTALTIME 4904us 3HKLAST Last Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:04:15.320 4HKDURATION Duration : 3us 3HKLONGST Longest Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:37:17.633 4HKDURATION Duration : 27us NULL ... SHARED CLASSES If the shared classes cache is enabled at run time, the information provided in a Java dump file describes settings that were used when creating the cache, together with summary information about the size and content of the cache. In the following example, the shared classes cache was created with a Class Debug Area ( -Xnolinenumbers=false ). Byte code instrumentation (BCI) is enabled, which is the default, and VMs sharing the cache are allowed to store classpaths, which is also the default. The Cache Summary shows a cache size ( 2SCLTEXTCSZ ) of 16776608 bytes, with a soft maximum size ( 2SCLTEXTSMB ) also of 16776608 bytes, which leaves 12691668 bytes of free space ( 2SCLTEXTFRB ). The size of the Class Debug Area ( 2SCLTEXTDAS ) is 1331200 bytes and only 11% of this space is used. In the Cache Memory Status subsection, the line 2SCLTEXTCMDT indicates the name and location of the shared cache and cr indicates that the cache is a 64-bit compressed references cache. NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = true NULL 2SCLTEXTRCS ROMClass start address = 0x00007F423061C000 2SCLTEXTRCE ROMClass end address = 0x00007F42307B9A28 2SCLTEXTMSA Metadata start address = 0x00007F42313D42FC 2SCLTEXTCEA Cache end address = 0x00007F4231600000 2SCLTEXTRTF Runtime flags = 0x00102001ECA6028B 2SCLTEXTCGN Cache generation = 35 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 12691668 2SCLTEXTRCB ROMClass bytes = 1694248 2SCLTEXTAOB AOT code bytes = 0 2SCLTEXTADB AOT data bytes = 0 2SCLTEXTAHB AOT class hierarchy bytes = 32 2SCLTEXTATB AOT thunk bytes = 0 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJHB JIT hint bytes = 308 2SCLTEXTJPB JIT profile bytes = 2296 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 919328 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 2SCLTEXTMDA Metadata bytes = 23448 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 11% 2SCLTEXTDAN Class LineNumberTable bytes = 156240 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 595 2SCLTEXTNAM Number AOT Methods = 0 2SCLTEXTNAD Number AOT Data Entries = 0 2SCLTEXTNAH Number AOT Class Hierarchy = 1 2SCLTEXTNAT Number AOT Thunks = 0 2SCLTEXTNJH Number JIT Hints = 14 2SCLTEXTNJP Number JIT Profiles = 20 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 5 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0% NULL 2SCLTEXTCPF Cache is 24% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT sharedcc_doc-javacore CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_sharedcc_doc-javacore_G35 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL The following example shows information for a layered cache: NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCSTL Cache Statistics for Top Layer NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = false NULL 2SCLTEXTRCS ROMClass start address = 0x00007F0EDB567000 2SCLTEXTRCE ROMClass end address = 0x00007F0EDB567000 2SCLTEXTMSA Metadata start address = 0x00007F0EDC40241C 2SCLTEXTCEA Cache end address = 0x00007F0EDC54B000 2SCLTEXTRTF Runtime flags = 0x80102001ECA602BB 2SCLTEXTCGN Cache generation = 41 2SCLTEXTCLY Cache layer = 1 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 15315996 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 0% 2SCLTEXTDAN Class LineNumberTable bytes = 0 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTCPF Cache is 8% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT Cache1 CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_Cache1_G41L01 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL 1SCLTEXTCSAL Cache Statistics for All Layers NULL 2SCLTEXTRCB ROMClass bytes = 1459040 2SCLTEXTAOB AOT code bytes = 57624 2SCLTEXTADB AOT data bytes = 272 2SCLTEXTAHB AOT class hierarchy bytes = 1840 2SCLTEXTATB AOT thunk bytes = 632 2SCLTEXTJHB JIT hint bytes = 484 2SCLTEXTJPB JIT profile bytes = 0 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 1134016 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 503 2SCLTEXTNAM Number AOT Methods = 16 2SCLTEXTNAD Number AOT Data Entries = 1 2SCLTEXTNAH Number AOT Class Hierarchy = 28 2SCLTEXTNAT Number AOT Thunks = 11 2SCLTEXTNJH Number JIT Hints = 15 2SCLTEXTNJP Number JIT Profiles = 0 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 21 2SCLTEXTNSH Number Startup Hint Entries = 0 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0% CLASSES The classes section shows information about class loaders. The first part is a summary that records each available class loader ( 2CLTEXTCLLOADER ) followed by the number of libraries and classes that it loaded. This information is followed by a more detailed list of libraries ( 1CLTEXTCLLIB ) and classes ( 1CLTEXTCLLO ) that are loaded. In the example you can see that the java/lang/InternalAnonymousClassLoader loaded 2 classes, jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) and jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) . NULL ------------------------------------------------------------------------ 0SECTION CLASSES subcomponent dump routine NULL ================================= 1CLTEXTCLLOS Classloader summaries 1CLTEXTCLLSS 12345678: 1=primordial,2=extension,3=shareable,4=middleware,5=system,6=trusted,7=application,8=delegating 2CLTEXTCLLOADER p---st-- Loader *System*(0x00000000FFE1D258) 3CLNMBRLOADEDLIB Number of loaded libraries 5 3CLNMBRLOADEDCL Number of loaded classes 638 2CLTEXTCLLOADER -x--st-- Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 2CLTEXTCLLOADER ----st-- Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 2 2CLTEXTCLLOADER -----ta- Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0), Parent jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 1CLTEXTCLLIB ClassLoader loaded libraries 2CLTEXTCLLIB Loader *System*(0x00000000FFE1D258) 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/jclse9_29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/java 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/j9jit29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/zip 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/nio 1CLTEXTCLLOD ClassLoader loaded classes 2CLTEXTCLLOAD Loader *System*(0x00000000FFE1D258) 3CLTEXTCLASS [Ljava/lang/Thread$State;(0x0000000001056400) ... 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 2CLTEXTCLLOAD Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0) Scenarios General Protection Fault In this scenario, a Java application has crashed due to a General Protection Fault (GPF), automatically generating a Java dump file. The first section of the file (TITLE) tells you that the GPF triggered the Java dump. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"gpf\" (00002000) received 1TIDATETIME Date: 2018/09/24 at 15:18:03:115 1TINANOTIME System nanotime: 4498949283020796 1TIFILENAME Javacore filename: /home/test/JNICrasher/javacore.20180924.151801.29399.0002.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x100 (trace_disabled) 1TIPREPINFO Exclusive VM access not taken: data may not be consistent across javacore sections To troubleshoot this problem, you need to know which thread caused the GPF to occur. The thread that was running at the time of the crash is reported as the current thread in the THREADS section of the Java dump. Here is an extract from the THREADS section: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 15 2XMPOOLDAEMON Current total number of live daemon threads: 14 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60E00, omrthread_t:0xB6B049D8, java/lang/Thread:0xB55444D0, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x72D8, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00000000) 3XMTHREADINFO2 (native stack address range from:0xB6CE3000, to:0xB74E4000, size:0x801000) 3XMCPUTIME CPU usage total: 0.319865924 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=778008 (0xBDF18) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at JNICrasher.doSomethingThatCrashes(Native Method) 4XESTACKTRACE at JNICrasher.main(JNICrasher.java:7) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C6F663 [libj9prt29.so+0x3b663]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6F1CE [libj9prt29.so+0x3b1ce]) 4XENATIVESTACK (0xB6C6F2C6 [libj9prt29.so+0x3b2c6]) 4XENATIVESTACK (0xB6C6ED93 [libj9prt29.so+0x3ad93]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6ED07 [libj9prt29.so+0x3ad07]) 4XENATIVESTACK (0xB6C6AA3D [libj9prt29.so+0x36a3d]) 4XENATIVESTACK (0xB6C6C3A4 [libj9prt29.so+0x383a4]) 4XENATIVESTACK (0xB667FA19 [libj9dmp29.so+0xfa19]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66878CF [libj9dmp29.so+0x178cf]) 4XENATIVESTACK (0xB6688083 [libj9dmp29.so+0x18083]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6680C0D [libj9dmp29.so+0x10c0d]) 4XENATIVESTACK (0xB667F9D7 [libj9dmp29.so+0xf9d7]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB668B02F [libj9dmp29.so+0x1b02f]) 4XENATIVESTACK (0xB668B4D3 [libj9dmp29.so+0x1b4d3]) 4XENATIVESTACK (0xB66740F1 [libj9dmp29.so+0x40f1]) 4XENATIVESTACK (0xB66726FA [libj9dmp29.so+0x26fa]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66726A9 [libj9dmp29.so+0x26a9]) 4XENATIVESTACK (0xB6676AE4 [libj9dmp29.so+0x6ae4]) 4XENATIVESTACK (0xB668D75A [libj9dmp29.so+0x1d75a]) 4XENATIVESTACK (0xB6A28DD4 [libj9vm29.so+0x81dd4]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A289EE [libj9vm29.so+0x819ee]) 4XENATIVESTACK (0xB6A29A40 [libj9vm29.so+0x82a40]) 4XENATIVESTACK (0xB6C52B6A [libj9prt29.so+0x1eb6a]) 4XENATIVESTACK __kernel_rt_sigreturn+0x0 (0xB7747410) 4XENATIVESTACK (0xB75330B6 [libffi29.so+0x50b6]) 4XENATIVESTACK ffi_raw_call+0xad (0xB7531C53 [libffi29.so+0x3c53]) 4XENATIVESTACK (0xB69BE4AB [libj9vm29.so+0x174ab]) 4XENATIVESTACK (0xB6A665BC [libj9vm29.so+0xbf5bc]) 4XENATIVESTACK (0xB6A15552 [libj9vm29.so+0x6e552]) 4XENATIVESTACK (0xB6A30894 [libj9vm29.so+0x89894]) 4XENATIVESTACK (0xB6A6F169 [libj9vm29.so+0xc8169]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A6F1FA [libj9vm29.so+0xc81fa]) 4XENATIVESTACK (0xB6A30994 [libj9vm29.so+0x89994]) 4XENATIVESTACK (0xB6A2CE4C [libj9vm29.so+0x85e4c]) 4XENATIVESTACK (0xB770487D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7719F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB763543E [libc.so.6+0xee43e]) The extract tells you that the current thread was java/lang/Thread , and information is provided about the Java callstack and native callstack ( 3XMTHREADINFO3 ) at the point at which the crash occurred. To simulate a crash caused by a bug in an application, this example calls a JNI method whose native implementation causes a crash. The Java callstack shows the call to the JNI native method ( JNIcrasher ), and the native callstack shows the point of failure. In this example, the native call stack does not include any function names to help you isolate the error in the native code. You can get this information from a system dump, which is usually produced alongside the Java dump. Open the system dump with the Dump viewer and use the info thread command to print the Java and native stack for the current thread. Java OutOfMemoryError In this scenario, the Java heap runs out of memory, causing an OutOfMemoryError , which automatically generates a Java dump file. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for Java heap space. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"Java heap space\" received 1TIDATETIME Date: 2018/09/14 at 15:29:42:709 1TINANOTIME System nanotime: 3635648876608448 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.152929.18885.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) The MEMINFO section records how much memory is allocated to the Java heap ( 1STHEAPTYPE Object Memory ), how much is in use, and how much is free. Solving your problem might be as simple as setting a larger heap size when you start your application. If you don't know what size the Java heap was set to, you might find that information in the ENVINFO section, which records the command line options that were used when the application started. Look or search for the 1CIUSERARGS UserArgs: string and review the entries recorded for all lines that start 2CIUSERARG . The Java heap size is set by the -Xmx option. If the size has not been set on the command line by -Xmx , the default value applies, which you can find in Default Settings . In this scenario the solution to the problem is not an adjustment to the Java heap size. Here is the MEMINFO section: 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0xB6B49D20 -- -- -- Generational 1STHEAPREGION 0xB6B4A078 0x95750000 0xB5470000 0x1FD20000 Generational/Tenured Region 1STHEAPREGION 0xB6B49F10 0xB5470000 0xB54C0000 0x00050000 Generational/Nursery Region 1STHEAPREGION 0xB6B49DA8 0xB54C0000 0xB5750000 0x00290000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 536870912 (0x20000000) 1STHEAPINUSE Total memory in use: 302603160 (0x12095B98) 1STHEAPFREE Total memory free: 234267752 (0x0DF6A468) The output shows that only 56% of the Java heap is in use, so this suggests that the application is trying to do something sub-optimal. To investigate further you need to work out which thread was the current thread when the OOM occurred to see what it was trying to do. As in the previous scenario, you can find the current thread in the THREADS section. Here is an extract from the output: 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60C00, omrthread_t:0xB6B049D8, java/lang/Thread:0x95764520, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x49C6, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6CB5000, to:0xB74B6000, size:0x801000) 3XMCPUTIME CPU usage total: 8.537823831 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/StringBuffer.ensureCapacityImpl(StringBuffer.java:696) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:486(Compiled Code)) 5XESTACKTRACE (entered lock: java/lang/StringBuffer@0x957645B8, entry count: 1) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:428(Compiled Code)) 4XESTACKTRACE at HeapBreaker.main(HeapBreaker.java:34(Compiled Code)) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C535B3 [libj9prt29.so+0x3b5b3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C5311E [libj9prt29.so+0x3b11e]) 4XENATIVESTACK (0xB6C53216 [libj9prt29.so+0x3b216]) 4XENATIVESTACK (0xB6C52CE3 [libj9prt29.so+0x3ace3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C52C57 [libj9prt29.so+0x3ac57]) 4XENATIVESTACK (0xB6C4E9CD [libj9prt29.so+0x369cd]) 4XENATIVESTACK (0xB6C502FA [libj9prt29.so+0x382fa]) To simulate a Java OutOfMemoryError , this example application repeatedly appends characters to a StringBuffer object in an infinite loop. The Java callstack shows the HeapBreaker.main method appending characters ( java/lang/StringGuffer.append ) until the method java/lang/StringBuffer.ensureCapacityImpl() throws the OutOfMemoryError . StringBuffer objects are wrappers for character arrays ( char[] ) and when the capacity of the underlying array is reached, the contents are automatically copied into a new, larger array. The new array is created in the StringBuffer.ensureCapacity() method, which more or less doubles the size of the old array. In this scenario, the array takes up all the remaining space in the Java heap. The MEMINFO section of the Java dump file can also tell you when an unexpectedly large allocation request causes an OOM. Look for the GC History ( 1STGCHTYPE ) section, which details allocation requests that trigger GC activity. In the sample output you can see that a large allocation request ( requestedbytes=603979784 ) triggered a global GC. When the GC could not free up sufficient space in the heap to satisfy the request, the allocation failure generated the OOM. 1STGCHTYPE GC History 3STHSTTYPE 14:29:29:580239000 GMT j9mm.101 - J9AllocateIndexableObject() returning NULL! 0 bytes requested for object of class B6BBC300 from memory space 'Generational' id=B6B49D20 3STHSTTYPE 14:29:29:579916000 GMT j9mm.134 - Allocation failure end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579905000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579859000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:579807000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:579776000 GMT j9mm.137 - Compact end: bytesmoved=301989896 3STHSTTYPE 14:29:29:313899000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:313555000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:310772000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:310765000 GMT j9mm.94 - Class unloading end: classloadersunloaded=0 classesunloaded=0 3STHSTTYPE 14:29:29:310753000 GMT j9mm.60 - Class unloading start 3STHSTTYPE 14:29:29:310750000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:306013000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:305957000 GMT j9mm.474 - GlobalGC start: globalcount=9 3STHSTTYPE 14:29:29:305888000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:305837000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:305808000 GMT j9mm.137 - Compact end: bytesmoved=189784 3STHSTTYPE 14:29:29:298042000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:297695000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:291696000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:291692000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:284994000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:284941000 GMT j9mm.474 - GlobalGC start: globalcount=8 3STHSTTYPE 14:29:29:284916000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:284914000 GMT j9mm.469 - Allocation failure cycle start: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:284893000 GMT j9mm.470 - Allocation failure cycle end: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:284858000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=2 flipbytes=64 newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:284140000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:283160000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=335 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:283123000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:283120000 GMT j9mm.469 - Allocation failure cycle start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:283117000 GMT j9mm.133 - Allocation failure start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:269762000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269751000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269718000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:268981000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:268007000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=334 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:267969000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:267966000 GMT j9mm.469 - Allocation failure cycle start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:267963000 GMT j9mm.133 - Allocation failure start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:249015000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:249003000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:248971000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 Although the Java code that was used in this scenario deliberately triggered an OutOfMemoryError in a pronounced way, similar allocation issues can and do occur when dealing with large data sets such as XML files. The next step in diagnosing the problem is to open the system dump that gets generated automatically when an OutOfMemoryError occurs. Open the dump with the Eclipse Memory Analyzer tool (MAT) and search for the StringBuffer object, which should provide further clues about what went wrong. A common example is seeing the same String duplicated over and over again, which might indicate that code is stuck in a loop. Note: If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > If, unlike the previous scenario, you receive an OutOfMemoryError and the MEMINFO section shows that there is very little space left on the Java heap, the current thread information is typically not important. The current thread is simply the thread that happened to be current when the space ran out. In this situation you might want to increase your Java heap size. For help with this task, see How to do heap sizing . Native OutOfMemoryError In this scenario, the VM runs out of native memory. Native memory is memory that is used by the VM for storing all virtualized resources and data that it needs for VM operations. Native memory that is available to the VM process is limited by the operating system. The native memory available to the VM might also be subject to additional limits imposed by the operating system, for example Unix ulimits . When a NativeOutOfMemoryError occurs, a Java dump is generated by default. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for native memory. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"native memory exhausted\" received 1TIDATETIME Date: 2018/09/14 at 15:49:55:887 1TINANOTIME System nanotime: 3636862054495675 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.154814.19708.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) Sometimes, the current thread is responsible for causing the NativeOutOfMemoryError . Information about the current thread can be found in the THREADS section, as shown in the following output. 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6C60C00, omrthread_t:0xB6C049D8, java/lang/Thread:0xB55E3C10, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x4CFD, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6D4E000, to:0xB754F000, size:0x801000) 3XMCPUTIME CPU usage total: 3.654896026 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at sun/misc/Unsafe.allocateDBBMemory(Native Method) 4XESTACKTRACE at java/nio/DirectByteBuffer.<init>(DirectByteBuffer.java:127(Compiled Code)) 4XESTACKTRACE at java/nio/ByteBuffer.allocateDirect(ByteBuffer.java:311) 4XESTACKTRACE at NativeHeapBreaker.main(NativeHeapBreaker.java:9) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6A9F5B3 [libj9prt29.so+0x3b5b3]) ... 4XENATIVESTACK (0xB582CC9C [libjclse7b_29.so+0x40c9c]) 4XENATIVESTACK Java_sun_misc_Unsafe_allocateDBBMemory+0x88 (0xB5827F6B [libjclse7b_29.so+0x3bf6b]) 4XENATIVESTACK (0x94A2084A [<unknown>+0x0]) 4XENATIVESTACK (0xB6B2538B [libj9vm29.so+0x6c38b]) 4XENATIVESTACK (0xB6B4074C [libj9vm29.so+0x8774c]) 4XENATIVESTACK (0xB6B7F299 [libj9vm29.so+0xc6299]) 4XENATIVESTACK (0xB6A82F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6B7F32A [libj9vm29.so+0xc632a]) 4XENATIVESTACK (0xB6B4084C [libj9vm29.so+0x8784c]) 4XENATIVESTACK (0xB6B3CD0C [libj9vm29.so+0x83d0c]) 4XENATIVESTACK (0xB776F87D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7784F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB76A043E [libc.so.6+0xee43e]) For clarity in the Native callstack output, ... indicates that some lines are removed. The Java callstack shows the transition from Java to native code ( sun/misc/Unsafe.allocateDBBMemory(Native Method) ), indicating a request for Direct Byte Buffer (DBB) storage. DBB storage is backed by native memory, with the Java heap containing only a reference to the native heap buffer. In this scenario, DBB storage is the likely culprit for this NativeOutOfMemoryError . The next step is to investigate the NATIVEMEMINFO section of the Java dump file, which reports the amount of memory used by the JRE process, broken down into component areas. 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 3,166,386,688 bytes / 4388 allocations 1MEMUSER | 2MEMUSER +--VM: 563,176,824 bytes / 1518 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 3,104,416 bytes / 120 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 548,181,888 bytes / 398 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 536,932,352 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 11,249,536 bytes / 397 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,817,120 bytes / 147 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 115,584 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 84,704 bytes / 114 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 163,688 bytes / 268 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,320 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 23,296 bytes / 55 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 8,576 bytes / 74 allocations 2MEMUSER | | 3MEMUSER | +--Other: 860,520 bytes / 443 allocations 1MEMUSER | 2MEMUSER +--JIT: 3,744,728 bytes / 122 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 2,097,152 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 524,336 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 1,123,240 bytes / 120 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 2,599,463,024 bytes / 2732 allocations 2MEMUSER | | 3MEMUSER | +--Harmony Class Libraries: 1,024 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 2,599,462,000 bytes / 2731 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 2,598,510,480 bytes / 2484 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 2,598,510,480 bytes / 2484 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 951,520 bytes / 247 allocations 1MEMUSER | 2MEMUSER +--Unknown: 2,112 bytes / 16 allocations NULL In the VM Class Libraries section, the amount of memory allocated for Direct Byte Buffers is shown. Because the NativeOutOfMemoryError was received on a small 32-bit system, a value of 2,598,510,480 bytes indicates that the operating system has run out of memory. On a larger UNIX system, the process might have run out of memory because of the ulimit setting. Increasing the value for ulimit might avoid the error, which you can do temporarily by setting ulimit -f unlimited in your current session. The theoretical maximum size for a 32-bit process is the size of the 32-bit address space, which is 4 GB. On most operating systems a portion of the address space for each process is used by the kernel, such that the real limit for 32-bit processes is actually significantly less than 4GB. As a result, running out of native memory with a 32-bit VM is quite common. The same 4 GB limit is also important if you are using a 64-bit VM with compressed references. In compressed references mode, all references to objects, classes, threads, and monitors are represented by 32-bit values for performance reasons, so these structures can be allocated only at 32-bit addresses. However, the operating system might place other allocations within this 4 GB of address space, and if this area becomes sufficiently full or fragmented, the VM throws a native NativeOutOfMemoryError error. These errors typically occur when the VM tries to create a new thread or load a class. The Current Thread History section should contain more information about what the thread was doing at the VM level when the NativeOutOfMemoryError error occurred. You can usually avoid this type of problem by using the -Xmcrs option to reserve a contiguous area of memory within the lowest 4GB of memory at VM startup. Another common cause of a NativeOutOfMemoryError is when an application loads duplicate classes. Classes are allocated outside of the Java heap in native memory. If the value reported for Classes in the NATIVEMEMINFO section is very large, duplicate classes might be the cause of your problem. The Eclipse Memory Analyzer Tool (MAT) can tell you if you have duplicate classes by using the Class Loader Explorer feature. Because a system dump is automatically generated as well as a Java dump in response to a NativeOutOfMemoryError , simply open the system dump in MAT to continue your diagnosis. Deadlock Deadlocks occur when two threads attempt to synchronize on an object and lock an instance of a class. When this happens, your application stops responding and hangs. Generating a Java dump file will quickly tell you whether you have a deadlock situation. Trigger the Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. The VM can detect the most common types of deadlock scenario involving Java monitors. If this type of deadlock is detected, information is provided in the LOCKS section. More complex deadlocks, including those that involve a mixture of native mutexes and Java monitors, are not detected. Here is the output from the code that was used to cause a common deadlock scenario: NULL 1LKDEADLOCK Deadlock detected !!! NULL --------------------- NULL 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) 3LKDEADLOCKWTR is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B344 infl_mon_t: 0x08C2B384: 4LKDEADLOCKOBJ java/lang/Object@0xB5666698 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 3\" (0x94507500) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B3A0 infl_mon_t: 0x08C2B3E0: 4LKDEADLOCKOBJ java/lang/Object@0xB5666678 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 1\" (0x92A3EC00) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B2E8 infl_mon_t: 0x08C2B328: 4LKDEADLOCKOBJ java/lang/Object@0xB5666688 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) This output tells you that Worker Thread 2 is waiting for Worker Thread 3 , which is waiting for Worker Thread 1 . Because Worker Thread 1 is also waiting for Worker Thread 2 , there is a deadlock. The next place to look is the output for Java and native stacks, in the THREADS section. By looking at the stack for each of these worker threads you can trace the problem back to specific lines in your application code. In this example, you can see from the following output that for all worker threads, the stack traces ( 4XESTACKTRACE / 5XESTACKTRACE ) indicate a problem in line 35 of the application DeadLockTest.java : 3XMTHREADINFO \"Worker Thread 1\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C2B0, java/lang/Thread:0xB5666778, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52CF, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004365543 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666688 Owned by: \"Worker Thread 2\" (J9VMThread:0x94501D00, java/lang/Thread:0xB56668D0) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666678, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 2\" J9VMThread:0x94501D00, omrthread_t:0x92A3C8F0, java/lang/Thread:0xB56668D0, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x14, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D0, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x946BF000, to:0x94700000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004555580 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666698 Owned by: \"Worker Thread 3\" (J9VMThread:0x94507500, java/lang/Thread:0xB5666A18) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666688, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 3\" J9VMThread:0x94507500, omrthread_t:0x92A3CC10, java/lang/Thread:0xB5666A18, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x15, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D1, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9467E000, to:0x946BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.003657010 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666678 Owned by: \"Worker Thread 1\" (J9VMThread:0x92A3EC00, java/lang/Thread:0xB5666778) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666698, entry count: 1) Hang An application can hang for a number of reasons but the most common cause is excessive global garbage collection (GC) activity, where your application is repeatedly paused because your Java heap has almost run out of memory. You can identify this problem by looking at verbose GC output. Collect this output by specifying the -verbose:gc option. Deadlock situations can also manifest themselves as hangs. For more information on diagnosing this type of problem from a Java dump, see the deadlock scenario. If you have eliminated verbose GC activity and deadlocks, another common hang scenario involves threads that compete and wait for Java object locks. This type of problem can usually be diagnosed by examining a Java dump. The simplest hang scenario involving Java object locks is where a thread acquires a lock that other threads are waiting for, but it doesn't release the lock for some reason. The first place to look in the Java dump output is the LOCKS section. This section lists all the monitors and shows which threads have acquired a lock and which threads are waiting. If the hang is caused by a thread not releasing a lock that other threads need, you can see a list of waiting threads in the output. In this example scenario, the Java dump LOCKS section shows that Worker Thread 0 ( 3LKMONOBJECT ) has acquired a lock and there are 19 other worker threads waiting to obtain the lock. NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 1 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x92711200 infl_mon_t: 0x92711240: 3LKMONOBJECT java/lang/Object@0xB56658D8: Flat locked by \"Worker Thread 0\" (J9VMThread:0x92A3EC00), entry count 1 3LKWAITERQ Waiting to enter: 3LKWAITER \"Worker Thread 1\" (J9VMThread:0x92703F00) 3LKWAITER \"Worker Thread 2\" (J9VMThread:0x92709C00) 3LKWAITER \"Worker Thread 3\" (J9VMThread:0x92710A00) 3LKWAITER \"Worker Thread 4\" (J9VMThread:0x92717F00) 3LKWAITER \"Worker Thread 5\" (J9VMThread:0x9271DC00) 3LKWAITER \"Worker Thread 6\" (J9VMThread:0x92723A00) 3LKWAITER \"Worker Thread 7\" (J9VMThread:0x92729800) 3LKWAITER \"Worker Thread 8\" (J9VMThread:0x92733700) 3LKWAITER \"Worker Thread 9\" (J9VMThread:0x92739400) 3LKWAITER \"Worker Thread 10\" (J9VMThread:0x92740200) 3LKWAITER \"Worker Thread 11\" (J9VMThread:0x92748100) 3LKWAITER \"Worker Thread 12\" (J9VMThread:0x9274DF00) 3LKWAITER \"Worker Thread 13\" (J9VMThread:0x92754D00) 3LKWAITER \"Worker Thread 14\" (J9VMThread:0x9275AA00) 3LKWAITER \"Worker Thread 15\" (J9VMThread:0x92760800) 3LKWAITER \"Worker Thread 16\" (J9VMThread:0x92766600) 3LKWAITER \"Worker Thread 17\" (J9VMThread:0x9276C300) 3LKWAITER \"Worker Thread 18\" (J9VMThread:0x92773100) 3LKWAITER \"Worker Thread 19\" (J9VMThread:0x92778F00) NULL The next step is to determine why Worker Thread 0 is not releasing the lock. The best place to start is the stack trace for this thread, which you can find by searching on the thread name or J9VMThread ID in the THREADS section. The following extract shows the details for \"Worker Thread 0\" (J9VMThread:0x92A3EC00) : NULL 3XMTHREADINFO \"Worker Thread 0\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C280, java/lang/Thread:0xB56668B8, state:CW, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x511F, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000401) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.000211878 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Thread.sleep(Native Method) 4XESTACKTRACE at java/lang/Thread.sleep(Thread.java:941) 4XESTACKTRACE at WorkerThread.doWork(HangTest.java:37) 4XESTACKTRACE at WorkerThread.run(HangTest.java:31) 5XESTACKTRACE (entered lock: java/lang/Object@0xB56658D8, entry count: 1) In the last line of this output you can see where the thread acquired the lock. Working up from this line, you can see that WorkerThread.run was called, which in turn called WorkerThread.doWork . The stack shows that the thread then entered a call to java/lang/Thread.sleep in HangTest.java on line 37, which is preventing the thread from completing its work and releasing the lock. In this example the sleep call was added to induce a hang, but in real-world scenarios the cause could be any blocking operation, such as reading from an input stream or socket. Another possibility is that the thread is waiting for another lock owned by yet another thread. It is important to remember that each Java dump represents a single snapshot in time. You should generate at least three Java dumps separated by a short pause, for example 30 seconds, and compare the output. This comparison tells you whether the threads involved are stuck in a fixed state or whether they are moving. In this example, the threads do not move and the investigation needs to focus on the logic in WorkerThread.doWork to understand why Worker Thread 0 entered the java/lang/Thread.sleep call. Another common scenario is where each Java dump shows a number of threads waiting for a lock owned by another thread, but the list of waiting threads and the lock-owning thread change over time. In this case the cause is likely to be a bottleneck caused by thread contention, where the threads are continually competing for the same lock. In severe cases, the lock is held only for a small amount of time but there are lots of threads trying to obtain it. Because more time is spent handling the lock and scheduling the thread than executing application code, the degradation in performance is manifested as a hang. Thread contention is usually caused by an application design problem. You can use a similar approach to the one used in this scenario to determime which lines of code are responsible for the contention.","title":"Java dump"},{"location":"dump_javadump/#java-dump","text":"Java dumps, sometimes referred to as Java cores , are produced when the VM ends unexpectedly because of an operating system signal, OutOfMemoryError , or a user-initiated keystroke combination. You can also generate a Java dump by calling the Dump API programmatically from your application or specifying the -Xdump:java option on the command line. If your Java application crashes or hangs, Java dumps can provide useful information to help you diagnose the root cause. If your application crashes, Java dumps are generated automatically for the following types of failure: the VM receives an unexpected signal or an assertion failure the VM runs out of memory If your application hangs, you can trigger the generation of a Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. Note: On Windows, if you started the VM in a console window you can force the VM to produce a Java dump in response to a SIGBREAK signal (Ctrl-Break keyboard combination). If you didn't start in a console window there is no equivalent to a Linux kill command on Windows for sending signals. The only option here is to trigger a full system dump by finding the VM process in the Processes tab of the Windows Task Manager and clicking Create dump file . To help you understand how a Java dump can help you with problem diagnosis, this topic includes a few scenarios to help you interpret the data: A crash caused by a general protection fault (gpf) A Java heap OutOfMemoryError (OOM) A native OutOfMemoryError (OOM) A deadlock situation A hang","title":"Java dump"},{"location":"dump_javadump/#java-dump-contents","text":"Java dumps summarize the state of the VM when the event occurs, with most of the information relating to components of the VM. The file is made up of a number of sections that provide different types of information.","title":"Java dump contents"},{"location":"dump_javadump/#title","text":"The first section of the Java dump file provides information about the event that triggered the production of the dump. In the following example you can see that a vmstop event triggered the dump at a specified date and time. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"vmstop\" (00000002) Detail \"#0000000000000000\" received 1TIDATETIME Date: 2018/08/30 at 21:55:47:607 1TINANOTIME System nanotime: 22012355276134 1TIFILENAME Javacore filename: /home/doc-javacore/javacore.20180830.215547.30285.0001.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x106 (vm_access+exclusive_vm_access+trace_disabled)","title":"TITLE"},{"location":"dump_javadump/#gpinfo","text":"The GPINFO section provides general information about the system that the VM is running on. The following example is taken from a Java dump that was generated on a Linux system. NULL ------------------------------------------------------------------------ 0SECTION GPINFO subcomponent dump routine NULL ================================ 2XHOSLEVEL OS Level : Linux 3.10.0-862.11.6.el7.x86_64 2XHCPUS Processors - 3XHCPUARCH Architecture : amd64 3XHNUMCPUS How Many : 4 3XHNUMASUP NUMA is either not supported or has been disabled by user NULL 1XHERROR2 Register dump section only produced for SIGSEGV, SIGILL or SIGFPE. NULL The content of this section can vary, depending on the cause of the dump. For example, if the dump was caused by a general protection fault (gpf), the library in which the crash occurred is also recorded, together with a value shown as VM flags . This value can provide some clues about which component of the VM might have been involved. Look for the following line in the output: 1XHFLAGS VM flags:0000000000000000 The hexadecimal number recorded for VM flags ends in MSSSS, where M is the VM component and SSSS is component-specific code as shown in the following table: Component Code value INTERPRETER 0x10000 GC 0x20000 GROW_STACK 0x30000 JNI 0x40000 JIT_CODEGEN 0x50000 BCVERIFY 0x60000 RTVERIFY 0x70000 SHAREDCLASSES 0x80000 A value of 0000000000000000 (0x00000) indicates that a crash occurred outside of the VM.","title":"GPINFO"},{"location":"dump_javadump/#envinfo","text":"This section contains useful information about the environment in which the crash took place, including the following data: Java version ( 1CIJAVAVERSION ) OpenJ9 VM and subcomponent version information ( 1CIVMVERSION , 1CIJ9VMVERSION , 1CIJITVERSION , 1CIOMRVERSION , 1CIJCLVERSION ) VM start time ( 1CISTARTTIME ) and process information ( 1CIPROCESSID ) Java home ( 1CIJAVAHOMEDIR ) and DLL ( 1CIJAVADLLDIR ) directories User arguments passed on the command line ( 1CIUSERARG ) User limits imposed by the system ( 1CIUSERLIMITS ) Environment variables in place ( 1CIENVVARS ) System information ( 1CISYSINFO ) CPU information ( 1CICPUINFO ) Control group (Cgroup) information ( 1CICGRPINFO ) For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION ENVINFO subcomponent dump routine NULL ================================= 1CIJAVAVERSION JRE 9 Linux amd64-64 (build 9.0.4-internal+0-adhoc..openj9-openjdk-jdk9) 1CIVMVERSION 20180830_000000 1CIJ9VMVERSION 8e7c6ec 1CIJITVERSION 8e7c6ec 1CIOMRVERSION 553811b_CMPRSS 1CIJCLVERSION ec1d223 based on jdk-9.0.4+12 1CIJITMODES JIT enabled, AOT enabled, FSD disabled, HCR enabled 1CIRUNNINGAS Running as a standalone JVM 1CIVMIDLESTATE VM Idle State: ACTIVE 1CICONTINFO Running in container : FALSE 1CICGRPINFO JVM support for cgroups enabled : TRUE 1CISTARTTIME JVM start time: 2018/08/30 at 21:55:47:387 1CISTARTNANO JVM start nanotime: 22012135233549 1CIPROCESSID Process ID: 30285 (0x764D) 1CICMDLINE [not available] 1CIJAVAHOMEDIR Java Home Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk 1CIJAVADLLDIR Java DLL Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/bin 1CISYSCP Sys Classpath: 1CIUSERARGS UserArgs: 2CIUSERARG -Xoptionsfile=/home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/options.default ... NULL 1CIUSERLIMITS User Limits (in bytes except for NOFILE and NPROC) NULL ------------------------------------------------------------------------ NULL type soft limit hard limit 2CIUSERLIMIT RLIMIT_AS unlimited unlimited 2CIUSERLIMIT RLIMIT_CORE 0 unlimited 2CIUSERLIMIT RLIMIT_CPU unlimited unlimited 2CIUSERLIMIT RLIMIT_DATA unlimited unlimited 2CIUSERLIMIT RLIMIT_FSIZE unlimited unlimited 2CIUSERLIMIT RLIMIT_LOCKS unlimited unlimited 2CIUSERLIMIT RLIMIT_MEMLOCK 65536 65536 2CIUSERLIMIT RLIMIT_NOFILE 4096 4096 2CIUSERLIMIT RLIMIT_NPROC 4096 30592 2CIUSERLIMIT RLIMIT_RSS unlimited unlimited 2CIUSERLIMIT RLIMIT_STACK 8388608 unlimited 2CIUSERLIMIT RLIMIT_MSGQUEUE 819200 819200 2CIUSERLIMIT RLIMIT_NICE 0 0 2CIUSERLIMIT RLIMIT_RTPRIO 0 0 2CIUSERLIMIT RLIMIT_SIGPENDING 30592 30592 NULL 1CIENVVARS Environment Variables NULL ------------------------------------------------------------------------ 2CIENVVAR XDG_VTNR=1 2CIENVVAR SSH_AGENT_PID=2653 ... NULL 1CISYSINFO System Information NULL ------------------------------------------------------------------------ 2CISYSINFO /proc/sys/kernel/core_pattern = core 2CISYSINFO /proc/sys/kernel/core_uses_pid = 1 NULL 1CICPUINFO CPU Information NULL ------------------------------------------------------------------------ 2CIPHYSCPU Physical CPUs: 4 2CIONLNCPU Online CPUs: 4 2CIBOUNDCPU Bound CPUs: 4 2CIACTIVECPU Active CPUs: 0 2CITARGETCPU Target CPUs: 4 NULL 1CICGRPINFO Cgroup Information NULL ------------------------------------------------------------------------ 2CICGRPINFO subsystem : cpu 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU Period : 100000 microseconds 3CICGRPINFO CPU Quota : Not Set 3CICGRPINFO CPU Shares : 1024 3CICGRPINFO Period intervals elapsed count : 0 3CICGRPINFO Throttled count : 0 3CICGRPINFO Total throttle time : 0 nanoseconds 2CICGRPINFO subsystem : cpuset 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU exclusive : 1 3CICGRPINFO Mem exclusive : 1 3CICGRPINFO CPUs : 0-3 3CICGRPINFO Mems : 0 2CICGRPINFO subsystem : memory 2CICGRPINFO cgroup name : / 3CICGRPINFO Memory Limit : Not Set 3CICGRPINFO Memory + Swap Limit : Not Set 3CICGRPINFO Memory Usage : 5363396608 bytes 3CICGRPINFO Memory + Swap Usage : 5363396608 bytes 3CICGRPINFO Memory Max Usage : 0 bytes 3CICGRPINFO Memory + Swap Max Usage : 0 bytes 3CICGRPINFO Memory limit exceeded count : 0 3CICGRPINFO Memory + Swap limit exceeded count : 0 3CICGRPINFO OOM Killer Disabled : 0 3CICGRPINFO Under OOM : 0 NULL","title":"ENVINFO"},{"location":"dump_javadump/#nativememinfo","text":"This section records information about native memory that is requested by using library functions such as malloc() and mmap() . Values are provided as a breakdown, per component, indicating the total number of bytes allocated and the number of native memory allocations. In the following example, 4,682,840 bytes of native memory are allocated (but not yet freed) to VM Classes, which corresponds to 141 allocations. NULL ------------------------------------------------------------------------ 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 2,569,088,312 bytes / 4653 allocations 1MEMUSER | 2MEMUSER +--VM: 2,280,088,336 bytes / 2423 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 4,682,840 bytes / 141 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 2,054,966,784 bytes / 433 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 2,014,113,792 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 40,852,992 bytes / 432 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,970,016 bytes / 156 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 197,760 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 155,424 bytes / 123 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 180,056 bytes / 263 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,776 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 36,184 bytes / 52 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 208,179,632 bytes / 72 allocations 3MEMUSER | | | 4MEMUSER | | +--Unused <32bit allocation regions: 208,168,752 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,880 bytes / 71 allocations 2MEMUSER | | 3MEMUSER | +--Other: 1,055,048 bytes / 1293 allocations 1MEMUSER | 2MEMUSER +--JIT: 288,472,816 bytes / 140 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 268,435,456 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 2,097,216 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 17,940,144 bytes / 138 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 13,432 bytes / 25 allocations 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 13,432 bytes / 25 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 3,184 bytes / 13 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 1,056 bytes / 12 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Other: 2,128 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,248 bytes / 12 allocations 1MEMUSER | 2MEMUSER +--Unknown: 513,728 bytes / 2065 allocations NULL This section does not record memory that is allocated by application or JNI code and is typically a little less than the value recorded by operating system tools.","title":"NATIVEMEMINFO"},{"location":"dump_javadump/#meminfo","text":"This section relates to memory management, providing a breakdown of memory usage in the VM for the object heap, internal memory, memory used for classes, the JIT code cache, and JIT data cache in decimal and hexadecimal format. You can also find out which garbage collection policy is in use when the dump is produced. The object memory area ( 1STHEAPTYPE ) records each memory region in use, its start and end address, and region size. Further information is recorded about the memory segments used for internal memory, class memory, the JIT code cache and JIT data cache ( 1STSEGMENT ). This information includes the address of the segment control data structure, the start and end address of the native memory segment, as well as the segment size. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0x00007FF4F00744A0 -- -- -- Generational 1STHEAPREGION 0x00007FF4F0074CE0 0x0000000087F40000 0x0000000088540000 0x0000000000600000 Generational/Tenured Region 1STHEAPREGION 0x00007FF4F0074930 0x00000000FFE00000 0x00000000FFF00000 0x0000000000100000 Generational/Nursery Region 1STHEAPREGION 0x00007FF4F0074580 0x00000000FFF00000 0x0000000100000000 0x0000000000100000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 8388608 (0x0000000000800000) 1STHEAPINUSE Total memory in use: 2030408 (0x00000000001EFB48) 1STHEAPFREE Total memory free: 6358200 (0x00000000006104B8) NULL 1STSEGTYPE Internal Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F004CBC8 0x00007FF4CD33C000 0x00007FF4CD33C000 0x00007FF4CE33C000 0x01000440 0x0000000001000000 1STSEGMENT 0x00007FF4F004CB08 0x00007FF4DE43D030 0x00007FF4DE517770 0x00007FF4DE53D030 0x00800040 0x0000000000100000 NULL 1STSEGTOTAL Total memory: 17825792 (0x0000000001100000) 1STSEGINUSE Total memory in use: 894784 (0x00000000000DA740) 1STSEGFREE Total memory free: 16931008 (0x00000000010258C0) NULL 1STSEGTYPE Class Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F03B5638 0x0000000001053D98 0x000000000105BD98 0x000000000105BD98 0x00010040 0x0000000000008000 1STSEGMENT 0x00007FF4F03B5578 0x0000000001048188 0x0000000001050188 0x0000000001050188 0x00010040 0x0000000000008000 ... NULL 1STSEGTOTAL Total memory: 3512520 (0x00000000003598C8) 1STSEGINUSE Total memory in use: 3433944 (0x00000000003465D8) 1STSEGFREE Total memory free: 78576 (0x00000000000132F0) NULL 1STSEGTYPE JIT Code Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F00961F8 0x00007FF4CE43D000 0x00007FF4CE445790 0x00007FF4DE43D000 0x00000068 0x0000000010000000 NULL 1STSEGTOTAL Total memory: 268435456 (0x0000000010000000) 1STSEGINUSE Total memory in use: 34704 (0x0000000000008790) 1STSEGFREE Total memory free: 268400752 (0x000000000FFF7870) 1STSEGLIMIT Allocation limit: 268435456 (0x0000000010000000) NULL 1STSEGTYPE JIT Data Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F0096668 0x00007FF4CC553030 0x00007FF4CC753030 0x00007FF4CC753030 0x00000048 0x0000000000200000 NULL 1STSEGTOTAL Total memory: 2097152 (0x0000000000200000) 1STSEGINUSE Total memory in use: 2097152 (0x0000000000200000) 1STSEGFREE Total memory free: 0 (0x0000000000000000) 1STSEGLIMIT Allocation limit: 402653184 (0x0000000018000000) NULL 1STGCHTYPE GC History NULL In the example, the GC History ( 1STGCHTYPE ) section is blank. This section is populated if a garbage collection cycle occurred in a VM that is being diagnosed with the trace facility.","title":"MEMINFO"},{"location":"dump_javadump/#locks","text":"This section of the Java dump provides information about locks, which protect shared resources from being accessed by more than one entity at a time. The information is essential in a deadlock situation, where two threads attempt to synchronize on an object and lock an instance of a class. Precise information is recorded about the threads that are causing the problem, which enables you to identify the root cause. The following example shows a typical LOCKS section, where no deadlocks existed at the time the dump was triggered. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 3 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x00007FF4B0001D78 infl_mon_t: 0x00007FF4B0001DF8: 3LKMONOBJECT java/lang/ref/ReferenceQueue@0x00000000FFE26A10: <unowned> 3LKNOTIFYQ Waiting to be notified: 3LKWAITNOTIFY \"Common-Cleaner\" (J9VMThread:0x0000000000FD0100) NULL 1LKREGMONDUMP JVM System Monitor Dump (registered monitors): 2LKREGMON Thread global lock (0x00007FF4F0004FE8): <unowned> 2LKREGMON &(PPG_mem_mem32_subAllocHeapMem32.monitor) lock (0x00007FF4F0005098): <unowned> 2LKREGMON NLS hash table lock (0x00007FF4F0005148): <unowned> ... NULL","title":"LOCKS"},{"location":"dump_javadump/#threads","text":"The THREADS section of a Java dump file provides summary information about the VM thread pool and detailed information about Java threads, native threads, and stack traces. Understanding the content of this section can help you diagnose problems that are caused by blocked or waiting threads. A Java thread runs on a native thread. Several lines are recorded for each Java thread in the Thread Details subsection, which include the following key pieces of information: 3XMTHREADINFO : The thread name, address information for the VM thread structures and Java thread object, the thread state, and thread priority. 3XMJAVALTHREAD : The Java thread ID and daemon status from the thread object. 3XMTHREADINFO1 : The native operating system thread ID, priority, scheduling policy, internal VM thread state, and VM thread flags. 3XMTHREADINFO2 : The native stack address range. 3XMTHREADINFO3 : Java callstack information ( 4XESTACKTRACE ) or Native call stack information ( 4XENATIVESTACK ). 5XESTACKTRACE : This line indicates whether locks were taken by a specific method. Java thread priorities are mapped to operating system priority values. Thread states are shown in the following table: Thread state value Status Description R Runnable The thread is able to run CW Condition Wait The thread is waiting S Suspended The thread is suspended by another thread Z Zombie The thread is destroyed P Parked The thread is parked by java.util.concurrent B Blocked The thread is waiting to obtain a lock For threads that are parked (P), blocked (B), or waiting (CW), an additional line ( 3XMTHREADBLOCK ) is included in the output that shows what the thread is parked on, blocked on, or waiting for. For clarity, the following example shows a shortened version of a typical THREADS section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 18 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMTHDINFO Thread Details NULL 3XMTHREADINFO \"JIT Diagnostic Compilation Thread-7 Suspended\" J9VMThread:0x0000000000EFC500, omrthread_t:0x00007FF4F00A77E8, java/lang/Thread:0x00000000FFE97480, state:R, prio=10 3XMJAVALTHREAD (java/lang/Thread getId:0xA, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7657, native priority:0xB, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CCC36000, to:0x00007FF4CCD36000, size:0x100000) 3XMCPUTIME CPU usage total: 0.000037663 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 3XMTHREADINFO \"Common-Cleaner\" J9VMThread:0x0000000000FD0100, omrthread_t:0x00007FF4F022A520, java/lang/Thread:0x00000000FFE26F40, state:CW, prio=8 3XMJAVALTHREAD (java/lang/Thread getId:0x2, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x765A, native priority:0x8, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00080181) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CC0B8000, to:0x00007FF4CC0F8000, size:0x40000) 3XMCPUTIME CPU usage total: 0.000150926 secs, current category=\"Application\" 3XMTHREADBLOCK Waiting on: java/lang/ref/ReferenceQueue@0x00000000FFE26A10 Owned by: <unowned> 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Object.wait(Native Method) 4XESTACKTRACE at java/lang/Object.wait(Object.java:221) 4XESTACKTRACE at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:138) 5XESTACKTRACE (entered lock: java/lang/ref/ReferenceQueue@0x00000000FFE26A10, entry count: 1) 4XESTACKTRACE at jdk/internal/ref/CleanerImpl.run(CleanerImpl.java:148) 4XESTACKTRACE at java/lang/Thread.run(Thread.java:835) 4XESTACKTRACE at jdk/internal/misc/InnocuousThread.run(InnocuousThread.java:122) 3XMTHREADINFO3 No native callstack available for this thread NULL NULL 3XMTHREADINFO \"IProfiler\" J9VMThread:0x0000000000F03D00, omrthread_t:0x00007FF4F00B06F8, java/lang/Thread:0x00000000FFE97B60, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0xC, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7659, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4F8940000, to:0x00007FF4F8960000, size:0x20000) 3XMCPUTIME CPU usage total: 0.004753103 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 1XMWLKTHDERR The following was reported while collecting native stacks: 2XMWLKTHDERR unable to count threads(3, -2) NULL 1XMTHDSUMMARY Threads CPU Usage Summary NULL ========================= NULL 1XMTHDCATINFO Warning: to get more accurate CPU times for the GC, the option -XX:-ReduceCPUMonitorOverhead can be used. See the user guide for more information. NULL 1XMTHDCATEGORY All JVM attached threads: 0.280083000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--System-JVM: 0.270814000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--GC: 0.000599000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--JIT: 0.071904000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--Application: 0.009269000 secs NULL","title":"THREADS"},{"location":"dump_javadump/#hooks","text":"This section shows internal VM event callbacks, which are used for diagnosing performance problems in the VM. Multiple hook interfaces are listed, which include their individual hook events. The following example shows data for the J9VMHookInterface , including the total time for all previous events, the call site location (<source file>:<line number>), start time, and duration of the last callback and the longest callback (all times measured in microseconds). The hook data is reset after each Java dump. NULL ------------------------------------------------------------------------ SECTION HOOK subcomponent dump routine NULL ========================= 1NOTE These data are reset every time a javacore is taken 1HKINTERFACE MM_OMRHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_PrivateHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_HookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9VMHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 1 3HKCALLCOUNT 1239 3HKTOTALTIME 219564us 3HKLAST Last Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T00:15:14.664 4HKDURATION Duration : 16us 3HKLONGST Longest Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T21:28:34.895 4HKDURATION Duration : 5012us NULL ... 1HKINTERFACE J9VMZipCachePoolHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9JITHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 3 3HKCALLCOUNT 3113 3HKTOTALTIME 4904us 3HKLAST Last Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:04:15.320 4HKDURATION Duration : 3us 3HKLONGST Longest Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:37:17.633 4HKDURATION Duration : 27us NULL ...","title":"HOOKS"},{"location":"dump_javadump/#shared-classes","text":"If the shared classes cache is enabled at run time, the information provided in a Java dump file describes settings that were used when creating the cache, together with summary information about the size and content of the cache. In the following example, the shared classes cache was created with a Class Debug Area ( -Xnolinenumbers=false ). Byte code instrumentation (BCI) is enabled, which is the default, and VMs sharing the cache are allowed to store classpaths, which is also the default. The Cache Summary shows a cache size ( 2SCLTEXTCSZ ) of 16776608 bytes, with a soft maximum size ( 2SCLTEXTSMB ) also of 16776608 bytes, which leaves 12691668 bytes of free space ( 2SCLTEXTFRB ). The size of the Class Debug Area ( 2SCLTEXTDAS ) is 1331200 bytes and only 11% of this space is used. In the Cache Memory Status subsection, the line 2SCLTEXTCMDT indicates the name and location of the shared cache and cr indicates that the cache is a 64-bit compressed references cache. NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = true NULL 2SCLTEXTRCS ROMClass start address = 0x00007F423061C000 2SCLTEXTRCE ROMClass end address = 0x00007F42307B9A28 2SCLTEXTMSA Metadata start address = 0x00007F42313D42FC 2SCLTEXTCEA Cache end address = 0x00007F4231600000 2SCLTEXTRTF Runtime flags = 0x00102001ECA6028B 2SCLTEXTCGN Cache generation = 35 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 12691668 2SCLTEXTRCB ROMClass bytes = 1694248 2SCLTEXTAOB AOT code bytes = 0 2SCLTEXTADB AOT data bytes = 0 2SCLTEXTAHB AOT class hierarchy bytes = 32 2SCLTEXTATB AOT thunk bytes = 0 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJHB JIT hint bytes = 308 2SCLTEXTJPB JIT profile bytes = 2296 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 919328 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 2SCLTEXTMDA Metadata bytes = 23448 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 11% 2SCLTEXTDAN Class LineNumberTable bytes = 156240 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 595 2SCLTEXTNAM Number AOT Methods = 0 2SCLTEXTNAD Number AOT Data Entries = 0 2SCLTEXTNAH Number AOT Class Hierarchy = 1 2SCLTEXTNAT Number AOT Thunks = 0 2SCLTEXTNJH Number JIT Hints = 14 2SCLTEXTNJP Number JIT Profiles = 20 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 5 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0% NULL 2SCLTEXTCPF Cache is 24% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT sharedcc_doc-javacore CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_sharedcc_doc-javacore_G35 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL The following example shows information for a layered cache: NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCSTL Cache Statistics for Top Layer NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = false NULL 2SCLTEXTRCS ROMClass start address = 0x00007F0EDB567000 2SCLTEXTRCE ROMClass end address = 0x00007F0EDB567000 2SCLTEXTMSA Metadata start address = 0x00007F0EDC40241C 2SCLTEXTCEA Cache end address = 0x00007F0EDC54B000 2SCLTEXTRTF Runtime flags = 0x80102001ECA602BB 2SCLTEXTCGN Cache generation = 41 2SCLTEXTCLY Cache layer = 1 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 15315996 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 0% 2SCLTEXTDAN Class LineNumberTable bytes = 0 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTCPF Cache is 8% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT Cache1 CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_Cache1_G41L01 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL 1SCLTEXTCSAL Cache Statistics for All Layers NULL 2SCLTEXTRCB ROMClass bytes = 1459040 2SCLTEXTAOB AOT code bytes = 57624 2SCLTEXTADB AOT data bytes = 272 2SCLTEXTAHB AOT class hierarchy bytes = 1840 2SCLTEXTATB AOT thunk bytes = 632 2SCLTEXTJHB JIT hint bytes = 484 2SCLTEXTJPB JIT profile bytes = 0 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 1134016 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 503 2SCLTEXTNAM Number AOT Methods = 16 2SCLTEXTNAD Number AOT Data Entries = 1 2SCLTEXTNAH Number AOT Class Hierarchy = 28 2SCLTEXTNAT Number AOT Thunks = 11 2SCLTEXTNJH Number JIT Hints = 15 2SCLTEXTNJP Number JIT Profiles = 0 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 21 2SCLTEXTNSH Number Startup Hint Entries = 0 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0%","title":"SHARED CLASSES"},{"location":"dump_javadump/#classes","text":"The classes section shows information about class loaders. The first part is a summary that records each available class loader ( 2CLTEXTCLLOADER ) followed by the number of libraries and classes that it loaded. This information is followed by a more detailed list of libraries ( 1CLTEXTCLLIB ) and classes ( 1CLTEXTCLLO ) that are loaded. In the example you can see that the java/lang/InternalAnonymousClassLoader loaded 2 classes, jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) and jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) . NULL ------------------------------------------------------------------------ 0SECTION CLASSES subcomponent dump routine NULL ================================= 1CLTEXTCLLOS Classloader summaries 1CLTEXTCLLSS 12345678: 1=primordial,2=extension,3=shareable,4=middleware,5=system,6=trusted,7=application,8=delegating 2CLTEXTCLLOADER p---st-- Loader *System*(0x00000000FFE1D258) 3CLNMBRLOADEDLIB Number of loaded libraries 5 3CLNMBRLOADEDCL Number of loaded classes 638 2CLTEXTCLLOADER -x--st-- Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 2CLTEXTCLLOADER ----st-- Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 2 2CLTEXTCLLOADER -----ta- Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0), Parent jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 1CLTEXTCLLIB ClassLoader loaded libraries 2CLTEXTCLLIB Loader *System*(0x00000000FFE1D258) 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/jclse9_29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/java 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/j9jit29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/zip 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/nio 1CLTEXTCLLOD ClassLoader loaded classes 2CLTEXTCLLOAD Loader *System*(0x00000000FFE1D258) 3CLTEXTCLASS [Ljava/lang/Thread$State;(0x0000000001056400) ... 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 2CLTEXTCLLOAD Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0)","title":"CLASSES"},{"location":"dump_javadump/#scenarios","text":"","title":"Scenarios"},{"location":"dump_javadump/#general-protection-fault","text":"In this scenario, a Java application has crashed due to a General Protection Fault (GPF), automatically generating a Java dump file. The first section of the file (TITLE) tells you that the GPF triggered the Java dump. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"gpf\" (00002000) received 1TIDATETIME Date: 2018/09/24 at 15:18:03:115 1TINANOTIME System nanotime: 4498949283020796 1TIFILENAME Javacore filename: /home/test/JNICrasher/javacore.20180924.151801.29399.0002.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x100 (trace_disabled) 1TIPREPINFO Exclusive VM access not taken: data may not be consistent across javacore sections To troubleshoot this problem, you need to know which thread caused the GPF to occur. The thread that was running at the time of the crash is reported as the current thread in the THREADS section of the Java dump. Here is an extract from the THREADS section: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 15 2XMPOOLDAEMON Current total number of live daemon threads: 14 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60E00, omrthread_t:0xB6B049D8, java/lang/Thread:0xB55444D0, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x72D8, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00000000) 3XMTHREADINFO2 (native stack address range from:0xB6CE3000, to:0xB74E4000, size:0x801000) 3XMCPUTIME CPU usage total: 0.319865924 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=778008 (0xBDF18) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at JNICrasher.doSomethingThatCrashes(Native Method) 4XESTACKTRACE at JNICrasher.main(JNICrasher.java:7) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C6F663 [libj9prt29.so+0x3b663]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6F1CE [libj9prt29.so+0x3b1ce]) 4XENATIVESTACK (0xB6C6F2C6 [libj9prt29.so+0x3b2c6]) 4XENATIVESTACK (0xB6C6ED93 [libj9prt29.so+0x3ad93]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6ED07 [libj9prt29.so+0x3ad07]) 4XENATIVESTACK (0xB6C6AA3D [libj9prt29.so+0x36a3d]) 4XENATIVESTACK (0xB6C6C3A4 [libj9prt29.so+0x383a4]) 4XENATIVESTACK (0xB667FA19 [libj9dmp29.so+0xfa19]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66878CF [libj9dmp29.so+0x178cf]) 4XENATIVESTACK (0xB6688083 [libj9dmp29.so+0x18083]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6680C0D [libj9dmp29.so+0x10c0d]) 4XENATIVESTACK (0xB667F9D7 [libj9dmp29.so+0xf9d7]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB668B02F [libj9dmp29.so+0x1b02f]) 4XENATIVESTACK (0xB668B4D3 [libj9dmp29.so+0x1b4d3]) 4XENATIVESTACK (0xB66740F1 [libj9dmp29.so+0x40f1]) 4XENATIVESTACK (0xB66726FA [libj9dmp29.so+0x26fa]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66726A9 [libj9dmp29.so+0x26a9]) 4XENATIVESTACK (0xB6676AE4 [libj9dmp29.so+0x6ae4]) 4XENATIVESTACK (0xB668D75A [libj9dmp29.so+0x1d75a]) 4XENATIVESTACK (0xB6A28DD4 [libj9vm29.so+0x81dd4]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A289EE [libj9vm29.so+0x819ee]) 4XENATIVESTACK (0xB6A29A40 [libj9vm29.so+0x82a40]) 4XENATIVESTACK (0xB6C52B6A [libj9prt29.so+0x1eb6a]) 4XENATIVESTACK __kernel_rt_sigreturn+0x0 (0xB7747410) 4XENATIVESTACK (0xB75330B6 [libffi29.so+0x50b6]) 4XENATIVESTACK ffi_raw_call+0xad (0xB7531C53 [libffi29.so+0x3c53]) 4XENATIVESTACK (0xB69BE4AB [libj9vm29.so+0x174ab]) 4XENATIVESTACK (0xB6A665BC [libj9vm29.so+0xbf5bc]) 4XENATIVESTACK (0xB6A15552 [libj9vm29.so+0x6e552]) 4XENATIVESTACK (0xB6A30894 [libj9vm29.so+0x89894]) 4XENATIVESTACK (0xB6A6F169 [libj9vm29.so+0xc8169]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A6F1FA [libj9vm29.so+0xc81fa]) 4XENATIVESTACK (0xB6A30994 [libj9vm29.so+0x89994]) 4XENATIVESTACK (0xB6A2CE4C [libj9vm29.so+0x85e4c]) 4XENATIVESTACK (0xB770487D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7719F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB763543E [libc.so.6+0xee43e]) The extract tells you that the current thread was java/lang/Thread , and information is provided about the Java callstack and native callstack ( 3XMTHREADINFO3 ) at the point at which the crash occurred. To simulate a crash caused by a bug in an application, this example calls a JNI method whose native implementation causes a crash. The Java callstack shows the call to the JNI native method ( JNIcrasher ), and the native callstack shows the point of failure. In this example, the native call stack does not include any function names to help you isolate the error in the native code. You can get this information from a system dump, which is usually produced alongside the Java dump. Open the system dump with the Dump viewer and use the info thread command to print the Java and native stack for the current thread.","title":"General Protection Fault"},{"location":"dump_javadump/#java-outofmemoryerror","text":"In this scenario, the Java heap runs out of memory, causing an OutOfMemoryError , which automatically generates a Java dump file. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for Java heap space. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"Java heap space\" received 1TIDATETIME Date: 2018/09/14 at 15:29:42:709 1TINANOTIME System nanotime: 3635648876608448 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.152929.18885.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) The MEMINFO section records how much memory is allocated to the Java heap ( 1STHEAPTYPE Object Memory ), how much is in use, and how much is free. Solving your problem might be as simple as setting a larger heap size when you start your application. If you don't know what size the Java heap was set to, you might find that information in the ENVINFO section, which records the command line options that were used when the application started. Look or search for the 1CIUSERARGS UserArgs: string and review the entries recorded for all lines that start 2CIUSERARG . The Java heap size is set by the -Xmx option. If the size has not been set on the command line by -Xmx , the default value applies, which you can find in Default Settings . In this scenario the solution to the problem is not an adjustment to the Java heap size. Here is the MEMINFO section: 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0xB6B49D20 -- -- -- Generational 1STHEAPREGION 0xB6B4A078 0x95750000 0xB5470000 0x1FD20000 Generational/Tenured Region 1STHEAPREGION 0xB6B49F10 0xB5470000 0xB54C0000 0x00050000 Generational/Nursery Region 1STHEAPREGION 0xB6B49DA8 0xB54C0000 0xB5750000 0x00290000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 536870912 (0x20000000) 1STHEAPINUSE Total memory in use: 302603160 (0x12095B98) 1STHEAPFREE Total memory free: 234267752 (0x0DF6A468) The output shows that only 56% of the Java heap is in use, so this suggests that the application is trying to do something sub-optimal. To investigate further you need to work out which thread was the current thread when the OOM occurred to see what it was trying to do. As in the previous scenario, you can find the current thread in the THREADS section. Here is an extract from the output: 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60C00, omrthread_t:0xB6B049D8, java/lang/Thread:0x95764520, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x49C6, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6CB5000, to:0xB74B6000, size:0x801000) 3XMCPUTIME CPU usage total: 8.537823831 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/StringBuffer.ensureCapacityImpl(StringBuffer.java:696) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:486(Compiled Code)) 5XESTACKTRACE (entered lock: java/lang/StringBuffer@0x957645B8, entry count: 1) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:428(Compiled Code)) 4XESTACKTRACE at HeapBreaker.main(HeapBreaker.java:34(Compiled Code)) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C535B3 [libj9prt29.so+0x3b5b3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C5311E [libj9prt29.so+0x3b11e]) 4XENATIVESTACK (0xB6C53216 [libj9prt29.so+0x3b216]) 4XENATIVESTACK (0xB6C52CE3 [libj9prt29.so+0x3ace3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C52C57 [libj9prt29.so+0x3ac57]) 4XENATIVESTACK (0xB6C4E9CD [libj9prt29.so+0x369cd]) 4XENATIVESTACK (0xB6C502FA [libj9prt29.so+0x382fa]) To simulate a Java OutOfMemoryError , this example application repeatedly appends characters to a StringBuffer object in an infinite loop. The Java callstack shows the HeapBreaker.main method appending characters ( java/lang/StringGuffer.append ) until the method java/lang/StringBuffer.ensureCapacityImpl() throws the OutOfMemoryError . StringBuffer objects are wrappers for character arrays ( char[] ) and when the capacity of the underlying array is reached, the contents are automatically copied into a new, larger array. The new array is created in the StringBuffer.ensureCapacity() method, which more or less doubles the size of the old array. In this scenario, the array takes up all the remaining space in the Java heap. The MEMINFO section of the Java dump file can also tell you when an unexpectedly large allocation request causes an OOM. Look for the GC History ( 1STGCHTYPE ) section, which details allocation requests that trigger GC activity. In the sample output you can see that a large allocation request ( requestedbytes=603979784 ) triggered a global GC. When the GC could not free up sufficient space in the heap to satisfy the request, the allocation failure generated the OOM. 1STGCHTYPE GC History 3STHSTTYPE 14:29:29:580239000 GMT j9mm.101 - J9AllocateIndexableObject() returning NULL! 0 bytes requested for object of class B6BBC300 from memory space 'Generational' id=B6B49D20 3STHSTTYPE 14:29:29:579916000 GMT j9mm.134 - Allocation failure end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579905000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579859000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:579807000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:579776000 GMT j9mm.137 - Compact end: bytesmoved=301989896 3STHSTTYPE 14:29:29:313899000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:313555000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:310772000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:310765000 GMT j9mm.94 - Class unloading end: classloadersunloaded=0 classesunloaded=0 3STHSTTYPE 14:29:29:310753000 GMT j9mm.60 - Class unloading start 3STHSTTYPE 14:29:29:310750000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:306013000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:305957000 GMT j9mm.474 - GlobalGC start: globalcount=9 3STHSTTYPE 14:29:29:305888000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:305837000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:305808000 GMT j9mm.137 - Compact end: bytesmoved=189784 3STHSTTYPE 14:29:29:298042000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:297695000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:291696000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:291692000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:284994000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:284941000 GMT j9mm.474 - GlobalGC start: globalcount=8 3STHSTTYPE 14:29:29:284916000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:284914000 GMT j9mm.469 - Allocation failure cycle start: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:284893000 GMT j9mm.470 - Allocation failure cycle end: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:284858000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=2 flipbytes=64 newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:284140000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:283160000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=335 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:283123000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:283120000 GMT j9mm.469 - Allocation failure cycle start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:283117000 GMT j9mm.133 - Allocation failure start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:269762000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269751000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269718000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:268981000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:268007000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=334 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:267969000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:267966000 GMT j9mm.469 - Allocation failure cycle start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:267963000 GMT j9mm.133 - Allocation failure start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:249015000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:249003000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:248971000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 Although the Java code that was used in this scenario deliberately triggered an OutOfMemoryError in a pronounced way, similar allocation issues can and do occur when dealing with large data sets such as XML files. The next step in diagnosing the problem is to open the system dump that gets generated automatically when an OutOfMemoryError occurs. Open the dump with the Eclipse Memory Analyzer tool (MAT) and search for the StringBuffer object, which should provide further clues about what went wrong. A common example is seeing the same String duplicated over and over again, which might indicate that code is stuck in a loop. Note: If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > If, unlike the previous scenario, you receive an OutOfMemoryError and the MEMINFO section shows that there is very little space left on the Java heap, the current thread information is typically not important. The current thread is simply the thread that happened to be current when the space ran out. In this situation you might want to increase your Java heap size. For help with this task, see How to do heap sizing .","title":"Java OutOfMemoryError"},{"location":"dump_javadump/#native-outofmemoryerror","text":"In this scenario, the VM runs out of native memory. Native memory is memory that is used by the VM for storing all virtualized resources and data that it needs for VM operations. Native memory that is available to the VM process is limited by the operating system. The native memory available to the VM might also be subject to additional limits imposed by the operating system, for example Unix ulimits . When a NativeOutOfMemoryError occurs, a Java dump is generated by default. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for native memory. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"native memory exhausted\" received 1TIDATETIME Date: 2018/09/14 at 15:49:55:887 1TINANOTIME System nanotime: 3636862054495675 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.154814.19708.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) Sometimes, the current thread is responsible for causing the NativeOutOfMemoryError . Information about the current thread can be found in the THREADS section, as shown in the following output. 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6C60C00, omrthread_t:0xB6C049D8, java/lang/Thread:0xB55E3C10, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x4CFD, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6D4E000, to:0xB754F000, size:0x801000) 3XMCPUTIME CPU usage total: 3.654896026 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at sun/misc/Unsafe.allocateDBBMemory(Native Method) 4XESTACKTRACE at java/nio/DirectByteBuffer.<init>(DirectByteBuffer.java:127(Compiled Code)) 4XESTACKTRACE at java/nio/ByteBuffer.allocateDirect(ByteBuffer.java:311) 4XESTACKTRACE at NativeHeapBreaker.main(NativeHeapBreaker.java:9) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6A9F5B3 [libj9prt29.so+0x3b5b3]) ... 4XENATIVESTACK (0xB582CC9C [libjclse7b_29.so+0x40c9c]) 4XENATIVESTACK Java_sun_misc_Unsafe_allocateDBBMemory+0x88 (0xB5827F6B [libjclse7b_29.so+0x3bf6b]) 4XENATIVESTACK (0x94A2084A [<unknown>+0x0]) 4XENATIVESTACK (0xB6B2538B [libj9vm29.so+0x6c38b]) 4XENATIVESTACK (0xB6B4074C [libj9vm29.so+0x8774c]) 4XENATIVESTACK (0xB6B7F299 [libj9vm29.so+0xc6299]) 4XENATIVESTACK (0xB6A82F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6B7F32A [libj9vm29.so+0xc632a]) 4XENATIVESTACK (0xB6B4084C [libj9vm29.so+0x8784c]) 4XENATIVESTACK (0xB6B3CD0C [libj9vm29.so+0x83d0c]) 4XENATIVESTACK (0xB776F87D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7784F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB76A043E [libc.so.6+0xee43e]) For clarity in the Native callstack output, ... indicates that some lines are removed. The Java callstack shows the transition from Java to native code ( sun/misc/Unsafe.allocateDBBMemory(Native Method) ), indicating a request for Direct Byte Buffer (DBB) storage. DBB storage is backed by native memory, with the Java heap containing only a reference to the native heap buffer. In this scenario, DBB storage is the likely culprit for this NativeOutOfMemoryError . The next step is to investigate the NATIVEMEMINFO section of the Java dump file, which reports the amount of memory used by the JRE process, broken down into component areas. 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 3,166,386,688 bytes / 4388 allocations 1MEMUSER | 2MEMUSER +--VM: 563,176,824 bytes / 1518 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 3,104,416 bytes / 120 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 548,181,888 bytes / 398 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 536,932,352 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 11,249,536 bytes / 397 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,817,120 bytes / 147 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 115,584 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 84,704 bytes / 114 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 163,688 bytes / 268 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,320 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 23,296 bytes / 55 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 8,576 bytes / 74 allocations 2MEMUSER | | 3MEMUSER | +--Other: 860,520 bytes / 443 allocations 1MEMUSER | 2MEMUSER +--JIT: 3,744,728 bytes / 122 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 2,097,152 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 524,336 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 1,123,240 bytes / 120 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 2,599,463,024 bytes / 2732 allocations 2MEMUSER | | 3MEMUSER | +--Harmony Class Libraries: 1,024 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 2,599,462,000 bytes / 2731 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 2,598,510,480 bytes / 2484 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 2,598,510,480 bytes / 2484 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 951,520 bytes / 247 allocations 1MEMUSER | 2MEMUSER +--Unknown: 2,112 bytes / 16 allocations NULL In the VM Class Libraries section, the amount of memory allocated for Direct Byte Buffers is shown. Because the NativeOutOfMemoryError was received on a small 32-bit system, a value of 2,598,510,480 bytes indicates that the operating system has run out of memory. On a larger UNIX system, the process might have run out of memory because of the ulimit setting. Increasing the value for ulimit might avoid the error, which you can do temporarily by setting ulimit -f unlimited in your current session. The theoretical maximum size for a 32-bit process is the size of the 32-bit address space, which is 4 GB. On most operating systems a portion of the address space for each process is used by the kernel, such that the real limit for 32-bit processes is actually significantly less than 4GB. As a result, running out of native memory with a 32-bit VM is quite common. The same 4 GB limit is also important if you are using a 64-bit VM with compressed references. In compressed references mode, all references to objects, classes, threads, and monitors are represented by 32-bit values for performance reasons, so these structures can be allocated only at 32-bit addresses. However, the operating system might place other allocations within this 4 GB of address space, and if this area becomes sufficiently full or fragmented, the VM throws a native NativeOutOfMemoryError error. These errors typically occur when the VM tries to create a new thread or load a class. The Current Thread History section should contain more information about what the thread was doing at the VM level when the NativeOutOfMemoryError error occurred. You can usually avoid this type of problem by using the -Xmcrs option to reserve a contiguous area of memory within the lowest 4GB of memory at VM startup. Another common cause of a NativeOutOfMemoryError is when an application loads duplicate classes. Classes are allocated outside of the Java heap in native memory. If the value reported for Classes in the NATIVEMEMINFO section is very large, duplicate classes might be the cause of your problem. The Eclipse Memory Analyzer Tool (MAT) can tell you if you have duplicate classes by using the Class Loader Explorer feature. Because a system dump is automatically generated as well as a Java dump in response to a NativeOutOfMemoryError , simply open the system dump in MAT to continue your diagnosis.","title":"Native OutOfMemoryError"},{"location":"dump_javadump/#deadlock","text":"Deadlocks occur when two threads attempt to synchronize on an object and lock an instance of a class. When this happens, your application stops responding and hangs. Generating a Java dump file will quickly tell you whether you have a deadlock situation. Trigger the Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. The VM can detect the most common types of deadlock scenario involving Java monitors. If this type of deadlock is detected, information is provided in the LOCKS section. More complex deadlocks, including those that involve a mixture of native mutexes and Java monitors, are not detected. Here is the output from the code that was used to cause a common deadlock scenario: NULL 1LKDEADLOCK Deadlock detected !!! NULL --------------------- NULL 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) 3LKDEADLOCKWTR is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B344 infl_mon_t: 0x08C2B384: 4LKDEADLOCKOBJ java/lang/Object@0xB5666698 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 3\" (0x94507500) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B3A0 infl_mon_t: 0x08C2B3E0: 4LKDEADLOCKOBJ java/lang/Object@0xB5666678 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 1\" (0x92A3EC00) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B2E8 infl_mon_t: 0x08C2B328: 4LKDEADLOCKOBJ java/lang/Object@0xB5666688 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) This output tells you that Worker Thread 2 is waiting for Worker Thread 3 , which is waiting for Worker Thread 1 . Because Worker Thread 1 is also waiting for Worker Thread 2 , there is a deadlock. The next place to look is the output for Java and native stacks, in the THREADS section. By looking at the stack for each of these worker threads you can trace the problem back to specific lines in your application code. In this example, you can see from the following output that for all worker threads, the stack traces ( 4XESTACKTRACE / 5XESTACKTRACE ) indicate a problem in line 35 of the application DeadLockTest.java : 3XMTHREADINFO \"Worker Thread 1\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C2B0, java/lang/Thread:0xB5666778, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52CF, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004365543 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666688 Owned by: \"Worker Thread 2\" (J9VMThread:0x94501D00, java/lang/Thread:0xB56668D0) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666678, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 2\" J9VMThread:0x94501D00, omrthread_t:0x92A3C8F0, java/lang/Thread:0xB56668D0, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x14, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D0, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x946BF000, to:0x94700000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004555580 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666698 Owned by: \"Worker Thread 3\" (J9VMThread:0x94507500, java/lang/Thread:0xB5666A18) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666688, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 3\" J9VMThread:0x94507500, omrthread_t:0x92A3CC10, java/lang/Thread:0xB5666A18, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x15, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D1, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9467E000, to:0x946BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.003657010 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666678 Owned by: \"Worker Thread 1\" (J9VMThread:0x92A3EC00, java/lang/Thread:0xB5666778) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666698, entry count: 1)","title":"Deadlock"},{"location":"dump_javadump/#hang","text":"An application can hang for a number of reasons but the most common cause is excessive global garbage collection (GC) activity, where your application is repeatedly paused because your Java heap has almost run out of memory. You can identify this problem by looking at verbose GC output. Collect this output by specifying the -verbose:gc option. Deadlock situations can also manifest themselves as hangs. For more information on diagnosing this type of problem from a Java dump, see the deadlock scenario. If you have eliminated verbose GC activity and deadlocks, another common hang scenario involves threads that compete and wait for Java object locks. This type of problem can usually be diagnosed by examining a Java dump. The simplest hang scenario involving Java object locks is where a thread acquires a lock that other threads are waiting for, but it doesn't release the lock for some reason. The first place to look in the Java dump output is the LOCKS section. This section lists all the monitors and shows which threads have acquired a lock and which threads are waiting. If the hang is caused by a thread not releasing a lock that other threads need, you can see a list of waiting threads in the output. In this example scenario, the Java dump LOCKS section shows that Worker Thread 0 ( 3LKMONOBJECT ) has acquired a lock and there are 19 other worker threads waiting to obtain the lock. NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 1 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x92711200 infl_mon_t: 0x92711240: 3LKMONOBJECT java/lang/Object@0xB56658D8: Flat locked by \"Worker Thread 0\" (J9VMThread:0x92A3EC00), entry count 1 3LKWAITERQ Waiting to enter: 3LKWAITER \"Worker Thread 1\" (J9VMThread:0x92703F00) 3LKWAITER \"Worker Thread 2\" (J9VMThread:0x92709C00) 3LKWAITER \"Worker Thread 3\" (J9VMThread:0x92710A00) 3LKWAITER \"Worker Thread 4\" (J9VMThread:0x92717F00) 3LKWAITER \"Worker Thread 5\" (J9VMThread:0x9271DC00) 3LKWAITER \"Worker Thread 6\" (J9VMThread:0x92723A00) 3LKWAITER \"Worker Thread 7\" (J9VMThread:0x92729800) 3LKWAITER \"Worker Thread 8\" (J9VMThread:0x92733700) 3LKWAITER \"Worker Thread 9\" (J9VMThread:0x92739400) 3LKWAITER \"Worker Thread 10\" (J9VMThread:0x92740200) 3LKWAITER \"Worker Thread 11\" (J9VMThread:0x92748100) 3LKWAITER \"Worker Thread 12\" (J9VMThread:0x9274DF00) 3LKWAITER \"Worker Thread 13\" (J9VMThread:0x92754D00) 3LKWAITER \"Worker Thread 14\" (J9VMThread:0x9275AA00) 3LKWAITER \"Worker Thread 15\" (J9VMThread:0x92760800) 3LKWAITER \"Worker Thread 16\" (J9VMThread:0x92766600) 3LKWAITER \"Worker Thread 17\" (J9VMThread:0x9276C300) 3LKWAITER \"Worker Thread 18\" (J9VMThread:0x92773100) 3LKWAITER \"Worker Thread 19\" (J9VMThread:0x92778F00) NULL The next step is to determine why Worker Thread 0 is not releasing the lock. The best place to start is the stack trace for this thread, which you can find by searching on the thread name or J9VMThread ID in the THREADS section. The following extract shows the details for \"Worker Thread 0\" (J9VMThread:0x92A3EC00) : NULL 3XMTHREADINFO \"Worker Thread 0\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C280, java/lang/Thread:0xB56668B8, state:CW, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x511F, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000401) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.000211878 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Thread.sleep(Native Method) 4XESTACKTRACE at java/lang/Thread.sleep(Thread.java:941) 4XESTACKTRACE at WorkerThread.doWork(HangTest.java:37) 4XESTACKTRACE at WorkerThread.run(HangTest.java:31) 5XESTACKTRACE (entered lock: java/lang/Object@0xB56658D8, entry count: 1) In the last line of this output you can see where the thread acquired the lock. Working up from this line, you can see that WorkerThread.run was called, which in turn called WorkerThread.doWork . The stack shows that the thread then entered a call to java/lang/Thread.sleep in HangTest.java on line 37, which is preventing the thread from completing its work and releasing the lock. In this example the sleep call was added to induce a hang, but in real-world scenarios the cause could be any blocking operation, such as reading from an input stream or socket. Another possibility is that the thread is waiting for another lock owned by yet another thread. It is important to remember that each Java dump represents a single snapshot in time. You should generate at least three Java dumps separated by a short pause, for example 30 seconds, and compare the output. This comparison tells you whether the threads involved are stuck in a fixed state or whether they are moving. In this example, the threads do not move and the investigation needs to focus on the logic in WorkerThread.doWork to understand why Worker Thread 0 entered the java/lang/Thread.sleep call. Another common scenario is where each Java dump shows a number of threads waiting for a lock owned by another thread, but the list of waiting threads and the lock-owning thread change over time. In this case the cause is likely to be a bottleneck caused by thread contention, where the threads are continually competing for the same lock. In severe cases, the lock is held only for a small amount of time but there are lots of threads trying to obtain it. Because more time is spent handling the lock and scheduling the thread than executing application code, the degradation in performance is manifested as a hang. Thread contention is usually caused by an application design problem. You can use a similar approach to the one used in this scenario to determime which lines of code are responsible for the contention.","title":"Hang"},{"location":"dump_systemdump/","text":"System dump System dumps, often known as core dumps , are platform-specific and contain a raw binary dump of the process memory. This type of dump has a complete copy of the Java heap, including the contents of all Java objects in the application. To examine a system dump you can use the OpenJ9 dump viewer ( jdmpview ), a platform-specific debugging tool, or the Eclipse Memory Analyzer tool (MAT) . If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java See also Using system dumps and the dump viewer","title":"System dump"},{"location":"dump_systemdump/#system-dump","text":"System dumps, often known as core dumps , are platform-specific and contain a raw binary dump of the process memory. This type of dump has a complete copy of the Java heap, including the contents of all Java objects in the application. To examine a system dump you can use the OpenJ9 dump viewer ( jdmpview ), a platform-specific debugging tool, or the Eclipse Memory Analyzer tool (MAT) . If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java","title":"System dump"},{"location":"dump_systemdump/#see-also","text":"Using system dumps and the dump viewer","title":"See also"},{"location":"env_var/","text":"Environment variables Although the OpenJ9 virtual machine (VM) recognizes many environment variables, most are superseded by command-line arguments. Use command-line arguments rather than environment variables, which are retained only for compatibility. Note: Environment variables are overridden by command-line arguments. Finding and setting environment variables To show the current environment, run: set (Windows\u2122) env (AIX\u00ae, Linux\u00ae, and macOS\u00ae) set (z/OS\u00ae) To show a particular environment variable, run: echo %ENVNAME% (Windows) echo $ENVNAME (AIX, Linux, macOS, and z/OS) Use values exactly as shown in the documentation. The names of environment variables are case-sensitive in AIX, Linux, macOS, and z/OS. To set the environment variable LOGIN_NAME to Fred , run: set LOGIN_NAME=Fred (Windows) export LOGIN_NAME=Fred (AIX/Linux/macOS: ksh or bash shells) setenv LOGIN_NAME Fred (csh shells) These variables are set only for the current shell or command-line session. If you are setting multiple values for an environment variable in a list: On AIX, Linux, macOS, and z/OS the separator is typically a colon (:). On Windows the separator is typically a semicolon (;). General options General VM environment variables are shown in the following table: Environment variable Usage information IBM_JAVA_COMMAND_LINE This variable is set by the VM after it starts. Using this variable, you can find the command-line parameters set when the VM started. This setting is not available if the VM is invoked by using JNI. OPENJ9_JAVA_OPTIONS=<option> Set this variable to store default Java options, including -X , -D , or -verbose:gc style options. For example, -Xms256m -Djava.compiler . Any options set are overridden by equivalent options that are specified when Java is started. This variable does not support -fullversion or -version . If you specify the name of a trace output file either directly, or indirectly, by using a properties file, the output file might be accidentally overwritten if you run utilities such as the trace formatter, dump extractor, or dump viewer. To avoid this problem, add %d, %p or %t to the trace file names. See -Xtrace:output . Note: The equivalent IBM_JAVA_OPTIONS is deprecated and will be removed in a future release. JAVA_FONTS=<list of directories> Set this environment variable to specify the font directory. Setting this variable is equivalent to setting the property java.awt.fonts on Windows operating systems, and sun.java2d.fontpath on other operating systems. Dump agent options The preferred mechanism for controlling the production of dumps is by using the -Xdump option. However, these legacy environment variables are preserved and can still be used. The following table describes dump agent options: Environment Variable Usage Information JAVA_DUMP_OPTS Used to control the conditions under which dumps are produced. If you set agents for a condition by using the JAVA_DUMP_OPTS environment variable, default dump agents for that condition are disabled; however, any -Xdump options that are specified on the command line are used. The JAVA_DUMP_OPTS environment variable uses the following syntax: JAVA_DUMP_OPTS=\"ON<condition>(<agent>[<count>],<agent>[<count>]), ON<condition>(<agent>[<count>],...),...)\" Where: <condition> is one of the following values: ANYSIGNAL DUMP ERROR INTERRUPT EXCEPTION OUTOFMEMORY <agent> is one of the following values: ALL NONE JAVADUMP SYSDUMP HEAPDUMP CEEDUMP (z/OS specific) <count> is the number of times to run the specified agent for the specified condition. This value is optional. By default, the agent runs every time that the condition occurs. JAVA_DUMP_OPTS is parsed by taking the leftmost occurrence of each condition, so duplicates are ignored. The following setting produces a system dump for the first error condition only: :::java ONERROR(SYSDUMP[1]),ONERROR(JAVADUMP) Also, the ONANYSIGNAL condition is parsed before all others, so :::java ONINTERRUPT(NONE),ONANYSIGNAL(SYSDUMP) has the same effect as :::java ONANYSIGNAL(SYSDUMP),ONINTERRUPT(NONE) If the JAVA_DUMP_TOOL environment variable is set, that variable is assumed to specify a valid executable name and is parsed for replaceable fields, such as %pid . If %pid is detected in the string, the string is replaced with the VM's own process ID. The tool that is specified by JAVA_DUMP_TOOL is run after any system dump or heap dump is taken, before anything else. The dump settings are applied in the following order. Settings later in the list take precedence: Default VM dump behavior. -Xdump command-line options that specify -Xdump:<type>:defaults , see OpenJ9 default options . DISABLE_JAVADUMP , IBM_HEAPDUMP , and IBM_HEAP_DUMP environment variables. IBM_JAVADUMP_OUTOFMEMORY and IBM_HEAPDUMP_OUTOFMEMORY environment variables. JAVA_DUMP_OPTS environment variable. Remaining -Xdump command-line options. Setting JAVA_DUMP_OPTS affects only those conditions that you specify. Actions on other conditions are unchanged. Signal mapping When setting the JAVA_DUMP_OPTS environment variable, the mapping of operating system signals to the \"condition\" is shown in the following table: Condition z/OS Windows Linux, macOS, and AIX EXCEPTION SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGSYS, SIGXFSV SIGILL, SIGSEGV, SIGFPE SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGXFSV INTERRUPT SIGINT, SIGTERM, SIGHUP SIGINT, SIGTERM SIGINT, SIGTERM, SIGHUP ERROR SIGABRT SIGABRT SIGABRT DUMP SIGQUIT SIGBREAK SIGQUIT Java dump options The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:java option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information DISABLE_JAVADUMP=[TRUE|FALSE] Setting DISABLE_JAVADUMP to TRUE is the equivalent of using -Xdump:java:none and stops the default production of Java dumps. IBM_JAVACOREDIR=<directory> The default location into which the Java dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_JAVADUMP_OUTOFMEMORY=[TRUE|FALSE] By setting this environment variable to FALSE , you disable Java dumps for an out-of-memory exception. When not set, a Java dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable Java dumps for an out-of-memory exception. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and Heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Java dumps are produced. Heap dump options The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:heap option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information IBM_HEAPDUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAP_DUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAPDUMPDIR=<directory> The default location into which the heap dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_HEAPDUMP_OUTOFMEMORY=[TRUE|FALSE] Controls the generation of a heap dump when an out-of-memory exception is thrown. When not set, a heap dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable heap dump for an out-of-memory exception. IBM_JAVA_HEAPDUMP_TEST Use this environment variable to cause the VM to generate both PHD and text versions of heap dumps. Equivalent to opts=PHD+CLASSIC on the -Xdump:heap option. IBM_JAVA_HEAPDUMP_TEXT Use this environment variable to cause the VM to generate a text (human readable) Heap dump. Equivalent to opts=CLASSIC on the -Xdump:heap option. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Heap dumps are produced. Other diagnostic options The following table lists other environment variables that can be set for diagnostic purposes: Environment variable Usage Instructions IBM_COREDIR=<directory> Set this variable to specify an alternative location for system dumps, JIT dumps, and snap trace. On z/OS, _CEE_DMPTARG is used instead for snap trace, and transaction dumps are written to TSO according to JAVA_DUMP_TDUMP_PATTERN . On Linux and macOS, the dump is written to the directory that is specified directory by the operating system before being moved to the specified location. IBM_JAVA_ABEND_ON_FAILURE=Y (z/OS only) This setting tells the Java launcher to mark the Task Control Block (TCB) with an abend code if the OpenJ9 VM fails to load or is terminated by an uncaught exception. By default, the Java launcher does not mark the TCB. JAVA_DUMP_TDUMP_PATTERN=<string> (z/OS only) The specified <string> is passed to IEATDUMP to use as the data/set name for the Transaction Dump. The default <string> is %uid.JVM.TDUMP.%job.D%y%m%d.T%H%M%S (31-bit) or %uid.JVM.%job.D%y%m%d.T%H%M%S.X&amp;DS (64-bit), where %uid is found from the C code fragment shown in Notes . JAVA_THREAD_MODEL=<string> <string> can be defined as one of the following values: NATIVE (all threads are created as _MEDIUM_WEIGHT ), HEAVY (all threads are created as _HEAVY_WEIGHT ), MEDIUM (same as NATIVE ), or NULL . The default is NATIVE . IBM_XE_COE_NAME=<value> Set this variable to generate a system dump when the specified exception occurs. The value that is supplied is the package description of the exception; for example, java/lang/InternalError . A Signal 11 is followed by a JVMXE message and then the VM ends. JAVA_PLUGIN_TRACE=TRUE When this variable is set to TRUE or 1, a Java plug-in trace is produced for the session when an application runs. Traces are produced from both the Java and Native layer. By default, this variable is set to FALSE , so that a Java plug-in trace is not produced. Notes: C code fragment to discover %uid for JAVA_DUMP_TDUMP_PATTERN=<string> : pwd = getpwuid(getuid()); pwd->pw_name; Deprecated JIT options The following table describes deprecated environment variables for the JIT compiler: Environment Variable Usage Information IBM_MIXED_MODE_THRESHOLD Use -Xjit:count=<value> instead of this variable. JAVA_COMPILER Use -Djava.compiler=<value> instead of this variable.","title":"Environment variables"},{"location":"env_var/#environment-variables","text":"Although the OpenJ9 virtual machine (VM) recognizes many environment variables, most are superseded by command-line arguments. Use command-line arguments rather than environment variables, which are retained only for compatibility. Note: Environment variables are overridden by command-line arguments.","title":"Environment variables"},{"location":"env_var/#finding-and-setting-environment-variables","text":"To show the current environment, run: set (Windows\u2122) env (AIX\u00ae, Linux\u00ae, and macOS\u00ae) set (z/OS\u00ae) To show a particular environment variable, run: echo %ENVNAME% (Windows) echo $ENVNAME (AIX, Linux, macOS, and z/OS) Use values exactly as shown in the documentation. The names of environment variables are case-sensitive in AIX, Linux, macOS, and z/OS. To set the environment variable LOGIN_NAME to Fred , run: set LOGIN_NAME=Fred (Windows) export LOGIN_NAME=Fred (AIX/Linux/macOS: ksh or bash shells) setenv LOGIN_NAME Fred (csh shells) These variables are set only for the current shell or command-line session. If you are setting multiple values for an environment variable in a list: On AIX, Linux, macOS, and z/OS the separator is typically a colon (:). On Windows the separator is typically a semicolon (;).","title":"Finding and setting environment variables"},{"location":"env_var/#general-options","text":"General VM environment variables are shown in the following table: Environment variable Usage information IBM_JAVA_COMMAND_LINE This variable is set by the VM after it starts. Using this variable, you can find the command-line parameters set when the VM started. This setting is not available if the VM is invoked by using JNI. OPENJ9_JAVA_OPTIONS=<option> Set this variable to store default Java options, including -X , -D , or -verbose:gc style options. For example, -Xms256m -Djava.compiler . Any options set are overridden by equivalent options that are specified when Java is started. This variable does not support -fullversion or -version . If you specify the name of a trace output file either directly, or indirectly, by using a properties file, the output file might be accidentally overwritten if you run utilities such as the trace formatter, dump extractor, or dump viewer. To avoid this problem, add %d, %p or %t to the trace file names. See -Xtrace:output . Note: The equivalent IBM_JAVA_OPTIONS is deprecated and will be removed in a future release. JAVA_FONTS=<list of directories> Set this environment variable to specify the font directory. Setting this variable is equivalent to setting the property java.awt.fonts on Windows operating systems, and sun.java2d.fontpath on other operating systems.","title":"General options"},{"location":"env_var/#dump-agent-options","text":"The preferred mechanism for controlling the production of dumps is by using the -Xdump option. However, these legacy environment variables are preserved and can still be used. The following table describes dump agent options: Environment Variable Usage Information JAVA_DUMP_OPTS Used to control the conditions under which dumps are produced. If you set agents for a condition by using the JAVA_DUMP_OPTS environment variable, default dump agents for that condition are disabled; however, any -Xdump options that are specified on the command line are used. The JAVA_DUMP_OPTS environment variable uses the following syntax: JAVA_DUMP_OPTS=\"ON<condition>(<agent>[<count>],<agent>[<count>]), ON<condition>(<agent>[<count>],...),...)\" Where: <condition> is one of the following values: ANYSIGNAL DUMP ERROR INTERRUPT EXCEPTION OUTOFMEMORY <agent> is one of the following values: ALL NONE JAVADUMP SYSDUMP HEAPDUMP CEEDUMP (z/OS specific) <count> is the number of times to run the specified agent for the specified condition. This value is optional. By default, the agent runs every time that the condition occurs. JAVA_DUMP_OPTS is parsed by taking the leftmost occurrence of each condition, so duplicates are ignored. The following setting produces a system dump for the first error condition only: :::java ONERROR(SYSDUMP[1]),ONERROR(JAVADUMP) Also, the ONANYSIGNAL condition is parsed before all others, so :::java ONINTERRUPT(NONE),ONANYSIGNAL(SYSDUMP) has the same effect as :::java ONANYSIGNAL(SYSDUMP),ONINTERRUPT(NONE) If the JAVA_DUMP_TOOL environment variable is set, that variable is assumed to specify a valid executable name and is parsed for replaceable fields, such as %pid . If %pid is detected in the string, the string is replaced with the VM's own process ID. The tool that is specified by JAVA_DUMP_TOOL is run after any system dump or heap dump is taken, before anything else. The dump settings are applied in the following order. Settings later in the list take precedence: Default VM dump behavior. -Xdump command-line options that specify -Xdump:<type>:defaults , see OpenJ9 default options . DISABLE_JAVADUMP , IBM_HEAPDUMP , and IBM_HEAP_DUMP environment variables. IBM_JAVADUMP_OUTOFMEMORY and IBM_HEAPDUMP_OUTOFMEMORY environment variables. JAVA_DUMP_OPTS environment variable. Remaining -Xdump command-line options. Setting JAVA_DUMP_OPTS affects only those conditions that you specify. Actions on other conditions are unchanged.","title":"Dump agent options"},{"location":"env_var/#signal-mapping","text":"When setting the JAVA_DUMP_OPTS environment variable, the mapping of operating system signals to the \"condition\" is shown in the following table: Condition z/OS Windows Linux, macOS, and AIX EXCEPTION SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGSYS, SIGXFSV SIGILL, SIGSEGV, SIGFPE SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGXFSV INTERRUPT SIGINT, SIGTERM, SIGHUP SIGINT, SIGTERM SIGINT, SIGTERM, SIGHUP ERROR SIGABRT SIGABRT SIGABRT DUMP SIGQUIT SIGBREAK SIGQUIT","title":"Signal mapping"},{"location":"env_var/#java-dump-options","text":"The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:java option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information DISABLE_JAVADUMP=[TRUE|FALSE] Setting DISABLE_JAVADUMP to TRUE is the equivalent of using -Xdump:java:none and stops the default production of Java dumps. IBM_JAVACOREDIR=<directory> The default location into which the Java dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_JAVADUMP_OUTOFMEMORY=[TRUE|FALSE] By setting this environment variable to FALSE , you disable Java dumps for an out-of-memory exception. When not set, a Java dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable Java dumps for an out-of-memory exception. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and Heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Java dumps are produced.","title":"Java dump options"},{"location":"env_var/#heap-dump-options","text":"The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:heap option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information IBM_HEAPDUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAP_DUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAPDUMPDIR=<directory> The default location into which the heap dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_HEAPDUMP_OUTOFMEMORY=[TRUE|FALSE] Controls the generation of a heap dump when an out-of-memory exception is thrown. When not set, a heap dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable heap dump for an out-of-memory exception. IBM_JAVA_HEAPDUMP_TEST Use this environment variable to cause the VM to generate both PHD and text versions of heap dumps. Equivalent to opts=PHD+CLASSIC on the -Xdump:heap option. IBM_JAVA_HEAPDUMP_TEXT Use this environment variable to cause the VM to generate a text (human readable) Heap dump. Equivalent to opts=CLASSIC on the -Xdump:heap option. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Heap dumps are produced.","title":"Heap dump options"},{"location":"env_var/#other-diagnostic-options","text":"The following table lists other environment variables that can be set for diagnostic purposes: Environment variable Usage Instructions IBM_COREDIR=<directory> Set this variable to specify an alternative location for system dumps, JIT dumps, and snap trace. On z/OS, _CEE_DMPTARG is used instead for snap trace, and transaction dumps are written to TSO according to JAVA_DUMP_TDUMP_PATTERN . On Linux and macOS, the dump is written to the directory that is specified directory by the operating system before being moved to the specified location. IBM_JAVA_ABEND_ON_FAILURE=Y (z/OS only) This setting tells the Java launcher to mark the Task Control Block (TCB) with an abend code if the OpenJ9 VM fails to load or is terminated by an uncaught exception. By default, the Java launcher does not mark the TCB. JAVA_DUMP_TDUMP_PATTERN=<string> (z/OS only) The specified <string> is passed to IEATDUMP to use as the data/set name for the Transaction Dump. The default <string> is %uid.JVM.TDUMP.%job.D%y%m%d.T%H%M%S (31-bit) or %uid.JVM.%job.D%y%m%d.T%H%M%S.X&amp;DS (64-bit), where %uid is found from the C code fragment shown in Notes . JAVA_THREAD_MODEL=<string> <string> can be defined as one of the following values: NATIVE (all threads are created as _MEDIUM_WEIGHT ), HEAVY (all threads are created as _HEAVY_WEIGHT ), MEDIUM (same as NATIVE ), or NULL . The default is NATIVE . IBM_XE_COE_NAME=<value> Set this variable to generate a system dump when the specified exception occurs. The value that is supplied is the package description of the exception; for example, java/lang/InternalError . A Signal 11 is followed by a JVMXE message and then the VM ends. JAVA_PLUGIN_TRACE=TRUE When this variable is set to TRUE or 1, a Java plug-in trace is produced for the session when an application runs. Traces are produced from both the Java and Native layer. By default, this variable is set to FALSE , so that a Java plug-in trace is not produced. Notes: C code fragment to discover %uid for JAVA_DUMP_TDUMP_PATTERN=<string> : pwd = getpwuid(getuid()); pwd->pw_name;","title":"Other diagnostic options"},{"location":"env_var/#deprecated-jit-options","text":"The following table describes deprecated environment variables for the JIT compiler: Environment Variable Usage Information IBM_MIXED_MODE_THRESHOLD Use -Xjit:count=<value> instead of this variable. JAVA_COMPILER Use -Djava.compiler=<value> instead of this variable.","title":"Deprecated JIT options"},{"location":"gc/","text":"Garbage collection The process of managing memory in the VM is handled by the Allocator and the Garbage Collector (GC). These components operate on an area of memory that is reserved for VM processing called the Java heap. The Allocator assigns areas of the Java heap for Java objects. Objects are considered as live when they have a chain of references to them that start from root references, such as those found in thread stacks. When that reference or pointer no longer exists, the objects are considered as garbage . The role of the Garbage Collector is to manage the storage in the Java heap and reclaim memory by removing garbage. The Allocator The Allocator is a component of memory management that is typically overshadowed by the task of garbage collection. However, it is a critical, if not small part, of the overall process. The Allocator manages pools of free memory and how the free memory is consumed. It is also responsible for allocating areas of storage in the Java heap for objects at the request of applications, class libraries, or the VM. Every allocation requires a heap lock to stop concurrent threads trying to access the same area of memory at the same time. When an object is allocated, the heap lock is released. If there is insufficient space to allocate the object, allocation fails, the heap lock is released, and the GC is called. If the GC manages to recover some space on the heap, the Allocator can resume operations. If the GC does not recover enough space, it returns an OutOfMemoryError exception. Acquiring a heap lock for every allocation would be an intensive operation with a knock on impact to performance. To get around this problem, small objects are allocated to thread local heaps (TLH). Thread local heaps (TLH) To improve performance, allocation caches are reserved in the heap for different threads. These allocation caches are known as thread local heaps (TLH) and allow each thread to allocate memory from its cache without acquiring the heap lock. A TLH is typically used for small objects of less than 512 bytes (768 bytes on 64-bit VMs) although larger objects can be allocated from the cache if there is sufficient space. If a thread allocates a lot of objects, the allocator gives that thread a larger TLH to reduce contention on the heap lock. A TLH is predefined with an initial default size of 2 KB. On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). The requested size can grow up to a predefined maximum (default 128 KB). After every GC cycle, the TLH requested size for each thread is reduced, sometimes by as much as 50%, to take account of threads that reduce their allocation rate and no longer need large TLHs. For very inactive threads, the requested size can even drop below the initial value, down to the predefined minimum (512/768 bytes). For very active threads, the maximum TLH requested size might be reached before the next GC occurs. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. The following options control the requested TLH size: -Xgc:tlhMaximumSize=<bytes> -Xgc:tlhInitialSize=<bytes> -Xgc:tlhIncrementSize=<bytes> Typically, when the maximum TLH size is increased, you should also increase the increment proportionally, so that active threads can reach the maximum requested TLH size more quickly. Garbage collection To prevent applications running out of memory, objects in the Java heap that are no longer required must be reclaimed. This process is known as garbage collection (GC). When garbage is collected, the garbage collector must obtain exclusive access to the heap, which causes an application to pause while the clean up is done. This pause is often referred to as a stop-the-world pause because an application must halt until the process completes. In general, the first step in the GC process is to mark the objects that are reachable, which means they are still in use. The next step is to sweep away the unmarked objects to reclaim memory. The last step, which isn't always required unless the heap has become very fragmented, is to compact the heap. Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. Picking the right policy very much depends on your usage and performance goals. Generational Concurrent policy If you have a transactional application, with many short lived objects, the Generational Concurrent ( -Xgcpolicy:gencon ) GC policy is probably best suited, which aims to minimize GC pause times without compromising throughput. This is the default policy employed by the VM, so if you want to use it you don't need to specify it on the command line when you start your application. With the gencon policy, the Java heap is divided into two main areas, the nursery area, where new objects are created and the tenure area, where objects are moved if they have reached tenure age . The nursery area is subdivided into two further areas, the allocate space and the survivor space. The GC process is illustrated in the following diagram, which shows a sequence of 4 main events: Objects are created in the allocate space. The allocate space is full. A local GC scavenge process runs and reachable objects are either copied into the survivor space or into the tenure area if they have reached tenure age . Any objects that can't be reached are left untouched and subsequently cleared. The allocate and survivor spaces swap roles. The original survivor space becomes the allocate space where new objects are created, and the original allocate space becomes the survivor space ready for the next local GC scavenge process. The relative sizes of the allocate and survivor spaces are dynamically adjusted by a technique called tilting . When the nursery area is first created, it is evenly divided between the allocate and survivor spaces. If, after a GC scavenge process is run, the amount of space required for the survivor area is comparatively small, the boundary between the two spaces is adjusted by tilting . For example, if the survivor space requires only 10% of the nursery area, the tilt ratio is adjusted to give 90% of the nursery area to the allocate space. With more space available for new objects, garbage collection can be delayed. The tenure age of an object is determined by the VM and reflects the number of times that an object has been copied between the allocate space and the survivor space. The age is in the range 1 - 14 and is adjusted dynamically by the VM depending on the overall amount of space that is used in the nursery area . For example, if an object has a tenure age of 5, it has been copied backwards and forwards between allocate and survivor spaces 5 times. If the VM sets a tenure age of 5 based on the percentage of space remaining in the nursery area, the next scavenge moves the object from the nursery to the tenure area. You can set an initial tenure age with the -Xgc:scvTenureAge option. You can also prevent the VM dynamically adjusting the tenure age by setting the Xgc:scvNoAdaptiveTenure option so that the intial age is maintained throughout the run time of the VM. Within the tenure area, new objects are allocated into the small object area (SOA), which is illustrated in the earlier diagram (see 3.). A large object area (LOA) is set aside for objects greater than 64 KB that cannot be allocated into the SOA to minimize fragmentation. The LOA is allocated by default but is reduced and removed after a few GC cycles if it isn't populated. To prevent the creation of an LOA, you can specify the -Xnoloa option on the command line when you start your application. When the tenure area is close to full a global GC is triggered. The local GC scavenge reduces pause times by freqently reclaiming memory in the nursery area which, for a transactional application with many short-lived objects, has the most recyclable space. However, over time the tenure area might become full. So, whilst a local GC scavenge process is operating on the nursery area, a concurrent global GC process also runs alongside normal program execution to mark and remove unreachable objects from the tenure area. These two GC approaches combine to provide a good trade-off between shorter pause times and consistent throughput. A special mode of the gencon policy is known as Concurrent Scavenge ( -Xgc:concurrentScavenge ), which aims to minimize the time spent in stop-the-world pauses by collecting nursery garbage in parallel with running application threads. This mode can be enabled with hardware-based support and software-based support. Hardware-based support: (Linux on IBM Z\u00ae and z/OS\u00ae) This mode works on the IBM z14\u2122 and later mainframe system with the Guarded Storage (GS) Facility. The GS Facility provides hardware-based support to detect when potentially stale references to objects are accessed by an application. This means that the garbage collector can start processing objects in parts of the heap without halting an application because the GS Facility is on hand to spot accesses to an object and send a notification. The object that was ready to be swept away can be moved, and references to it can be reset. You can read more about this mode in the following blog posts: Reducing Garbage Collection pause times with Concurrent Scavenge and the Guarded Storage Facility How Concurrent Scavenge using the Guarded Storage Facility Works Software-based support: (64-bit: Linux on (x86-64, POWER, IBM Z\u00ae), AIX\u00ae, and z/OS\u00ae) With software-based support, Concurrent Scavenge can be enabled without any pre-requisite hardware although the performance throughput is not as good as hardware-based support. For more information about enabling Concurrent Scavenge, see the -Xgc:concurrentScavenge option. Other policies OpenJ9 has the following alternative GC policies: -Xgcpolicy:balanced divides the Java heap into regions, which are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The aim of the policy is to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance, particularly on large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER platforms). -Xgcpolicy:metronome is designed for applications that require precise response times. Garbage collection occurs in small interruptible steps to avoid stop-the-world pauses. This policy is available only on x86 Linux and AIX platforms. -Xgcpolicy:nogc handles only memory allocation and heap expansion, but doesn't reclaim any memory. The GC impact on runtime performance is therefore minimized, but if the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. -Xgcpolicy:optavgpause uses concurrent mark and sweep phases, which means that pause times are reduced when compared to optthruput, but at the expense of some performance throughput. -Xgcpolicy:optthruput is optimized for throughput by disabling the concurrent mark phase, which means that applications will stop for long pauses while garbage collection takes place. You might consider using this policy when high application throughput, rather than short garbage collection pauses, is the main performance goal. For more information about these garbage collection policies and options, see -Xgcpolicy . Troubleshooting You can diagnose problems with garbage collection operations by turning on verbose garbage collection logging. By default, the information is printed to STDERR but can be redirected to a file by specifying the -Xverbosegclog option. The log files contain detailed information about all operations, including initialization, stop-the-world processing, finalization, reference processing, and allocation failures. For more information, see Verbose garbage collection If verbose logs do not provide enough information to help you diagnose GC problems, you can use GC trace to analyze operations at a more granular level. For more information, see -Xtgc .","title":"Garbage Collection"},{"location":"gc/#garbage-collection","text":"The process of managing memory in the VM is handled by the Allocator and the Garbage Collector (GC). These components operate on an area of memory that is reserved for VM processing called the Java heap. The Allocator assigns areas of the Java heap for Java objects. Objects are considered as live when they have a chain of references to them that start from root references, such as those found in thread stacks. When that reference or pointer no longer exists, the objects are considered as garbage . The role of the Garbage Collector is to manage the storage in the Java heap and reclaim memory by removing garbage.","title":"Garbage collection"},{"location":"gc/#the-allocator","text":"The Allocator is a component of memory management that is typically overshadowed by the task of garbage collection. However, it is a critical, if not small part, of the overall process. The Allocator manages pools of free memory and how the free memory is consumed. It is also responsible for allocating areas of storage in the Java heap for objects at the request of applications, class libraries, or the VM. Every allocation requires a heap lock to stop concurrent threads trying to access the same area of memory at the same time. When an object is allocated, the heap lock is released. If there is insufficient space to allocate the object, allocation fails, the heap lock is released, and the GC is called. If the GC manages to recover some space on the heap, the Allocator can resume operations. If the GC does not recover enough space, it returns an OutOfMemoryError exception. Acquiring a heap lock for every allocation would be an intensive operation with a knock on impact to performance. To get around this problem, small objects are allocated to thread local heaps (TLH).","title":"The Allocator"},{"location":"gc/#thread-local-heaps-tlh","text":"To improve performance, allocation caches are reserved in the heap for different threads. These allocation caches are known as thread local heaps (TLH) and allow each thread to allocate memory from its cache without acquiring the heap lock. A TLH is typically used for small objects of less than 512 bytes (768 bytes on 64-bit VMs) although larger objects can be allocated from the cache if there is sufficient space. If a thread allocates a lot of objects, the allocator gives that thread a larger TLH to reduce contention on the heap lock. A TLH is predefined with an initial default size of 2 KB. On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). The requested size can grow up to a predefined maximum (default 128 KB). After every GC cycle, the TLH requested size for each thread is reduced, sometimes by as much as 50%, to take account of threads that reduce their allocation rate and no longer need large TLHs. For very inactive threads, the requested size can even drop below the initial value, down to the predefined minimum (512/768 bytes). For very active threads, the maximum TLH requested size might be reached before the next GC occurs. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. The following options control the requested TLH size: -Xgc:tlhMaximumSize=<bytes> -Xgc:tlhInitialSize=<bytes> -Xgc:tlhIncrementSize=<bytes> Typically, when the maximum TLH size is increased, you should also increase the increment proportionally, so that active threads can reach the maximum requested TLH size more quickly.","title":"Thread local heaps (TLH)"},{"location":"gc/#garbage-collection_1","text":"To prevent applications running out of memory, objects in the Java heap that are no longer required must be reclaimed. This process is known as garbage collection (GC). When garbage is collected, the garbage collector must obtain exclusive access to the heap, which causes an application to pause while the clean up is done. This pause is often referred to as a stop-the-world pause because an application must halt until the process completes. In general, the first step in the GC process is to mark the objects that are reachable, which means they are still in use. The next step is to sweep away the unmarked objects to reclaim memory. The last step, which isn't always required unless the heap has become very fragmented, is to compact the heap. Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. Picking the right policy very much depends on your usage and performance goals.","title":"Garbage collection"},{"location":"gc/#generational-concurrent-policy","text":"If you have a transactional application, with many short lived objects, the Generational Concurrent ( -Xgcpolicy:gencon ) GC policy is probably best suited, which aims to minimize GC pause times without compromising throughput. This is the default policy employed by the VM, so if you want to use it you don't need to specify it on the command line when you start your application. With the gencon policy, the Java heap is divided into two main areas, the nursery area, where new objects are created and the tenure area, where objects are moved if they have reached tenure age . The nursery area is subdivided into two further areas, the allocate space and the survivor space. The GC process is illustrated in the following diagram, which shows a sequence of 4 main events: Objects are created in the allocate space. The allocate space is full. A local GC scavenge process runs and reachable objects are either copied into the survivor space or into the tenure area if they have reached tenure age . Any objects that can't be reached are left untouched and subsequently cleared. The allocate and survivor spaces swap roles. The original survivor space becomes the allocate space where new objects are created, and the original allocate space becomes the survivor space ready for the next local GC scavenge process. The relative sizes of the allocate and survivor spaces are dynamically adjusted by a technique called tilting . When the nursery area is first created, it is evenly divided between the allocate and survivor spaces. If, after a GC scavenge process is run, the amount of space required for the survivor area is comparatively small, the boundary between the two spaces is adjusted by tilting . For example, if the survivor space requires only 10% of the nursery area, the tilt ratio is adjusted to give 90% of the nursery area to the allocate space. With more space available for new objects, garbage collection can be delayed. The tenure age of an object is determined by the VM and reflects the number of times that an object has been copied between the allocate space and the survivor space. The age is in the range 1 - 14 and is adjusted dynamically by the VM depending on the overall amount of space that is used in the nursery area . For example, if an object has a tenure age of 5, it has been copied backwards and forwards between allocate and survivor spaces 5 times. If the VM sets a tenure age of 5 based on the percentage of space remaining in the nursery area, the next scavenge moves the object from the nursery to the tenure area. You can set an initial tenure age with the -Xgc:scvTenureAge option. You can also prevent the VM dynamically adjusting the tenure age by setting the Xgc:scvNoAdaptiveTenure option so that the intial age is maintained throughout the run time of the VM. Within the tenure area, new objects are allocated into the small object area (SOA), which is illustrated in the earlier diagram (see 3.). A large object area (LOA) is set aside for objects greater than 64 KB that cannot be allocated into the SOA to minimize fragmentation. The LOA is allocated by default but is reduced and removed after a few GC cycles if it isn't populated. To prevent the creation of an LOA, you can specify the -Xnoloa option on the command line when you start your application. When the tenure area is close to full a global GC is triggered. The local GC scavenge reduces pause times by freqently reclaiming memory in the nursery area which, for a transactional application with many short-lived objects, has the most recyclable space. However, over time the tenure area might become full. So, whilst a local GC scavenge process is operating on the nursery area, a concurrent global GC process also runs alongside normal program execution to mark and remove unreachable objects from the tenure area. These two GC approaches combine to provide a good trade-off between shorter pause times and consistent throughput. A special mode of the gencon policy is known as Concurrent Scavenge ( -Xgc:concurrentScavenge ), which aims to minimize the time spent in stop-the-world pauses by collecting nursery garbage in parallel with running application threads. This mode can be enabled with hardware-based support and software-based support. Hardware-based support: (Linux on IBM Z\u00ae and z/OS\u00ae) This mode works on the IBM z14\u2122 and later mainframe system with the Guarded Storage (GS) Facility. The GS Facility provides hardware-based support to detect when potentially stale references to objects are accessed by an application. This means that the garbage collector can start processing objects in parts of the heap without halting an application because the GS Facility is on hand to spot accesses to an object and send a notification. The object that was ready to be swept away can be moved, and references to it can be reset. You can read more about this mode in the following blog posts: Reducing Garbage Collection pause times with Concurrent Scavenge and the Guarded Storage Facility How Concurrent Scavenge using the Guarded Storage Facility Works Software-based support: (64-bit: Linux on (x86-64, POWER, IBM Z\u00ae), AIX\u00ae, and z/OS\u00ae) With software-based support, Concurrent Scavenge can be enabled without any pre-requisite hardware although the performance throughput is not as good as hardware-based support. For more information about enabling Concurrent Scavenge, see the -Xgc:concurrentScavenge option.","title":"Generational Concurrent policy"},{"location":"gc/#other-policies","text":"OpenJ9 has the following alternative GC policies: -Xgcpolicy:balanced divides the Java heap into regions, which are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The aim of the policy is to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance, particularly on large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER platforms). -Xgcpolicy:metronome is designed for applications that require precise response times. Garbage collection occurs in small interruptible steps to avoid stop-the-world pauses. This policy is available only on x86 Linux and AIX platforms. -Xgcpolicy:nogc handles only memory allocation and heap expansion, but doesn't reclaim any memory. The GC impact on runtime performance is therefore minimized, but if the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. -Xgcpolicy:optavgpause uses concurrent mark and sweep phases, which means that pause times are reduced when compared to optthruput, but at the expense of some performance throughput. -Xgcpolicy:optthruput is optimized for throughput by disabling the concurrent mark phase, which means that applications will stop for long pauses while garbage collection takes place. You might consider using this policy when high application throughput, rather than short garbage collection pauses, is the main performance goal. For more information about these garbage collection policies and options, see -Xgcpolicy .","title":"Other policies"},{"location":"gc/#troubleshooting","text":"You can diagnose problems with garbage collection operations by turning on verbose garbage collection logging. By default, the information is printed to STDERR but can be redirected to a file by specifying the -Xverbosegclog option. The log files contain detailed information about all operations, including initialization, stop-the-world processing, finalization, reference processing, and allocation failures. For more information, see Verbose garbage collection If verbose logs do not provide enough information to help you diagnose GC problems, you can use GC trace to analyze operations at a more granular level. For more information, see -Xtgc .","title":"Troubleshooting"},{"location":"interface_dtfj/","text":"Diagnostic Tool Framework for Java The Diagnostic Tool Framework for Java\u2122 (DTFJ) is a Java application programming interface (API) that is used to support the building of Java diagnostic tools. DTFJ works with data from a system dump or a Java dump. On Linux and AIX\u00ae operating systems, you can get more information from a system dump if you also have copies of executable files and libraries. You can run the jextract utility provided in the SDK to collect these files into a single archive for use in subsequent problem diagnosis. For more information, see Dump extractor . The DTFJ API helps diagnostic tools access the following information: Memory locations stored in the dump (System dumps only) Relationships between memory locations and Java internals (System dumps only) Java threads running in the VM Native threads held in the dump (System dumps only) Java classes and their class loaders that were present Java objects that were present in the heap (System dumps only) Java monitors and the objects and threads they are associated with Details of the workstation on which the dump was produced (System dumps only) Details of the Java version that was being used The command line that launched the VM If your DTFJ application requests information that is not available in the Java dump, the API will return null or throw a DataUnavailable exception. You might need to adapt DTFJ applications written to process system dumps to make them work with Java dumps. DTFJ is implemented in pure Java and tools written using DTFJ can be cross-platform. Therefore, you can analyze a dump taken from one workstation on another (remote and more convenient) machine. For example, a dump produced on an AIX\u00ae Power\u00ae system can be analyzed on a Windows laptop. API documentation for the DTFJ interface can be found here: Application programming reference: DTFJ Using the DTFJ interface To create applications that use DTFJ, you must use the DTFJ interface. Implementations of this interface have been written that work with system dumps and Java dumps. The diagram that follows illustrates the DTFJ interface. The starting point for working with a dump is to obtain an Image instance by using the ImageFactory class supplied with the concrete implementation of the API. Working with a system dump The following example shows how to work with a system dump. In this example, the only section of code that ties the dump to a particular implementation of DTFJ is the generation of the factory class. Change the factory if you want to use a different implementation. If there is a problem with the file that is passed to the getImage() method, an IOException is thrown and an appropriate message is issued. If a missing file is passed to the example shown, the following output is produced: Could not find/use required file(s) java.io.FileNotFoundException: core_file.xml (The system cannot find the file specified.) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:135) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:47) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:35) at DTFJEX1.main(DTFJEX1.java:23)Copy In this case, the DTFJ implementation is expecting a dump file to exist. Different errors are caught if the file existed but was not recognized as a valid dump file. Example of working with a system dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX1 { public static void main(String[] args) { Image image = null; if (args.length > 0) { File f = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.j9.ImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(f); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } } Working with a Java dump To work with a Java dump, change the factory class to com.ibm.dtfj.image.javacore.JCImageFactory and pass the Java dump file to the getImage() method. Example of working with a Java dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX2 { public static void main(String[] args) { Image image=null; if (args.length > 0) { File javacoreFile = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.javacore.JCImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(javacoreFile); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } } Analyze the dump After you have obtained an Image instance, you can begin analyzing the dump. The Image instance is the second instance in the class hierarchy for DTFJ illustrated by the following diagram: Some things to note from the diagram: The DTFJ interface is separated into two parts: classes with names that start with Image (the dump, a sequence of bytes with different contents on different platforms) and classes with names that start with Java (the Java internal knowledge). Image and Java classes are linked using a ManagedRuntime class (which is extended by JavaRuntime ). An Image object contains one ImageAddressSpace object (or, on z/OS\u00ae, possibly more). An ImageAddressSpace object contains one ImageProcess object (or, on z/OS, possibly more). Conceptually, you can apply the Image model to any program running with the ImageProcess . For the purposes of this document discussion is limited to the OpenJ9 virtual machine implementations. There is a link from a JavaThread object to its corresponding ImageThread object. Use this link to find out about native code associated with a Java thread, for example JNI functions that have been called from Java. If a JavaThread was not running Java code when the dump was taken, the JavaThread object has no JavaStackFrame objects. In these cases, use the link to the corresponding ImageThread object to find out what native code was running in that thread. This situation is typically the case with the JIT compilation thread and Garbage Collection threads. The DTFJ interface enables you to obtain information about native memory. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . When the Java runtime allocates native memory, the memory is associated with a high-level memory category. For more information about native memory detailed in a Java dump, see Java dump: NATIVEMEMINFO DTFJ example application This example is a fully working DTFJ application. Many DTFJ applications will follow a similar model. Sample DTFJ application import java.io.File; import java.util.Iterator; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.CorruptDataException; import com.ibm.dtfj.image.DataUnavailable; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageAddressSpace; import com.ibm.dtfj.image.ImageFactory; import com.ibm.dtfj.image.ImageProcess; import com.ibm.dtfj.java.JavaRuntime; import com.ibm.dtfj.java.JavaThread; import com.ibm.dtfj.image.ImageThread; public class DTFJEX2 { public static void main( String[] args ) { Image image = null; if ( args.length > 0 ) { File f = new File( args[0] ); try { Class factoryClass = Class .forName( \"com.ibm.dtfj.image.j9.ImageFactory\" ); ImageFactory factory = (ImageFactory) factoryClass.newInstance( ); image = factory.getImage( f ); } catch ( Exception ex ) { /* * Should use the error handling as shown in DTFJEX1. */ System.err.println( \"Error in DTFJEX2\" ); ex.printStackTrace( System.err ); } } else { System.err.println( \"No filename specified\" ); } if ( null == image ) { return; } MatchingThreads( image ); } public static void MatchingThreads( Image image ) { ImageThread imgThread = null; Iterator asIt = image.getAddressSpaces( ); while ( asIt.hasNext( ) ) { System.out.println( \"Found ImageAddressSpace...\" ); ImageAddressSpace as = (ImageAddressSpace) asIt.next( ); Iterator prIt = as.getProcesses( ); while ( prIt.hasNext( ) ) { System.out.println( \"Found ImageProcess...\" ); ImageProcess process = (ImageProcess) prIt.next( ); Iterator runTimesIt = process.getRuntimes( ); while ( runTimesIt.hasNext( ) ) { System.out.println( \"Found Runtime...\" ); JavaRuntime javaRT = (JavaRuntime) runTimesIt.next( ); Iterator javaThreadIt = javaRT.getThreads( ); while ( javaThreadIt.hasNext( ) ) { Object tempObj = javaThreadIt.next( ); /* * Should use CorruptData handling for all iterators */ if ( tempObj instanceof CorruptData ) { System.out.println( \"We have some corrupt data\" ); } else { JavaThread javaThread = (JavaThread) tempObj; System.out.println( \"Found JavaThread...\" ); try { imgThread = (ImageThread) javaThread.getImageThread( ); // Now we have a Java thread we can iterator // through the image threads Iterator imgThreadIt = process.getThreads( ); while ( imgThreadIt.hasNext( ) ) { ImageThread imgThread2 = (ImageThread) imgThreadIt .next( ); if ( imgThread.equals( imgThread2 ) ) { System.out.println( \"Found a match:\" ); System.out.println( \"\\tjavaThread \" + javaThread.getName( ) + \" is the same as \" + imgThread2.getID( ) ); } } } catch ( CorruptDataException e ) { System.err.println( \"ImageThread was corrupt: \" + e.getMessage( ) ); } catch ( DataUnavailable e ) { System.out.println( \"DataUnavailable: \" + e.getMessage( ) ); } } } } } } } } For clarity, the example does not perform full error checking when constructing the main Image object and does not perform CorruptData handling in all of the iterators. In a production environment, you use the techniques illustrated in the previous examples under Working with a system dump and Working with a Java dump . In the example, the program iterates through every available Java thread and checks whether it is equal to any of the available image threads. When they are found to be equal, the program displays the following message: \"Found a match\". The example demonstrates: How to iterate down through the class hierarchy. How to handle CorruptData objects from the iterators. The use of the .equals method for testing equality between objects.","title":"DTFJ"},{"location":"interface_dtfj/#diagnostic-tool-framework-for-java","text":"The Diagnostic Tool Framework for Java\u2122 (DTFJ) is a Java application programming interface (API) that is used to support the building of Java diagnostic tools. DTFJ works with data from a system dump or a Java dump. On Linux and AIX\u00ae operating systems, you can get more information from a system dump if you also have copies of executable files and libraries. You can run the jextract utility provided in the SDK to collect these files into a single archive for use in subsequent problem diagnosis. For more information, see Dump extractor . The DTFJ API helps diagnostic tools access the following information: Memory locations stored in the dump (System dumps only) Relationships between memory locations and Java internals (System dumps only) Java threads running in the VM Native threads held in the dump (System dumps only) Java classes and their class loaders that were present Java objects that were present in the heap (System dumps only) Java monitors and the objects and threads they are associated with Details of the workstation on which the dump was produced (System dumps only) Details of the Java version that was being used The command line that launched the VM If your DTFJ application requests information that is not available in the Java dump, the API will return null or throw a DataUnavailable exception. You might need to adapt DTFJ applications written to process system dumps to make them work with Java dumps. DTFJ is implemented in pure Java and tools written using DTFJ can be cross-platform. Therefore, you can analyze a dump taken from one workstation on another (remote and more convenient) machine. For example, a dump produced on an AIX\u00ae Power\u00ae system can be analyzed on a Windows laptop. API documentation for the DTFJ interface can be found here: Application programming reference: DTFJ","title":"Diagnostic Tool Framework for Java"},{"location":"interface_dtfj/#using-the-dtfj-interface","text":"To create applications that use DTFJ, you must use the DTFJ interface. Implementations of this interface have been written that work with system dumps and Java dumps. The diagram that follows illustrates the DTFJ interface. The starting point for working with a dump is to obtain an Image instance by using the ImageFactory class supplied with the concrete implementation of the API.","title":"Using the DTFJ interface"},{"location":"interface_dtfj/#working-with-a-system-dump","text":"The following example shows how to work with a system dump. In this example, the only section of code that ties the dump to a particular implementation of DTFJ is the generation of the factory class. Change the factory if you want to use a different implementation. If there is a problem with the file that is passed to the getImage() method, an IOException is thrown and an appropriate message is issued. If a missing file is passed to the example shown, the following output is produced: Could not find/use required file(s) java.io.FileNotFoundException: core_file.xml (The system cannot find the file specified.) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:135) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:47) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:35) at DTFJEX1.main(DTFJEX1.java:23)Copy In this case, the DTFJ implementation is expecting a dump file to exist. Different errors are caught if the file existed but was not recognized as a valid dump file. Example of working with a system dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX1 { public static void main(String[] args) { Image image = null; if (args.length > 0) { File f = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.j9.ImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(f); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } }","title":"Working with a system dump"},{"location":"interface_dtfj/#working-with-a-java-dump","text":"To work with a Java dump, change the factory class to com.ibm.dtfj.image.javacore.JCImageFactory and pass the Java dump file to the getImage() method. Example of working with a Java dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX2 { public static void main(String[] args) { Image image=null; if (args.length > 0) { File javacoreFile = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.javacore.JCImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(javacoreFile); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } }","title":"Working with a Java dump"},{"location":"interface_dtfj/#analyze-the-dump","text":"After you have obtained an Image instance, you can begin analyzing the dump. The Image instance is the second instance in the class hierarchy for DTFJ illustrated by the following diagram: Some things to note from the diagram: The DTFJ interface is separated into two parts: classes with names that start with Image (the dump, a sequence of bytes with different contents on different platforms) and classes with names that start with Java (the Java internal knowledge). Image and Java classes are linked using a ManagedRuntime class (which is extended by JavaRuntime ). An Image object contains one ImageAddressSpace object (or, on z/OS\u00ae, possibly more). An ImageAddressSpace object contains one ImageProcess object (or, on z/OS, possibly more). Conceptually, you can apply the Image model to any program running with the ImageProcess . For the purposes of this document discussion is limited to the OpenJ9 virtual machine implementations. There is a link from a JavaThread object to its corresponding ImageThread object. Use this link to find out about native code associated with a Java thread, for example JNI functions that have been called from Java. If a JavaThread was not running Java code when the dump was taken, the JavaThread object has no JavaStackFrame objects. In these cases, use the link to the corresponding ImageThread object to find out what native code was running in that thread. This situation is typically the case with the JIT compilation thread and Garbage Collection threads. The DTFJ interface enables you to obtain information about native memory. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . When the Java runtime allocates native memory, the memory is associated with a high-level memory category. For more information about native memory detailed in a Java dump, see Java dump: NATIVEMEMINFO","title":"Analyze the dump"},{"location":"interface_dtfj/#dtfj-example-application","text":"This example is a fully working DTFJ application. Many DTFJ applications will follow a similar model. Sample DTFJ application import java.io.File; import java.util.Iterator; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.CorruptDataException; import com.ibm.dtfj.image.DataUnavailable; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageAddressSpace; import com.ibm.dtfj.image.ImageFactory; import com.ibm.dtfj.image.ImageProcess; import com.ibm.dtfj.java.JavaRuntime; import com.ibm.dtfj.java.JavaThread; import com.ibm.dtfj.image.ImageThread; public class DTFJEX2 { public static void main( String[] args ) { Image image = null; if ( args.length > 0 ) { File f = new File( args[0] ); try { Class factoryClass = Class .forName( \"com.ibm.dtfj.image.j9.ImageFactory\" ); ImageFactory factory = (ImageFactory) factoryClass.newInstance( ); image = factory.getImage( f ); } catch ( Exception ex ) { /* * Should use the error handling as shown in DTFJEX1. */ System.err.println( \"Error in DTFJEX2\" ); ex.printStackTrace( System.err ); } } else { System.err.println( \"No filename specified\" ); } if ( null == image ) { return; } MatchingThreads( image ); } public static void MatchingThreads( Image image ) { ImageThread imgThread = null; Iterator asIt = image.getAddressSpaces( ); while ( asIt.hasNext( ) ) { System.out.println( \"Found ImageAddressSpace...\" ); ImageAddressSpace as = (ImageAddressSpace) asIt.next( ); Iterator prIt = as.getProcesses( ); while ( prIt.hasNext( ) ) { System.out.println( \"Found ImageProcess...\" ); ImageProcess process = (ImageProcess) prIt.next( ); Iterator runTimesIt = process.getRuntimes( ); while ( runTimesIt.hasNext( ) ) { System.out.println( \"Found Runtime...\" ); JavaRuntime javaRT = (JavaRuntime) runTimesIt.next( ); Iterator javaThreadIt = javaRT.getThreads( ); while ( javaThreadIt.hasNext( ) ) { Object tempObj = javaThreadIt.next( ); /* * Should use CorruptData handling for all iterators */ if ( tempObj instanceof CorruptData ) { System.out.println( \"We have some corrupt data\" ); } else { JavaThread javaThread = (JavaThread) tempObj; System.out.println( \"Found JavaThread...\" ); try { imgThread = (ImageThread) javaThread.getImageThread( ); // Now we have a Java thread we can iterator // through the image threads Iterator imgThreadIt = process.getThreads( ); while ( imgThreadIt.hasNext( ) ) { ImageThread imgThread2 = (ImageThread) imgThreadIt .next( ); if ( imgThread.equals( imgThread2 ) ) { System.out.println( \"Found a match:\" ); System.out.println( \"\\tjavaThread \" + javaThread.getName( ) + \" is the same as \" + imgThread2.getID( ) ); } } } catch ( CorruptDataException e ) { System.err.println( \"ImageThread was corrupt: \" + e.getMessage( ) ); } catch ( DataUnavailable e ) { System.out.println( \"DataUnavailable: \" + e.getMessage( ) ); } } } } } } } } For clarity, the example does not perform full error checking when constructing the main Image object and does not perform CorruptData handling in all of the iterators. In a production environment, you use the techniques illustrated in the previous examples under Working with a system dump and Working with a Java dump . In the example, the program iterates through every available Java thread and checks whether it is equal to any of the available image threads. When they are found to be equal, the program displays the following message: \"Found a match\". The example demonstrates: How to iterate down through the class hierarchy. How to handle CorruptData objects from the iterators. The use of the .equals method for testing equality between objects.","title":"DTFJ example application"},{"location":"interface_jvmti/","text":"Java Virtual Machine Tool Interface The Java\u2122 Virtual Machine Tool Interface (JVMTI) is a two-way interface that allows communication between the VM and a native agent. It replaces both the Java Virtual Machine Debug Interface (JVMDI) and Java Virtual Machine Profiler Interface (JVMPI). Overview The JVMTI allows third parties to develop debugging, profiling, and monitoring tools for the VM. The interface contains mechanisms for the agent to notify the VM about the kinds of information it requires, and also provides a means of receiving relevant notifications. Several agents can be attached to a VM at any one time. JVMTI agents can be loaded at startup using short or long forms of the command-line option: -agentlib:<agent-lib-name>=<options> or -agentpath:<path-to-agent>=<options> In the example that follows (see Sample JVMTI agent ), the directory containing the jdwp library is assumed to be on the library path. If you require a specific library, such as jdwp , with your JVMTI agent, you can specify the path at startup, for example: -agentlib:jdwp=<options> For more information about JVMTI, see https://docs.oracle.com/javase/8/docs/technotes/guides/management/index.html . For a guide about writing a JVMTI agent, see http://www.oracle.com/technetwork/articles/javase/jvmti-136367.html . OpenJ9 extensions OpenJ9 extensions to the JVMTI allow a JVMTI agent to query or automatically trigger operations in the VM, including the following tasks: Task OpenJ9 extensions Get the OS thread ID GetOSThreadID Query, set, and reset the VM dump options QueryVmDump , SetVmDump , ResetVmDump Trigger a VM dump, and monitor JVMTI event functions when VM dumps start and end TriggerVmDump , VMDumpStart , VMDumpEnd Set VM trace options SetVmTrace Subscribe to and unsubscribe from VM tracepoints RegisterTracePointSubscriber , DeregisterTracePointSubscriber Query runtime environment native memory categories GetMemoryCategories Query and set VM log options QueryVmLogOptions , SetVmLogOptions Search for and remove a shared class cache IterateSharedCaches , DestroySharedCache Subscribe to and unsubscribe from verbose garbage collection (GC) data logging RegisterVerboseGCSubscriber , DeregisterVerboseGCSubscriber The definitions that you need when you write a JVMTI agent are provided in the header files jvmti.h and ibmjvmti.h , in the include directory. Sample JVMTI agent The following sample shows you how to write a simple JVMTI agent that uses OpenJ9 extensions to the JVMTI. Sample JVMTI agent written in C/C++, which uses the OpenJ9 extensions /* * tiSample.c * * Sample JVMTI agent to demonstrate the OpenJ9 JVMTI dump extensions */ #include \"jvmti.h\" #include \"ibmjvmti.h\" /* Forward declarations for JVMTI callback functions */ void JNICALL VMInitCallback(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread); void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...); /* * Agent_Onload() * * JVMTI agent initialisation function, invoked as agent is loaded by the VM */ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { jvmtiEnv *jvmti = NULL; jvmtiError rc; jint extensionEventCount = 0; jvmtiExtensionEventInfo *extensionEvents = NULL; jint extensionFunctionCount = 0; jvmtiExtensionFunctionInfo *extensionFunctions = NULL; int i = 0, j = 0; printf(\"tiSample: Loading JVMTI sample agent\\n\"); /* Get access to JVMTI */ (*jvm)->GetEnv(jvm, (void **)&jvmti, JVMTI_VERSION_1_0); /* Look up all the JVMTI extension events and functions */ (*jvmti)->GetExtensionEvents(jvmti, &extensionEventCount, &extensionEvents); (*jvmti)->GetExtensionFunctions(jvmti, &extensionFunctionCount, &extensionFunctions); printf(\"tiSample: Found %i JVMTI extension events, %i extension functions\\n\", extensionEventCount, extensionFunctionCount); /* Find the JVMTI extension event we want */ while (i++ < extensionEventCount) { if (strcmp(extensionEvents->id, COM_IBM_VM_DUMP_START) == 0) { /* Found the dump start extension event, now set up a callback for it */ rc = (*jvmti)->SetExtensionEventCallback(jvmti, extensionEvents->extension_event_index, &DumpStartCallback); printf(\"tiSample: Setting JVMTI event callback %s, rc=%i\\n\", COM_IBM_VM_DUMP_START, rc); break; } extensionEvents++; /* move on to the next extension event */ } /* Find the JVMTI extension function we want */ while (j++ < extensionFunctionCount) { jvmtiExtensionFunction function = extensionFunctions->func; if (strcmp(extensionFunctions->id, COM_IBM_SET_VM_DUMP) == 0) { /* Found the set dump extension function, now set a dump option to generate javadumps on thread starts */ rc = function(jvmti, \"java:events=thrstart\"); printf(\"tiSample: Calling JVMTI extension %s, rc=%i\\n\", COM_IBM_SET_VM_DUMP, rc); break; } extensionFunctions++; /* move on to the next extension function */ } return JNI_OK; } /* * DumpStartCallback() * JVMTI callback for dump start event (IBM JVMTI extension) */ void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...) { printf(\"tiSample: Received JVMTI event callback, for event %s\\n\", event); } The sample JVMTI agent consists of two functions, Agent_OnLoad() and DumpStartCallback() : Agent_OnLoad() This function is called by the VM when the agent is loaded at VM startup, which allows the JVMTI agent to modify VM behavior before initialization is complete. The sample agent obtains access to the JVMTI interface by using the JNI Invocation API function GetEnv() . The agent calls the APIs GetExtensionEvents() and GetExtensionFunctions() to find the JVMTI extensions that are supported by the VM. These APIs provide access to the list of extensions available in the jvmtiExtensionEventInfo and jvmtiExtensionFunctionInfo structures. The sample uses an extension event and an extension function in the following way: Extension event: The sample JVMTI agent searches for the extension event VmDumpStart in the list of jvmtiExtensionEventInfo structures, by using the identifier COM_IBM_VM_DUMP_START provided in ibmjvmti.h . When the event is found, the JVMTI agent calls the JVMTI interface SetExtensionEventCallback() to enable the event, providing a function DumpStartCallback() that is called when the event is triggered. Extension function: Next, the sample JVMTI agent searches for the extension function SetVMDump in the list of jvmtiExtensionFunctionInfo structures, by using the identifier COM_IBM_SET_VM_DUMP provided in ibmjvmti.h . The JVMTI agent calls the function by using the jvmtiExtensionFunction pointer to set a VM dump option java:events=thrstart . This option requests the VM to trigger a Java dump every time a VM thread is started. DumpStartCallback() This callback function issues a message when the associated extension event is called. In the sample code, DumpStartCallback() is used when the VmDumpStart event is triggered. Using the sample JVMTI agent Build the sample JVMTI agent: Windows: cl /I<jre_path>\\include /MD /FetiSample.dll tiSample.c /link /DLL Linux, AIX\u00ae, and z/OS\u00ae: gcc -I<jre_path>/include -o libtiSample.so -shared tiSample.c where <jre_path> is the path to your Java runtime environment installation. To run the sample JVMTI agent, use the command: java -agentlib:tiSample -version When the sample JVMTI agent loads, messages are generated. When the JVMTI agent initiates a Java dump, the message JVMDUMP010 is issued. API reference The following sections provide reference information for the OpenJ9 extensions to the JVMTI. GetOSThreadID You can get the OS thread ID by using the GetOSThreadID() API: jvmtiError GetOSThreadID(jvmtiEnv* jvmti_env, jthread thread, jlong * threadid_ptr); Parameters jvmti_env : A pointer to the JVMTI environment. thread : The thread for which the ID is required. threadid_ptr : A pointer to a variable, used to return the thread ID that corresponds to the thread specified by the thread parameter. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The threadid_ptr parameter is null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_INVALID_THREAD : The thread is not valid. JVMTI_ERROR_THREAD_NOT_ALIVE : The VM state of the thread is not started or has died. JVMTI_ERROR_UNATTACHED_THREAD : The current thread is not attached to the VM. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI start or live phase. Identifiers JVMTI Extension Function identifier: com.ibm.GetOSThreadID Macro declaration in the ibmjvmti.h file: COM_IBM_GET_OS_THREAD_ID QueryVmDump You can query the VM dump options that are set for a VM by using the QueryVmDump() API: jvmtiError QueryVmDump(jvmtiEnv* jvmti_env, jint buffer_size, void* options_buffer, jint* data_size_ptr) This extension returns a set of dump option specifications as ASCII strings. The syntax of the option string is the same as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . The option strings are separated by newline characters. If the memory buffer is too small to contain the current VM dump option strings, you can expect the following results: The error message JVMTI_ERROR_ILLEGAL_ARGUMENT is returned. The variable for data_size_ptr is set to the required buffer size. Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option strings. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options_buffer or data_size_ptr parameters are null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer in options_buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_DUMP SetVmDump You can set VM dump options by using the SetVmDump() API: jvmtiError SetVmDump(jvmtiEnv* jvmti_env, char* option) The dump option is passed in as an ASCII character string. Use the same syntax as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . When dumps are in progress, the dump configuration is locked, and calls to SetVmDump() fail with a return value of JVMTI_ERROR_NOT_AVAILABLE . Parameters jvmti_env : A pointer to the JVMTI environment. option : The VM dump option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xdump string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_DUMP TriggerVmDump You can trigger a VM dump and specify the type of dump you want by using the TriggerVmDump() API: jvmtiError TriggerVmDump(jvmtiEnv* jvmti_env, char* option) Choose the type of dump required by specifying an ASCII string that contains one of the supported dump agent types. See -Xdump . JVMTI events are provided at the start and end of the dump. Parameters jvmti_env : A pointer to the JVMTI environment. option : A pointer to the dump type string, which can be one of the following types: stack java system console tool heap snap ceedump (z/OS only) Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.TriggerVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_TRIGGER_VM_DUMP ResetVmDump You can reset VM dump options to the values at VM initialization by using the ResetVmDump() API: jvmtiError ResetVmDump(jvmtiEnv* jvmti_env) Parameters jvmti_env : The JVMTI environment pointer. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.ResetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_RESET_VM_DUMP VMDumpStart The following JVMTI event function is called when a VM dump starts: void JNICALL VMDumpStart(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait.\" Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name, such as com.ibm.VmDumpStart . detail : The dump event detail string. The string can be empty. Returns None VMDumpEnd The following JVMTI event function is called when a VM dump ends: void JNICALL VMDumpEnd(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait. Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name com.ibm.VmDumpEnd . detail : The dump event detail string. The string can be empty. Returns None SetVmTrace You can set VM trace options by using the SetVmTrace() API: jvmtiError SetVmTrace(jvmtiEnv* jvmti_env, char* option) The trace option is passed in as an ASCII character string. Use the same syntax as the -Xtrace command-line option, with the initial -Xtrace: omitted. See -Xtrace . Parameters jvmti_env : JVMTI environment pointer. option : Enter the VM trace option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The option parameter contains an invalid -Xtrace string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmTrace Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_TRACE RegisterTracePointSubscriber You can subscribe to VM tracepoints by using the RegisterTracePointSubscriber() API: jvmtiError RegisterTracePointSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiTraceSubscriber subscriber, jvmtiTraceAlarm alarm, void *userData, void **subscriptionID) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiTraceSubscriber . alarm : A function pointer of type jvmtiTraceAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterTracePointSubscriber call if successful. The value must be supplied to a future call to the DeregisterTracePointSubscriber API, which is used to unsubscribe from the VM tracepoint. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : VM trace is not available. JVMTI_ERROR_INTERNAL : An internal error occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_TRACEPOINT_SUBSCRIBER jvmtiTraceSubscriber function The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiTraceSubscriber)(jvmtiEnv *jvmti_env, void *record, jlong length, void *user_data); The subscriber function must be of type jvmtiTraceSubscriber , which is declared in ibmjvmti.h . This function is called with each tracepoint record that is selected through the -Xtrace:external option. The tracepoint record that is supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, the subscription is disconnected, and no further tracepoints are sent to the subscriber. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : A UTF-8 string that contains a tracepoint record. length : The number of UTF-8 characters in the tracepoint record. user_data : User data that is supplied when the subscriber is registered. jvmtiTraceAlarm function The alarm function type is defined as follows: typedef jvmtiError (*jvmtiTraceAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiTraceAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier. user_data : User data that is supplied when the subscriber is registered. DeregisterTracePointSubscriber You can unsubscribe from VM tracepoints by using the DeregisterTracePointSubscriber() API: jvmtiError DeregisterTracePointSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterTracePointSubscriber() API is called, no further calls are made to the subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterTracePointSubscriber API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_TRACEPOINT_SUBSCRIBER GetMemoryCategories You can query runtime environment native memory categories by using the GetMemoryCategories() API: jvmtiError GetMemoryCategories(jvmtiEnv* env, jint version, jint max_categories, jvmtiMemoryCategory * categories_buffer, jint * written_count_ptr, jint * total_categories_ptr); You can query the total native memory consumption of the runtime environment for each memory category by using this API. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . Runtime environment native memory use is grouped under high-level memory categories, as described in the NATIVEMEMINFO section of the Java dump topic. The data returned by the GetMemoryCategories() API is consistent with this format. See Java dump: NATIVEMEMINFO . The extension writes native memory information to a memory buffer specified by the user. Each memory category is recorded as a jvmtiMemoryCategory structure, whose format is defined in ibmjvmti.h . You can use the GetMemoryCategories() API to work out the buffer size you must allocate to hold all memory categories defined inside the VM. To calculate the size, call the API with a null categories_buffer argument and a non-null total_categories_ptr argument. Parameters env : A pointer to the JVMTI environment. version : The version of the jvmtiMemoryCategory structure that you are using. Use COM_IBM_GET_MEMORY_CATEGORIES_VERSION_1 for this argument, unless you must work with an obsolete version of the jvmtiMemoryCategory structure. max_categories : The number of jvmtiMemoryCategory structures that can fit in the categories_buffer memory buffer. categories_buffer : A pointer to the memory buffer for holding the result of the GetMemoryCategories() call. The number of jvmtiMemoryCategory slots available in the categories_buffer memory buffer must be accurately specified with max_categories , otherwise GetMemoryCategories() can overflow the memory buffer. The value can be null. written_count_ptr : A pointer to jint to store the number of jvmtiMemoryCategory structures to be written to the categories_buffer memory buffer. The value can be null. total_categories_ptr : A pointer to jint to store the total number of memory categories declared in the VM. The value can be null. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_UNSUPPORTED_VERSION : Unrecognized value passed for version. JVMTI_ERROR_ILLEGAL_ARGUMENT : Illegal argument; categories_buffer , count_ptr , and total_categories_ptr all have null values. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is invalid. JVMTI_ERROR_OUT_OF_MEMORY : Memory category data is truncated because max_categories is not large enough. Identifiers JVMTI Extension Function identifier: com.ibm.GetMemoryCategories Macro declaration in the ibmjvmti.h file: COM_IBM_GET_MEMORY_CATEGORIES QueryVmLogOptions You can query VM log options by using the QueryVmLogOptions() API: jvmtiError QueryVmLogOptions(jvmtiEnv* jvmti_env, jint buffer_size, void* options, jint* data_size_ptr) This extension returns the current log options as an ASCII string. The syntax of the string is the same as the -Xlog command-line option, with the initial -Xlog: omitted. For example, the string \"error,warn\" indicates that the VM is set to log error and warning messages only. For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. If the memory buffer is too small to contain the current VM log option string, the JVMTI_ERROR_ILLEGAL_ARGUMENT error message is returned. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option string. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options or data_size_ptr parameters are null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_LOG_OPTIONS SetVmLogOptions You can set VM log options by using the SetVmLogOptions() API: jvmtiError SetVmLogOptions(jvmtiEnv* jvmti_env, char* options_buffer) The log option is passed in as an ASCII character string. Use the same syntax as the -Xlog command-line option, with the initial -Xlog: omitted. For example, to set the VM to log error and warning messages, pass in a string containing \"error,warn\". For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. options_buffer : A pointer to memory containing the log option. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xlog string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_LOG_OPTIONS IterateSharedCaches You can search for shared class caches that exist in a specified cache directory by using the IterateSharedCaches() API: jvmtiError IterateSharedCaches(jvmtiEnv* env, jint version, const char *cacheDir, jint flags, jboolean useCommandLineValues, jvmtiIterateSharedCachesCallback callback, void *user_data); Information about the caches is returned in a structure that is populated by a user-specified callback function. You can specify the search directory in two ways: Set the value of useCommandLineValues to true and specify the directory on the command line. If the directory is not specified on the command line, the default location for the platform is used. Set the value of useCommandLineValues to false and use the cacheDir parameter. To accept the default location for the platform, specify cacheDir with a null value. Parameters env : A pointer to the JVMTI environment. version : Version information for IterateSharedCaches , which describes the jvmtiSharedCacheInfo structure passed to the jvmtiIterateSharedCachesCallback function. The values allowed are: COM_IBM_ITERATE_SHARED_CACHES_VERSION_1 COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. flags : Reserved for future use. The only value allowed is COM_IBM_ITERATE_SHARED_CACHES_NO_FLAGS . useCommandLineValues : Set this value to true when you want to specify the cache directory on the command line. Set this value to false when you want to use the cacheDir parameter. callback : A function pointer to a user provided callback routine jvmtiIterateSharedCachesCallback . user_data : User supplied data, passed as an argument to the callback function. jint (JNICALL *jvmtiIterateSharedCachesCallback)(jvmtiEnv *env,jvmtiSharedCacheInfo *cache_info, void *user_data); Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_UNSUPPORTED_VERSION : The version parameter is not valid. JVMTI_ERROR_NULL_POINTER : The callback parameter is null. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The flags parameter is not valid. JVMTI_ERROR_INTERNAL : This error is returned when the jvmtiIterateSharedCachesCallback returns JNI_ERR . Identifiers JVMTI Extension Function identifier: com.ibm.IterateSharedCaches Macro declaration in the ibmjvmti.h file: COM_IBM_ITERATE_SHARED_CACHES jvmtiIterateSharedCachesCallback function Callback function parameters env : A pointer to the JVMTI environment when calling COM_IBM_ITERATE_SHARED_CACHES . cache_info : A jvmtiSharedCacheInfo structure containing information about a shared cache. user_data : User-supplied data, passed as an argument to IterateSharedCaches . Callback function returns JNI_OK : Continue iterating. JNI_ERR : Stop iterating, which causes IterateSharedCaches to return JVMTI_ERROR_INTERNAL jvmtiSharedCacheInfo structure The structure of jvmtiSharedCacheInfo typedef struct jvmtiSharedCacheInfo { const char *name; // the name of the shared cache jboolean isCompatible; // if the shared cache is compatible with this VM jboolean isPersistent; // true if the shared cache is persistent, false if its non-persistent jint os_shmid; // the OS shared memory ID associated with a non-persistent cache, -1 otherwise jint os_semid; // the OS shared semaphore ID associated with a non-persistent cache, -1 otherwise jint modLevel; // one of: // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA5 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA6 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA7 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA8 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA9 // from Java 10: the version number of the Java level on which the shared cache is created jint addrMode; // the address mode of the VM creating the shared cache: includes additional // information on whether it is a 64-bit compressedRefs cache when // COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. jboolean isCorrupt; // if the cache is corrupted jlong cacheSize; // the total usable shared class cache size, or -1 when isCompatible is false jlong freeBytes; // the number of free bytes in the shared class cache, or -1 when isCompatible is false jlong lastDetach; // the last detach time specified in milliseconds since 00:00:00 on 1 January 1970 UTC, // or -1 when the last detach time is not available jint cacheType; // the type of the cache jlong softMaxBytes; // the soft limit for the available space in the cache } jvmtiSharedCacheInfo; Notes: The field cacheType is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 or later is specified. jvmtiSharedCacheInfo.addrMode encodes both address mode and the compressed reference mode when COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. In this case, use the following set of macros to access the address mode and compressed reference mode: To get the address mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_ADDR_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_SHARED_CACHE_ADDRMODE_32 COM_IBM_SHARED_CACHE_ADDRMODE_64 To get the compressed references mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_CMPRSSREF_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_ITERATE_SHARED_CACHES_UNKNOWN_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_NON_COMPRESSED_POINTERS_MODE The field softMaxBytes is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 or later is specified. DestroySharedCache You can remove a shared class cache by using the DestroySharedCache() API: jvmtiError DestroySharedCache(jvmtiEnv *env, const char *cacheDir, const char *name, jint persistence, jboolean useCommandLineValues, jint *internalErrorCode); This extension removes a named shared class cache of a given persistence type, in a given directory. You can specify the cache name, persistence type, and directory in one of these ways: Set useCommandLineValues to true and specify the values on the command line. If a value is not available, the default values for the platform are used. Set useCommandLineValues to false and use the cacheDir , persistence and cacheName parameters to identify the cache to be removed. To accept the default value for cacheDir or cacheName , specify the parameter with a null value. Parameters env : A pointer to the JVMTI environment. cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. cacheName : When the value of useCommandLineValues is false , specify the name of the cache to be removed. If the value is null , the platform-dependent default is used. persistence : When the value of useCommandLineValues is false, specify the type of cache to remove. This parameter must have one of the following values: PERSISTENCE_DEFAULT (The default value for the platform). PERSISTENT NONPERSISTENT useCommandLineValues : Set this value to true when you want to specify the shared class cache name, persistence type, and directory on the command line. Set this value to false when you want to use the cacheDir , persistence , and cacheName parameters instead. internalErrorCode : If not null , this value is set to one of the following constants when JVMTI_ERROR_INTERNAL is returned: COM_IBM_DESTROYED_ALL_CACHE : Set when JVMTI_ERROR_NONE is returned. COM_IBM_DESTROYED_NONE : Set when the function fails to remove any caches. COM_IBM_DESTROY_FAILED_CURRENT_GEN_CACHE : Set when the function fails to remove the existing current generation cache, irrespective of the state of older generation caches. COM_IBM_DESTROY_FAILED_OLDER_GEN_CACHE : Set when the function fails to remove any older generation caches. The current generation cache does not exist or is successfully removed. Returns JVMTI_ERROR_NONE : Success. No cache exists or all existing caches of all generations are removed. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The persistence parameter is not valid. JVMTI_ERROR_INTERNAL : Failed to remove any existing cache with the given name. See the value of the internalErrorCode parameter for more information about the failure. Identifiers JVMTI Extension Function identifier: com.ibm.DestroySharedCache Macro declaration in the ibmjvmti.h file: COM_IBM_DESTROY_SHARED_CACHE RegisterVerboseGCSubscriber You can subscribe to verbose garbage collection (GC) data logging by using the RegisterVerboseGCSubscriber() API: jvmtiError RegisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiVerboseGCSubscriber subscriber, jvmtiVerboseGCAlarm alarm, void *user_data, void **subscription_id) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiVerboseGCSubscriber . alarm : A function pointer of type jvmtiVerboseGCAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterVerboseGCSubscriber call if successful. The value must be supplied to a future call to DeregisterVerboseGCSubscriber API, which is used to unsubscribe from verbose GC data logging. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : GC verbose logging is not available. JVMTI_ERROR_INTERNAL : An internal error has occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_VERBOSEGC_SUBSCRIBER jvmtiVerboseGCSubscriber function The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCSubscriber)(jvmtiEnv *jvmti_env, const char *record, jlong length, void *user_data); The subscriber function must be of type jvmtiVerboseGCSubscriber , which is declared in ibmjvmti.h . This function is called with each record of verbose logging data produced by the VM. The verbose logging record supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, and the subscription is deregistered. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : An ASCII string that contains a verbose log record. length : The number of ASCII characters in the verbose log record. user_data : User data supplied when the subscriber is registered. jvmtiVerboseGCAlarm function The alarm function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiVerboseGCAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. user_data : User data supplied when the subscriber is registered. subscription_id : The subscription identifier. DeregisterVerboseGCSubscriber You can unsubscribe from verbose Garbage Collection (GC) data logging by using the DeregisterVerboseGCSubscriber() API: jvmtiError DeregisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterVerboseGCSubscriber() API is called, no further calls are made to the previously registered subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterVerboseGCSubscriber() API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_VERBOSEGC_SUBSCRIBER","title":"JVMTI"},{"location":"interface_jvmti/#java-virtual-machine-tool-interface","text":"The Java\u2122 Virtual Machine Tool Interface (JVMTI) is a two-way interface that allows communication between the VM and a native agent. It replaces both the Java Virtual Machine Debug Interface (JVMDI) and Java Virtual Machine Profiler Interface (JVMPI).","title":"Java Virtual Machine Tool Interface"},{"location":"interface_jvmti/#overview","text":"The JVMTI allows third parties to develop debugging, profiling, and monitoring tools for the VM. The interface contains mechanisms for the agent to notify the VM about the kinds of information it requires, and also provides a means of receiving relevant notifications. Several agents can be attached to a VM at any one time. JVMTI agents can be loaded at startup using short or long forms of the command-line option: -agentlib:<agent-lib-name>=<options> or -agentpath:<path-to-agent>=<options> In the example that follows (see Sample JVMTI agent ), the directory containing the jdwp library is assumed to be on the library path. If you require a specific library, such as jdwp , with your JVMTI agent, you can specify the path at startup, for example: -agentlib:jdwp=<options> For more information about JVMTI, see https://docs.oracle.com/javase/8/docs/technotes/guides/management/index.html . For a guide about writing a JVMTI agent, see http://www.oracle.com/technetwork/articles/javase/jvmti-136367.html .","title":"Overview"},{"location":"interface_jvmti/#openj9-extensions","text":"OpenJ9 extensions to the JVMTI allow a JVMTI agent to query or automatically trigger operations in the VM, including the following tasks: Task OpenJ9 extensions Get the OS thread ID GetOSThreadID Query, set, and reset the VM dump options QueryVmDump , SetVmDump , ResetVmDump Trigger a VM dump, and monitor JVMTI event functions when VM dumps start and end TriggerVmDump , VMDumpStart , VMDumpEnd Set VM trace options SetVmTrace Subscribe to and unsubscribe from VM tracepoints RegisterTracePointSubscriber , DeregisterTracePointSubscriber Query runtime environment native memory categories GetMemoryCategories Query and set VM log options QueryVmLogOptions , SetVmLogOptions Search for and remove a shared class cache IterateSharedCaches , DestroySharedCache Subscribe to and unsubscribe from verbose garbage collection (GC) data logging RegisterVerboseGCSubscriber , DeregisterVerboseGCSubscriber The definitions that you need when you write a JVMTI agent are provided in the header files jvmti.h and ibmjvmti.h , in the include directory.","title":"OpenJ9 extensions"},{"location":"interface_jvmti/#sample-jvmti-agent","text":"The following sample shows you how to write a simple JVMTI agent that uses OpenJ9 extensions to the JVMTI. Sample JVMTI agent written in C/C++, which uses the OpenJ9 extensions /* * tiSample.c * * Sample JVMTI agent to demonstrate the OpenJ9 JVMTI dump extensions */ #include \"jvmti.h\" #include \"ibmjvmti.h\" /* Forward declarations for JVMTI callback functions */ void JNICALL VMInitCallback(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread); void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...); /* * Agent_Onload() * * JVMTI agent initialisation function, invoked as agent is loaded by the VM */ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { jvmtiEnv *jvmti = NULL; jvmtiError rc; jint extensionEventCount = 0; jvmtiExtensionEventInfo *extensionEvents = NULL; jint extensionFunctionCount = 0; jvmtiExtensionFunctionInfo *extensionFunctions = NULL; int i = 0, j = 0; printf(\"tiSample: Loading JVMTI sample agent\\n\"); /* Get access to JVMTI */ (*jvm)->GetEnv(jvm, (void **)&jvmti, JVMTI_VERSION_1_0); /* Look up all the JVMTI extension events and functions */ (*jvmti)->GetExtensionEvents(jvmti, &extensionEventCount, &extensionEvents); (*jvmti)->GetExtensionFunctions(jvmti, &extensionFunctionCount, &extensionFunctions); printf(\"tiSample: Found %i JVMTI extension events, %i extension functions\\n\", extensionEventCount, extensionFunctionCount); /* Find the JVMTI extension event we want */ while (i++ < extensionEventCount) { if (strcmp(extensionEvents->id, COM_IBM_VM_DUMP_START) == 0) { /* Found the dump start extension event, now set up a callback for it */ rc = (*jvmti)->SetExtensionEventCallback(jvmti, extensionEvents->extension_event_index, &DumpStartCallback); printf(\"tiSample: Setting JVMTI event callback %s, rc=%i\\n\", COM_IBM_VM_DUMP_START, rc); break; } extensionEvents++; /* move on to the next extension event */ } /* Find the JVMTI extension function we want */ while (j++ < extensionFunctionCount) { jvmtiExtensionFunction function = extensionFunctions->func; if (strcmp(extensionFunctions->id, COM_IBM_SET_VM_DUMP) == 0) { /* Found the set dump extension function, now set a dump option to generate javadumps on thread starts */ rc = function(jvmti, \"java:events=thrstart\"); printf(\"tiSample: Calling JVMTI extension %s, rc=%i\\n\", COM_IBM_SET_VM_DUMP, rc); break; } extensionFunctions++; /* move on to the next extension function */ } return JNI_OK; } /* * DumpStartCallback() * JVMTI callback for dump start event (IBM JVMTI extension) */ void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...) { printf(\"tiSample: Received JVMTI event callback, for event %s\\n\", event); } The sample JVMTI agent consists of two functions, Agent_OnLoad() and DumpStartCallback() :","title":"Sample JVMTI agent"},{"location":"interface_jvmti/#agent_onload","text":"This function is called by the VM when the agent is loaded at VM startup, which allows the JVMTI agent to modify VM behavior before initialization is complete. The sample agent obtains access to the JVMTI interface by using the JNI Invocation API function GetEnv() . The agent calls the APIs GetExtensionEvents() and GetExtensionFunctions() to find the JVMTI extensions that are supported by the VM. These APIs provide access to the list of extensions available in the jvmtiExtensionEventInfo and jvmtiExtensionFunctionInfo structures. The sample uses an extension event and an extension function in the following way: Extension event: The sample JVMTI agent searches for the extension event VmDumpStart in the list of jvmtiExtensionEventInfo structures, by using the identifier COM_IBM_VM_DUMP_START provided in ibmjvmti.h . When the event is found, the JVMTI agent calls the JVMTI interface SetExtensionEventCallback() to enable the event, providing a function DumpStartCallback() that is called when the event is triggered. Extension function: Next, the sample JVMTI agent searches for the extension function SetVMDump in the list of jvmtiExtensionFunctionInfo structures, by using the identifier COM_IBM_SET_VM_DUMP provided in ibmjvmti.h . The JVMTI agent calls the function by using the jvmtiExtensionFunction pointer to set a VM dump option java:events=thrstart . This option requests the VM to trigger a Java dump every time a VM thread is started.","title":"Agent_OnLoad()"},{"location":"interface_jvmti/#dumpstartcallback","text":"This callback function issues a message when the associated extension event is called. In the sample code, DumpStartCallback() is used when the VmDumpStart event is triggered.","title":"DumpStartCallback()"},{"location":"interface_jvmti/#using-the-sample-jvmti-agent","text":"Build the sample JVMTI agent: Windows: cl /I<jre_path>\\include /MD /FetiSample.dll tiSample.c /link /DLL Linux, AIX\u00ae, and z/OS\u00ae: gcc -I<jre_path>/include -o libtiSample.so -shared tiSample.c where <jre_path> is the path to your Java runtime environment installation. To run the sample JVMTI agent, use the command: java -agentlib:tiSample -version When the sample JVMTI agent loads, messages are generated. When the JVMTI agent initiates a Java dump, the message JVMDUMP010 is issued.","title":"Using the sample JVMTI agent"},{"location":"interface_jvmti/#api-reference","text":"The following sections provide reference information for the OpenJ9 extensions to the JVMTI.","title":"API reference"},{"location":"interface_jvmti/#getosthreadid","text":"You can get the OS thread ID by using the GetOSThreadID() API: jvmtiError GetOSThreadID(jvmtiEnv* jvmti_env, jthread thread, jlong * threadid_ptr); Parameters jvmti_env : A pointer to the JVMTI environment. thread : The thread for which the ID is required. threadid_ptr : A pointer to a variable, used to return the thread ID that corresponds to the thread specified by the thread parameter. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The threadid_ptr parameter is null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_INVALID_THREAD : The thread is not valid. JVMTI_ERROR_THREAD_NOT_ALIVE : The VM state of the thread is not started or has died. JVMTI_ERROR_UNATTACHED_THREAD : The current thread is not attached to the VM. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI start or live phase. Identifiers JVMTI Extension Function identifier: com.ibm.GetOSThreadID Macro declaration in the ibmjvmti.h file: COM_IBM_GET_OS_THREAD_ID","title":"GetOSThreadID"},{"location":"interface_jvmti/#queryvmdump","text":"You can query the VM dump options that are set for a VM by using the QueryVmDump() API: jvmtiError QueryVmDump(jvmtiEnv* jvmti_env, jint buffer_size, void* options_buffer, jint* data_size_ptr) This extension returns a set of dump option specifications as ASCII strings. The syntax of the option string is the same as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . The option strings are separated by newline characters. If the memory buffer is too small to contain the current VM dump option strings, you can expect the following results: The error message JVMTI_ERROR_ILLEGAL_ARGUMENT is returned. The variable for data_size_ptr is set to the required buffer size. Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option strings. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options_buffer or data_size_ptr parameters are null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer in options_buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_DUMP","title":"QueryVmDump"},{"location":"interface_jvmti/#setvmdump","text":"You can set VM dump options by using the SetVmDump() API: jvmtiError SetVmDump(jvmtiEnv* jvmti_env, char* option) The dump option is passed in as an ASCII character string. Use the same syntax as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . When dumps are in progress, the dump configuration is locked, and calls to SetVmDump() fail with a return value of JVMTI_ERROR_NOT_AVAILABLE . Parameters jvmti_env : A pointer to the JVMTI environment. option : The VM dump option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xdump string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_DUMP","title":"SetVmDump"},{"location":"interface_jvmti/#triggervmdump","text":"You can trigger a VM dump and specify the type of dump you want by using the TriggerVmDump() API: jvmtiError TriggerVmDump(jvmtiEnv* jvmti_env, char* option) Choose the type of dump required by specifying an ASCII string that contains one of the supported dump agent types. See -Xdump . JVMTI events are provided at the start and end of the dump. Parameters jvmti_env : A pointer to the JVMTI environment. option : A pointer to the dump type string, which can be one of the following types: stack java system console tool heap snap ceedump (z/OS only) Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.TriggerVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_TRIGGER_VM_DUMP","title":"TriggerVmDump"},{"location":"interface_jvmti/#resetvmdump","text":"You can reset VM dump options to the values at VM initialization by using the ResetVmDump() API: jvmtiError ResetVmDump(jvmtiEnv* jvmti_env) Parameters jvmti_env : The JVMTI environment pointer. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.ResetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_RESET_VM_DUMP","title":"ResetVmDump"},{"location":"interface_jvmti/#vmdumpstart","text":"The following JVMTI event function is called when a VM dump starts: void JNICALL VMDumpStart(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait.\" Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name, such as com.ibm.VmDumpStart . detail : The dump event detail string. The string can be empty. Returns None","title":"VMDumpStart"},{"location":"interface_jvmti/#vmdumpend","text":"The following JVMTI event function is called when a VM dump ends: void JNICALL VMDumpEnd(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait. Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name com.ibm.VmDumpEnd . detail : The dump event detail string. The string can be empty. Returns None","title":"VMDumpEnd"},{"location":"interface_jvmti/#setvmtrace","text":"You can set VM trace options by using the SetVmTrace() API: jvmtiError SetVmTrace(jvmtiEnv* jvmti_env, char* option) The trace option is passed in as an ASCII character string. Use the same syntax as the -Xtrace command-line option, with the initial -Xtrace: omitted. See -Xtrace . Parameters jvmti_env : JVMTI environment pointer. option : Enter the VM trace option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The option parameter contains an invalid -Xtrace string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmTrace Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_TRACE","title":"SetVmTrace"},{"location":"interface_jvmti/#registertracepointsubscriber","text":"You can subscribe to VM tracepoints by using the RegisterTracePointSubscriber() API: jvmtiError RegisterTracePointSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiTraceSubscriber subscriber, jvmtiTraceAlarm alarm, void *userData, void **subscriptionID) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiTraceSubscriber . alarm : A function pointer of type jvmtiTraceAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterTracePointSubscriber call if successful. The value must be supplied to a future call to the DeregisterTracePointSubscriber API, which is used to unsubscribe from the VM tracepoint. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : VM trace is not available. JVMTI_ERROR_INTERNAL : An internal error occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_TRACEPOINT_SUBSCRIBER","title":"RegisterTracePointSubscriber"},{"location":"interface_jvmti/#jvmtitracesubscriber-function","text":"The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiTraceSubscriber)(jvmtiEnv *jvmti_env, void *record, jlong length, void *user_data); The subscriber function must be of type jvmtiTraceSubscriber , which is declared in ibmjvmti.h . This function is called with each tracepoint record that is selected through the -Xtrace:external option. The tracepoint record that is supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, the subscription is disconnected, and no further tracepoints are sent to the subscriber. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : A UTF-8 string that contains a tracepoint record. length : The number of UTF-8 characters in the tracepoint record. user_data : User data that is supplied when the subscriber is registered.","title":"jvmtiTraceSubscriber function"},{"location":"interface_jvmti/#jvmtitracealarm-function","text":"The alarm function type is defined as follows: typedef jvmtiError (*jvmtiTraceAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiTraceAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier. user_data : User data that is supplied when the subscriber is registered.","title":"jvmtiTraceAlarm function"},{"location":"interface_jvmti/#deregistertracepointsubscriber","text":"You can unsubscribe from VM tracepoints by using the DeregisterTracePointSubscriber() API: jvmtiError DeregisterTracePointSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterTracePointSubscriber() API is called, no further calls are made to the subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterTracePointSubscriber API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_TRACEPOINT_SUBSCRIBER","title":"DeregisterTracePointSubscriber"},{"location":"interface_jvmti/#getmemorycategories","text":"You can query runtime environment native memory categories by using the GetMemoryCategories() API: jvmtiError GetMemoryCategories(jvmtiEnv* env, jint version, jint max_categories, jvmtiMemoryCategory * categories_buffer, jint * written_count_ptr, jint * total_categories_ptr); You can query the total native memory consumption of the runtime environment for each memory category by using this API. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . Runtime environment native memory use is grouped under high-level memory categories, as described in the NATIVEMEMINFO section of the Java dump topic. The data returned by the GetMemoryCategories() API is consistent with this format. See Java dump: NATIVEMEMINFO . The extension writes native memory information to a memory buffer specified by the user. Each memory category is recorded as a jvmtiMemoryCategory structure, whose format is defined in ibmjvmti.h . You can use the GetMemoryCategories() API to work out the buffer size you must allocate to hold all memory categories defined inside the VM. To calculate the size, call the API with a null categories_buffer argument and a non-null total_categories_ptr argument. Parameters env : A pointer to the JVMTI environment. version : The version of the jvmtiMemoryCategory structure that you are using. Use COM_IBM_GET_MEMORY_CATEGORIES_VERSION_1 for this argument, unless you must work with an obsolete version of the jvmtiMemoryCategory structure. max_categories : The number of jvmtiMemoryCategory structures that can fit in the categories_buffer memory buffer. categories_buffer : A pointer to the memory buffer for holding the result of the GetMemoryCategories() call. The number of jvmtiMemoryCategory slots available in the categories_buffer memory buffer must be accurately specified with max_categories , otherwise GetMemoryCategories() can overflow the memory buffer. The value can be null. written_count_ptr : A pointer to jint to store the number of jvmtiMemoryCategory structures to be written to the categories_buffer memory buffer. The value can be null. total_categories_ptr : A pointer to jint to store the total number of memory categories declared in the VM. The value can be null. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_UNSUPPORTED_VERSION : Unrecognized value passed for version. JVMTI_ERROR_ILLEGAL_ARGUMENT : Illegal argument; categories_buffer , count_ptr , and total_categories_ptr all have null values. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is invalid. JVMTI_ERROR_OUT_OF_MEMORY : Memory category data is truncated because max_categories is not large enough. Identifiers JVMTI Extension Function identifier: com.ibm.GetMemoryCategories Macro declaration in the ibmjvmti.h file: COM_IBM_GET_MEMORY_CATEGORIES","title":"GetMemoryCategories"},{"location":"interface_jvmti/#queryvmlogoptions","text":"You can query VM log options by using the QueryVmLogOptions() API: jvmtiError QueryVmLogOptions(jvmtiEnv* jvmti_env, jint buffer_size, void* options, jint* data_size_ptr) This extension returns the current log options as an ASCII string. The syntax of the string is the same as the -Xlog command-line option, with the initial -Xlog: omitted. For example, the string \"error,warn\" indicates that the VM is set to log error and warning messages only. For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. If the memory buffer is too small to contain the current VM log option string, the JVMTI_ERROR_ILLEGAL_ARGUMENT error message is returned. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option string. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options or data_size_ptr parameters are null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_LOG_OPTIONS","title":"QueryVmLogOptions"},{"location":"interface_jvmti/#setvmlogoptions","text":"You can set VM log options by using the SetVmLogOptions() API: jvmtiError SetVmLogOptions(jvmtiEnv* jvmti_env, char* options_buffer) The log option is passed in as an ASCII character string. Use the same syntax as the -Xlog command-line option, with the initial -Xlog: omitted. For example, to set the VM to log error and warning messages, pass in a string containing \"error,warn\". For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. options_buffer : A pointer to memory containing the log option. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xlog string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_LOG_OPTIONS","title":"SetVmLogOptions"},{"location":"interface_jvmti/#iteratesharedcaches","text":"You can search for shared class caches that exist in a specified cache directory by using the IterateSharedCaches() API: jvmtiError IterateSharedCaches(jvmtiEnv* env, jint version, const char *cacheDir, jint flags, jboolean useCommandLineValues, jvmtiIterateSharedCachesCallback callback, void *user_data); Information about the caches is returned in a structure that is populated by a user-specified callback function. You can specify the search directory in two ways: Set the value of useCommandLineValues to true and specify the directory on the command line. If the directory is not specified on the command line, the default location for the platform is used. Set the value of useCommandLineValues to false and use the cacheDir parameter. To accept the default location for the platform, specify cacheDir with a null value. Parameters env : A pointer to the JVMTI environment. version : Version information for IterateSharedCaches , which describes the jvmtiSharedCacheInfo structure passed to the jvmtiIterateSharedCachesCallback function. The values allowed are: COM_IBM_ITERATE_SHARED_CACHES_VERSION_1 COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. flags : Reserved for future use. The only value allowed is COM_IBM_ITERATE_SHARED_CACHES_NO_FLAGS . useCommandLineValues : Set this value to true when you want to specify the cache directory on the command line. Set this value to false when you want to use the cacheDir parameter. callback : A function pointer to a user provided callback routine jvmtiIterateSharedCachesCallback . user_data : User supplied data, passed as an argument to the callback function. jint (JNICALL *jvmtiIterateSharedCachesCallback)(jvmtiEnv *env,jvmtiSharedCacheInfo *cache_info, void *user_data); Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_UNSUPPORTED_VERSION : The version parameter is not valid. JVMTI_ERROR_NULL_POINTER : The callback parameter is null. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The flags parameter is not valid. JVMTI_ERROR_INTERNAL : This error is returned when the jvmtiIterateSharedCachesCallback returns JNI_ERR . Identifiers JVMTI Extension Function identifier: com.ibm.IterateSharedCaches Macro declaration in the ibmjvmti.h file: COM_IBM_ITERATE_SHARED_CACHES","title":"IterateSharedCaches"},{"location":"interface_jvmti/#jvmtiiteratesharedcachescallback-function","text":"Callback function parameters env : A pointer to the JVMTI environment when calling COM_IBM_ITERATE_SHARED_CACHES . cache_info : A jvmtiSharedCacheInfo structure containing information about a shared cache. user_data : User-supplied data, passed as an argument to IterateSharedCaches . Callback function returns JNI_OK : Continue iterating. JNI_ERR : Stop iterating, which causes IterateSharedCaches to return JVMTI_ERROR_INTERNAL","title":"jvmtiIterateSharedCachesCallback function"},{"location":"interface_jvmti/#jvmtisharedcacheinfo-structure","text":"The structure of jvmtiSharedCacheInfo typedef struct jvmtiSharedCacheInfo { const char *name; // the name of the shared cache jboolean isCompatible; // if the shared cache is compatible with this VM jboolean isPersistent; // true if the shared cache is persistent, false if its non-persistent jint os_shmid; // the OS shared memory ID associated with a non-persistent cache, -1 otherwise jint os_semid; // the OS shared semaphore ID associated with a non-persistent cache, -1 otherwise jint modLevel; // one of: // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA5 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA6 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA7 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA8 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA9 // from Java 10: the version number of the Java level on which the shared cache is created jint addrMode; // the address mode of the VM creating the shared cache: includes additional // information on whether it is a 64-bit compressedRefs cache when // COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. jboolean isCorrupt; // if the cache is corrupted jlong cacheSize; // the total usable shared class cache size, or -1 when isCompatible is false jlong freeBytes; // the number of free bytes in the shared class cache, or -1 when isCompatible is false jlong lastDetach; // the last detach time specified in milliseconds since 00:00:00 on 1 January 1970 UTC, // or -1 when the last detach time is not available jint cacheType; // the type of the cache jlong softMaxBytes; // the soft limit for the available space in the cache } jvmtiSharedCacheInfo; Notes: The field cacheType is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 or later is specified. jvmtiSharedCacheInfo.addrMode encodes both address mode and the compressed reference mode when COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. In this case, use the following set of macros to access the address mode and compressed reference mode: To get the address mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_ADDR_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_SHARED_CACHE_ADDRMODE_32 COM_IBM_SHARED_CACHE_ADDRMODE_64 To get the compressed references mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_CMPRSSREF_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_ITERATE_SHARED_CACHES_UNKNOWN_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_NON_COMPRESSED_POINTERS_MODE The field softMaxBytes is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 or later is specified.","title":"jvmtiSharedCacheInfo structure"},{"location":"interface_jvmti/#destroysharedcache","text":"You can remove a shared class cache by using the DestroySharedCache() API: jvmtiError DestroySharedCache(jvmtiEnv *env, const char *cacheDir, const char *name, jint persistence, jboolean useCommandLineValues, jint *internalErrorCode); This extension removes a named shared class cache of a given persistence type, in a given directory. You can specify the cache name, persistence type, and directory in one of these ways: Set useCommandLineValues to true and specify the values on the command line. If a value is not available, the default values for the platform are used. Set useCommandLineValues to false and use the cacheDir , persistence and cacheName parameters to identify the cache to be removed. To accept the default value for cacheDir or cacheName , specify the parameter with a null value. Parameters env : A pointer to the JVMTI environment. cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. cacheName : When the value of useCommandLineValues is false , specify the name of the cache to be removed. If the value is null , the platform-dependent default is used. persistence : When the value of useCommandLineValues is false, specify the type of cache to remove. This parameter must have one of the following values: PERSISTENCE_DEFAULT (The default value for the platform). PERSISTENT NONPERSISTENT useCommandLineValues : Set this value to true when you want to specify the shared class cache name, persistence type, and directory on the command line. Set this value to false when you want to use the cacheDir , persistence , and cacheName parameters instead. internalErrorCode : If not null , this value is set to one of the following constants when JVMTI_ERROR_INTERNAL is returned: COM_IBM_DESTROYED_ALL_CACHE : Set when JVMTI_ERROR_NONE is returned. COM_IBM_DESTROYED_NONE : Set when the function fails to remove any caches. COM_IBM_DESTROY_FAILED_CURRENT_GEN_CACHE : Set when the function fails to remove the existing current generation cache, irrespective of the state of older generation caches. COM_IBM_DESTROY_FAILED_OLDER_GEN_CACHE : Set when the function fails to remove any older generation caches. The current generation cache does not exist or is successfully removed. Returns JVMTI_ERROR_NONE : Success. No cache exists or all existing caches of all generations are removed. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The persistence parameter is not valid. JVMTI_ERROR_INTERNAL : Failed to remove any existing cache with the given name. See the value of the internalErrorCode parameter for more information about the failure. Identifiers JVMTI Extension Function identifier: com.ibm.DestroySharedCache Macro declaration in the ibmjvmti.h file: COM_IBM_DESTROY_SHARED_CACHE","title":"DestroySharedCache"},{"location":"interface_jvmti/#registerverbosegcsubscriber","text":"You can subscribe to verbose garbage collection (GC) data logging by using the RegisterVerboseGCSubscriber() API: jvmtiError RegisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiVerboseGCSubscriber subscriber, jvmtiVerboseGCAlarm alarm, void *user_data, void **subscription_id) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiVerboseGCSubscriber . alarm : A function pointer of type jvmtiVerboseGCAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterVerboseGCSubscriber call if successful. The value must be supplied to a future call to DeregisterVerboseGCSubscriber API, which is used to unsubscribe from verbose GC data logging. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : GC verbose logging is not available. JVMTI_ERROR_INTERNAL : An internal error has occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_VERBOSEGC_SUBSCRIBER","title":"RegisterVerboseGCSubscriber"},{"location":"interface_jvmti/#jvmtiverbosegcsubscriber-function","text":"The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCSubscriber)(jvmtiEnv *jvmti_env, const char *record, jlong length, void *user_data); The subscriber function must be of type jvmtiVerboseGCSubscriber , which is declared in ibmjvmti.h . This function is called with each record of verbose logging data produced by the VM. The verbose logging record supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, and the subscription is deregistered. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : An ASCII string that contains a verbose log record. length : The number of ASCII characters in the verbose log record. user_data : User data supplied when the subscriber is registered.","title":"jvmtiVerboseGCSubscriber function"},{"location":"interface_jvmti/#jvmtiverbosegcalarm-function","text":"The alarm function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiVerboseGCAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. user_data : User data supplied when the subscriber is registered. subscription_id : The subscription identifier.","title":"jvmtiVerboseGCAlarm function"},{"location":"interface_jvmti/#deregisterverbosegcsubscriber","text":"You can unsubscribe from verbose Garbage Collection (GC) data logging by using the DeregisterVerboseGCSubscriber() API: jvmtiError DeregisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterVerboseGCSubscriber() API is called, no further calls are made to the previously registered subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterVerboseGCSubscriber() API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_VERBOSEGC_SUBSCRIBER","title":"DeregisterVerboseGCSubscriber"},{"location":"introduction/","text":"Eclipse OpenJ9 OpenJ9 is a high performance, scalable, Java\u2122 virtual machine (VM) implementation that is fully compliant with the Java Virtual Machine Specification . At run time, the VM interprets the Java bytecode that is compiled by the Java compiler. The VM acts as a translator between the language and the underlying operating system and hardware. A Java program requires a specific VM to run on a particular platform, such as Linux\u00ae, z/OS\u00ae, or Windows\u2122. This reference material provides information about the VM configuration and tuning options, together with the default settings. Configuring your system For normal operation, certain environment variables must be set at the operating system level. Depending on your system environment, you might also want to set other configuration options that allow the VM to exploit hardware and operating system features. Read Customizing your system to learn more about the following options: Setting the PATH and CLASSPATH environment variable. Setting the LIBPATH or LD_LIBRARY_PATH environment variable (AIX\u00ae and Linux) to indicate where to find shared libraries. Setting ulimits on AIX and Linux systems to ensure that the operating system allocates sufficient resources for your application. Setting region size, BPXPRM parameters, and Language Environment\u00ae runtime options on z/OS systems. If your application allocates a large amount of memory and frequently accesses that memory, you might want to enable large page support on your system. See Configuring large page memory allocation . Configuring Dynamic LPAR support on AIX systems. Note: On macOS\u00ae systems, you must set the DYLD_LIBRARY_PATH environment variable to indicate where to find shared libraries. In addition, to ensure there are sufficient resources for your application, you might need to increase system limits by using launchctl , ulimit , or kern.<VARIABLES> . For further instructions, refer to the documentation for your macOS release. Performance tuning OpenJ9 is configured to start with a set of default options that provide the optimal runtime environment for Java applications with typical workloads. However, if your application is atypical, you can improve performance by tuning the OpenJ9 VM. You can also improve performance by enabling hardware features or using specific APIs in your application code. Garbage collection policies OpenJ9 includes several garbage collection policies. To learn more about these policies and the types of application workload that can benefit from them, see Garbage Collection . Class data sharing You can share class data between running VMs, which can reduce the startup time for a VM once the cache has been created. For more information, see Class Data Sharing . Native data operations If your Java application manipulates native data, consider writing your application to take advantage of methods in the Data Access Accelerator API. Cloud optimizations To improve the performance of applications that run in containers, try setting the following tuning options: Use a shared classes cache ( -Xshareclasses -XX:SharedCacheHardLimit=200m -Xscmx60m ) with Ahead-Of-Time (AOT) compilation to improve your startup time. For more information, see Class Data Sharing and AOT Compiler . Use the -Xtune:virtualized option, which configures OpenJ9 for typical cloud deployments where VM guests are provisioned with a small number of virtual CPUs to maximize the number of applications that can be run. When enabled, OpenJ9 adapts its internal processes to reduce the amount of CPU consumed and trim down the memory footprint. These changes come at the expense of only a small loss in throughput. The OpenJ9 VM automatically detects when it is running in a docker container and uses a mechanism to detect when the VM is idle. When an idle state is detected, OpenJ9 runs a garbage collection cycle and releases free memory pages back to the operating system. The object heap is also compacted to make best use of the available memory for further application processing. For cloud services that charge based on memory usage, maintaining a small footprint can generate cost savings. For more information about tuning options that control this process, see -XX:IdleTuningMinIdleWaitTime . Cryptographic operations OpenJDK uses the in-built Java cryptographic implementation by default. However, native cryptographic implementations typically provide better performance. OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which is well established and used with many enterprise applications. The OpenSSL V1.0.x and V1.1.x implementations are currently supported for the Digest, CBC, GCM, and RSA algorithms. The OpenSSL V1.1.x implementation is also supported for the ChaCha20 and ChaCha20-Poly1305 algorithms. On Linux and AIX platforms, the OpenSSL 1.0.x or 1.1.x library is expected to be found on the system path. If you use a package manager to install OpenSSL, the system path will be updated automatically. On other platforms, the OpenSSL 1.1.x library is currently bundled with the binaries from AdoptOpenJDK. OpenSSL support is enabled by default for all supported algorithms. If you want to limit support to specific algorithms, a number of system properties are available for tuning the implementation. Each algorithm can be disabled individually by setting the following system properties on the command line: To turn off Digest , set -Djdk.nativeDigest=false To turn off ChaCha20 and ChaCha20-Poly1305 , set -Djdk.nativeChaCha20=false . Note: These algorithms are not supported on Java 8 To turn off CBC , set -Djdk.nativeCBC=false To turn off GCM , set -Djdk.nativeGCM=false To turn off RSA , set -Djdk.nativeRSA=false You can turn off all the algorithms by setting the following system property on the command line: -Djdk.nativeCrypto=false To build a version of OpenJDK with OpenJ9 that includes OpenSSL support, follow the steps in our detailed build instructions: OpenJDK 8 with OpenJ9 . OpenJDK 11 with OpenJ9 . OpenJDK 13 with OpenJ9 . Note: If you obtain an OpenJDK with OpenJ9 build from AdoptOpenJDK that includes OpenSSL or build a version yourself that includes OpenSSL support, the following acknowledgements apply in accordance with the license terms: This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). Exploiting GPUs OpenJ9 provides the CUDA4J API and the com.ibm.gpu API , which allow you to develop applications that can take advantage of graphics processing unit (GPU) processing for suitable functions, such as code page conversion. You can also enable the JIT compiler to offload certain processing tasks to a GPU by specifying the -Xjit:enableGPU option on the command line. When enabled, the JIT compiler determines when to offload tasks based on performance heuristics. GPU processing is supported only on Windows (x86-64) and Linux (x86-64 and IBM Power LE) systems. For more information about enabling GPU processing, see Exploiting graphics processing units . Runtime options Runtime options are specified on the command line and include system properties, standard options, nonstandard ( -X ) options, and -XX options. For a detailed list of runtime options, see OpenJ9 command-line options Default settings If you do not specify any options on the command line at run time, the OpenJ9 VM starts with default settings that define how it operates. For more information about these settings, see Default settings for the OpenJ9 VM . Using Jlink On Java 11 and later, you can use the jlink utility to create a custom OpenJ9 runtime image, which allows you to optimize image size. If you do not require translations from the English language, the translation files can be removed to further optimize the size. You can achieve this by specifying the --exclude-files=**java_**.properties option when you run jlink . The default English java.properties file is unaffected. Troubleshooting The OpenJ9 diagnostic component contains extensive features to assist with problem determination. Diagnostic data is produced under default conditions, but can also be controlled by starting the VM with the -Xdump option or using the com.ibm.jvm.Dump API. You can also trace Java applications, methods, and VM operations by using the -Xtrace option . To get started, read Diagnostic tools and data .","title":"Getting started"},{"location":"introduction/#eclipse-openj9","text":"OpenJ9 is a high performance, scalable, Java\u2122 virtual machine (VM) implementation that is fully compliant with the Java Virtual Machine Specification . At run time, the VM interprets the Java bytecode that is compiled by the Java compiler. The VM acts as a translator between the language and the underlying operating system and hardware. A Java program requires a specific VM to run on a particular platform, such as Linux\u00ae, z/OS\u00ae, or Windows\u2122. This reference material provides information about the VM configuration and tuning options, together with the default settings.","title":"Eclipse OpenJ9"},{"location":"introduction/#configuring-your-system","text":"For normal operation, certain environment variables must be set at the operating system level. Depending on your system environment, you might also want to set other configuration options that allow the VM to exploit hardware and operating system features. Read Customizing your system to learn more about the following options: Setting the PATH and CLASSPATH environment variable. Setting the LIBPATH or LD_LIBRARY_PATH environment variable (AIX\u00ae and Linux) to indicate where to find shared libraries. Setting ulimits on AIX and Linux systems to ensure that the operating system allocates sufficient resources for your application. Setting region size, BPXPRM parameters, and Language Environment\u00ae runtime options on z/OS systems. If your application allocates a large amount of memory and frequently accesses that memory, you might want to enable large page support on your system. See Configuring large page memory allocation . Configuring Dynamic LPAR support on AIX systems. Note: On macOS\u00ae systems, you must set the DYLD_LIBRARY_PATH environment variable to indicate where to find shared libraries. In addition, to ensure there are sufficient resources for your application, you might need to increase system limits by using launchctl , ulimit , or kern.<VARIABLES> . For further instructions, refer to the documentation for your macOS release.","title":"Configuring your system"},{"location":"introduction/#performance-tuning","text":"OpenJ9 is configured to start with a set of default options that provide the optimal runtime environment for Java applications with typical workloads. However, if your application is atypical, you can improve performance by tuning the OpenJ9 VM. You can also improve performance by enabling hardware features or using specific APIs in your application code.","title":"Performance tuning"},{"location":"introduction/#garbage-collection-policies","text":"OpenJ9 includes several garbage collection policies. To learn more about these policies and the types of application workload that can benefit from them, see Garbage Collection .","title":"Garbage collection policies"},{"location":"introduction/#class-data-sharing","text":"You can share class data between running VMs, which can reduce the startup time for a VM once the cache has been created. For more information, see Class Data Sharing .","title":"Class data sharing"},{"location":"introduction/#native-data-operations","text":"If your Java application manipulates native data, consider writing your application to take advantage of methods in the Data Access Accelerator API.","title":"Native data operations"},{"location":"introduction/#cloud-optimizations","text":"To improve the performance of applications that run in containers, try setting the following tuning options: Use a shared classes cache ( -Xshareclasses -XX:SharedCacheHardLimit=200m -Xscmx60m ) with Ahead-Of-Time (AOT) compilation to improve your startup time. For more information, see Class Data Sharing and AOT Compiler . Use the -Xtune:virtualized option, which configures OpenJ9 for typical cloud deployments where VM guests are provisioned with a small number of virtual CPUs to maximize the number of applications that can be run. When enabled, OpenJ9 adapts its internal processes to reduce the amount of CPU consumed and trim down the memory footprint. These changes come at the expense of only a small loss in throughput. The OpenJ9 VM automatically detects when it is running in a docker container and uses a mechanism to detect when the VM is idle. When an idle state is detected, OpenJ9 runs a garbage collection cycle and releases free memory pages back to the operating system. The object heap is also compacted to make best use of the available memory for further application processing. For cloud services that charge based on memory usage, maintaining a small footprint can generate cost savings. For more information about tuning options that control this process, see -XX:IdleTuningMinIdleWaitTime .","title":"Cloud optimizations"},{"location":"introduction/#cryptographic-operations","text":"OpenJDK uses the in-built Java cryptographic implementation by default. However, native cryptographic implementations typically provide better performance. OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which is well established and used with many enterprise applications. The OpenSSL V1.0.x and V1.1.x implementations are currently supported for the Digest, CBC, GCM, and RSA algorithms. The OpenSSL V1.1.x implementation is also supported for the ChaCha20 and ChaCha20-Poly1305 algorithms. On Linux and AIX platforms, the OpenSSL 1.0.x or 1.1.x library is expected to be found on the system path. If you use a package manager to install OpenSSL, the system path will be updated automatically. On other platforms, the OpenSSL 1.1.x library is currently bundled with the binaries from AdoptOpenJDK. OpenSSL support is enabled by default for all supported algorithms. If you want to limit support to specific algorithms, a number of system properties are available for tuning the implementation. Each algorithm can be disabled individually by setting the following system properties on the command line: To turn off Digest , set -Djdk.nativeDigest=false To turn off ChaCha20 and ChaCha20-Poly1305 , set -Djdk.nativeChaCha20=false . Note: These algorithms are not supported on Java 8 To turn off CBC , set -Djdk.nativeCBC=false To turn off GCM , set -Djdk.nativeGCM=false To turn off RSA , set -Djdk.nativeRSA=false You can turn off all the algorithms by setting the following system property on the command line: -Djdk.nativeCrypto=false To build a version of OpenJDK with OpenJ9 that includes OpenSSL support, follow the steps in our detailed build instructions: OpenJDK 8 with OpenJ9 . OpenJDK 11 with OpenJ9 . OpenJDK 13 with OpenJ9 . Note: If you obtain an OpenJDK with OpenJ9 build from AdoptOpenJDK that includes OpenSSL or build a version yourself that includes OpenSSL support, the following acknowledgements apply in accordance with the license terms: This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com).","title":"Cryptographic operations"},{"location":"introduction/#exploiting-gpus","text":"OpenJ9 provides the CUDA4J API and the com.ibm.gpu API , which allow you to develop applications that can take advantage of graphics processing unit (GPU) processing for suitable functions, such as code page conversion. You can also enable the JIT compiler to offload certain processing tasks to a GPU by specifying the -Xjit:enableGPU option on the command line. When enabled, the JIT compiler determines when to offload tasks based on performance heuristics. GPU processing is supported only on Windows (x86-64) and Linux (x86-64 and IBM Power LE) systems. For more information about enabling GPU processing, see Exploiting graphics processing units .","title":"Exploiting GPUs"},{"location":"introduction/#runtime-options","text":"Runtime options are specified on the command line and include system properties, standard options, nonstandard ( -X ) options, and -XX options. For a detailed list of runtime options, see OpenJ9 command-line options","title":"Runtime options"},{"location":"introduction/#default-settings","text":"If you do not specify any options on the command line at run time, the OpenJ9 VM starts with default settings that define how it operates. For more information about these settings, see Default settings for the OpenJ9 VM .","title":"Default settings"},{"location":"introduction/#using-jlink","text":"On Java 11 and later, you can use the jlink utility to create a custom OpenJ9 runtime image, which allows you to optimize image size. If you do not require translations from the English language, the translation files can be removed to further optimize the size. You can achieve this by specifying the --exclude-files=**java_**.properties option when you run jlink . The default English java.properties file is unaffected.","title":"Using Jlink"},{"location":"introduction/#troubleshooting","text":"The OpenJ9 diagnostic component contains extensive features to assist with problem determination. Diagnostic data is produced under default conditions, but can also be controlled by starting the VM with the -Xdump option or using the com.ibm.jvm.Dump API. You can also trace Java applications, methods, and VM operations by using the -Xtrace option . To get started, read Diagnostic tools and data .","title":"Troubleshooting"},{"location":"jit/","text":"The JIT compiler The Just-In-Time (JIT) compiler is a key component of the OpenJ9 VM that improves the performance of Java applications by compiling platform-neutral Java bytecode into native machine code at run time. Without the JIT, the VM has to interpret the bytecodes itself - a process that requires extra CPU and memory. The JIT compiler doesn't compile every method that gets called because thousands of methods can be called at startup. Instead, OpenJ9 records the number of times a method is called. When the count reaches a pre-defined invocation threshold , JIT compilation is triggered. Once a method has been compiled by the JIT, the VM can call the compiled method rather than interpreting it. Optimization levels The JIT compiler can compile a method at different optimization levels: cold , warm , hot , very hot (with profiling) , or scorching . The hotter the optimization level, the better the expected performance, but the higher the cost in terms of CPU and memory. cold is used during startup processing for large applications where the goal is to achieve the best compiled code speed for as many methods as possible. warm is the workhorse; after start-up, most methods are compiled when they reach the invocation threshold. For higher optimization levels, the VM uses a sampling thread to identify methods that continue to take a lot of time. Methods that consume more than 1% are compiled at hot. Methods that consume more than 12.5% are scheduled for a scorching compilation. However, before that happens the methods are compiled at very hot with profiling to collect detailed profile data that is used by the scorching compilation. The higher optimization levels use special techniques such as escape analysis and partial redundancy elimination, or loop through certain optimization sequences more times. Although these techniques use more CPU and memory, the improved performance that is delivered by the optimizations can make the tradeoff worthwhile. Troubleshooting The JIT compiler is enabled by default to optimize performance. However, if you experience a problem running your application, temporarily turning off the JIT will tell you whether the JIT is at fault. Because JIT starts at the same time as the VM, you can only modify JIT behavior at startup. There are a number of ways to disable the JIT: Specify -Djava.compiler=NONE on the command line. Specify -Xint on the command line, which turns off the JIT and AOT compiler. To eliminate problems with one or the other you can turn these compilers off selectively with the -Xnojit and -Xnoaot options. Call the java.lang.Compiler API programmatically. Note: java.lang.Compiler is deprecated for removal in Java SE 9. If turning off the JIT solves your problem, you can investigate JIT operations in more detail by using a number of options to control behavior. Turning on verbose logging with the verbose suboption causes the JIT to record all compiler operations. However, the log file can be difficult to read because there are so many complex operations occuring in rapid succession. Follow these steps to simplify operations, which helps you pinpoint the root cause: Turn off multiple compilation threads The JIT compiler can use more than one compilation thread, which typically improves startup performance. The number of threads is determined by the VM, depending on the system configuration. You can turn off multiple threads by using the -XcompilationThreads option, which simplifies the output in the verbose log. Lower the invocation threshold When the invocation count is set to 0 , the JIT compiles every method and your application will fail immediately when the method causing the problem is reached. You can alter the threshold with the count suboption. Turn off inlining Inlining is a complex process that generates larger and more complex code. To eliminate errors caused by these operations, use the disableImlining suboption. Decrease the optimization levels Use the optlevel suboption to gradually decrease the compiler optimization levels to see whether you can isolate the level at which your problem occurs. More information about these suboptions and the command line syntax is covered in -Xjit . Understanding JIT verbose logs At first glance, a JIT verbose log can look very complex. To help you understand the log we'll look at JIT compiler operations when you run the java -version command. The following option turns on verbose logging and directs output to a log file called vlogfile : java -Xjit:verbose,vlog=vlogfile -version The first section of the log includes lines that start with #INFO: , which provides information about the environment that the JIT is operating in. You can determine the version of the JIT and VM that you are using, and the type and number of processors that the JIT has access to. #INFO: _______________________________________ #INFO: Version Information: #INFO: JIT Level - e24e8aa9 #INFO: JVM Level - 20180315_120 #INFO: GC Level - e24e8aa9 #INFO: #INFO: Processor Information: #INFO: Platform Info:X86 Intel P6 #INFO: Vendor:GenuineIntel #INFO: numProc=1 #INFO: #INFO: _______________________________________ #INFO: AOT #INFO: options specified: #INFO: samplingFrequency=2 #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: _______________________________________ #INFO: JIT #INFO: options specified: #INFO: verbose,vlog=vlogfile #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: StartTime: Apr 23 09:49:10 2018 #INFO: Free Physical Memory: 996188 KB #INFO: CPU entitlement = 100.00 This section also shows the AOT and JIT options that are in force. The last few lines detail the start time of the compilation activity, how much free physical memory is available to the process, and the CPU entitlement. The information section is followed by a sequence of lines that describe the methods that are being compiled, as well as other events significant to the operation of the JIT compiler. Here is a typical line from the verbose log: + (cold) sun/reflect/Reflection.getCallerClass()Ljava/lang/Class; @ 00007FCACED1303C-00007FCACED13182 OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=00000000011E7EA8 bcsz=2 JNI compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% In this example: The method compiled is sun/reflect/Reflection.getCallerClass()Ljava/lang/Class. The + indicates that this method is successfully compiled. Failed compilations are marked by a !. (cold) tells you the optimization level that was applied. Other examples may be (warm) or (scorching). 00007FCACED1303C-00007FCACED13182 is the code range where the compiled code was generated. Q values provide information about the state of the compilation queues when the compilation occurred. bcsz shows the bytecode size. In this case it is small because this is a native method, so the JIT is simply providing an accelerated JNI transition into the native getCallerClass method. Each line of output represents a method that is compiled. The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the values time and mem into each line, as shown in the following example: + (cold) java/lang/System.getEncoding(I)Ljava/lang/String; @ 00007F29183A921C-00007F29183A936D OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=0000000000F13A70 bcsz=3 JNI time=311us mem=[region=704 system=16384]KB compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% time=311us reflects the amount of time taken to do the compilation. mem=[region=704 system=16384]KB reflects the amount of memory that was allocated during the compilation. The following example can be used to create verbose output that includes lines to show when compilation for a method starts and ends, and any methods that are inlined during the compilation. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version Note: The suboptions count and -XcompilationThreads1 are included only to simplify the output for this example and are not recommended for production. The following section is taken from the output and describes the compilation and inlining of one method java/lang/String.equals : (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB #INL: 7 methods inlined into 4dce72bd java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40 #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The first line is included as a result of setting the compileStart suboption and shows the start of the warm method compilation: (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB Similarly, the last line shows the successful compilation of this method, as denoted by the + : + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The lines inbetween that start with #INL describe the inlining operations that took place. A total of 7 methods were inlined into java/lang/String.equals : The first three methods ( #0 , #1 , #2 ) are inlined into the top level method, denoted as #-1 : #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z The next four methods ( #3 , #4 , #5 , #6 ) are inlined into the method denoted by #2 . #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C Here's how to interpret the line for #INL: #0: : The method is inlined into 4dce72bd , where 4dce72bd is an internal pointer that corresponds to this method (in this case, java/lang/String.equals(Ljava/lang/Object;)Z ). The value @22 at the end of the pointer is a bytecode index, which describes the bytecode index of the call that is being inlined. The call is 81670d20 bcsz=37 java/lang/String.lengthInternal()I , which shows the corresponding internal pointer, bytecode size (bcsz) and the name of the method that got inlined. Going through the #INL output line by line then: java/lang/String.lengthInternal()I got inlined into its caller 4dce72bd at bytecode index @22. java/lang/String.lengthInternal()I also got inlined into its caller 4dce72bd at bytecode index @28. java/lang/String.regionMatchesInternal(...) got inlined at call reference 4dce72bd at bytecode index @104. Then 4 distinct calls to java/lang/String.charAtInternal(I[C)C were also inlined into java/lang/String.regionMatchesInternal(...) : #3 at bytecode index @121 of regionMatchesInternal #4 at bytecode index @131 of regionMatchesInternal #5 at bytecode index @156 of regionMatchesInternal #6 at bytecode index @166 of regionMatchesInternal These were all the calls that the inliner decided to inline into the method being compiled. There is some additional output that describes calls to methods that weren't inlined: #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z While the output does not specifically say why these methods were not inlined, the relatively larger bytecode size ( bcsz=233 ) probably prevented the first method from being inlined. It's possible that, at a higher optimization level than cold, this deduplicateStrings method may get inlined. The coldCalled label on the last two lines, however, indicate that these calls are located in a part of the method that has not ever been executed, so the JIT decided that inlining those last two methods will probably increase compile time without much promise that it will improve performance. By reading the log in this way you can reconstruct the tree of inlines that are taking place as the compilation proceeds. You can see which methods are being inlined and which methods are not being inlined. See also Diagnosing a JIT or AOT problem","title":"JIT Compiler"},{"location":"jit/#the-jit-compiler","text":"The Just-In-Time (JIT) compiler is a key component of the OpenJ9 VM that improves the performance of Java applications by compiling platform-neutral Java bytecode into native machine code at run time. Without the JIT, the VM has to interpret the bytecodes itself - a process that requires extra CPU and memory. The JIT compiler doesn't compile every method that gets called because thousands of methods can be called at startup. Instead, OpenJ9 records the number of times a method is called. When the count reaches a pre-defined invocation threshold , JIT compilation is triggered. Once a method has been compiled by the JIT, the VM can call the compiled method rather than interpreting it.","title":"The JIT compiler"},{"location":"jit/#optimization-levels","text":"The JIT compiler can compile a method at different optimization levels: cold , warm , hot , very hot (with profiling) , or scorching . The hotter the optimization level, the better the expected performance, but the higher the cost in terms of CPU and memory. cold is used during startup processing for large applications where the goal is to achieve the best compiled code speed for as many methods as possible. warm is the workhorse; after start-up, most methods are compiled when they reach the invocation threshold. For higher optimization levels, the VM uses a sampling thread to identify methods that continue to take a lot of time. Methods that consume more than 1% are compiled at hot. Methods that consume more than 12.5% are scheduled for a scorching compilation. However, before that happens the methods are compiled at very hot with profiling to collect detailed profile data that is used by the scorching compilation. The higher optimization levels use special techniques such as escape analysis and partial redundancy elimination, or loop through certain optimization sequences more times. Although these techniques use more CPU and memory, the improved performance that is delivered by the optimizations can make the tradeoff worthwhile.","title":"Optimization levels"},{"location":"jit/#troubleshooting","text":"The JIT compiler is enabled by default to optimize performance. However, if you experience a problem running your application, temporarily turning off the JIT will tell you whether the JIT is at fault. Because JIT starts at the same time as the VM, you can only modify JIT behavior at startup. There are a number of ways to disable the JIT: Specify -Djava.compiler=NONE on the command line. Specify -Xint on the command line, which turns off the JIT and AOT compiler. To eliminate problems with one or the other you can turn these compilers off selectively with the -Xnojit and -Xnoaot options. Call the java.lang.Compiler API programmatically. Note: java.lang.Compiler is deprecated for removal in Java SE 9. If turning off the JIT solves your problem, you can investigate JIT operations in more detail by using a number of options to control behavior. Turning on verbose logging with the verbose suboption causes the JIT to record all compiler operations. However, the log file can be difficult to read because there are so many complex operations occuring in rapid succession. Follow these steps to simplify operations, which helps you pinpoint the root cause: Turn off multiple compilation threads The JIT compiler can use more than one compilation thread, which typically improves startup performance. The number of threads is determined by the VM, depending on the system configuration. You can turn off multiple threads by using the -XcompilationThreads option, which simplifies the output in the verbose log. Lower the invocation threshold When the invocation count is set to 0 , the JIT compiles every method and your application will fail immediately when the method causing the problem is reached. You can alter the threshold with the count suboption. Turn off inlining Inlining is a complex process that generates larger and more complex code. To eliminate errors caused by these operations, use the disableImlining suboption. Decrease the optimization levels Use the optlevel suboption to gradually decrease the compiler optimization levels to see whether you can isolate the level at which your problem occurs. More information about these suboptions and the command line syntax is covered in -Xjit .","title":"Troubleshooting"},{"location":"jit/#understanding-jit-verbose-logs","text":"At first glance, a JIT verbose log can look very complex. To help you understand the log we'll look at JIT compiler operations when you run the java -version command. The following option turns on verbose logging and directs output to a log file called vlogfile : java -Xjit:verbose,vlog=vlogfile -version The first section of the log includes lines that start with #INFO: , which provides information about the environment that the JIT is operating in. You can determine the version of the JIT and VM that you are using, and the type and number of processors that the JIT has access to. #INFO: _______________________________________ #INFO: Version Information: #INFO: JIT Level - e24e8aa9 #INFO: JVM Level - 20180315_120 #INFO: GC Level - e24e8aa9 #INFO: #INFO: Processor Information: #INFO: Platform Info:X86 Intel P6 #INFO: Vendor:GenuineIntel #INFO: numProc=1 #INFO: #INFO: _______________________________________ #INFO: AOT #INFO: options specified: #INFO: samplingFrequency=2 #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: _______________________________________ #INFO: JIT #INFO: options specified: #INFO: verbose,vlog=vlogfile #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: StartTime: Apr 23 09:49:10 2018 #INFO: Free Physical Memory: 996188 KB #INFO: CPU entitlement = 100.00 This section also shows the AOT and JIT options that are in force. The last few lines detail the start time of the compilation activity, how much free physical memory is available to the process, and the CPU entitlement. The information section is followed by a sequence of lines that describe the methods that are being compiled, as well as other events significant to the operation of the JIT compiler. Here is a typical line from the verbose log: + (cold) sun/reflect/Reflection.getCallerClass()Ljava/lang/Class; @ 00007FCACED1303C-00007FCACED13182 OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=00000000011E7EA8 bcsz=2 JNI compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% In this example: The method compiled is sun/reflect/Reflection.getCallerClass()Ljava/lang/Class. The + indicates that this method is successfully compiled. Failed compilations are marked by a !. (cold) tells you the optimization level that was applied. Other examples may be (warm) or (scorching). 00007FCACED1303C-00007FCACED13182 is the code range where the compiled code was generated. Q values provide information about the state of the compilation queues when the compilation occurred. bcsz shows the bytecode size. In this case it is small because this is a native method, so the JIT is simply providing an accelerated JNI transition into the native getCallerClass method. Each line of output represents a method that is compiled. The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the values time and mem into each line, as shown in the following example: + (cold) java/lang/System.getEncoding(I)Ljava/lang/String; @ 00007F29183A921C-00007F29183A936D OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=0000000000F13A70 bcsz=3 JNI time=311us mem=[region=704 system=16384]KB compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% time=311us reflects the amount of time taken to do the compilation. mem=[region=704 system=16384]KB reflects the amount of memory that was allocated during the compilation. The following example can be used to create verbose output that includes lines to show when compilation for a method starts and ends, and any methods that are inlined during the compilation. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version Note: The suboptions count and -XcompilationThreads1 are included only to simplify the output for this example and are not recommended for production. The following section is taken from the output and describes the compilation and inlining of one method java/lang/String.equals : (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB #INL: 7 methods inlined into 4dce72bd java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40 #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The first line is included as a result of setting the compileStart suboption and shows the start of the warm method compilation: (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB Similarly, the last line shows the successful compilation of this method, as denoted by the + : + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The lines inbetween that start with #INL describe the inlining operations that took place. A total of 7 methods were inlined into java/lang/String.equals : The first three methods ( #0 , #1 , #2 ) are inlined into the top level method, denoted as #-1 : #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z The next four methods ( #3 , #4 , #5 , #6 ) are inlined into the method denoted by #2 . #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C Here's how to interpret the line for #INL: #0: : The method is inlined into 4dce72bd , where 4dce72bd is an internal pointer that corresponds to this method (in this case, java/lang/String.equals(Ljava/lang/Object;)Z ). The value @22 at the end of the pointer is a bytecode index, which describes the bytecode index of the call that is being inlined. The call is 81670d20 bcsz=37 java/lang/String.lengthInternal()I , which shows the corresponding internal pointer, bytecode size (bcsz) and the name of the method that got inlined. Going through the #INL output line by line then: java/lang/String.lengthInternal()I got inlined into its caller 4dce72bd at bytecode index @22. java/lang/String.lengthInternal()I also got inlined into its caller 4dce72bd at bytecode index @28. java/lang/String.regionMatchesInternal(...) got inlined at call reference 4dce72bd at bytecode index @104. Then 4 distinct calls to java/lang/String.charAtInternal(I[C)C were also inlined into java/lang/String.regionMatchesInternal(...) : #3 at bytecode index @121 of regionMatchesInternal #4 at bytecode index @131 of regionMatchesInternal #5 at bytecode index @156 of regionMatchesInternal #6 at bytecode index @166 of regionMatchesInternal These were all the calls that the inliner decided to inline into the method being compiled. There is some additional output that describes calls to methods that weren't inlined: #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z While the output does not specifically say why these methods were not inlined, the relatively larger bytecode size ( bcsz=233 ) probably prevented the first method from being inlined. It's possible that, at a higher optimization level than cold, this deduplicateStrings method may get inlined. The coldCalled label on the last two lines, however, indicate that these calls are located in a part of the method that has not ever been executed, so the JIT decided that inlining those last two methods will probably increase compile time without much promise that it will improve performance. By reading the log in this way you can reconstruct the tree of inlines that are taking place as the compilation proceeds. You can see which methods are being inlined and which methods are not being inlined.","title":"Understanding JIT verbose logs"},{"location":"jit/#see-also","text":"Diagnosing a JIT or AOT problem","title":"See also"},{"location":"legal/","text":"Legal License agreement, notices, copyright, and trademark information for the user documentation. License agreement See License Notices See Notices Copyright information Eclipse OpenJ9 documentation is subject to the following copyright: Copyright (c) 2017, 2019 IBM Corp. Trademarks IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at \"Copyright and trademark information\" here . Java and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates. Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.","title":"Legal"},{"location":"legal/#legal","text":"License agreement, notices, copyright, and trademark information for the user documentation.","title":"Legal"},{"location":"legal/#license-agreement","text":"See License","title":"License agreement"},{"location":"legal/#notices","text":"See Notices","title":"Notices"},{"location":"legal/#copyright-information","text":"Eclipse OpenJ9 documentation is subject to the following copyright: Copyright (c) 2017, 2019 IBM Corp.","title":"Copyright information"},{"location":"legal/#trademarks","text":"IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at \"Copyright and trademark information\" here . Java and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates. Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.","title":"Trademarks"},{"location":"messages_intro/","text":"OpenJ9 VM messages Messages are issued by the OpenJ9 virtual machine (VM) in response to certain conditions. Understanding what the messages mean can help you with problem determination. Message categories There are three main categories of message: Information Information messages provide information about VM processing. For example, a dump information message is typically issued when a dump agent requests a dump. Warning Warning messages are issued by the VM to indicate conditions that might need user intervention. Error Error messages are issued by the VM when normal processing cannot proceed, because of unexpected conditions. OpenJ9 virtual machine messages have the following format: JVM<type><number><code> where: JVM is a standard prefix. <type> refers to the VM subcomponent that issued the message. <number> is a unique numerical number. <code> is one of the following codes: I - Information message W - Warning message E - Error message These messages can help you with problem determination. By default, all error and some information messages are routed to the system log and also written to stderr or stdout . The specific information messages are JVMDUMP039I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the VM. To route additional message types to the system log, or turn off message logging to the system log, use the -Xlog option. The -Xlog option does not affect messages written to the standard error stream (stderr). See OpenJ9 command-line options . Finding logged messages Logged messages can be found in different locations, according to platform. Finding AIX messages On AIX\u00ae, messages are logged by the syslog daemon ( /usr/sbin/syslogd ). Logged messages are written to the syslog file that is configured in /etc/syslog.conf . If the syslog daemon is not running, logged messages are lost. You can redirect messages from the syslog daemon to the AIX error log facility by performing the following configuration steps: Set up a redirect in the file syslog.conf so that syslog messages are sent to the error log, by adding the following line: user.debug errlog If syslogd is already running, reload the updated configuration by running the following command: refresh -s syslogd The updated configuration is used each time syslogd starts. 4. Use the AIX errpt command or the System Management Interface Tool (SMIT) to read the messages sent to the error log. For more information about AIX logging, see: Error-logging overview . Finding Linux messages On Linux\u00ae, messages are logged by the syslog daemon. To find where messages are logged, check the syslog configuration file. Finding macOS messages On macOS\u00ae, messages are logged by the syslog daemon. However, on Sierra and High Sierra, syslog does not work. If /var/log/system.log is not available, Console.app can be used instead. Finding Windows messages On Windows\u2122, messages are logged in the application events section of the event viewer. Finding z/OS messages On z/OS\u00ae, messages are sent to the operator console. To see the messages, go from the ispf panel to the sdsf panel, then open the log panel. Obtaining detailed message descriptions Detailed message information is available to help with problem diagnosis. Understanding the warning or error message issued by the VM can help you diagnose problems. All warning and error messages issued by the VM are listed by type in the messages guide: IBM\u00ae VM messages . The messages, error codes, and exit codes in this guide apply to multiple versions of the VM. Note: If the VM fills all available memory, the message number might be produced without a description for the error that caused the problem. Look for the message number in the relevant section of the J9 VM Messages guide to see the message description and the additional information provided.","title":"OpenJ9 messages"},{"location":"messages_intro/#openj9-vm-messages","text":"Messages are issued by the OpenJ9 virtual machine (VM) in response to certain conditions. Understanding what the messages mean can help you with problem determination.","title":"OpenJ9 VM messages"},{"location":"messages_intro/#message-categories","text":"There are three main categories of message: Information Information messages provide information about VM processing. For example, a dump information message is typically issued when a dump agent requests a dump. Warning Warning messages are issued by the VM to indicate conditions that might need user intervention. Error Error messages are issued by the VM when normal processing cannot proceed, because of unexpected conditions. OpenJ9 virtual machine messages have the following format: JVM<type><number><code> where: JVM is a standard prefix. <type> refers to the VM subcomponent that issued the message. <number> is a unique numerical number. <code> is one of the following codes: I - Information message W - Warning message E - Error message These messages can help you with problem determination. By default, all error and some information messages are routed to the system log and also written to stderr or stdout . The specific information messages are JVMDUMP039I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the VM. To route additional message types to the system log, or turn off message logging to the system log, use the -Xlog option. The -Xlog option does not affect messages written to the standard error stream (stderr). See OpenJ9 command-line options .","title":"Message categories"},{"location":"messages_intro/#finding-logged-messages","text":"Logged messages can be found in different locations, according to platform.","title":"Finding logged messages"},{"location":"messages_intro/#finding-aix-messages","text":"On AIX\u00ae, messages are logged by the syslog daemon ( /usr/sbin/syslogd ). Logged messages are written to the syslog file that is configured in /etc/syslog.conf . If the syslog daemon is not running, logged messages are lost. You can redirect messages from the syslog daemon to the AIX error log facility by performing the following configuration steps: Set up a redirect in the file syslog.conf so that syslog messages are sent to the error log, by adding the following line: user.debug errlog If syslogd is already running, reload the updated configuration by running the following command: refresh -s syslogd The updated configuration is used each time syslogd starts. 4. Use the AIX errpt command or the System Management Interface Tool (SMIT) to read the messages sent to the error log. For more information about AIX logging, see: Error-logging overview .","title":"Finding AIX messages"},{"location":"messages_intro/#finding-linux-messages","text":"On Linux\u00ae, messages are logged by the syslog daemon. To find where messages are logged, check the syslog configuration file.","title":"Finding Linux messages"},{"location":"messages_intro/#finding-macos-messages","text":"On macOS\u00ae, messages are logged by the syslog daemon. However, on Sierra and High Sierra, syslog does not work. If /var/log/system.log is not available, Console.app can be used instead.","title":"Finding macOS messages"},{"location":"messages_intro/#finding-windows-messages","text":"On Windows\u2122, messages are logged in the application events section of the event viewer.","title":"Finding Windows messages"},{"location":"messages_intro/#finding-zos-messages","text":"On z/OS\u00ae, messages are sent to the operator console. To see the messages, go from the ispf panel to the sdsf panel, then open the log panel.","title":"Finding z/OS messages"},{"location":"messages_intro/#obtaining-detailed-message-descriptions","text":"Detailed message information is available to help with problem diagnosis. Understanding the warning or error message issued by the VM can help you diagnose problems. All warning and error messages issued by the VM are listed by type in the messages guide: IBM\u00ae VM messages . The messages, error codes, and exit codes in this guide apply to multiple versions of the VM. Note: If the VM fills all available memory, the message number might be produced without a description for the error that caused the problem. Look for the message number in the relevant section of the J9 VM Messages guide to see the message description and the additional information provided.","title":"Obtaining detailed message descriptions"},{"location":"openj9_defaults/","text":"Default settings for the OpenJ9 VM The following tables provide a quick reference to the default settings for the VM when it is first installed. The last 2 columns show whether the default setting can be changed by a command-line parameter or an environment variable. Note that if both are set, the command-line parameter always takes precedence. VM setting Default Command line Env. variable Javadump Enabled yes yes Heapdump Disabled yes yes System dump Enabled yes yes Snap traces Enabled yes yes JIT dump Enabled yes yes Verbose output Disabled yes no Compressed references (See Note 1 ) yes yes Boot classpath search Disabled yes no JNI checks Disabled yes no Remote debugging Disabled yes no Strict conformance checks Disabled yes no Quickstart Disabled yes no Remote debug info server Disabled yes no Reduced signaling Disabled yes no Signal handler chaining Enabled yes no Classpath Not set yes yes Class data sharing Disabled yes no Accessibility support Enabled no yes JIT compiler Enabled yes yes AOT compiler (See Note 2 ) Enabled yes no JIT debug options Disabled yes no Java2D max size of fonts with algorithmic bold 14 point no yes Java2D use rendered bitmaps in scalable fonts Enabled no yes Java2D freetype font rasterizing Enabled no yes Java2D use AWT fonts Disabled no yes Notes: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: Enabled for -Xmx values \u2264 57 GB, otherwise disabled. On z/OS\u00ae: Enabled for -Xmx values \u2264 25 GB, otherwise disabled. With APAR OA49416 , enabled for -Xmx values \u2264 57 GB. AOT is not used by the VM unless shared classes are also enabled. VM setting AIX Linux macOS Windows z/OS Command line Env. variable Default locale None None None N/A None no yes Time to wait before starting plug-in N/A Zero N/A N/A N/A no yes Temporary directory /tmp /tmp /tmp c:\\temp /tmp no yes Plug-in redirection None None None N/A None no yes IM switching Disabled Disabled Disabled N/A Disabled no yes IM modifiers Disabled Disabled Disabled N/A Disabled no yes Thread model N/A N/A N/A N/A Native no yes Initial stack size for Java Threads (32/64-bit) . Use -Xiss<size> 2 KB 2 KB 2 KB 2 KB 2 KB yes no Maximum stack size for Java Threads (32-bit) . Use -Xss<size> 320 KB 320 KB N/A 320 KB 320 KB yes no Maximum stack size for Java Threads (64-bit) . Use -Xss<size> 1024 KB 1024 KB 1024 KB 1024 KB 1024 KB yes no Stack size for OS Threads (32-bit) . Use -Xmso<size> 256 KB 256 KB N/A 32 KB 256 KB yes no Stack size for OS Threads (64-bit) . Use -Xmso<size> 256 KB 256 KB 256 KB 256 KB 1 MB yes no Initial heap size. Use -Xms<size> 8 MB 8 MB 8 MB 8 MB 8 MB yes no Maximum Java heap size. Use -Xmx<size> See Notes See Notes See Notes See Notes See Notes yes no Page size for the Java object heap and code cache (For restrictions, see the -Xlp:codecache and -Xlp:objectheap options). Operating system default Architecture: x86: 2MB, IBM Z\u00ae: 1MB, Other architectures: Operating system default 4 KB Operating system default 1M pageable yes no Notes: The default value of -Xmx depends on the version of Java. The value is half the available memory with a minimum of 16MB and a maximum of 512 MB. The value is 25% of the available memory with a maximum of 25 GB. However, where there is 2 GB or less of physical memory, the value set is 50% of available memory with a minimum value of 16 MB and a maximum value of 512 MB. Available memory is defined as being the smallest of two values: The real or physical memory or the RLIMIT_AS value.","title":"Default settings"},{"location":"openj9_defaults/#default-settings-for-the-openj9-vm","text":"The following tables provide a quick reference to the default settings for the VM when it is first installed. The last 2 columns show whether the default setting can be changed by a command-line parameter or an environment variable. Note that if both are set, the command-line parameter always takes precedence. VM setting Default Command line Env. variable Javadump Enabled yes yes Heapdump Disabled yes yes System dump Enabled yes yes Snap traces Enabled yes yes JIT dump Enabled yes yes Verbose output Disabled yes no Compressed references (See Note 1 ) yes yes Boot classpath search Disabled yes no JNI checks Disabled yes no Remote debugging Disabled yes no Strict conformance checks Disabled yes no Quickstart Disabled yes no Remote debug info server Disabled yes no Reduced signaling Disabled yes no Signal handler chaining Enabled yes no Classpath Not set yes yes Class data sharing Disabled yes no Accessibility support Enabled no yes JIT compiler Enabled yes yes AOT compiler (See Note 2 ) Enabled yes no JIT debug options Disabled yes no Java2D max size of fonts with algorithmic bold 14 point no yes Java2D use rendered bitmaps in scalable fonts Enabled no yes Java2D freetype font rasterizing Enabled no yes Java2D use AWT fonts Disabled no yes Notes: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: Enabled for -Xmx values \u2264 57 GB, otherwise disabled. On z/OS\u00ae: Enabled for -Xmx values \u2264 25 GB, otherwise disabled. With APAR OA49416 , enabled for -Xmx values \u2264 57 GB. AOT is not used by the VM unless shared classes are also enabled. VM setting AIX Linux macOS Windows z/OS Command line Env. variable Default locale None None None N/A None no yes Time to wait before starting plug-in N/A Zero N/A N/A N/A no yes Temporary directory /tmp /tmp /tmp c:\\temp /tmp no yes Plug-in redirection None None None N/A None no yes IM switching Disabled Disabled Disabled N/A Disabled no yes IM modifiers Disabled Disabled Disabled N/A Disabled no yes Thread model N/A N/A N/A N/A Native no yes Initial stack size for Java Threads (32/64-bit) . Use -Xiss<size> 2 KB 2 KB 2 KB 2 KB 2 KB yes no Maximum stack size for Java Threads (32-bit) . Use -Xss<size> 320 KB 320 KB N/A 320 KB 320 KB yes no Maximum stack size for Java Threads (64-bit) . Use -Xss<size> 1024 KB 1024 KB 1024 KB 1024 KB 1024 KB yes no Stack size for OS Threads (32-bit) . Use -Xmso<size> 256 KB 256 KB N/A 32 KB 256 KB yes no Stack size for OS Threads (64-bit) . Use -Xmso<size> 256 KB 256 KB 256 KB 256 KB 1 MB yes no Initial heap size. Use -Xms<size> 8 MB 8 MB 8 MB 8 MB 8 MB yes no Maximum Java heap size. Use -Xmx<size> See Notes See Notes See Notes See Notes See Notes yes no Page size for the Java object heap and code cache (For restrictions, see the -Xlp:codecache and -Xlp:objectheap options). Operating system default Architecture: x86: 2MB, IBM Z\u00ae: 1MB, Other architectures: Operating system default 4 KB Operating system default 1M pageable yes no Notes: The default value of -Xmx depends on the version of Java. The value is half the available memory with a minimum of 16MB and a maximum of 512 MB. The value is 25% of the available memory with a maximum of 25 GB. However, where there is 2 GB or less of physical memory, the value set is 50% of available memory with a minimum value of 16 MB and a maximum value of 512 MB. Available memory is defined as being the smallest of two values: The real or physical memory or the RLIMIT_AS value.","title":"Default settings for the OpenJ9 VM"},{"location":"openj9_directories/","text":"Directory conventions The following tables provide a quick reference to the OpenJ9 VM directory location on different Java\u2122 versions and different platform architectures. Some pages refer to the VM directory location as <vm_dir> . Operating system Java 8 Java 11 and later AIX\u00ae <install_dir>/jre/lib/ppc[64]/default <install_dir>/ Linux\u00ae <install_dir>/jre/lib/<arch>/default <install_dir>/ macOS\u00ae <install_dir>/jre/lib/default <install_dir>/ Windows\u2122 <install_dir>\\jre\\bin\\default <install_dir>\\ z/OS\u00ae <install_dir>/jre/lib/s390[x]/default <install_dir>/ Where: <install_dir> is your JDK installation directory. <arch> depends on the architecture your Linux distribution is running on. See the following table for possible values: Architecture Value of <arch> x86 32-bit i386 x86 64-bit x86-64 IBM POWER\u00ae 32-bit (Big Endian) ppc IBM POWER 64-bit (Big Endian) ppc64 IBM POWER 64-bit (Little Endian) ppc64le IBM Z\u00ae 31-bit s390 IBM Z 64-bit s390x","title":"Directory conventions"},{"location":"openj9_directories/#directory-conventions","text":"The following tables provide a quick reference to the OpenJ9 VM directory location on different Java\u2122 versions and different platform architectures. Some pages refer to the VM directory location as <vm_dir> . Operating system Java 8 Java 11 and later AIX\u00ae <install_dir>/jre/lib/ppc[64]/default <install_dir>/ Linux\u00ae <install_dir>/jre/lib/<arch>/default <install_dir>/ macOS\u00ae <install_dir>/jre/lib/default <install_dir>/ Windows\u2122 <install_dir>\\jre\\bin\\default <install_dir>\\ z/OS\u00ae <install_dir>/jre/lib/s390[x]/default <install_dir>/ Where: <install_dir> is your JDK installation directory. <arch> depends on the architecture your Linux distribution is running on. See the following table for possible values: Architecture Value of <arch> x86 32-bit i386 x86 64-bit x86-64 IBM POWER\u00ae 32-bit (Big Endian) ppc IBM POWER 64-bit (Big Endian) ppc64 IBM POWER 64-bit (Little Endian) ppc64le IBM Z\u00ae 31-bit s390 IBM Z 64-bit s390x","title":"Directory conventions"},{"location":"openj9_newuser/","text":"New to OpenJ9? The Eclipse OpenJ9 virtual machine (VM) implements the Java Virtual Machine Specification . Most Java applications should run on an OpenJDK that contains the OpenJ9 VM without changing anything. However, because it is an independent implementation there are some differences compared to the HotSpot VM, which is the default OpenJDK VM and is also included in an Oracle JDK. Command-line options Although OpenJ9 implements its own command-line interface, many Hotspot options are recognized and accepted by the VM for compatibility. Any -XX: options that are not recognized by the VM are ignored by default, which prevents an application failing to start. You can turn off this behavior with the -XX:-IgnoreUnrecognizedXXColonOptions option. For a list of compatible options, see Switching to OpenJ9 in the Command-line options section. Garbage collection policies Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. By default, OpenJ9 uses the Generational Concurrent ( gencon ) GC policy, which is best suited for transactional applications that have many short-lived objects. The policy aims to minimize GC pause times without compromising throughput. If you are using Java 8, the gencon policy is similar to the ParallelGC policy, which is the default HotSpot policy. If you are using Java 11, the OpenJ9 balanced ( balanced ) policy is most similar to the default HotSpot policy. If you have a different type of workload, you might want to select a different GC policy. For a summary of available policies, see Garbage collection . For more information about the differences between OpenJ9 GC policies and how to choose the right one for your application, see Eclipse OpenJ9: Garbage collection tradeoffs and tuning with OpenJ9 . To start your application with a different policy, use the -Xgcpolicy option on the command line. Operational tooling If you are a Java application developer or you are responsible for managing large server or desktop deployments of a Java runtime environment, you probably use a number of tools for monitoring, management, and troubleshooting. Because OpenJ9 is an independent implementation, it has evolved with its own approach for these areas and, in some cases, its own unique tools. In other cases, tools have been added for compatibility with the reference implementation, but these tools might differ in behavior from equivalent tools in HotSpot. For a list of these tools, see Switching to OpenJ9 in the Tools section. Dumps, logs, and trace files OpenJ9 contains extensive trace and debugging capabilities to help identify, isolate, and solve run time problems. Dump files: Various types of dump are produced by default in response to certain events and can also be triggered for a whole range of events by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. Dumps include Java dumps , heap dumps , system dumps , JIT dumps, stack dumps, and snap dumps (tracepoint data). For more information, see the -Xdump option. Verbose log files: Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination, including class data sharing , garbage collection , and the JIT compiler . Trace files: The OpenJ9 implementation contains extensive tracepoints used to log information and exceptional conditions, with minimal impact on performance. Some tracepoints are enabled by default; others can be enabled on demand. For more information, see the -Xtrace option for tracing Java applications and the VM, and the -Xtgc option for tracing garbage collection. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you probably make use of the monitoring and diagnostic tools that are provided with the VM. OpenJ9 has implemented a different approach to providing similar data; rather than running a number of different tools to obtain a different piece of information, the Java dump file provides a comprehensive set of information in one place. You can find the following information in an OpenJ9 Java dump: The system the VM is running on and the resources available. The Java execution environment, including the options set from the command line. The native memory used by the VM, broken down by VM component. Memory usage in the VM for the object heap and internal VM structures, such as the JIT code cache. Lock operations that protect shared resources during runtime. Java threads, native threads, and stack traces. Hook interfaces, for performance analysis. Details about the shared classes cache, if used. Detailed information about classloaders, together with a list of libraries and classes that are loaded. For more information, see Java dump . Tools OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center. Most of the other tools provided with HotSpot are not officially supported, but equivalent functionality is available in OpenJ9 through command-line options, dump agents, and AttachAPI. Interfaces OpenJ9 provides the following interfaces, which can be used for monitoring and diagnostic purposes: JVMTI : OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information about this interface, see Java Virtual Machine Tool Interface . DTFJ interface : The Diagnostic Tool Framework for Java (DTFJ) API allows custom applications to be written that can access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information about DTFJ, see Diagnostic Tool Framework for Java . java.lang.management API: OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you might make use of certain com.sun.management interfaces. Although OpenJ9 implements some of these interfaces, a few are specific to the HotSpot VM. The following table indicates alternative classes or mechanisms that you can use for equivalent function in OpenJ9: Hotspot-specific classes Alternatives for OpenJ9 HotSpotDiagnosticMXBean OpenJ9DiagnosticsMXBean (for heap dumps) MissionControl Use Health Center MissionControlMXBean Use Health Center ThreadMXBean JvmCpuMonitorMXBean (for thread time) VMOption OpenJ9 Java dump (option -Xdump:java ) DiagnosticCommandMBean None Note: OpenJ9 implements the following com.sun.management interfaces: GarbageCollectorMXBean , GarbageCollectionNotificationInfo , GcInfo , OperatingSystemMXBean , UnixOperatingSystemMXBean . Other differences This topic describes the differences between the HotSpot VM and the Eclipse OpenJ9 VM. Therefore, if you are currently using an OpenJDK with the default Hotspot VM and you want to switch to using an OpenJDK with the OpenJ9 VM, these are the only differences you might be concerned about. If however, you are using an Oracle JDK, you might want to learn about differences between other components that make up an Oracle JDK or an OpenJDK from the AdoptOpenJDK community. For more information, read the Migration guide .","title":"New to OpenJ9?"},{"location":"openj9_newuser/#new-to-openj9","text":"The Eclipse OpenJ9 virtual machine (VM) implements the Java Virtual Machine Specification . Most Java applications should run on an OpenJDK that contains the OpenJ9 VM without changing anything. However, because it is an independent implementation there are some differences compared to the HotSpot VM, which is the default OpenJDK VM and is also included in an Oracle JDK.","title":"New to OpenJ9?"},{"location":"openj9_newuser/#command-line-options","text":"Although OpenJ9 implements its own command-line interface, many Hotspot options are recognized and accepted by the VM for compatibility. Any -XX: options that are not recognized by the VM are ignored by default, which prevents an application failing to start. You can turn off this behavior with the -XX:-IgnoreUnrecognizedXXColonOptions option. For a list of compatible options, see Switching to OpenJ9 in the Command-line options section.","title":"Command-line options"},{"location":"openj9_newuser/#garbage-collection-policies","text":"Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. By default, OpenJ9 uses the Generational Concurrent ( gencon ) GC policy, which is best suited for transactional applications that have many short-lived objects. The policy aims to minimize GC pause times without compromising throughput. If you are using Java 8, the gencon policy is similar to the ParallelGC policy, which is the default HotSpot policy. If you are using Java 11, the OpenJ9 balanced ( balanced ) policy is most similar to the default HotSpot policy. If you have a different type of workload, you might want to select a different GC policy. For a summary of available policies, see Garbage collection . For more information about the differences between OpenJ9 GC policies and how to choose the right one for your application, see Eclipse OpenJ9: Garbage collection tradeoffs and tuning with OpenJ9 . To start your application with a different policy, use the -Xgcpolicy option on the command line.","title":"Garbage collection policies"},{"location":"openj9_newuser/#operational-tooling","text":"If you are a Java application developer or you are responsible for managing large server or desktop deployments of a Java runtime environment, you probably use a number of tools for monitoring, management, and troubleshooting. Because OpenJ9 is an independent implementation, it has evolved with its own approach for these areas and, in some cases, its own unique tools. In other cases, tools have been added for compatibility with the reference implementation, but these tools might differ in behavior from equivalent tools in HotSpot. For a list of these tools, see Switching to OpenJ9 in the Tools section.","title":"Operational tooling"},{"location":"openj9_newuser/#dumps-logs-and-trace-files","text":"OpenJ9 contains extensive trace and debugging capabilities to help identify, isolate, and solve run time problems. Dump files: Various types of dump are produced by default in response to certain events and can also be triggered for a whole range of events by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. Dumps include Java dumps , heap dumps , system dumps , JIT dumps, stack dumps, and snap dumps (tracepoint data). For more information, see the -Xdump option. Verbose log files: Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination, including class data sharing , garbage collection , and the JIT compiler . Trace files: The OpenJ9 implementation contains extensive tracepoints used to log information and exceptional conditions, with minimal impact on performance. Some tracepoints are enabled by default; others can be enabled on demand. For more information, see the -Xtrace option for tracing Java applications and the VM, and the -Xtgc option for tracing garbage collection. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you probably make use of the monitoring and diagnostic tools that are provided with the VM. OpenJ9 has implemented a different approach to providing similar data; rather than running a number of different tools to obtain a different piece of information, the Java dump file provides a comprehensive set of information in one place. You can find the following information in an OpenJ9 Java dump: The system the VM is running on and the resources available. The Java execution environment, including the options set from the command line. The native memory used by the VM, broken down by VM component. Memory usage in the VM for the object heap and internal VM structures, such as the JIT code cache. Lock operations that protect shared resources during runtime. Java threads, native threads, and stack traces. Hook interfaces, for performance analysis. Details about the shared classes cache, if used. Detailed information about classloaders, together with a list of libraries and classes that are loaded. For more information, see Java dump .","title":"Dumps, logs, and trace files"},{"location":"openj9_newuser/#tools","text":"OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center. Most of the other tools provided with HotSpot are not officially supported, but equivalent functionality is available in OpenJ9 through command-line options, dump agents, and AttachAPI.","title":"Tools"},{"location":"openj9_newuser/#interfaces","text":"OpenJ9 provides the following interfaces, which can be used for monitoring and diagnostic purposes: JVMTI : OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information about this interface, see Java Virtual Machine Tool Interface . DTFJ interface : The Diagnostic Tool Framework for Java (DTFJ) API allows custom applications to be written that can access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information about DTFJ, see Diagnostic Tool Framework for Java . java.lang.management API: OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you might make use of certain com.sun.management interfaces. Although OpenJ9 implements some of these interfaces, a few are specific to the HotSpot VM. The following table indicates alternative classes or mechanisms that you can use for equivalent function in OpenJ9: Hotspot-specific classes Alternatives for OpenJ9 HotSpotDiagnosticMXBean OpenJ9DiagnosticsMXBean (for heap dumps) MissionControl Use Health Center MissionControlMXBean Use Health Center ThreadMXBean JvmCpuMonitorMXBean (for thread time) VMOption OpenJ9 Java dump (option -Xdump:java ) DiagnosticCommandMBean None Note: OpenJ9 implements the following com.sun.management interfaces: GarbageCollectorMXBean , GarbageCollectionNotificationInfo , GcInfo , OperatingSystemMXBean , UnixOperatingSystemMXBean .","title":"Interfaces"},{"location":"openj9_newuser/#other-differences","text":"This topic describes the differences between the HotSpot VM and the Eclipse OpenJ9 VM. Therefore, if you are currently using an OpenJDK with the default Hotspot VM and you want to switch to using an OpenJDK with the OpenJ9 VM, these are the only differences you might be concerned about. If however, you are using an Oracle JDK, you might want to learn about differences between other components that make up an Oracle JDK or an OpenJDK from the AdoptOpenJDK community. For more information, read the Migration guide .","title":"Other differences"},{"location":"openj9_support/","text":"Supported environments The Eclipse OpenJ9 project source code can be built against multiple JDK levels starting with JDK8, so the question of support has a more complicated answer than at OpenJDK. Our community is committed to supporting JDK levels as long as they are supported at the OpenJDK open source project with a significant user base. Currently, Eclipse OpenJ9 produces a new release every quarter that can build against all JDK levels currently supported by the OpenJDK community. We are committed to accepting problem reports when using Eclipse OpenJ9 against a supported OpenJDK level, with fixes being delivered in each release of Eclipse OpenJ9. In order to track the OpenJDK 6 month release cadence, OpenJ9 also produces two releases a year that support only a single JDK level. These releases will occur in March and September with the intention of supporting only the corresponding new OpenJDK feature release (ie: 11, 13, ...). The following table summarizes which JDK levels are expected to be supported by which Eclipse OpenJ9 releases, along with projected release dates. All future dates and support expectations are predictions that might change depending on how the OpenJDK and OpenJ9 projects evolve over time. To keep this table concise, some rows and columns will be removed over time. Eclipse OpenJ9 releases OpenJ9 release Release date JDK8 (LTS) JDK11 (LTS) JDK13 JDK14 v 0.12.0 January 2019 Yes Yes v 0.13.0 March 2019 No No v 0.14.0 April 2019 Yes Yes v 0.15.0 July 2019 Yes Yes v 0.16.0 September 2019 No No Yes (*2) v 0.17.0 October 2019 Yes Yes Yes v 0.18.0 January 2020 (*1) Yes Yes Yes v 0.19.0 March 2020 (*1) No No No Yes (*2) Notes: (*1): These OpenJ9 releases are expected, in line with our support statement. (*2): These OpenJ9 releases are the feature releases that only support the new OpenJDK release. For any issues or limitations of an Eclipse OpenJ9 release, read the release notes . Platform support The Eclipse OpenJ9 project is open to supporting any hardware/operating system platforms provided that we have community members available to maintain them. For practical reasons the Eclipse OpenJ9 JVM does not currently run on every platform. OpenJDK 8 Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK8 binaries are supported on the minimum operating system levels shown in the following tables: Linux\u00ae x32 x64 ppc64le Z31 Z64 Centos 6.9 Y Y Y N N Centos 7.4 Y Y Y N N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y Y Y RHEL 7.4 Y Y Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Y Y Ubuntu 16.04 Y Y Y N Y Ubuntu 18.04 Y Y Y N Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows\u00ae x32 x64 Windows 7 SP1 Y Y Windows 8 Y Y Windows 8.1 Y Y Windows 10 Y Y Windows Server 2012 Y Y Windows Server 2012 R2 Y Y Windows Server 2016 Y Y macOS\u00ae x64 OS X\u00ae 10.9.0+ Y AIX\u00ae ppc32 ppc64 AIX 7.1 TL4 Y Y AIX 7.2 Y Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level. OpenJDK 11 Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK11 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level. OpenJDK 13 Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK13 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level. Build environments The project build and test OpenJDK with OpenJ9 on a number of platforms. The operating system and compiler levels for the build systems are shown in the following tables. OpenJDK 8 Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER\u00ae LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z\u00ae 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 32-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 macOS x86 64-bit OSX 10.11 xcode/clang 4.6.3 and 7.2.1 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3 OpenJDK 11 Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3 OpenJDK 13 Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"Supported environments"},{"location":"openj9_support/#supported-environments","text":"The Eclipse OpenJ9 project source code can be built against multiple JDK levels starting with JDK8, so the question of support has a more complicated answer than at OpenJDK. Our community is committed to supporting JDK levels as long as they are supported at the OpenJDK open source project with a significant user base. Currently, Eclipse OpenJ9 produces a new release every quarter that can build against all JDK levels currently supported by the OpenJDK community. We are committed to accepting problem reports when using Eclipse OpenJ9 against a supported OpenJDK level, with fixes being delivered in each release of Eclipse OpenJ9. In order to track the OpenJDK 6 month release cadence, OpenJ9 also produces two releases a year that support only a single JDK level. These releases will occur in March and September with the intention of supporting only the corresponding new OpenJDK feature release (ie: 11, 13, ...). The following table summarizes which JDK levels are expected to be supported by which Eclipse OpenJ9 releases, along with projected release dates. All future dates and support expectations are predictions that might change depending on how the OpenJDK and OpenJ9 projects evolve over time. To keep this table concise, some rows and columns will be removed over time.","title":"Supported environments"},{"location":"openj9_support/#eclipse-openj9-releases","text":"OpenJ9 release Release date JDK8 (LTS) JDK11 (LTS) JDK13 JDK14 v 0.12.0 January 2019 Yes Yes v 0.13.0 March 2019 No No v 0.14.0 April 2019 Yes Yes v 0.15.0 July 2019 Yes Yes v 0.16.0 September 2019 No No Yes (*2) v 0.17.0 October 2019 Yes Yes Yes v 0.18.0 January 2020 (*1) Yes Yes Yes v 0.19.0 March 2020 (*1) No No No Yes (*2) Notes: (*1): These OpenJ9 releases are expected, in line with our support statement. (*2): These OpenJ9 releases are the feature releases that only support the new OpenJDK release. For any issues or limitations of an Eclipse OpenJ9 release, read the release notes .","title":"Eclipse OpenJ9 releases"},{"location":"openj9_support/#platform-support","text":"The Eclipse OpenJ9 project is open to supporting any hardware/operating system platforms provided that we have community members available to maintain them. For practical reasons the Eclipse OpenJ9 JVM does not currently run on every platform.","title":"Platform support"},{"location":"openj9_support/#openjdk-8","text":"Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK8 binaries are supported on the minimum operating system levels shown in the following tables: Linux\u00ae x32 x64 ppc64le Z31 Z64 Centos 6.9 Y Y Y N N Centos 7.4 Y Y Y N N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y Y Y RHEL 7.4 Y Y Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Y Y Ubuntu 16.04 Y Y Y N Y Ubuntu 18.04 Y Y Y N Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows\u00ae x32 x64 Windows 7 SP1 Y Y Windows 8 Y Y Windows 8.1 Y Y Windows 10 Y Y Windows Server 2012 Y Y Windows Server 2012 R2 Y Y Windows Server 2016 Y Y macOS\u00ae x64 OS X\u00ae 10.9.0+ Y AIX\u00ae ppc32 ppc64 AIX 7.1 TL4 Y Y AIX 7.2 Y Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level.","title":"OpenJDK 8"},{"location":"openj9_support/#openjdk-11","text":"Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK11 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level.","title":"OpenJDK 11"},{"location":"openj9_support/#openjdk-13","text":"Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK13 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level.","title":"OpenJDK 13"},{"location":"openj9_support/#build-environments","text":"The project build and test OpenJDK with OpenJ9 on a number of platforms. The operating system and compiler levels for the build systems are shown in the following tables.","title":"Build environments"},{"location":"openj9_support/#openjdk-8_1","text":"Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER\u00ae LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z\u00ae 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 32-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 macOS x86 64-bit OSX 10.11 xcode/clang 4.6.3 and 7.2.1 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"OpenJDK 8"},{"location":"openj9_support/#openjdk-11_1","text":"Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"OpenJDK 11"},{"location":"openj9_support/#openjdk-13_1","text":"Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"OpenJDK 13"},{"location":"shrc/","text":"Class data sharing Sharing class data between JVMs improves start up performance and reduces memory footprint. Start up performance is improved by placing classes that an application needs when initializing into a shared classes cache. The next time the application runs, it takes much less time to start because the classes are already available. When you enable class data sharing, AOT compilation is also enabled by default, which dynamically compiles certain methods into AOT code at runtime. By using these features in combination, startup performance can be improved even further because the cached AOT code can be used to quickly enable native code performance for subsequent runs of your application. When class data sharing is enabled, OpenJ9 automatically creates a memory mapped file that stores and shares the classes in memory. The shared classes cache is updated dynamically; When an application loads new classes, the JVM automatically stores them in the cache without any user intervention. Memory footprint is reduced by sharing common classes between applications that run in separate Java VMs. Enabling class data sharing Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. If you want to change the default behaviour, use the -Xshareclasses option on the command line. For example: You can change the name and location of the default shared classes cache. You can enable messages about the default shared classes cache by using the default command line option without the silent suboption: -Xshareclasses:bootClassesOnly,nonFatal . Note: If you have multiple VMs and you do not change the default shared classes behavior, the VMs will share a single default cache, assuming that the VMs are from a single Java installation. If the VMs are from different Java installations, the cache might be deleted and recreated; for more information, see the following section about best practices. You can treat the default cache like any other shared classes cache, for example you can print statistics for it, change the soft maximum limit size, or delete it. You can enable class data sharing for non-bootstrap classes as well, by using -Xshareclasses without the bootClassesOnly suboption. You can also disable all class data sharing by using the none suboption. Best practices for using -Xshareclasses The -Xshareclasses option is highly configurable, allowing you to specify where to create the cache, how much space to allocate for AOT code and more. You can also set the cache size by using the -Xscmx option. When shared classes is enabled, it is good practice to specify some of the cache behavior: Set an application-specific cache name ( -Xshareclasses:name=<name> ). If a cache with the specified name doesn't already exist, a new cache is created. This avoids sharing your application cache with a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note: You cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. Set a specific cache directory ( -Xshareclasses:cacheDir=<directory> ). Set a cache directory that is specific to your application, to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory. Your application will be unaffected by a user running java -Xshareclasses:destroyAll . In addition, if you have VMs from different Java installations, of the same Java release and installed by the same user, each VM checks whether the existing default shared cache in the cache directory is from the same Java installation as the VM. If not, the VM deletes that shared cache, then creates a new one. Specifying a different cache directory for each Java installation avoids this situation. Ensure that the cache directory permissions are set appropriately ( -Xshareclasses:cacheDirPerm ). It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. Set the -Xshareclasses:nonfatal option. This option means that your application can start even if there is a problem opening or creating the shared cache, in which case, the VM might be able to start without class data sharing. Support for custom class loaders Classes are shared by the bootstrap class loader internally in the OpenJ9 VM. If you are using a custom class loader, you can use the Java Helper API to find and store classes in the shared class cache. For more information, see Using the Java Helper API . Cache utilities Several utilities are provided for managing active caches, which are invoked by specifying -Xshareclasses suboptions. These utilities control the following types of operations: Adjust the minimum and maximum amount of cache space reserved for AOT or JIT data. Adjust the soft maximum size of the cache. Create snapshots of a cache. Create a cache from a snapshot. Remove caches and cache snapshots. List all the compatible and incompatible caches and snapshots. For problem determination, invalidate and revalidate AOT methods that cause a failure in an application. For problem determination, provide information to analyze the contents of a shared classes cache. For more information, see -Xshareclasses . See also AOT compiler Class Sharing Diagnosing class data sharing problems","title":"Overview"},{"location":"shrc/#class-data-sharing","text":"Sharing class data between JVMs improves start up performance and reduces memory footprint. Start up performance is improved by placing classes that an application needs when initializing into a shared classes cache. The next time the application runs, it takes much less time to start because the classes are already available. When you enable class data sharing, AOT compilation is also enabled by default, which dynamically compiles certain methods into AOT code at runtime. By using these features in combination, startup performance can be improved even further because the cached AOT code can be used to quickly enable native code performance for subsequent runs of your application. When class data sharing is enabled, OpenJ9 automatically creates a memory mapped file that stores and shares the classes in memory. The shared classes cache is updated dynamically; When an application loads new classes, the JVM automatically stores them in the cache without any user intervention. Memory footprint is reduced by sharing common classes between applications that run in separate Java VMs.","title":"Class data sharing"},{"location":"shrc/#enabling-class-data-sharing","text":"Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. If you want to change the default behaviour, use the -Xshareclasses option on the command line. For example: You can change the name and location of the default shared classes cache. You can enable messages about the default shared classes cache by using the default command line option without the silent suboption: -Xshareclasses:bootClassesOnly,nonFatal . Note: If you have multiple VMs and you do not change the default shared classes behavior, the VMs will share a single default cache, assuming that the VMs are from a single Java installation. If the VMs are from different Java installations, the cache might be deleted and recreated; for more information, see the following section about best practices. You can treat the default cache like any other shared classes cache, for example you can print statistics for it, change the soft maximum limit size, or delete it. You can enable class data sharing for non-bootstrap classes as well, by using -Xshareclasses without the bootClassesOnly suboption. You can also disable all class data sharing by using the none suboption.","title":"Enabling class data sharing"},{"location":"shrc/#best-practices-for-using-xshareclasses","text":"The -Xshareclasses option is highly configurable, allowing you to specify where to create the cache, how much space to allocate for AOT code and more. You can also set the cache size by using the -Xscmx option. When shared classes is enabled, it is good practice to specify some of the cache behavior: Set an application-specific cache name ( -Xshareclasses:name=<name> ). If a cache with the specified name doesn't already exist, a new cache is created. This avoids sharing your application cache with a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note: You cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. Set a specific cache directory ( -Xshareclasses:cacheDir=<directory> ). Set a cache directory that is specific to your application, to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory. Your application will be unaffected by a user running java -Xshareclasses:destroyAll . In addition, if you have VMs from different Java installations, of the same Java release and installed by the same user, each VM checks whether the existing default shared cache in the cache directory is from the same Java installation as the VM. If not, the VM deletes that shared cache, then creates a new one. Specifying a different cache directory for each Java installation avoids this situation. Ensure that the cache directory permissions are set appropriately ( -Xshareclasses:cacheDirPerm ). It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. Set the -Xshareclasses:nonfatal option. This option means that your application can start even if there is a problem opening or creating the shared cache, in which case, the VM might be able to start without class data sharing.","title":"Best practices for using -Xshareclasses"},{"location":"shrc/#support-for-custom-class-loaders","text":"Classes are shared by the bootstrap class loader internally in the OpenJ9 VM. If you are using a custom class loader, you can use the Java Helper API to find and store classes in the shared class cache. For more information, see Using the Java Helper API .","title":"Support for custom class loaders"},{"location":"shrc/#cache-utilities","text":"Several utilities are provided for managing active caches, which are invoked by specifying -Xshareclasses suboptions. These utilities control the following types of operations: Adjust the minimum and maximum amount of cache space reserved for AOT or JIT data. Adjust the soft maximum size of the cache. Create snapshots of a cache. Create a cache from a snapshot. Remove caches and cache snapshots. List all the compatible and incompatible caches and snapshots. For problem determination, invalidate and revalidate AOT methods that cause a failure in an application. For problem determination, provide information to analyze the contents of a shared classes cache. For more information, see -Xshareclasses .","title":"Cache utilities"},{"location":"shrc/#see-also","text":"AOT compiler Class Sharing Diagnosing class data sharing problems","title":"See also"},{"location":"shrc_diag_util/","text":"Shared classes cache diagnostic utilities These utilities display information about the contents of a shared classes cache. Run the utilities by specifying them as suboptions of -Xshareclasses . The utilities run on the default cache unless you specify a cache by adding the name=<cache_name> suboption. printAllStats -Xshareclasses:printAllStats -Xshareclasses:printAllStats,name=<cache_name> Displays the contents of the cache in chronological order. You can use this output to see the history of updates that were made to the cache. For layered caches, some information is shown for the top layer cache only, and some is shown for all layers combined. To see information for the top layer cache only, use printTopLayerStats=all . Each entry in the output starts with a VM ID, so you can see which VM wrote the associated data. Here are example entries for various types of cache data, with explanations: Class paths This example shows one class path with 4 entries: 1: 0x2234FA6C CLASSPATH /myVM/Apps/application1.jar /myVM/Apps/application2.jar /myVM/Apps/application3.jar /myVM/Apps/application4.jar 1 : the ID of the VM that wrote this data. 0x2234FA6C : the address where this data is stored. CLASSPATH : the type of data that was written. ROMClasses This example shows an entry for a single ROMClass : 1: 0x2234F7DC ROMCLASS: java/lang/Runnable at 0x213684A8 Index 1 in class path 0x2234FA6C 1 : the ID of the VM that wrote this data. 0x2234F7DC : the address where the metadata about the class is stored. ROMCLASS : the type of data that was stored. java/lang/Runnable : the name of the class. 0x213684A8 : the address where the class was stored. Index 1 : the index in the class path where the class was loaded from. 0x2234FA6C : the address of the class path against which this class is stored. Stale classes are marked with !STALE! . Any partition or modification context that is used when the class is stored is also shown. AOT methods This example shows an entry for one AOT-compiled method: 1: 0x540FBA6A AOT: loadConvert for ROMClass java/util/Properties at 0x52345174 1 : the ID of the VM that wrote this data. 0x540FBA6A : the address where the data is stored. AOT : the type of data that was stored. loadConvert : the method for which AOT-compiled code is stored. java/util/Properties : the class that contains the method. 0x52345174 : the address of the class that contains the method. Stale methods are marked with !STALE! . URLs and tokens A Token is a string that is passed to the Java\u2122 SharedClassHelper API. The output for these data types has the same format as that for class paths, but with a single entry. Zip entry caches This example shows 4 separate entries for zip entry caches: 1: 0x042FE07C ZIPCACHE: luni-kernel.jar_347075_1272300300_1 Address: 0x042FE094 Size: 7898 1: 0x042FA878 ZIPCACHE: luni.jar_598904_1272300546_1 Address: 0x042FA890 Size: 14195 1: 0x042F71F8 ZIPCACHE: nio.jar_405359_1272300546_1 Address: 0x042F7210 Size: 13808 1: 0x042F6D58 ZIPCACHE: annotation.jar_13417_1272300554_1 Address: 0x042F6D70 Size: 1023 1 : the ID of the VM that wrote this data. 0x042FE07C : the address where the metadata for the zip entry cache is stored. ZIPCACHE : the type of data that was stored. luni-kernel.jar_347075_1272300300_1 : the name of the zip entry cache. 0x042FE094 : the address where the data is stored. 7898 : the size of the stored data, in bytes. JIT data Information about JIT data is shown in JITPROFILE and JITHINT entries. For example: 1: 0xD6290368 JITPROFILE: getKeyHash Signature: ()I Address: 0xD55118C0 for ROMClass java/util/Hashtable$Entry at 0xD5511640. 2: 0xD6283848 JITHINT: loadClass Signature: (Ljava/lang/String;)Ljava/lang/Class; Address: 0xD5558F98 for ROMClass com/ibm/oti/vm/BootstrapClassLoader at 0xD5558AE0. Startup hints Information about startup hints is shown in STARTUP HINTS KEY and STARTUP HINTS DETAIL . For example: 1: 0x000000002237C6E0 STARTUP HINTS KEY: -Xoptionsfile=jre\\bin\\compressedrefs\\options.default -Xlockword:mode=default -Xjcl:jclse29 -Dcom.ibm.oti.vm.bootstrap.library.path=jre\\bin\\compressedrefs;jre\\bin -Djava.home=jre -Djava.ext.dirs=jre\\lib\\ext -Duser.dir=bin -Djava.class.path=. -Dsun.java.launcher=SUN_STANDARD Address: 0x000000002237C700 Size: 96 STARTUP HINTS DETAIL Flags: 1 DATA1: 1677721 DATA2: 5033165 printStats -Xshareclasses:printStats -Xshareclasses:printStats,name=<cache_name> -Xshareclasses:printStats=<data_type1>[+<data_type2>][...],name=<cache_name> Displays summary information about the cache. For layered caches, -Xshareclasses:printStats shows some information for the top layer cache, and summary information (bytes and counts only) for all layers combined. To see information for the top layer cache only, use printTopLayerStats . You can request more detail about items of a specific data type that are stored in the shared cache by using printStats=<data_type> . Use the plus symbol (+) to separate the data types. For example, use printStats=romclass+url,name=myCache to see information about ROMClass and URL items in all the layer caches of the cache called Cache1 . The valid data types are as follows (case insensitive): help (displays the list of valid data types) all (equivalent to printAllStats ) classpath url token romclass rommethod aot jitprofile jithint zipcache stale startuphint Example output for a traditional cache (no cache layers: cache layer = 0 ), with summary information only: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr Cache contains only classes with line numbers base address = 0x00007F60B807A000 end address = 0x00007F60B905E000 allocation pointer = 0x00007F60B81BE3A8 cache layer = 0 cache size = 16776608 softmx bytes = 16776608 free bytes = 12740572 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 30440 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 189358 Class debug area % used = 14% ROMClass bytes = 1328040 AOT bytes = 98404 JIT data bytes = 168 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 2 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 24% full Cache is accessible to current user = true Example output for a cache with 2 layers ( cache layer = 1 ), with summary information only: Current statistics for top layer of cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007FCAB2766000 end address = 0x00007FCAB374A000 allocation pointer = 0x00007FCAB2766000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% Cache is 8% full Cache is accessible to current user = true --------------------------------------------------------- Current statistics for all layers of cache \"Cache1\": ROMClass bytes = 1328040 AOT bytes = 128924 JIT data bytes = 812 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 20 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% The Cache created with section indicates the options that were used when the cache was created. BCI Enabled relates to the -Xshareclasses:enableBCI option (enabled by default) and Restrict Classpaths relates to the -Xshareclasses:restrictClasspaths option. Feature = cr indicates that the cache is a 64-bit compressed references cache, as described in Creating, populating, monitoring, and deleting a cache . Line number information for classes in the cache is then shown with one of the following messages: Cache contains only classes with line numbers : VM line number processing was enabled for all the classes that were stored in this shared cache (the -Xlinenumbers option is enabled by default). All classes in the cache contain line numbers if the original classes contained line number data. Cache contains only classes without line numbers : The -Xnolinenumbers option was used to disable VM line number processing for all the classes that were stored in this shared cache, so none of the classes contain line numbers. Cache contains classes with line numbers and classes without line numbers : VM line number processing was enabled for some classes and disabled for others (the -Xnolinenumbers option was specified when some of the classes were added to the cache). The following summary data is displayed: baseAddress and endAddress The boundary addresses of the shared memory area that contains the classes. allocation pointer The address where ROMClass data is currently being allocated in the cache. cache layer The layer number that the cache stats relate to. cache size and free bytes cache size shows the total size of the shared memory area in bytes, and free bytes shows the free bytes that remain. softmx bytes The soft maximum size for the cache. For more information, see -Xscmx . ROMClass bytes The number of bytes of class data in the cache. AOT bytes The number of bytes of AOT-compiled code in the cache. Reserved space for AOT bytes The number of bytes reserved for AOT-compiled code in the cache. Maximum space for AOT bytes The maximum number of bytes of AOT-compiled code that can be stored in the cache. JIT data bytes The number of bytes of JIT-related data stored in the cache. Reserved space for JIT data bytes The number of bytes reserved for JIT-related data in the cache. Maximum space for JIT data bytes The maximum number of bytes of JIT-related data that can be stored in the cache. Zip cache bytes The number of zip entry cache bytes stored in the cache. Startup hint bytes The number of bytes of data stored to describe startup hints. Data bytes The number of bytes of non-class data stored by the VM. Metadata bytes The number of bytes of data stored to describe the cached classes. Note: This field is available only in the top layer cache output or when a cache is not layered. Metadata % used The proportion of metadata bytes to class bytes, which indicates how efficiently cache space is being used. The value shown does consider the Class debug area size . Class debug area size The size in bytes of the Class Debug Area. This area is reserved to store LineNumberTable and LocalVariableTable class attribute information. Class debug area bytes used The size in bytes of the Class Debug Area that contains data. Class debug area % used The percentage of the Class Debug Area that contains data. ROMClasses The number of classes in the cache. The cache stores ROMClasses (the class data itself, which is read-only) and information about the location from which the classes were loaded. This information is stored in different ways, depending on the Java SharedClassHelper API that was used to store the classes. For more information, see Using the Java Helper API . AOT methods Optionally, ROMClass methods can be compiled and the AOT code stored in the cache. The AOT methods information shows the total number of methods in the cache that have AOT code compiled for them. This number includes AOT code for stale classes. Classpaths , URLs , and Tokens The number of class paths, URLs, and tokens in the cache. Classes stored from a SharedClassURLClasspathHelper are stored with a Classpath. Classes stored using a SharedClassURLHelper are stored with a URL. Classes stored using a SharedClassTokenHelper are stored with a Token. Most class loaders, including the bootstrap and application class loaders, use a SharedClassURLClasspathHelper . The result is that it is most common to see class paths in the cache. The number of Classpaths, URLs, and Tokens stored is determined by a number of factors. For example, every time an element of a Classpath is updated, such as when a .jar file is rebuilt, a new Classpath is added to the cache. Additionally, if partitions or modification contexts are used, they are associated with the Classpath, URL, or Token. A Classpath, URL, or Token is stored for each unique combination of partition and modification context. For more information, see SharedClassHelper partitions and Modification contexts . Zip caches The number of .zip files that have entry caches stored in the shared cache. Startup hints The number of startup hints stored in the cache. There can be a startup hint for each unique set of command line options used to start the JVM. Stale classes The number of classes that have been marked as \"potentially stale\" by the cache code, because of a VM or Java application update. See Understanding dynamic updates . % Stale classes The percentage of classes in the cache that are stale. Cache is XXX% full The percentage of the cache that is currently used. This line is displayed only if the soft maximum size is not set. This value is calculated as follows: % Full = (('Cache Size' - 'Free Bytes') * 100) / ('Cache Size') Cache is XXX% soft full The percentage of the soft maximum size that is currently used. This line is displayed only if the soft maximum size is set. The free bytes in the cache statistics means the free bytes within the soft maximum limit. This value is calculated as follows: % soft Full = (('Soft max bytes' - 'Free Bytes') * 100) / ('Soft max bytes') For more information about the soft maximum size, see -Xscmx . Cache is accessible to current user Whether the current user can access the cache. printTopLayerStats Use this utility with a layered cache. This utility works in the same way as printStats . By default, this utility shows information for the top layer cache. To view statistics for a specific layer, use the layer=<number> option. For example, to show statistics for the second layer in a 2-layer cache, run printTopLayerStats,layer=1 . Example output: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007F234C054000 end address = 0x00007F234D038000 allocation pointer = 0x00007F234C054000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 792 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% ROMClass bytes = 0 AOT bytes = 30520 JIT data bytes = 644 Zip cache bytes = 0 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 0 # AOT Methods = 18 # Classpaths = 0 # URLs = 0 # Tokens = 0 # Zip caches = 0 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 8% full Cache is accessible to current user = true","title":"Diagnostic cache utilities"},{"location":"shrc_diag_util/#shared-classes-cache-diagnostic-utilities","text":"These utilities display information about the contents of a shared classes cache. Run the utilities by specifying them as suboptions of -Xshareclasses . The utilities run on the default cache unless you specify a cache by adding the name=<cache_name> suboption.","title":"Shared classes cache diagnostic utilities"},{"location":"shrc_diag_util/#printallstats","text":"-Xshareclasses:printAllStats -Xshareclasses:printAllStats,name=<cache_name> Displays the contents of the cache in chronological order. You can use this output to see the history of updates that were made to the cache. For layered caches, some information is shown for the top layer cache only, and some is shown for all layers combined. To see information for the top layer cache only, use printTopLayerStats=all . Each entry in the output starts with a VM ID, so you can see which VM wrote the associated data. Here are example entries for various types of cache data, with explanations:","title":"printAllStats"},{"location":"shrc_diag_util/#class-paths","text":"This example shows one class path with 4 entries: 1: 0x2234FA6C CLASSPATH /myVM/Apps/application1.jar /myVM/Apps/application2.jar /myVM/Apps/application3.jar /myVM/Apps/application4.jar 1 : the ID of the VM that wrote this data. 0x2234FA6C : the address where this data is stored. CLASSPATH : the type of data that was written.","title":"Class paths"},{"location":"shrc_diag_util/#romclasses","text":"This example shows an entry for a single ROMClass : 1: 0x2234F7DC ROMCLASS: java/lang/Runnable at 0x213684A8 Index 1 in class path 0x2234FA6C 1 : the ID of the VM that wrote this data. 0x2234F7DC : the address where the metadata about the class is stored. ROMCLASS : the type of data that was stored. java/lang/Runnable : the name of the class. 0x213684A8 : the address where the class was stored. Index 1 : the index in the class path where the class was loaded from. 0x2234FA6C : the address of the class path against which this class is stored. Stale classes are marked with !STALE! . Any partition or modification context that is used when the class is stored is also shown.","title":"ROMClasses"},{"location":"shrc_diag_util/#aot-methods","text":"This example shows an entry for one AOT-compiled method: 1: 0x540FBA6A AOT: loadConvert for ROMClass java/util/Properties at 0x52345174 1 : the ID of the VM that wrote this data. 0x540FBA6A : the address where the data is stored. AOT : the type of data that was stored. loadConvert : the method for which AOT-compiled code is stored. java/util/Properties : the class that contains the method. 0x52345174 : the address of the class that contains the method. Stale methods are marked with !STALE! .","title":"AOT methods"},{"location":"shrc_diag_util/#urls-and-tokens","text":"A Token is a string that is passed to the Java\u2122 SharedClassHelper API. The output for these data types has the same format as that for class paths, but with a single entry.","title":"URLs and tokens"},{"location":"shrc_diag_util/#zip-entry-caches","text":"This example shows 4 separate entries for zip entry caches: 1: 0x042FE07C ZIPCACHE: luni-kernel.jar_347075_1272300300_1 Address: 0x042FE094 Size: 7898 1: 0x042FA878 ZIPCACHE: luni.jar_598904_1272300546_1 Address: 0x042FA890 Size: 14195 1: 0x042F71F8 ZIPCACHE: nio.jar_405359_1272300546_1 Address: 0x042F7210 Size: 13808 1: 0x042F6D58 ZIPCACHE: annotation.jar_13417_1272300554_1 Address: 0x042F6D70 Size: 1023 1 : the ID of the VM that wrote this data. 0x042FE07C : the address where the metadata for the zip entry cache is stored. ZIPCACHE : the type of data that was stored. luni-kernel.jar_347075_1272300300_1 : the name of the zip entry cache. 0x042FE094 : the address where the data is stored. 7898 : the size of the stored data, in bytes.","title":"Zip entry caches"},{"location":"shrc_diag_util/#jit-data","text":"Information about JIT data is shown in JITPROFILE and JITHINT entries. For example: 1: 0xD6290368 JITPROFILE: getKeyHash Signature: ()I Address: 0xD55118C0 for ROMClass java/util/Hashtable$Entry at 0xD5511640. 2: 0xD6283848 JITHINT: loadClass Signature: (Ljava/lang/String;)Ljava/lang/Class; Address: 0xD5558F98 for ROMClass com/ibm/oti/vm/BootstrapClassLoader at 0xD5558AE0.","title":"JIT data"},{"location":"shrc_diag_util/#startup-hints","text":"Information about startup hints is shown in STARTUP HINTS KEY and STARTUP HINTS DETAIL . For example: 1: 0x000000002237C6E0 STARTUP HINTS KEY: -Xoptionsfile=jre\\bin\\compressedrefs\\options.default -Xlockword:mode=default -Xjcl:jclse29 -Dcom.ibm.oti.vm.bootstrap.library.path=jre\\bin\\compressedrefs;jre\\bin -Djava.home=jre -Djava.ext.dirs=jre\\lib\\ext -Duser.dir=bin -Djava.class.path=. -Dsun.java.launcher=SUN_STANDARD Address: 0x000000002237C700 Size: 96 STARTUP HINTS DETAIL Flags: 1 DATA1: 1677721 DATA2: 5033165","title":"Startup hints"},{"location":"shrc_diag_util/#printstats","text":"-Xshareclasses:printStats -Xshareclasses:printStats,name=<cache_name> -Xshareclasses:printStats=<data_type1>[+<data_type2>][...],name=<cache_name> Displays summary information about the cache. For layered caches, -Xshareclasses:printStats shows some information for the top layer cache, and summary information (bytes and counts only) for all layers combined. To see information for the top layer cache only, use printTopLayerStats . You can request more detail about items of a specific data type that are stored in the shared cache by using printStats=<data_type> . Use the plus symbol (+) to separate the data types. For example, use printStats=romclass+url,name=myCache to see information about ROMClass and URL items in all the layer caches of the cache called Cache1 . The valid data types are as follows (case insensitive): help (displays the list of valid data types) all (equivalent to printAllStats ) classpath url token romclass rommethod aot jitprofile jithint zipcache stale startuphint Example output for a traditional cache (no cache layers: cache layer = 0 ), with summary information only: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr Cache contains only classes with line numbers base address = 0x00007F60B807A000 end address = 0x00007F60B905E000 allocation pointer = 0x00007F60B81BE3A8 cache layer = 0 cache size = 16776608 softmx bytes = 16776608 free bytes = 12740572 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 30440 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 189358 Class debug area % used = 14% ROMClass bytes = 1328040 AOT bytes = 98404 JIT data bytes = 168 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 2 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 24% full Cache is accessible to current user = true Example output for a cache with 2 layers ( cache layer = 1 ), with summary information only: Current statistics for top layer of cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007FCAB2766000 end address = 0x00007FCAB374A000 allocation pointer = 0x00007FCAB2766000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% Cache is 8% full Cache is accessible to current user = true --------------------------------------------------------- Current statistics for all layers of cache \"Cache1\": ROMClass bytes = 1328040 AOT bytes = 128924 JIT data bytes = 812 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 20 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% The Cache created with section indicates the options that were used when the cache was created. BCI Enabled relates to the -Xshareclasses:enableBCI option (enabled by default) and Restrict Classpaths relates to the -Xshareclasses:restrictClasspaths option. Feature = cr indicates that the cache is a 64-bit compressed references cache, as described in Creating, populating, monitoring, and deleting a cache . Line number information for classes in the cache is then shown with one of the following messages: Cache contains only classes with line numbers : VM line number processing was enabled for all the classes that were stored in this shared cache (the -Xlinenumbers option is enabled by default). All classes in the cache contain line numbers if the original classes contained line number data. Cache contains only classes without line numbers : The -Xnolinenumbers option was used to disable VM line number processing for all the classes that were stored in this shared cache, so none of the classes contain line numbers. Cache contains classes with line numbers and classes without line numbers : VM line number processing was enabled for some classes and disabled for others (the -Xnolinenumbers option was specified when some of the classes were added to the cache). The following summary data is displayed:","title":"printStats"},{"location":"shrc_diag_util/#baseaddress-and-endaddress","text":"The boundary addresses of the shared memory area that contains the classes.","title":"baseAddress and endAddress"},{"location":"shrc_diag_util/#allocation-pointer","text":"The address where ROMClass data is currently being allocated in the cache.","title":"allocation pointer"},{"location":"shrc_diag_util/#cache-layer","text":"The layer number that the cache stats relate to.","title":"cache layer"},{"location":"shrc_diag_util/#cache-size-and-free-bytes","text":"cache size shows the total size of the shared memory area in bytes, and free bytes shows the free bytes that remain.","title":"cache size and free bytes"},{"location":"shrc_diag_util/#softmx-bytes","text":"The soft maximum size for the cache. For more information, see -Xscmx .","title":"softmx bytes"},{"location":"shrc_diag_util/#romclass-bytes","text":"The number of bytes of class data in the cache.","title":"ROMClass bytes"},{"location":"shrc_diag_util/#aot-bytes","text":"The number of bytes of AOT-compiled code in the cache.","title":"AOT bytes"},{"location":"shrc_diag_util/#reserved-space-for-aot-bytes","text":"The number of bytes reserved for AOT-compiled code in the cache.","title":"Reserved space for AOT bytes"},{"location":"shrc_diag_util/#maximum-space-for-aot-bytes","text":"The maximum number of bytes of AOT-compiled code that can be stored in the cache.","title":"Maximum space for AOT bytes"},{"location":"shrc_diag_util/#jit-data-bytes","text":"The number of bytes of JIT-related data stored in the cache.","title":"JIT data bytes"},{"location":"shrc_diag_util/#reserved-space-for-jit-data-bytes","text":"The number of bytes reserved for JIT-related data in the cache.","title":"Reserved space for JIT data bytes"},{"location":"shrc_diag_util/#maximum-space-for-jit-data-bytes","text":"The maximum number of bytes of JIT-related data that can be stored in the cache.","title":"Maximum space for JIT data bytes"},{"location":"shrc_diag_util/#zip-cache-bytes","text":"The number of zip entry cache bytes stored in the cache.","title":"Zip cache bytes"},{"location":"shrc_diag_util/#startup-hint-bytes","text":"The number of bytes of data stored to describe startup hints.","title":"Startup hint bytes"},{"location":"shrc_diag_util/#data-bytes","text":"The number of bytes of non-class data stored by the VM.","title":"Data bytes"},{"location":"shrc_diag_util/#metadata-bytes","text":"The number of bytes of data stored to describe the cached classes. Note: This field is available only in the top layer cache output or when a cache is not layered.","title":"Metadata bytes"},{"location":"shrc_diag_util/#metadata-used","text":"The proportion of metadata bytes to class bytes, which indicates how efficiently cache space is being used. The value shown does consider the Class debug area size .","title":"Metadata % used"},{"location":"shrc_diag_util/#class-debug-area-size","text":"The size in bytes of the Class Debug Area. This area is reserved to store LineNumberTable and LocalVariableTable class attribute information.","title":"Class debug area size"},{"location":"shrc_diag_util/#class-debug-area-bytes-used","text":"The size in bytes of the Class Debug Area that contains data.","title":"Class debug area bytes used"},{"location":"shrc_diag_util/#class-debug-area-used","text":"The percentage of the Class Debug Area that contains data.","title":"Class debug area % used"},{"location":"shrc_diag_util/#romclasses_1","text":"The number of classes in the cache. The cache stores ROMClasses (the class data itself, which is read-only) and information about the location from which the classes were loaded. This information is stored in different ways, depending on the Java SharedClassHelper API that was used to store the classes. For more information, see Using the Java Helper API .","title":"ROMClasses"},{"location":"shrc_diag_util/#aot-methods_1","text":"Optionally, ROMClass methods can be compiled and the AOT code stored in the cache. The AOT methods information shows the total number of methods in the cache that have AOT code compiled for them. This number includes AOT code for stale classes.","title":"AOT methods"},{"location":"shrc_diag_util/#classpaths-urls-and-tokens","text":"The number of class paths, URLs, and tokens in the cache. Classes stored from a SharedClassURLClasspathHelper are stored with a Classpath. Classes stored using a SharedClassURLHelper are stored with a URL. Classes stored using a SharedClassTokenHelper are stored with a Token. Most class loaders, including the bootstrap and application class loaders, use a SharedClassURLClasspathHelper . The result is that it is most common to see class paths in the cache. The number of Classpaths, URLs, and Tokens stored is determined by a number of factors. For example, every time an element of a Classpath is updated, such as when a .jar file is rebuilt, a new Classpath is added to the cache. Additionally, if partitions or modification contexts are used, they are associated with the Classpath, URL, or Token. A Classpath, URL, or Token is stored for each unique combination of partition and modification context. For more information, see SharedClassHelper partitions and Modification contexts .","title":"Classpaths, URLs, and Tokens"},{"location":"shrc_diag_util/#zip-caches","text":"The number of .zip files that have entry caches stored in the shared cache.","title":"Zip caches"},{"location":"shrc_diag_util/#startup-hints_1","text":"The number of startup hints stored in the cache. There can be a startup hint for each unique set of command line options used to start the JVM.","title":"Startup hints"},{"location":"shrc_diag_util/#stale-classes","text":"The number of classes that have been marked as \"potentially stale\" by the cache code, because of a VM or Java application update. See Understanding dynamic updates .","title":"Stale classes"},{"location":"shrc_diag_util/#stale-classes_1","text":"The percentage of classes in the cache that are stale.","title":"% Stale classes"},{"location":"shrc_diag_util/#cache-is-xxx-full","text":"The percentage of the cache that is currently used. This line is displayed only if the soft maximum size is not set. This value is calculated as follows: % Full = (('Cache Size' - 'Free Bytes') * 100) / ('Cache Size')","title":"Cache is XXX% full"},{"location":"shrc_diag_util/#cache-is-xxx-soft-full","text":"The percentage of the soft maximum size that is currently used. This line is displayed only if the soft maximum size is set. The free bytes in the cache statistics means the free bytes within the soft maximum limit. This value is calculated as follows: % soft Full = (('Soft max bytes' - 'Free Bytes') * 100) / ('Soft max bytes') For more information about the soft maximum size, see -Xscmx .","title":"Cache is XXX% soft full"},{"location":"shrc_diag_util/#cache-is-accessible-to-current-user","text":"Whether the current user can access the cache.","title":"Cache is accessible to current user"},{"location":"shrc_diag_util/#printtoplayerstats","text":"Use this utility with a layered cache. This utility works in the same way as printStats . By default, this utility shows information for the top layer cache. To view statistics for a specific layer, use the layer=<number> option. For example, to show statistics for the second layer in a 2-layer cache, run printTopLayerStats,layer=1 . Example output: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007F234C054000 end address = 0x00007F234D038000 allocation pointer = 0x00007F234C054000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 792 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% ROMClass bytes = 0 AOT bytes = 30520 JIT data bytes = 644 Zip cache bytes = 0 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 0 # AOT Methods = 18 # Classpaths = 0 # URLs = 0 # Tokens = 0 # Zip caches = 0 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 8% full Cache is accessible to current user = true","title":"printTopLayerStats"},{"location":"tool_builder/","text":"Option builder tools You can modify many of the command-line options by specifying a number of parameters. Several of the options have many available parameters that you can combine in numerous ways to achieve the effect you want. Tools are available for the following options to help you select these parameters correctly, achieve the correct combinations, and avoid conflicts: -Xdump -Xtrace","title":"Option builder"},{"location":"tool_builder/#option-builder-tools","text":"You can modify many of the command-line options by specifying a number of parameters. Several of the options have many available parameters that you can combine in numerous ways to achieve the effect you want. Tools are available for the following options to help you select these parameters correctly, achieve the correct combinations, and avoid conflicts: -Xdump -Xtrace","title":"Option builder tools"},{"location":"tool_jcmd/","text":"Java diagnostic command ( jcmd ) tool Use the jcmd tool to run diagnostic commands on a specified VM. Note: Running diagnostic commands can significantly affect the performance of the target VM. The command syntax is as follows: jcmd [<options>] [<vmid> <arguments>] Where: The available <options> are: -J : supplies arguments to the Java VM that is running the jcmd command. You can use multiple -J options, for example: jcmd -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -h : prints the jcmd help <vmid> is the Attach API virtual machine identifier for the Java\u2122 VM process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. You can use the jps command to find the VMID. The available arguments are: help : shows the diagnostic commands that are available for this VM. This list of commands can vary between VMs. help <command> : shows help information for the specified diagnostic command <command> [<command_arguments>] : runs the specified diagnostic command, with optional command arguments Examples: jcmd 31452 Thread.print jcmd 31452 help Dump.heap jcmd 31452 Dump.heap myHeapDump Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For information about the differences between these two implementations, see Switching to OpenJ9 . The tool uses the Attach API, and has the following limitations: Displays information only for local processes that are owned by the current user, due to security considerations. Displays information for OpenJ9 Java processes only Does not show information for processes whose Attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java command (jcmd) tool"},{"location":"tool_jcmd/#java-diagnostic-command-jcmd-tool","text":"Use the jcmd tool to run diagnostic commands on a specified VM. Note: Running diagnostic commands can significantly affect the performance of the target VM. The command syntax is as follows: jcmd [<options>] [<vmid> <arguments>] Where: The available <options> are: -J : supplies arguments to the Java VM that is running the jcmd command. You can use multiple -J options, for example: jcmd -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -h : prints the jcmd help <vmid> is the Attach API virtual machine identifier for the Java\u2122 VM process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. You can use the jps command to find the VMID. The available arguments are: help : shows the diagnostic commands that are available for this VM. This list of commands can vary between VMs. help <command> : shows help information for the specified diagnostic command <command> [<command_arguments>] : runs the specified diagnostic command, with optional command arguments Examples: jcmd 31452 Thread.print jcmd 31452 help Dump.heap jcmd 31452 Dump.heap myHeapDump Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For information about the differences between these two implementations, see Switching to OpenJ9 . The tool uses the Attach API, and has the following limitations: Displays information only for local processes that are owned by the current user, due to security considerations. Displays information for OpenJ9 Java processes only Does not show information for processes whose Attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java diagnostic command (jcmd) tool"},{"location":"tool_jdmpview/","text":"Dump viewer ( jdmpview ) The dump viewer is a command-line tool that allows you to examine the contents of system dumps produced from the OpenJ9 VM. The dump viewer allows you to view both Java\u2122 and native information from the time the dump was produced. For long running tasks, the dump viewer can also be run in batch mode. The dump viewer is useful for diagnosing OutOfMemoryError exceptions in Java\u2122 applications. For problems like general protection faults (GPF), system abends, and SIGSEVs, a system debugger such as gdb (Linux) provides more information. Syntax Starting the dump viewer jdmpview (-core <core file> | -zip <zip file>) [-notemp] Input option Explanation -core <core file> Specifies a dump file. -zip <zip file> Specifies a compressed file containing the core file and associated XML file (produced by the dump extractor ( jextract ) tool on AIX\u00ae and Linux\u2122 systems). -notemp By default, when you specify a file by using the -zip option, the contents are extracted to a temporary directory before processing. Use the -notemp option to prevent this extraction step, and run all subsequent commands in memory. Note: The -core option can be used with the -zip option to specify the core and XML files in the compressed file. Without these options, jdmpview shows multiple contexts, one for each source file that it identified in the compressed file. On z/OS\u00ae, you can copy the dump to an HFS file and supply that as input to jdmpview , or you can supply a fully qualified MVS\u2122 data set name. For example: > jdmpview -core USER1.JVM.TDUMP.SSHD6.D070430.T092211 DTFJView version 4.28.3, using DTFJ version 1.11.28004 Loading image from DTFJ... MVS data set names may contain the dollar sign ($). Names that contain a dollar sign must be enclosed by single quotation marks ('). For example: > jdmpview -core 'USER1.JVM.$TDUMP.SSH$D7.D141211.T045506' After jdmpview processes the dump files, a session starts, showing this message: For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" > If you run the jdmpview tool on a compressed file that contains multiple dumps, the tool detects and shows all the dump files, whether these are system dumps, Java dumps, or heap dumps. Because of this behavior, more than one context might be displayed when you start jdmpview . To switch context, type context <n> , where <n> is the context value for the dump you want to investigate. On z/OS, a system dump can contain multiple address spaces and an address space can contain multiple VM instances. In this case, the context allows you to select the address space and VM instance within the dump file. The following z/OS example shows address spaces ( ASID ), with two JVMs occupying address space 0x73 (context 5 and 6). The current context is 5 ( CTX:5> ), shown with an asterisk. To view the JVM in context 6, you can switch by specifying context 6 . CTX:5> context Available contexts (* = currently selected context) : 0 : ASID: 0x1 : No JRE : No JRE 1 : ASID: 0x3 : No JRE : No JRE 2 : ASID: 0x4 : No JRE : No JRE 3 : ASID: 0x6 : No JRE : No JRE 4 : ASID: 0x7 : No JRE : No JRE *5 : ASID: 0x73 EDB: 0x83d2053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 6 : ASID: 0x73 EDB: 0x8004053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 7 : ASID: 0x73 EDB: 0x4a7bd9e8 : No JRE 8 : ASID: 0xffff : No JRE : No JRE If you are using jdmpview to view Java dumps and heap dumps, some options do not produce any output. For example, a heap dump doesn't contain the information requested by the info system command, but does contain information requested by the info class command. If you are viewing a dump where there are a large number of objects on the heap, you can speed up the performance of jdmpview by ensuring that your system has enough memory available and does not need to page memory to disk. To achieve this, start jdmpview with a larger heap size by specifying the -Xmx option. Use the -J option to pass the -Xmx command line option to the JVM. For example: jdmpview -J-Xmx<n> -core <core file> The options available to the dump viewer session are shown under Session parameters Starting in batch mode For long running or routine jobs, jdmpview can be used in batch mode. You can run a single command without specifying a command file by appending the command to the end of the jdmpview command line. For example: jdmpview -core mycore.dmp info class When specifying jdmpview commands that accept a wildcard parameter, you must replace the wildcard symbol with ALL to prevent the shell interpreting the wildcard symbol. For example, in interactive mode, the command info thread * must be specified in the following way: jdmpview -core mycore.dmp info thread ALL Batch mode is controlled with the following command line options: Option Explanation -cmdfile <path to command file> A file that contains a series of jdmpview commands, which are read and run sequentially. -charset <character set name> The character set for the commands specified in -cmdfile (name must be a supported charset as defined in java.nio.charset.Charset. For example, US-ASCII) -outfile <path to output file> The file to record any output generated by commands. -overwrite If the file specified in -outfile exists, this option overwrites the file. -append If the file specified in -outfile exists, new output messages are appended to the end of that file. The -append and -overwrite options cannot be used at the same time. The command file can have empty lines that contain spaces, or comment lines that start with // or #. These lines are ignored by jdmpview. Example command file: // commands.txt info system info proc To run jdmpview in batch mode, using this command file, specify: jdmpview -outfile out.txt [-overwrite|-append] -cmdfile commands.txt -core <path to core file> When the output file exists, you need to specify either the -overwrite option or the -append option. If you do not, an error message is generated. Processing output You can redirect command output to a file, or pipe the command output to another command. To redirect jdmpview command output to a file, use one of the following formats: command > <target_file> If the target file exists, this redirection overwrites the content within it. command >> <target_file> If the target file exists, this redirection appends the output to it. Where <target_file> is the file name, which can include the full path to the file. To pipe jdmpview command output to another command, use the vertical bar (|) character. For example: command | grep string You can chain more than two commands together by using multiple vertical bar characters. The following commands can be used to interrogate the output: charsFrom charsTo grep tokens Using CharsFrom Use the charsFrom command after the vertical bar character to exclude all characters that come before a specified pattern in a resulting line. charsFrom <options> pattern Where <options> : -e or -exclude : Exclude the matched pattern from the resulting line. By default, the matched pattern is included in the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays resulting lines that contain the pattern jre , and trims each line to exclude all characters that come before this pattern: > info mod | charsFrom jre jre/lib/ppc64/libzip.so @ 0x0, sections: jre/lib/ppc64/libdbgwrapper80.so @ 0x0, sections: jre/lib/ppc64/libverify.so @ 0x0, sections: jre/lib/ppc64/libjava.so @ 0x0, sections: jre/lib/ppc64/compressedrefs/libjclse7b_28.so @ 0x0, sections: Using CharsTo Use the CharsTo command after the vertical bar character to include the characters in a resulting line until a specific pattern is found. charsTo <options> pattern Where <options> : -include : Include the matched pattern in the resulting line. By default, the matched pattern is excluded from the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays lines that contain the pattern \"@\", and trims each line to exclude all characters from \"@\" onwards: > info mod | charsTo @ bin/java /usr/lib64/gconv/UTF-16.so /test/sdk/lib/ppc64le/libnet.so /test/sdk/lib/ppc64le/libnio.so /test/sdk/lib/ppc64le/libzip.so /test/sdk/lib/ppc64le/libjsig.so libjsig.so You can also use charsFrom and charsTo together, separated by a vertical bar character. For example, the following command displays lines that contain the pattern \"lib\", and trims each line to exclude all characters that come before this pattern, as well as all characters from the pattern @ : > info mod | charsFrom lib | charsTo @ lib/ppc64le/libzip.so lib/ppc64le/libjsig.so lib/ppc64le/libverify.so lib/ppc64le/libjava.so lib/ppc64le/compressedrefs/libj9jit29.so Note: The line will not be displayed if the charsFrom and charsTo are used together, but only one of the patterns are matched in a line. Furthermore, the line will not be displayed if both patterns are matched in a line, but the charsTo pattern appears before, and not after, the charsFrom pattern. Using grep Use the grep command after the vertical bar character to show which lines match a specified pattern. grep <options> pattern Where <options> : -i : Ignore case. -r , -G , or --regex : Use a regular expression as defined in the Java documentation of the java.utils.regex.Pattern class. -b or --block : Show blocks of lines where at least one of the lines matches the pattern. Blocks of lines are separated by empty lines. -A <NUM> or +<NUM> : Show at most <NUM> lines after the matching line. For example grep -A 2 pattern or grep +2 pattern. -B <NUM> or -<NUM> : Show at most <NUM> lines before the matching line. -C <NUM> or +-<NUM> : Show at most <NUM> lines before and after the matching line. -v or --invert-match : Use with the grep command to show lines that do not match the pattern. These options are equivalent to the grep- command. -F or --fixed-strings : Do not treat the asterisk (*) as a wildcard character. Use these options with the -r , -G , or --regex options. Pattern rules: An asterisk (*) in a pattern is treated as a wildcard character unless you specify the -F or --fixed-strings options. If a pattern contains spaces, enclose the pattern in a pair of double quotation marks (\"). If a pattern contains double quotation marks, enclose the pattern in a pair of single quotation marks ('). You can specify multiple sub-patterns to match by using the following format, but only if you do not use the -r , -G , or --regex options: \"[pattern1|pattern2|...|patternN]\" The initial and trailing double quotation marks and brackets ([ ]) are required. Use a vertical bar character to separate the sub-patterns. Quotation marks and the vertical bar are not allowed in a sub-pattern. Spaces are allowed in the middle of a sub-pattern, but leading and trailing spaces will be trimmed. Use the grep command to show lines that do not match the pattern. For example, the following command displays the number of instances and total heap size for the java/lang/String class: > info class | grep java/lang/String 94 7688 [Ljava/lang/String; 1822 58304 java/lang/String 1 16 java/lang/String$CaseInsensitiveComparator 0 0 java/lang/String$UnsafeHelpers The following command uses two pipes in combination to display the number of instances and total heap size for the java/lang/StringCoding.StringDecoder class: > info class | grep java/lang/String | grep -i decoder 1 48 java/lang/StringCoding$StringDecoder Using tokens Use the tokens command after the vertical bar character to isolate specified tokens in the resulting lines. tokens [options] range[,range][..range] You can define range in the following formats: x x,y x..y A set of rules applies to these formats: x or y can be prefixed with \"-\". This means that x or y are counting backwards from the end of a list. For example, a y value of -1 represents the last token in a list, while -2 represents the penultimate token in a list. x must represent a token that either precedes or is at the same position as y. In this format, if x is omitted, it is assumed to be '1'. If y is omitted, it is assumed to be '-1'. For example, the following command displays the first and second token for each resulting line: > info mmap | grep -r ^0x | tokens 1,2 0x0000000000012fff 0x000000000000d000 0x0000000000017fff 0x0000000000004000 0x00000000009dafff 0x0000000000018000 0x00000000009fffff 0x000000000001f000 0x0000000000cbefff 0x0000000000002000 0x0000000000d76fff 0x0000000000001000 0x0000000003145fff 0x0000000000071000 0x0000000003b93fff 0x0000000000003000 Session parameters When jdmpview is started, many parameters can be used during the session to interrogate the system dump data, which are divided into general and expert parameters. The general parameters are documented in this section. To see a list of expert parameters, use the !j9help option. !j9help !j9help Lists all expert parameters that can be used in a session, with a brief description. cd cd <directory_name> Changes the working directory to <directory_name> . The working directory is used for log files. Logging is controlled by the set logging command. Use the pwd command to query the current working directory. cmdfile cmdfile <directory_name> Runs all of the commands in a file. The commands are read line by line and run sequentially. Empty lines, and lines that start with // or # , are ignored. Use the option charset to identify the character set that is used in the chosen file. The character set must be supported, as defined in java.nio.charset.Charset , such as US-ASCII . deadlock This command detects deadlock situations in the Java application that was running when the system dump was produced. Example output: deadlock loop: thread: Thread-2 (monitor object: 0x9e32c8) waiting for => thread: Thread-3 (monitor object: 0x9e3300) waiting for => thread: Thread-2 (monitor object: 0x9e32c8) In this example, the deadlock analysis shows that Thread-2 is waiting for a lock held by Thread-3 , which is in turn waiting for a lock held earlier by Thread-2 . Threads are identified by their Java thread name, whereas object monitors are identified by the address of the object in the Java heap. You can obtain further information about the threads using the info thread * command. You can obtain further information about the monitors using the x/J <0xaddr> command. find find <pattern>,<start_address>,<end_address>,<memory_boundary>, <bytes_to_print>,<matches_to_display> This command searches for <pattern> in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the find command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes. findnext findptr <pattern>,<start_address>,<end_address>,<memory_boundary>,<bytes_to_print>,<matches_to_display> Finds the next instance of the last string passed to find or findptr . It repeats the previous find or findptr command, depending on which one was issued last, starting from the last match. Searches memory for the given pointer. findptr searches for <pattern> as a pointer in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the findptr command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes. help help [<command_name>] Shows information for a specific command. If you supply no parameters, help shows the complete list of supported commands. history history|his [-r][<N>] Recalls and displays the history of commands that you have run. The default behavior is to display the 20 most recent commands. If you use the argument <N> , then N commands are displayed. For example, if you run history 35, then the 35 most recent commands are displayed. You can also use the -r option with <N> to run the Nth most recent command in your history. Using the -r option alone runs the most recent command in your history. info thread info thread [*|all|<native_thread_ID>|<zos_TCB_address>] Displays information about Java and native threads. The following information is displayed for all threads (\"*\"), or the specified thread: Thread id Registers Stack sections Thread frames: procedure name and base pointer Thread properties: list of native thread properties and their values. For example: thread priority. Associated Java thread, if applicable: Name of Java thread Address of associated java.lang.Thread object State (shown in JVMTI and java.lang.Thread.State formats) The monitor the thread is waiting for Thread frames: base pointer, method, and filename:line If you supply no parameters, the command shows information about the current thread. info system Displays the following information about the system that produced the core dump: Amount of memory Operating system Virtual machine or virtual machines present info class info class [<class_name>] [-sort:<name>|<count>|<size>] Displays the inheritance chain and other data for a given class. If a class name is passed to info class, the following information is shown about that class: - Name - ID - Superclass ID - Class loader ID - Modifiers - Number of instances and total size of instances - Inheritance chain - Fields with modifiers (and values for static fields) - Methods with modifiers If no parameters are passed to `info class`, the following information is shown: - The number of instances of each class. - The total size of all instances of each class. - The class name - The total number of instances of all classes. - The total size of all objects. The `sort` option allows the list of classes to be sorted by name (default), by number of instances of each class, or by the total size of instances of each class. info proc Displays threads, command-line arguments, environment variables, and shared modules of the current process. To view the shared modules used by a process, use the info sym command. info jitm Displays JIT compiled methods and their addresses: Method name and signature Method start address Method end address info lock Displays a list of available monitors and locked objects. info sym Displays a list of available modules. For each process in the address spaces, this command shows a list of module sections for each module, their start and end addresses, names, and sizes. info mmap info mmap [<address>] [-verbose] [-sort:<size>|<address>] Displays a summary list of memory sections in the process address space, with start and end address, size, and properties. If an address parameter is specified, the results show details of only the memory section containing the address. If -verbose is specified, full details of the properties of each memory section are displayed. The -sort option allows the list of memory sections to be sorted by size or by start address (default). info heap info heap [*|<heap_name>*] If no parameters are passed to this command, the heap names and heap sections are shown. Using either \"*\" or a heap name shows the following information about all heaps or the specified heap: Heap name (Heap size and occupancy) Heap sections Section name Section size Whether the section is shared Whether the section is executable Whether the section is read only heapdump heapdump [<heaps>] Generates a Java heap dump to a file. You can select which Java heaps to dump by listing the heap names, separated by spaces. To see which heaps are available, use the info heap command. By default, all Java heaps are dumped. hexdump hexdump <hex_address> <bytes_to_print> Displays a section of memory in a hexdump-like format. Displays <bytes_to_print> bytes of memory contents starting from <hex_address> . + Displays the next section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling forwards through memory. The previous hexdump command is repeated, starting from the end of the previous one. - Displays the previous section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling backwards through memory. The previous hexdump command is repeated, starting from a position before the previous one. pwd Displays the current working directory, which is the directory where log files are stored. quit Exits the core file viewing tool; any log files that are currently open are closed before exit. set heapdump Configures Heapdump generation settings. set heapdump <options> where <options> are: phd : Set the Heapdump format to Portable Heapdump, which is the default. txt : Set the Heapdump format to classic. file <file> : Set the destination of the Heapdump. multiplefiles [on|off] : If multiplefiles is set to on, each Java heap in the system dump is written to a separate file. If multiplefiles is set to off, all Java heaps are written to the same file. The default is off. set logging set logging <options> Configures logging settings, starts logging, or stops logging. This parameter enables the results of commands to be logged to a file, where <options> are: [on|off] : Turns logging on or off. (Default: off) file <filename> : Sets the file to log to. The path is relative to the directory returned by the pwd command, unless an absolute path is specified. If the file is set while logging is on, the change takes effect the next time logging is started. Not set by default. overwrite [on|off] : Turns overwriting of the specified log file on or off. When overwrite is off, log messages are appended to the log file. When overwrite is on, the log file is overwritten after the set logging command. (Default: off) redirect [on|off] : Turns redirecting to file on or off, with off being the default. When logging is set to on: A value of on for redirect sends non-error output only to the log file. A value of off for redirect sends non-error output to the console and log file. Redirect must be turned off before logging can be turned off. (Default: off) show heapdump Displays the current Heapdump generation settings. show logging Displays the current logging settings: set_logging = [on|off] set_logging_file = set_logging_overwrite = [on|off] set_logging_redirect = [on|off] current_logging_file = The file that is currently being logged to might be different from set_logging_file, if that value was changed after logging was started. whatis <hex_address> Displays information about whatis stored at the given memory address, <hex_address> . This command examines the memory location at <hex_address> and tries to find out more information about this address. For example: > whatis 0x8e76a8 heap #1 - name: Default@19fce8 0x8e76a8 is within heap segment: 8b0000 -- cb0000 0x8e76a8 is start of an object of type java/lang/Thread x/ (examine) Passes the number of items to display and the unit size, as listed in the following table, to the sub-command. For example, x/12bd . Abbreviation Unit Size b Byte 8-bit h Half word 16-bit w Word 32-bit g Giant word 64-bit This command is similar to the use of the x/ command in gdb, including the use of defaults. x/J [ <class_name> | <0xaddr> ] Displays information about a particular object, or all objects of a class. If <class_name> is supplied, all static fields with their values are shown, followed by all objects of that class with their fields and values. If an object address (in hex) is supplied, static fields for that object's class are not shown; the other fields and values of that object are printed along with its address. Note: This command ignores the number of items and unit size passed to it by the x/ command. x/D < 0xaddr > Displays the integer at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. This command uses the number of items and unit size passed to it by the x/ command. x/X < 0xaddr > Displays the hex value of the bytes at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. Note: This command uses the number of items and unit size passed to it by the x/ command. x/K < 0xaddr > Where the size is defined by the pointer size of the architecture, this parameter shows the value of each section of memory. The output is adjusted for the hardware architecture this dump file is from, starting at the specified address. It also displays a module with a module section and an offset from the start of that module section in memory if the pointer points to that module section. If no symbol is found, it displays a \"*\" and an offset from the current address if the pointer points to an address in 4KB (4096 bytes) of the current address. Although this command can work on an arbitrary section of memory, it is probably more useful on a section of memory that refers to a stack frame. To find the memory section of a thread stack frame, use the info thread command. Note: This command uses the number of items and unit size passed to it by the x/ command. Example This example session illustrates a selection of the commands available and their use. In the example session, which is generated on a Linux system, some lines have been removed for clarity (and terseness). User input is prefaced by a greater than symbol (>). test@madras:~/test> sdk/bin/jdmpview -core core.20121116.154147.16838.0001.dmp DTFJView version 4.27.57, using DTFJ version 1.10.27022 Loading image from DTFJ... For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" Available contexts (* = currently selected context) : Source : file:///home/test/core.20121116.154147.16838.0001.dmp *0 : PID: 16867 : JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6480-20121116_01 ) > help + displays the next section of memory in hexdump-like format - displays the previous section of memory in hexdump-like format cd changes the current working directory, used for log files close [context id] closes the connection to a core file context [ID|asid ID] switch to the selected context deadlock displays information about deadlocks if there are any exit Exit the application find searches memory for a given string findnext finds the next instance of the last string passed to \"find\" findptr searches memory for the given pointer heapdump generates a PHD or classic format heapdump help [command name] displays list of commands or help for a specific command hexdump outputs a section of memory in a hexdump-like format info <component> Information about the specified component info class <Java class name> Provides information about the specified Java class info heap [*|heap name] Displays information about Java heaps info jitm Displays JIT'ed methods and their addresses info lock outputs a list of system monitors and locked objects info mmap Outputs a list of all memory segments in the address space info mod outputs module information info proc shortened form of info process info process displays threads, command line arguments, environment info sym an alias for 'mod' info sys shortened form of info system info system displays information about the system the core dump is from info thread displays information about Java and native threads log [name level] display and control instances of java.util.logging.Logger open [path to core or zip] opens the specified core or zip file plugins Plugin management commands list Show the list of loaded plugins for the current context reload Reload plugins for the current context showpath Show the DTFJ View plugin search path for the current context setpath Set the DTFJ View plugin search path for the current context pwd displays the current working directory quit Exit the application set [logging|heapdump] Sets options for the specified command set heapdump configures heapdump format, filename and multiple heap support set logging configures several logging-related parameters, starts/stops logging on turn on logging off turn off logging file turn on logging overwrite controls the overwriting of log files show [logging|heapdump] Displays the current set options for a command show heapdump displays heapdump settings show logging shows the current logging options whatis [hex address] gives information about what is stored at the given memory address x/d <hex address> displays the integer at the specified address x/j <object address> [class name] displays information about a particular object or all objects of a class x/k <hex address> displays the specified memory section as if it were a stack frame parameters x/x <hex address> displays the hex value of the bytes at the specified address > set logging file log.txt logging turned on; outputting to \"/home/test/log.txt\" > info system Machine OS: Linux Hypervisor: PowerVM Machine name: madras Machine IP address(es): 9.20.88.155 System memory: 8269201408 Dump creation time: 2015/08/10 14:44:36:019 Dump creation time (nanoseconds): 21314421467539 Java version: JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6490-20121116_01) JVM start time: 2015/08/10 14:44:05:690 JVM start time (nanoseconds): 21284086192267 > info thread * native threads for address space process id: 16838 thread id: 16839 registers: native stack sections: native stack frames: properties: associated Java thread: name: main Thread object: java/lang/Thread @ 0x2ffd1e08 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x0000000000085b28 method: void com/ibm/jvm/Dump.SystemDumpImpl() (Native Method) objects: <no objects in this frame> bp: 0x0000000000085b40 method: void com/ibm/jvm/Dump.SystemDump() source: Dump.java:41 objects: <no objects in this frame> bp: 0x0000000000085b68 method: void mySystemDump.main(String[]) source: mySystemDump.java:29 objects: <no objects in this frame> ===Lines Removed=== name: GC Slave id: 16860 Thread object: java/lang/Thread @ 0x3001b980 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: GC Slave id: 16861 Thread object: java/lang/Thread @ 0x3001c180 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: Signal Dispatcher id: 16847 Thread object: com/ibm/misc/SignalDispatcher @ 0x3000f268 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x00000000000df748 method: int com/ibm/misc/SignalDispatcher.waitForSignal() (Native Method) objects: <no objects in this frame> bp: 0x00000000000df788 method: void com/ibm/misc/SignalDispatcher.run() source: SignalDispatcher.java:54 objects: 0x30015828 0x30015828 ===Lines Removed=== > info heap * Heap #1: Generational@fff78303d30 Section #1: Heap extent at 0x100d0000 (0x300000 bytes) Size: 3145728 bytes Shared: false Executable: false Read Only: false Section #2: Heap extent at 0x2ffd0000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false Section #3: Heap extent at 0x30050000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false > info class java/lang/String name = java/lang/String ID = 0x37c00 superID = 0x30300 classLoader = 0x2ffe9b58 modifiers: public final number of instances: 2146 total size of instances: 51504 bytes Inheritance chain.... java/lang/Object java/lang/String Fields...... static fields for \"java/lang/String\" private static final long serialVersionUID = -6849794470754667710 (0xa0f0a4387a3bb342) public static final java.util.Comparator CASE_INSENSITIVE_ORDER = <object> @ 0x2ffd0278 private static final char[] ascii = <object> @ 0x2ffd02c8 private static String[] stringArray = <object> @ 0x2ffd0298 private static final int stringArraySize = 10 (0xa) static boolean enableCopy = false private static int seed = -126504465 (0xfffffffff875b1ef) private static char[] startCombiningAbove = <object> @ 0x100d0c40 private static char[] endCombiningAbove = <object> @ 0x100d0cc0 private static final char[] upperValues = <object> @ 0x100d0d40 private static final java.io.ObjectStreamField[] serialPersistentFields = <object> @ 0x2ffd0920 non-static fields for \"java/lang/String\" private final char[] value private final int offset private final int count private int hashCode private int hashCode32 Methods...... Bytecode range(s): : private static native int getSeed() Bytecode range(s): fff76d8ce48 -- fff76d8ce5e: public void <init>() Bytecode range(s): fff76d8ce88 -- fff76d8cecd: private void <init>(String, char) Bytecode range(s): fff76d8cf10 -- fff76d8cf19: public void <init>(byte[]) Bytecode range(s): fff76d8cf40 -- fff76d8cf4a: public void <init>(byte[], int) Bytecode range(s): fff76d8cf7c -- fff76d8cfb5: public void <init>(byte[], int, int) Bytecode range(s): fff76d8cff8 -- fff76d8d065: public void <init>(byte[], int, int, int) Bytecode range(s): fff76d8d0c4 -- fff76d8d10c: public void <init>(byte[], int, int, String) ===Lines Removed=== > whatis 0x2ffd0298 heap #1 - name: Generational@fff78303d30 0x2ffd0298 is within heap segment: 2ffd0000 -- 30050000 0x2ffd0298 is the start of an object of type [Ljava/lang/String;","title":"Dump viewer"},{"location":"tool_jdmpview/#dump-viewer-jdmpview","text":"The dump viewer is a command-line tool that allows you to examine the contents of system dumps produced from the OpenJ9 VM. The dump viewer allows you to view both Java\u2122 and native information from the time the dump was produced. For long running tasks, the dump viewer can also be run in batch mode. The dump viewer is useful for diagnosing OutOfMemoryError exceptions in Java\u2122 applications. For problems like general protection faults (GPF), system abends, and SIGSEVs, a system debugger such as gdb (Linux) provides more information.","title":"Dump viewer (jdmpview)"},{"location":"tool_jdmpview/#syntax","text":"","title":"Syntax"},{"location":"tool_jdmpview/#starting-the-dump-viewer","text":"jdmpview (-core <core file> | -zip <zip file>) [-notemp] Input option Explanation -core <core file> Specifies a dump file. -zip <zip file> Specifies a compressed file containing the core file and associated XML file (produced by the dump extractor ( jextract ) tool on AIX\u00ae and Linux\u2122 systems). -notemp By default, when you specify a file by using the -zip option, the contents are extracted to a temporary directory before processing. Use the -notemp option to prevent this extraction step, and run all subsequent commands in memory. Note: The -core option can be used with the -zip option to specify the core and XML files in the compressed file. Without these options, jdmpview shows multiple contexts, one for each source file that it identified in the compressed file. On z/OS\u00ae, you can copy the dump to an HFS file and supply that as input to jdmpview , or you can supply a fully qualified MVS\u2122 data set name. For example: > jdmpview -core USER1.JVM.TDUMP.SSHD6.D070430.T092211 DTFJView version 4.28.3, using DTFJ version 1.11.28004 Loading image from DTFJ... MVS data set names may contain the dollar sign ($). Names that contain a dollar sign must be enclosed by single quotation marks ('). For example: > jdmpview -core 'USER1.JVM.$TDUMP.SSH$D7.D141211.T045506' After jdmpview processes the dump files, a session starts, showing this message: For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" > If you run the jdmpview tool on a compressed file that contains multiple dumps, the tool detects and shows all the dump files, whether these are system dumps, Java dumps, or heap dumps. Because of this behavior, more than one context might be displayed when you start jdmpview . To switch context, type context <n> , where <n> is the context value for the dump you want to investigate. On z/OS, a system dump can contain multiple address spaces and an address space can contain multiple VM instances. In this case, the context allows you to select the address space and VM instance within the dump file. The following z/OS example shows address spaces ( ASID ), with two JVMs occupying address space 0x73 (context 5 and 6). The current context is 5 ( CTX:5> ), shown with an asterisk. To view the JVM in context 6, you can switch by specifying context 6 . CTX:5> context Available contexts (* = currently selected context) : 0 : ASID: 0x1 : No JRE : No JRE 1 : ASID: 0x3 : No JRE : No JRE 2 : ASID: 0x4 : No JRE : No JRE 3 : ASID: 0x6 : No JRE : No JRE 4 : ASID: 0x7 : No JRE : No JRE *5 : ASID: 0x73 EDB: 0x83d2053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 6 : ASID: 0x73 EDB: 0x8004053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 7 : ASID: 0x73 EDB: 0x4a7bd9e8 : No JRE 8 : ASID: 0xffff : No JRE : No JRE If you are using jdmpview to view Java dumps and heap dumps, some options do not produce any output. For example, a heap dump doesn't contain the information requested by the info system command, but does contain information requested by the info class command. If you are viewing a dump where there are a large number of objects on the heap, you can speed up the performance of jdmpview by ensuring that your system has enough memory available and does not need to page memory to disk. To achieve this, start jdmpview with a larger heap size by specifying the -Xmx option. Use the -J option to pass the -Xmx command line option to the JVM. For example: jdmpview -J-Xmx<n> -core <core file> The options available to the dump viewer session are shown under Session parameters","title":"Starting the dump viewer"},{"location":"tool_jdmpview/#starting-in-batch-mode","text":"For long running or routine jobs, jdmpview can be used in batch mode. You can run a single command without specifying a command file by appending the command to the end of the jdmpview command line. For example: jdmpview -core mycore.dmp info class When specifying jdmpview commands that accept a wildcard parameter, you must replace the wildcard symbol with ALL to prevent the shell interpreting the wildcard symbol. For example, in interactive mode, the command info thread * must be specified in the following way: jdmpview -core mycore.dmp info thread ALL Batch mode is controlled with the following command line options: Option Explanation -cmdfile <path to command file> A file that contains a series of jdmpview commands, which are read and run sequentially. -charset <character set name> The character set for the commands specified in -cmdfile (name must be a supported charset as defined in java.nio.charset.Charset. For example, US-ASCII) -outfile <path to output file> The file to record any output generated by commands. -overwrite If the file specified in -outfile exists, this option overwrites the file. -append If the file specified in -outfile exists, new output messages are appended to the end of that file. The -append and -overwrite options cannot be used at the same time. The command file can have empty lines that contain spaces, or comment lines that start with // or #. These lines are ignored by jdmpview. Example command file: // commands.txt info system info proc To run jdmpview in batch mode, using this command file, specify: jdmpview -outfile out.txt [-overwrite|-append] -cmdfile commands.txt -core <path to core file> When the output file exists, you need to specify either the -overwrite option or the -append option. If you do not, an error message is generated.","title":"Starting in batch mode"},{"location":"tool_jdmpview/#processing-output","text":"You can redirect command output to a file, or pipe the command output to another command. To redirect jdmpview command output to a file, use one of the following formats: command > <target_file> If the target file exists, this redirection overwrites the content within it. command >> <target_file> If the target file exists, this redirection appends the output to it. Where <target_file> is the file name, which can include the full path to the file. To pipe jdmpview command output to another command, use the vertical bar (|) character. For example: command | grep string You can chain more than two commands together by using multiple vertical bar characters. The following commands can be used to interrogate the output: charsFrom charsTo grep tokens","title":"Processing output"},{"location":"tool_jdmpview/#using-charsfrom","text":"Use the charsFrom command after the vertical bar character to exclude all characters that come before a specified pattern in a resulting line. charsFrom <options> pattern Where <options> : -e or -exclude : Exclude the matched pattern from the resulting line. By default, the matched pattern is included in the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays resulting lines that contain the pattern jre , and trims each line to exclude all characters that come before this pattern: > info mod | charsFrom jre jre/lib/ppc64/libzip.so @ 0x0, sections: jre/lib/ppc64/libdbgwrapper80.so @ 0x0, sections: jre/lib/ppc64/libverify.so @ 0x0, sections: jre/lib/ppc64/libjava.so @ 0x0, sections: jre/lib/ppc64/compressedrefs/libjclse7b_28.so @ 0x0, sections:","title":"Using CharsFrom"},{"location":"tool_jdmpview/#using-charsto","text":"Use the CharsTo command after the vertical bar character to include the characters in a resulting line until a specific pattern is found. charsTo <options> pattern Where <options> : -include : Include the matched pattern in the resulting line. By default, the matched pattern is excluded from the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays lines that contain the pattern \"@\", and trims each line to exclude all characters from \"@\" onwards: > info mod | charsTo @ bin/java /usr/lib64/gconv/UTF-16.so /test/sdk/lib/ppc64le/libnet.so /test/sdk/lib/ppc64le/libnio.so /test/sdk/lib/ppc64le/libzip.so /test/sdk/lib/ppc64le/libjsig.so libjsig.so You can also use charsFrom and charsTo together, separated by a vertical bar character. For example, the following command displays lines that contain the pattern \"lib\", and trims each line to exclude all characters that come before this pattern, as well as all characters from the pattern @ : > info mod | charsFrom lib | charsTo @ lib/ppc64le/libzip.so lib/ppc64le/libjsig.so lib/ppc64le/libverify.so lib/ppc64le/libjava.so lib/ppc64le/compressedrefs/libj9jit29.so Note: The line will not be displayed if the charsFrom and charsTo are used together, but only one of the patterns are matched in a line. Furthermore, the line will not be displayed if both patterns are matched in a line, but the charsTo pattern appears before, and not after, the charsFrom pattern.","title":"Using CharsTo"},{"location":"tool_jdmpview/#using-grep","text":"Use the grep command after the vertical bar character to show which lines match a specified pattern. grep <options> pattern Where <options> : -i : Ignore case. -r , -G , or --regex : Use a regular expression as defined in the Java documentation of the java.utils.regex.Pattern class. -b or --block : Show blocks of lines where at least one of the lines matches the pattern. Blocks of lines are separated by empty lines. -A <NUM> or +<NUM> : Show at most <NUM> lines after the matching line. For example grep -A 2 pattern or grep +2 pattern. -B <NUM> or -<NUM> : Show at most <NUM> lines before the matching line. -C <NUM> or +-<NUM> : Show at most <NUM> lines before and after the matching line. -v or --invert-match : Use with the grep command to show lines that do not match the pattern. These options are equivalent to the grep- command. -F or --fixed-strings : Do not treat the asterisk (*) as a wildcard character. Use these options with the -r , -G , or --regex options. Pattern rules: An asterisk (*) in a pattern is treated as a wildcard character unless you specify the -F or --fixed-strings options. If a pattern contains spaces, enclose the pattern in a pair of double quotation marks (\"). If a pattern contains double quotation marks, enclose the pattern in a pair of single quotation marks ('). You can specify multiple sub-patterns to match by using the following format, but only if you do not use the -r , -G , or --regex options: \"[pattern1|pattern2|...|patternN]\" The initial and trailing double quotation marks and brackets ([ ]) are required. Use a vertical bar character to separate the sub-patterns. Quotation marks and the vertical bar are not allowed in a sub-pattern. Spaces are allowed in the middle of a sub-pattern, but leading and trailing spaces will be trimmed. Use the grep command to show lines that do not match the pattern. For example, the following command displays the number of instances and total heap size for the java/lang/String class: > info class | grep java/lang/String 94 7688 [Ljava/lang/String; 1822 58304 java/lang/String 1 16 java/lang/String$CaseInsensitiveComparator 0 0 java/lang/String$UnsafeHelpers The following command uses two pipes in combination to display the number of instances and total heap size for the java/lang/StringCoding.StringDecoder class: > info class | grep java/lang/String | grep -i decoder 1 48 java/lang/StringCoding$StringDecoder","title":"Using grep"},{"location":"tool_jdmpview/#using-tokens","text":"Use the tokens command after the vertical bar character to isolate specified tokens in the resulting lines. tokens [options] range[,range][..range] You can define range in the following formats: x x,y x..y A set of rules applies to these formats: x or y can be prefixed with \"-\". This means that x or y are counting backwards from the end of a list. For example, a y value of -1 represents the last token in a list, while -2 represents the penultimate token in a list. x must represent a token that either precedes or is at the same position as y. In this format, if x is omitted, it is assumed to be '1'. If y is omitted, it is assumed to be '-1'. For example, the following command displays the first and second token for each resulting line: > info mmap | grep -r ^0x | tokens 1,2 0x0000000000012fff 0x000000000000d000 0x0000000000017fff 0x0000000000004000 0x00000000009dafff 0x0000000000018000 0x00000000009fffff 0x000000000001f000 0x0000000000cbefff 0x0000000000002000 0x0000000000d76fff 0x0000000000001000 0x0000000003145fff 0x0000000000071000 0x0000000003b93fff 0x0000000000003000","title":"Using tokens"},{"location":"tool_jdmpview/#session-parameters","text":"When jdmpview is started, many parameters can be used during the session to interrogate the system dump data, which are divided into general and expert parameters. The general parameters are documented in this section. To see a list of expert parameters, use the !j9help option.","title":"Session parameters"},{"location":"tool_jdmpview/#j9help","text":"!j9help Lists all expert parameters that can be used in a session, with a brief description.","title":"!j9help"},{"location":"tool_jdmpview/#cd","text":"cd <directory_name> Changes the working directory to <directory_name> . The working directory is used for log files. Logging is controlled by the set logging command. Use the pwd command to query the current working directory.","title":"cd"},{"location":"tool_jdmpview/#cmdfile","text":"cmdfile <directory_name> Runs all of the commands in a file. The commands are read line by line and run sequentially. Empty lines, and lines that start with // or # , are ignored. Use the option charset to identify the character set that is used in the chosen file. The character set must be supported, as defined in java.nio.charset.Charset , such as US-ASCII .","title":"cmdfile"},{"location":"tool_jdmpview/#deadlock","text":"This command detects deadlock situations in the Java application that was running when the system dump was produced. Example output: deadlock loop: thread: Thread-2 (monitor object: 0x9e32c8) waiting for => thread: Thread-3 (monitor object: 0x9e3300) waiting for => thread: Thread-2 (monitor object: 0x9e32c8) In this example, the deadlock analysis shows that Thread-2 is waiting for a lock held by Thread-3 , which is in turn waiting for a lock held earlier by Thread-2 . Threads are identified by their Java thread name, whereas object monitors are identified by the address of the object in the Java heap. You can obtain further information about the threads using the info thread * command. You can obtain further information about the monitors using the x/J <0xaddr> command.","title":"deadlock"},{"location":"tool_jdmpview/#find","text":"find <pattern>,<start_address>,<end_address>,<memory_boundary>, <bytes_to_print>,<matches_to_display> This command searches for <pattern> in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the find command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes.","title":"find"},{"location":"tool_jdmpview/#findnext","text":"findptr <pattern>,<start_address>,<end_address>,<memory_boundary>,<bytes_to_print>,<matches_to_display> Finds the next instance of the last string passed to find or findptr . It repeats the previous find or findptr command, depending on which one was issued last, starting from the last match. Searches memory for the given pointer. findptr searches for <pattern> as a pointer in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the findptr command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes.","title":"findnext"},{"location":"tool_jdmpview/#help","text":"help [<command_name>] Shows information for a specific command. If you supply no parameters, help shows the complete list of supported commands.","title":"help"},{"location":"tool_jdmpview/#history","text":"history|his [-r][<N>] Recalls and displays the history of commands that you have run. The default behavior is to display the 20 most recent commands. If you use the argument <N> , then N commands are displayed. For example, if you run history 35, then the 35 most recent commands are displayed. You can also use the -r option with <N> to run the Nth most recent command in your history. Using the -r option alone runs the most recent command in your history.","title":"history"},{"location":"tool_jdmpview/#info-thread","text":"info thread [*|all|<native_thread_ID>|<zos_TCB_address>] Displays information about Java and native threads. The following information is displayed for all threads (\"*\"), or the specified thread: Thread id Registers Stack sections Thread frames: procedure name and base pointer Thread properties: list of native thread properties and their values. For example: thread priority. Associated Java thread, if applicable: Name of Java thread Address of associated java.lang.Thread object State (shown in JVMTI and java.lang.Thread.State formats) The monitor the thread is waiting for Thread frames: base pointer, method, and filename:line If you supply no parameters, the command shows information about the current thread.","title":"info thread"},{"location":"tool_jdmpview/#info-system","text":"Displays the following information about the system that produced the core dump: Amount of memory Operating system Virtual machine or virtual machines present","title":"info system"},{"location":"tool_jdmpview/#info-class","text":"info class [<class_name>] [-sort:<name>|<count>|<size>] Displays the inheritance chain and other data for a given class. If a class name is passed to info class, the following information is shown about that class: - Name - ID - Superclass ID - Class loader ID - Modifiers - Number of instances and total size of instances - Inheritance chain - Fields with modifiers (and values for static fields) - Methods with modifiers If no parameters are passed to `info class`, the following information is shown: - The number of instances of each class. - The total size of all instances of each class. - The class name - The total number of instances of all classes. - The total size of all objects. The `sort` option allows the list of classes to be sorted by name (default), by number of instances of each class, or by the total size of instances of each class.","title":"info class"},{"location":"tool_jdmpview/#info-proc","text":"Displays threads, command-line arguments, environment variables, and shared modules of the current process. To view the shared modules used by a process, use the info sym command.","title":"info proc"},{"location":"tool_jdmpview/#info-jitm","text":"Displays JIT compiled methods and their addresses: Method name and signature Method start address Method end address","title":"info jitm"},{"location":"tool_jdmpview/#info-lock","text":"Displays a list of available monitors and locked objects.","title":"info lock"},{"location":"tool_jdmpview/#info-sym","text":"Displays a list of available modules. For each process in the address spaces, this command shows a list of module sections for each module, their start and end addresses, names, and sizes.","title":"info sym"},{"location":"tool_jdmpview/#info-mmap","text":"info mmap [<address>] [-verbose] [-sort:<size>|<address>] Displays a summary list of memory sections in the process address space, with start and end address, size, and properties. If an address parameter is specified, the results show details of only the memory section containing the address. If -verbose is specified, full details of the properties of each memory section are displayed. The -sort option allows the list of memory sections to be sorted by size or by start address (default).","title":"info mmap"},{"location":"tool_jdmpview/#info-heap","text":"info heap [*|<heap_name>*] If no parameters are passed to this command, the heap names and heap sections are shown. Using either \"*\" or a heap name shows the following information about all heaps or the specified heap: Heap name (Heap size and occupancy) Heap sections Section name Section size Whether the section is shared Whether the section is executable Whether the section is read only","title":"info heap"},{"location":"tool_jdmpview/#heapdump","text":"heapdump [<heaps>] Generates a Java heap dump to a file. You can select which Java heaps to dump by listing the heap names, separated by spaces. To see which heaps are available, use the info heap command. By default, all Java heaps are dumped.","title":"heapdump"},{"location":"tool_jdmpview/#hexdump","text":"hexdump <hex_address> <bytes_to_print> Displays a section of memory in a hexdump-like format. Displays <bytes_to_print> bytes of memory contents starting from <hex_address> .","title":"hexdump"},{"location":"tool_jdmpview/#_1","text":"Displays the next section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling forwards through memory. The previous hexdump command is repeated, starting from the end of the previous one.","title":"+"},{"location":"tool_jdmpview/#-","text":"Displays the previous section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling backwards through memory. The previous hexdump command is repeated, starting from a position before the previous one.","title":"-"},{"location":"tool_jdmpview/#pwd","text":"Displays the current working directory, which is the directory where log files are stored.","title":"pwd"},{"location":"tool_jdmpview/#quit","text":"Exits the core file viewing tool; any log files that are currently open are closed before exit.","title":"quit"},{"location":"tool_jdmpview/#set-heapdump","text":"Configures Heapdump generation settings. set heapdump <options> where <options> are: phd : Set the Heapdump format to Portable Heapdump, which is the default. txt : Set the Heapdump format to classic. file <file> : Set the destination of the Heapdump. multiplefiles [on|off] : If multiplefiles is set to on, each Java heap in the system dump is written to a separate file. If multiplefiles is set to off, all Java heaps are written to the same file. The default is off.","title":"set heapdump"},{"location":"tool_jdmpview/#set-logging","text":"set logging <options> Configures logging settings, starts logging, or stops logging. This parameter enables the results of commands to be logged to a file, where <options> are: [on|off] : Turns logging on or off. (Default: off) file <filename> : Sets the file to log to. The path is relative to the directory returned by the pwd command, unless an absolute path is specified. If the file is set while logging is on, the change takes effect the next time logging is started. Not set by default. overwrite [on|off] : Turns overwriting of the specified log file on or off. When overwrite is off, log messages are appended to the log file. When overwrite is on, the log file is overwritten after the set logging command. (Default: off) redirect [on|off] : Turns redirecting to file on or off, with off being the default. When logging is set to on: A value of on for redirect sends non-error output only to the log file. A value of off for redirect sends non-error output to the console and log file. Redirect must be turned off before logging can be turned off. (Default: off)","title":"set logging"},{"location":"tool_jdmpview/#show-heapdump","text":"Displays the current Heapdump generation settings.","title":"show heapdump"},{"location":"tool_jdmpview/#show-logging","text":"Displays the current logging settings: set_logging = [on|off] set_logging_file = set_logging_overwrite = [on|off] set_logging_redirect = [on|off] current_logging_file = The file that is currently being logged to might be different from set_logging_file, if that value was changed after logging was started.","title":"show logging"},{"location":"tool_jdmpview/#whatis-hex_address","text":"Displays information about whatis stored at the given memory address, <hex_address> . This command examines the memory location at <hex_address> and tries to find out more information about this address. For example: > whatis 0x8e76a8 heap #1 - name: Default@19fce8 0x8e76a8 is within heap segment: 8b0000 -- cb0000 0x8e76a8 is start of an object of type java/lang/Thread","title":"whatis &lt;hex_address&gt;"},{"location":"tool_jdmpview/#x-examine","text":"Passes the number of items to display and the unit size, as listed in the following table, to the sub-command. For example, x/12bd . Abbreviation Unit Size b Byte 8-bit h Half word 16-bit w Word 32-bit g Giant word 64-bit This command is similar to the use of the x/ command in gdb, including the use of defaults.","title":"x/ (examine)"},{"location":"tool_jdmpview/#xj-class_name0xaddr","text":"Displays information about a particular object, or all objects of a class. If <class_name> is supplied, all static fields with their values are shown, followed by all objects of that class with their fields and values. If an object address (in hex) is supplied, static fields for that object's class are not shown; the other fields and values of that object are printed along with its address. Note: This command ignores the number of items and unit size passed to it by the x/ command.","title":"x/J [&lt;class_name&gt;|&lt;0xaddr&gt;]"},{"location":"tool_jdmpview/#xd-0xaddr","text":"Displays the integer at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. This command uses the number of items and unit size passed to it by the x/ command.","title":"x/D &lt;0xaddr&gt;"},{"location":"tool_jdmpview/#xx-0xaddr","text":"Displays the hex value of the bytes at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. Note: This command uses the number of items and unit size passed to it by the x/ command.","title":"x/X &lt;0xaddr&gt;"},{"location":"tool_jdmpview/#xk-0xaddr","text":"Where the size is defined by the pointer size of the architecture, this parameter shows the value of each section of memory. The output is adjusted for the hardware architecture this dump file is from, starting at the specified address. It also displays a module with a module section and an offset from the start of that module section in memory if the pointer points to that module section. If no symbol is found, it displays a \"*\" and an offset from the current address if the pointer points to an address in 4KB (4096 bytes) of the current address. Although this command can work on an arbitrary section of memory, it is probably more useful on a section of memory that refers to a stack frame. To find the memory section of a thread stack frame, use the info thread command. Note: This command uses the number of items and unit size passed to it by the x/ command.","title":"x/K &lt;0xaddr&gt;"},{"location":"tool_jdmpview/#example","text":"This example session illustrates a selection of the commands available and their use. In the example session, which is generated on a Linux system, some lines have been removed for clarity (and terseness). User input is prefaced by a greater than symbol (>). test@madras:~/test> sdk/bin/jdmpview -core core.20121116.154147.16838.0001.dmp DTFJView version 4.27.57, using DTFJ version 1.10.27022 Loading image from DTFJ... For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" Available contexts (* = currently selected context) : Source : file:///home/test/core.20121116.154147.16838.0001.dmp *0 : PID: 16867 : JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6480-20121116_01 ) > help + displays the next section of memory in hexdump-like format - displays the previous section of memory in hexdump-like format cd changes the current working directory, used for log files close [context id] closes the connection to a core file context [ID|asid ID] switch to the selected context deadlock displays information about deadlocks if there are any exit Exit the application find searches memory for a given string findnext finds the next instance of the last string passed to \"find\" findptr searches memory for the given pointer heapdump generates a PHD or classic format heapdump help [command name] displays list of commands or help for a specific command hexdump outputs a section of memory in a hexdump-like format info <component> Information about the specified component info class <Java class name> Provides information about the specified Java class info heap [*|heap name] Displays information about Java heaps info jitm Displays JIT'ed methods and their addresses info lock outputs a list of system monitors and locked objects info mmap Outputs a list of all memory segments in the address space info mod outputs module information info proc shortened form of info process info process displays threads, command line arguments, environment info sym an alias for 'mod' info sys shortened form of info system info system displays information about the system the core dump is from info thread displays information about Java and native threads log [name level] display and control instances of java.util.logging.Logger open [path to core or zip] opens the specified core or zip file plugins Plugin management commands list Show the list of loaded plugins for the current context reload Reload plugins for the current context showpath Show the DTFJ View plugin search path for the current context setpath Set the DTFJ View plugin search path for the current context pwd displays the current working directory quit Exit the application set [logging|heapdump] Sets options for the specified command set heapdump configures heapdump format, filename and multiple heap support set logging configures several logging-related parameters, starts/stops logging on turn on logging off turn off logging file turn on logging overwrite controls the overwriting of log files show [logging|heapdump] Displays the current set options for a command show heapdump displays heapdump settings show logging shows the current logging options whatis [hex address] gives information about what is stored at the given memory address x/d <hex address> displays the integer at the specified address x/j <object address> [class name] displays information about a particular object or all objects of a class x/k <hex address> displays the specified memory section as if it were a stack frame parameters x/x <hex address> displays the hex value of the bytes at the specified address > set logging file log.txt logging turned on; outputting to \"/home/test/log.txt\" > info system Machine OS: Linux Hypervisor: PowerVM Machine name: madras Machine IP address(es): 9.20.88.155 System memory: 8269201408 Dump creation time: 2015/08/10 14:44:36:019 Dump creation time (nanoseconds): 21314421467539 Java version: JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6490-20121116_01) JVM start time: 2015/08/10 14:44:05:690 JVM start time (nanoseconds): 21284086192267 > info thread * native threads for address space process id: 16838 thread id: 16839 registers: native stack sections: native stack frames: properties: associated Java thread: name: main Thread object: java/lang/Thread @ 0x2ffd1e08 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x0000000000085b28 method: void com/ibm/jvm/Dump.SystemDumpImpl() (Native Method) objects: <no objects in this frame> bp: 0x0000000000085b40 method: void com/ibm/jvm/Dump.SystemDump() source: Dump.java:41 objects: <no objects in this frame> bp: 0x0000000000085b68 method: void mySystemDump.main(String[]) source: mySystemDump.java:29 objects: <no objects in this frame> ===Lines Removed=== name: GC Slave id: 16860 Thread object: java/lang/Thread @ 0x3001b980 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: GC Slave id: 16861 Thread object: java/lang/Thread @ 0x3001c180 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: Signal Dispatcher id: 16847 Thread object: com/ibm/misc/SignalDispatcher @ 0x3000f268 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x00000000000df748 method: int com/ibm/misc/SignalDispatcher.waitForSignal() (Native Method) objects: <no objects in this frame> bp: 0x00000000000df788 method: void com/ibm/misc/SignalDispatcher.run() source: SignalDispatcher.java:54 objects: 0x30015828 0x30015828 ===Lines Removed=== > info heap * Heap #1: Generational@fff78303d30 Section #1: Heap extent at 0x100d0000 (0x300000 bytes) Size: 3145728 bytes Shared: false Executable: false Read Only: false Section #2: Heap extent at 0x2ffd0000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false Section #3: Heap extent at 0x30050000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false > info class java/lang/String name = java/lang/String ID = 0x37c00 superID = 0x30300 classLoader = 0x2ffe9b58 modifiers: public final number of instances: 2146 total size of instances: 51504 bytes Inheritance chain.... java/lang/Object java/lang/String Fields...... static fields for \"java/lang/String\" private static final long serialVersionUID = -6849794470754667710 (0xa0f0a4387a3bb342) public static final java.util.Comparator CASE_INSENSITIVE_ORDER = <object> @ 0x2ffd0278 private static final char[] ascii = <object> @ 0x2ffd02c8 private static String[] stringArray = <object> @ 0x2ffd0298 private static final int stringArraySize = 10 (0xa) static boolean enableCopy = false private static int seed = -126504465 (0xfffffffff875b1ef) private static char[] startCombiningAbove = <object> @ 0x100d0c40 private static char[] endCombiningAbove = <object> @ 0x100d0cc0 private static final char[] upperValues = <object> @ 0x100d0d40 private static final java.io.ObjectStreamField[] serialPersistentFields = <object> @ 0x2ffd0920 non-static fields for \"java/lang/String\" private final char[] value private final int offset private final int count private int hashCode private int hashCode32 Methods...... Bytecode range(s): : private static native int getSeed() Bytecode range(s): fff76d8ce48 -- fff76d8ce5e: public void <init>() Bytecode range(s): fff76d8ce88 -- fff76d8cecd: private void <init>(String, char) Bytecode range(s): fff76d8cf10 -- fff76d8cf19: public void <init>(byte[]) Bytecode range(s): fff76d8cf40 -- fff76d8cf4a: public void <init>(byte[], int) Bytecode range(s): fff76d8cf7c -- fff76d8cfb5: public void <init>(byte[], int, int) Bytecode range(s): fff76d8cff8 -- fff76d8d065: public void <init>(byte[], int, int, int) Bytecode range(s): fff76d8d0c4 -- fff76d8d10c: public void <init>(byte[], int, int, String) ===Lines Removed=== > whatis 0x2ffd0298 heap #1 - name: Generational@fff78303d30 0x2ffd0298 is within heap segment: 2ffd0000 -- 30050000 0x2ffd0298 is the start of an object of type [Ljava/lang/String;","title":"Example"},{"location":"tool_jextract/","text":"Dump extractor ( jextract ) (AIX\u00ae, Linux\u2122, macOS\u00ae ) On some operating systems, copies of executable files and libraries are required for a full analysis of a core dump (you can get some information from the dump without these files, but not as much). Run the jextract utility to collect these extra files and package them into an archive file along with the core dump. To analyze the output, use the dump viewer ( jdmpview ) . Syntax jextract <core file name> [<zip_file>] where: <core file name> is the name of the system dump. <zip_file> is the name you want to give to the processed file. If you do not specify a name, output is written to <core file name>.zip by default. The output is written to the same directory as the core file. If you are analyzing a dump from a VM that used -Xcompressedrefs , include the -J-Xcompressedrefs parameter to run jextract using compressed references. Restriction: You must run jextract using the same VM level, on the same system that produced the system dump. If you run jextract on a VM level that is different from the one on which the dump was produced you see the following messages: J9RAS.buildID is incorrect (found e8801ed67d21c6be, expecting eb4173107d21c673). This version of jextract is incompatible with this dump. Failure detected during jextract, see previous message(s). See also Dump viewer ( jdmpview )","title":"Dump extractor"},{"location":"tool_jextract/#dump-extractor-jextract","text":"(AIX\u00ae, Linux\u2122, macOS\u00ae ) On some operating systems, copies of executable files and libraries are required for a full analysis of a core dump (you can get some information from the dump without these files, but not as much). Run the jextract utility to collect these extra files and package them into an archive file along with the core dump. To analyze the output, use the dump viewer ( jdmpview ) .","title":"Dump extractor (jextract)"},{"location":"tool_jextract/#syntax","text":"jextract <core file name> [<zip_file>] where: <core file name> is the name of the system dump. <zip_file> is the name you want to give to the processed file. If you do not specify a name, output is written to <core file name>.zip by default. The output is written to the same directory as the core file. If you are analyzing a dump from a VM that used -Xcompressedrefs , include the -J-Xcompressedrefs parameter to run jextract using compressed references. Restriction: You must run jextract using the same VM level, on the same system that produced the system dump. If you run jextract on a VM level that is different from the one on which the dump was produced you see the following messages: J9RAS.buildID is incorrect (found e8801ed67d21c6be, expecting eb4173107d21c673). This version of jextract is incompatible with this dump. Failure detected during jextract, see previous message(s).","title":"Syntax"},{"location":"tool_jextract/#see-also","text":"Dump viewer ( jdmpview )","title":"See also"},{"location":"tool_jmap/","text":"Java memory map ( jmap ) tool Use the jmap tool to get memory information for a particular Java\u2122 process, or list of processes. The tool shows statistics about classes on the heap, including the number of objects and their aggregate size. The command syntax is as follows: jmap [<option>] [<vmid>] <vmid> is the Attach API virtual machine identifier for the Java process. This ID is typically the same as the operating system process ID , unless you specified the -Dcom.ibm.tools.attach.id system property when you started the process. VMID is shown in jps or other Attach API-based tools. Multiple VMIDs can be specified, separated by a space. If you do not specify a VMID, the command reads input from stdin . You can therefore get information for all processes by piping the output of the jps command to jmap : jps -q | jmap -histo IDs of dead processes are silently ignored. On its own, jmap prints help information. To obtain memory information, a -histo argument must be supplied, where the available <options> are as follows: -histo : Prints statistics about classes on the heap, including the number of objects and their aggregate size -histo:live : Prints statistics for live objects only -J : supplies arguments to the Java VM that is running the jmap command. You can use multiple -J options, for example: jmap -J-Xms2m -J-Xmx10m The output has the following format: num object count total size class name ------------------------------------------------- 1 3354 107328 [C 2 717 57360 java.lang.Class 3 2427 38832 java.lang.String 4 50 13200 [J 5 717 11472 java.lang.J9VMInternals$ClassInitializationLock 6 342 8208 java.lang.StringBuilder 7 151 7248 jdk.internal.org.objectweb.asm.Item 8 396 6336 [Ljava.lang.Object; Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The following tool limitations apply: Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <options> <pid> . Displaying data from core dumps is not supported; use jdmpview instead. Other options , such as -F (force a dump of an unresponsive process) can be accomplished using kill -QUIT <pid> .","title":"Java memory map (jmap) tool"},{"location":"tool_jmap/#java-memory-map-jmap-tool","text":"Use the jmap tool to get memory information for a particular Java\u2122 process, or list of processes. The tool shows statistics about classes on the heap, including the number of objects and their aggregate size. The command syntax is as follows: jmap [<option>] [<vmid>] <vmid> is the Attach API virtual machine identifier for the Java process. This ID is typically the same as the operating system process ID , unless you specified the -Dcom.ibm.tools.attach.id system property when you started the process. VMID is shown in jps or other Attach API-based tools. Multiple VMIDs can be specified, separated by a space. If you do not specify a VMID, the command reads input from stdin . You can therefore get information for all processes by piping the output of the jps command to jmap : jps -q | jmap -histo IDs of dead processes are silently ignored. On its own, jmap prints help information. To obtain memory information, a -histo argument must be supplied, where the available <options> are as follows: -histo : Prints statistics about classes on the heap, including the number of objects and their aggregate size -histo:live : Prints statistics for live objects only -J : supplies arguments to the Java VM that is running the jmap command. You can use multiple -J options, for example: jmap -J-Xms2m -J-Xmx10m The output has the following format: num object count total size class name ------------------------------------------------- 1 3354 107328 [C 2 717 57360 java.lang.Class 3 2427 38832 java.lang.String 4 50 13200 [J 5 717 11472 java.lang.J9VMInternals$ClassInitializationLock 6 342 8208 java.lang.StringBuilder 7 151 7248 jdk.internal.org.objectweb.asm.Item 8 396 6336 [Ljava.lang.Object; Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The following tool limitations apply: Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <options> <pid> . Displaying data from core dumps is not supported; use jdmpview instead. Other options , such as -F (force a dump of an unresponsive process) can be accomplished using kill -QUIT <pid> .","title":"Java memory map (jmap) tool"},{"location":"tool_jps/","text":"Java process status ( jps ) tool Use the jps tool to query running Java\u2122 processes. The tool shows information for every Java process that is owned by the current user ID on the current host. The command syntax is as follows: jps [<options>] where the available <options> are as follows: -J : supplies arguments to the Java VM that is running the jps command. You can use multiple -J options, for example: jps -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -l : prints the application package name -q : prints only the virtual machine identifiers -m : prints the application arguments -v : prints the Java VM arguments, including those that are produced automatically The output has the following format: <VMID> [[<class_name>|<jar_name>|\"Unknown\"] [<application_args>][<vm_args>]] where VMID is the Attach API virtual machine identifier for the Java process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. For example: $ jps -l 5462 org.foo.bar.MyApplication 14332 openj9.tools.attach.diagnostics.Jps $ jps -q 5462 14332 Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The tool uses the Attach API, and has the following limitations: Does not list Java processes on other hosts, to enhance security Does not list Java processes owned by other users Does not list non-OpenJ9 Java processes Does not list processes whose attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java process status (jps)"},{"location":"tool_jps/#java-process-status-jps-tool","text":"Use the jps tool to query running Java\u2122 processes. The tool shows information for every Java process that is owned by the current user ID on the current host. The command syntax is as follows: jps [<options>] where the available <options> are as follows: -J : supplies arguments to the Java VM that is running the jps command. You can use multiple -J options, for example: jps -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -l : prints the application package name -q : prints only the virtual machine identifiers -m : prints the application arguments -v : prints the Java VM arguments, including those that are produced automatically The output has the following format: <VMID> [[<class_name>|<jar_name>|\"Unknown\"] [<application_args>][<vm_args>]] where VMID is the Attach API virtual machine identifier for the Java process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. For example: $ jps -l 5462 org.foo.bar.MyApplication 14332 openj9.tools.attach.diagnostics.Jps $ jps -q 5462 14332 Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The tool uses the Attach API, and has the following limitations: Does not list Java processes on other hosts, to enhance security Does not list Java processes owned by other users Does not list non-OpenJ9 Java processes Does not list processes whose attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java process status (jps) tool"},{"location":"tool_jstack/","text":"Java stack ( jstack ) tool Use the jstack tool to obtain Java stack traces and thread information for processes. The tool is similar to the HotSpot tool of the same name; the OpenJ9 version of jstack is an independent implementation, added for compatibility. The command syntax is as follows: jstack <options>* <pid>* Where <pid>* is a list of process IDs. If none are supplied, the process IDs are read from stdin , which allows a user running a Bourne or equivalent shell to query all processes via jps -q | jstack . IDs of inactive processes are silently ignored. The output contains Java stacks and thread information of the specified processes (equivalent to the information provided in java.lang.management.ThreadInfo ). The values for <options>* are as follows: -J : supplies arguments to the Java VM that is running the jstack command. You can use multiple -J options, for example: jstack -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -p : prints the system and agent properties of the process -l : prints more verbose output, including information about locks -h : prints help information Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For more information about differences, see Switching to OpenJ9 .","title":"Java stack (jstack) tool"},{"location":"tool_jstack/#java-stack-jstack-tool","text":"Use the jstack tool to obtain Java stack traces and thread information for processes. The tool is similar to the HotSpot tool of the same name; the OpenJ9 version of jstack is an independent implementation, added for compatibility. The command syntax is as follows: jstack <options>* <pid>* Where <pid>* is a list of process IDs. If none are supplied, the process IDs are read from stdin , which allows a user running a Bourne or equivalent shell to query all processes via jps -q | jstack . IDs of inactive processes are silently ignored. The output contains Java stacks and thread information of the specified processes (equivalent to the information provided in java.lang.management.ThreadInfo ). The values for <options>* are as follows: -J : supplies arguments to the Java VM that is running the jstack command. You can use multiple -J options, for example: jstack -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -p : prints the system and agent properties of the process -l : prints more verbose output, including information about locks -h : prints help information Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For more information about differences, see Switching to OpenJ9 .","title":"Java stack (jstack) tool"},{"location":"tool_migration/","text":"Switching to OpenJ9 OpenJ9 provides the following tools, which might differ in behavior from the HotSpot equivalent. Note: For information about HotSpot equivalences and differences for items other than tools, see New to OpenJ9? Java diagnostic command tool ( jcmd ) Runs diagnostic commands on a specified VM. The main difference from the HotSpot jcmd tool is that the following options are not currently supported: The -f option to read commands from a file. The Perfcounter.print option for displaying performance counters for the target VM. Selecting VMs by main class instead of VMID. Specifying 0 as a VMID to target all VMs. Java memory map tool ( jmap ) Displays information about classes on the heap, including the number of objects and their aggregate size. The main differences from the HotSpot jmap tool are as follows: Uses the Attach API. Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <option> <vmid> , where <vmid> is the Attach API virtual machine identifier for the Java\u2122 process. Does not support displaying data from core dumps; use Dump viewer instead. Does not include a -F option to force a dump of an unresponsive process. User kill -QUIT <pid> instead, where <pid> is the process identifier. For more information, see jmap . Java process status ( jps ) Displays information about running Java processes. The main differences from the HotSpot jps tool are as follows: Runs on Windows\u00ae, AIX\u00ae, and z/OS\u00ae, as well as Linux\u00ae. Uses the Attach API. Shows processes on the current host only. There is no -V option. For more information, see Java process status . Java stack ( jstack ) tool Displays information about Java stack traces and thread information for processes. The main differences from the HotSpot jstack tool are as follows: In the interests of security, the OpenJ9 implementation of jstack prints only information about local processes that are owned by the current user. Printing data for core dumps is not supported. Use the Dump viewer instead. There is no -m option. Printing data for native stack frames is not supported. There is no -F option to force a dump, although this might be accomplished using kill -QUIT <pid> on some platforms. For more information, see jstack .","title":"Switching to OpenJ9"},{"location":"tool_migration/#switching-to-openj9","text":"OpenJ9 provides the following tools, which might differ in behavior from the HotSpot equivalent. Note: For information about HotSpot equivalences and differences for items other than tools, see New to OpenJ9?","title":"Switching to OpenJ9"},{"location":"tool_migration/#java-diagnostic-command-tool-jcmd","text":"Runs diagnostic commands on a specified VM. The main difference from the HotSpot jcmd tool is that the following options are not currently supported: The -f option to read commands from a file. The Perfcounter.print option for displaying performance counters for the target VM. Selecting VMs by main class instead of VMID. Specifying 0 as a VMID to target all VMs.","title":"Java diagnostic command tool (jcmd)"},{"location":"tool_migration/#java-memory-map-tool-jmap","text":"Displays information about classes on the heap, including the number of objects and their aggregate size. The main differences from the HotSpot jmap tool are as follows: Uses the Attach API. Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <option> <vmid> , where <vmid> is the Attach API virtual machine identifier for the Java\u2122 process. Does not support displaying data from core dumps; use Dump viewer instead. Does not include a -F option to force a dump of an unresponsive process. User kill -QUIT <pid> instead, where <pid> is the process identifier. For more information, see jmap .","title":"Java memory map tool (jmap)"},{"location":"tool_migration/#java-process-status-jps","text":"Displays information about running Java processes. The main differences from the HotSpot jps tool are as follows: Runs on Windows\u00ae, AIX\u00ae, and z/OS\u00ae, as well as Linux\u00ae. Uses the Attach API. Shows processes on the current host only. There is no -V option. For more information, see Java process status .","title":"Java process status (jps)"},{"location":"tool_migration/#java-stack-jstack-tool","text":"Displays information about Java stack traces and thread information for processes. The main differences from the HotSpot jstack tool are as follows: In the interests of security, the OpenJ9 implementation of jstack prints only information about local processes that are owned by the current user. Printing data for core dumps is not supported. Use the Dump viewer instead. There is no -m option. Printing data for native stack frames is not supported. There is no -F option to force a dump, although this might be accomplished using kill -QUIT <pid> on some platforms. For more information, see jstack .","title":"Java stack (jstack) tool"},{"location":"tool_traceformat/","text":"Trace formatter ( traceformat ) The trace formatter is a Java\u2122 program that converts binary trace point data in a trace file to a readable form. The formatter requires the TraceFormat.dat and J9TraceFormat.dat files, which contain the formatting templates. The formatter produces a file that contains header information about the VM that produced the binary trace file, a list of threads for which trace points were produced, and the formatted trace points with their time stamp, thread ID, trace point ID, and trace point data. Syntax To use the trace formatter on a binary trace file type: traceformat <input_file> [<output_file>] <parameters> Where <input_file> is the name of the binary trace file to be formatted, and <output_file> is the name of the output file. If you do not specify an output file, the output file is called input_file.fmt . The size of the heap that is needed to format the trace is directly proportional to the number of threads present in the trace file. For large numbers of threads the formatter might run out of memory, generating the error OutOfMemoryError . In this case, increase the heap size by using the -Xmx option. Parameters The following <parameters> are available with the trace formatter: Option Explanation -datfile=<file1.dat>[,<file2.dat>] A comma-separated list of trace formatting data files. By default, the following files are used:$JAVA_HOME/lib/J9TraceFormat.dat and $JAVA_HOME/lib/TraceFormat.dat -format_time=yes|no Specifies whether to format the time stamps into human readable form. The default is yes . -help Displays usage information. -indent Indents trace messages at each Entry trace point and outdents trace messages at each Exit trace point. The default is not to indent the messages. -summary Prints summary information to the screen without generating an output file. -threads=<thread id>[,<thread id>]... Filters the output for the given thread IDs only. thread id is the ID of the thread, which can be specified in decimal or hex (0x) format. Any number of thread IDs can be specified, separated by commas. -timezone=+|-HH:MM Specifies the offset from UTC, as positive or negative hours and minutes, to apply when formatting time stamps. -verbose Output detailed warning and error messages, and performance statistics. Examples The following example shows output from running the trace formatter command: C:\\test>traceformat sample.trc Writing formatted trace output to file sample.trc.fmt Processing 0.4921875Mb of binary trace data Completed processing of 6983 tracepoints with 0 warnings and 0 errors The formatted trace output looks similar to the following extract, which is truncated to show the key areas of information: Trace Summary Service level: JRE 1.8.0 Windows 7 amd64-64 build (pwa6480sr2-20150624_06(SR2)) JVM startup options: -Xoptionsfile=c:\\build\\pwa6480sr2-20150624\\sdk\\lib\\compressedrefs\\options.default .... Processor information: Arch family: AMD64 Processor Sub-type: Opteron Num Processors: 8 Word size: 64 Trace activation information:: FORMAT=c:\\build\\pwa6480sr2-20150624\\sdk\\lib;. MAXIMAL=all{level1} EXCEPTION=j9mm{gclogger} MAXIMAL=all{level2} output=sample Trace file header: JVM start time: 08:58:35.527000000 Generations: 1 Pointer size: 8 Active threads .... 0x000000000f155f00 Attach API wait loop 0x000000000f18b200 Thread-1 0x000000000f190200 Thread-3 Trace Formatted Data Time (UTC) Thread ID Tracepoint ID Type Tracepoint Data 08:58:35.527291919 *0x000000000f010500 j9trc.0 Event Trace engine initialized for VM = 0x3ad4d0 08:58:35.527349836 0x000000000f010500 j9prt.0 Event Trace engine initialized for module j9port 08:58:35.527354040 0x000000000f010500 j9thr.0 Event Trace engine initialized for module j9thr 08:58:35.529409621 *0x000000000f01eb00 j9trc.5 Event Thread started VMthread = 0xf01eb00, name = (unnamed thread), nativeID = 0x24a798 .... 08:58:35.536134516 0x000000000f010500 j9vm.1 Entry >Create RAM class from ROM class 0x3cab680 in class loader 0x3042338 08:58:35.536136384 0x000000000f010500 j9vm.80 Event ROM class 0x3cab680 is named java/lang/Object 08:58:35.536200373 0x000000000f010500 j9vm.2 Exit <Created RAM class 0xf03ef00 from ROM class 0x3cab680","title":"Trace formatter"},{"location":"tool_traceformat/#trace-formatter-traceformat","text":"The trace formatter is a Java\u2122 program that converts binary trace point data in a trace file to a readable form. The formatter requires the TraceFormat.dat and J9TraceFormat.dat files, which contain the formatting templates. The formatter produces a file that contains header information about the VM that produced the binary trace file, a list of threads for which trace points were produced, and the formatted trace points with their time stamp, thread ID, trace point ID, and trace point data.","title":"Trace formatter (traceformat)"},{"location":"tool_traceformat/#syntax","text":"To use the trace formatter on a binary trace file type: traceformat <input_file> [<output_file>] <parameters> Where <input_file> is the name of the binary trace file to be formatted, and <output_file> is the name of the output file. If you do not specify an output file, the output file is called input_file.fmt . The size of the heap that is needed to format the trace is directly proportional to the number of threads present in the trace file. For large numbers of threads the formatter might run out of memory, generating the error OutOfMemoryError . In this case, increase the heap size by using the -Xmx option.","title":"Syntax"},{"location":"tool_traceformat/#parameters","text":"The following <parameters> are available with the trace formatter: Option Explanation -datfile=<file1.dat>[,<file2.dat>] A comma-separated list of trace formatting data files. By default, the following files are used:$JAVA_HOME/lib/J9TraceFormat.dat and $JAVA_HOME/lib/TraceFormat.dat -format_time=yes|no Specifies whether to format the time stamps into human readable form. The default is yes . -help Displays usage information. -indent Indents trace messages at each Entry trace point and outdents trace messages at each Exit trace point. The default is not to indent the messages. -summary Prints summary information to the screen without generating an output file. -threads=<thread id>[,<thread id>]... Filters the output for the given thread IDs only. thread id is the ID of the thread, which can be specified in decimal or hex (0x) format. Any number of thread IDs can be specified, separated by commas. -timezone=+|-HH:MM Specifies the offset from UTC, as positive or negative hours and minutes, to apply when formatting time stamps. -verbose Output detailed warning and error messages, and performance statistics.","title":"Parameters"},{"location":"tool_traceformat/#examples","text":"The following example shows output from running the trace formatter command: C:\\test>traceformat sample.trc Writing formatted trace output to file sample.trc.fmt Processing 0.4921875Mb of binary trace data Completed processing of 6983 tracepoints with 0 warnings and 0 errors The formatted trace output looks similar to the following extract, which is truncated to show the key areas of information: Trace Summary Service level: JRE 1.8.0 Windows 7 amd64-64 build (pwa6480sr2-20150624_06(SR2)) JVM startup options: -Xoptionsfile=c:\\build\\pwa6480sr2-20150624\\sdk\\lib\\compressedrefs\\options.default .... Processor information: Arch family: AMD64 Processor Sub-type: Opteron Num Processors: 8 Word size: 64 Trace activation information:: FORMAT=c:\\build\\pwa6480sr2-20150624\\sdk\\lib;. MAXIMAL=all{level1} EXCEPTION=j9mm{gclogger} MAXIMAL=all{level2} output=sample Trace file header: JVM start time: 08:58:35.527000000 Generations: 1 Pointer size: 8 Active threads .... 0x000000000f155f00 Attach API wait loop 0x000000000f18b200 Thread-1 0x000000000f190200 Thread-3 Trace Formatted Data Time (UTC) Thread ID Tracepoint ID Type Tracepoint Data 08:58:35.527291919 *0x000000000f010500 j9trc.0 Event Trace engine initialized for VM = 0x3ad4d0 08:58:35.527349836 0x000000000f010500 j9prt.0 Event Trace engine initialized for module j9port 08:58:35.527354040 0x000000000f010500 j9thr.0 Event Trace engine initialized for module j9thr 08:58:35.529409621 *0x000000000f01eb00 j9trc.5 Event Thread started VMthread = 0xf01eb00, name = (unnamed thread), nativeID = 0x24a798 .... 08:58:35.536134516 0x000000000f010500 j9vm.1 Entry >Create RAM class from ROM class 0x3cab680 in class loader 0x3042338 08:58:35.536136384 0x000000000f010500 j9vm.80 Event ROM class 0x3cab680 is named java/lang/Object 08:58:35.536200373 0x000000000f010500 j9vm.2 Exit <Created RAM class 0xf03ef00 from ROM class 0x3cab680","title":"Examples"},{"location":"version0.10/","text":"What's new in version 0.10.0 The following new features and notable changes since v.0.9.0 are included in this release: New binaries and changes to supported environments. Change to the default shared classes cache size for OpenJDK 8 builds New information for the SHARED CLASSES section of a Javadump file Support for OpenJDK HotSpot options Features and changes Binaries and supported environments OpenJ9 release 0.10.0 supports OpenJDK 11, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 11 OpenJDK 11 with Eclipse OpenJ9 is a long term support (LTS) release and supersedes OpenJDK 10 with Eclipse OpenJ9. Although it is possible to build an OpenJDK v8 with the OpenJ9 0.10.0 release level, testing at the project is not complete and therefore support is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments Change to the default shared classes cache size For OpenJDK 8 builds, the default shared classes cache size is increased from 16 MB to 300 MB, with a \"soft\" maximum limit for the initial size of the cache set to 64 MB. Certain exceptions apply. For more information, see -Xshareclasses . The new default also applies to OpenJDK 11 builds. New information for the SHARED CLASSES section of a Java dump file The value of the soft maximum size ( -Xscmx ) of the shared classes cache is now recorded in the SHARED CLASSES section of a Java dump file against the string 2SCLTEXTSMB . For example output, see Java dump . Support for OpenJDK HotSpot options For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:HeapDumpPath -XX:[+|-]HeapDumpOnOutOfMemory -XX:ActiveProcessorCount Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.9.0 and v 0.10.0 releases, see the Release notes .","title":"Version 0.10.0"},{"location":"version0.10/#whats-new-in-version-0100","text":"The following new features and notable changes since v.0.9.0 are included in this release: New binaries and changes to supported environments. Change to the default shared classes cache size for OpenJDK 8 builds New information for the SHARED CLASSES section of a Javadump file Support for OpenJDK HotSpot options","title":"What's new in version 0.10.0"},{"location":"version0.10/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.10/#binaries-and-supported-environments","text":"OpenJ9 release 0.10.0 supports OpenJDK 11, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 11 OpenJDK 11 with Eclipse OpenJ9 is a long term support (LTS) release and supersedes OpenJDK 10 with Eclipse OpenJ9. Although it is possible to build an OpenJDK v8 with the OpenJ9 0.10.0 release level, testing at the project is not complete and therefore support is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments","title":"Binaries and supported environments"},{"location":"version0.10/#change-to-the-default-shared-classes-cache-size","text":"For OpenJDK 8 builds, the default shared classes cache size is increased from 16 MB to 300 MB, with a \"soft\" maximum limit for the initial size of the cache set to 64 MB. Certain exceptions apply. For more information, see -Xshareclasses . The new default also applies to OpenJDK 11 builds.","title":"Change to the default shared classes cache size"},{"location":"version0.10/#new-information-for-the-shared-classes-section-of-a-java-dump-file","text":"The value of the soft maximum size ( -Xscmx ) of the shared classes cache is now recorded in the SHARED CLASSES section of a Java dump file against the string 2SCLTEXTSMB . For example output, see Java dump .","title":"New information for the SHARED CLASSES section of a Java dump file"},{"location":"version0.10/#support-for-openjdk-hotspot-options","text":"For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:HeapDumpPath -XX:[+|-]HeapDumpOnOutOfMemory -XX:ActiveProcessorCount","title":"Support for OpenJDK HotSpot options"},{"location":"version0.10/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.9.0 and v 0.10.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.11/","text":"What's new in version 0.11.0 The following new features and notable changes since v 0.10.0 are included in this release: New binaries and changes to supported environments. OpenSSL is now supported for improved native cryptographic performance Changes to the location of the default shared cache and cache snapshot directory New class data sharing suboptions Container awareness in the OpenJ9 VM is now enabled by default Pause-less garbage collection mode is now available on Linux x86 platforms You can now restrict identity hash codes to non-negative values Support for OpenJDK HotSpot options Features and changes Binaries and supported environments OpenJ9 release 0.11.0 provides limited support for the macOS\u00ae platform on OpenJDK 11. Early builds of OpenJDK 11 with OpenJ9 on macOS are available at the AdoptOpenJDK project at the following link: OpenJDK version 11 Support for macOS on OpenJDK 8 is coming soon. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments OpenSSL is now supported for improved native cryptographic performance OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binary due to an unresolved problem. Changes to the location of the default shared cache and cache snapshot directory To increase security, the default shared classes cache directory is changed on non-Windows platforms from /tmp/javasharedresources/ to the user's home directory, unless you specify -Xshareclasses:groupAccess . If you use the groupAccess suboption, the default directory is unchanged because some members of the group might not have access to the user home directory. Note: For persistent caches, the shared classes cache directory cannot be on an NFS mount. If your user home directory is on an NFS mount, either move it or use the -Xshareclasses:cacheDir=<directory> suboption to specify a different directory for the cache. In general, caches cannot be shared across different Java releases, so you cannot re-use a cache that was created by a previous level of Java 11; if you use the name and cacheDir suboptions to specify an existing cache, the VM attempts to delete the cache and create a new one. However, on Windows, the cache cannot be deleted if it is in use, in which case the VM continues to use the existing cache. You can find and remove old caches or snapshots by using the following command-line options: For persistent caches: - -Xshareclasses:cacheDir=/tmp/javasharedresources/,listAllCaches to find the cache - -Xshareclasses:cacheDir=/tmp/javasharedresources/,name=<cacheName>,destroy to remove the cache For nonpersistent caches or snapshots: - -Xshareclasses:cacheDir=/tmp,listAllCaches to find the item - -Xshareclasses:cacheDir=/tmp,name=<snapshotName>,destroySnapshot to remove the item New class data sharing suboptions -Xshareclasses:bootClassesOnly : disables caching of classes that are loaded by non-bootstrap class loaders. This suboption also enables the nonfatal suboption, which allows the VM to start even if there was an error creating the shared classes cache. -Xshareclasses:fatal : prevents the VM from starting if there was an error creating the shared classes cache. You might want to enable this suboption when using the -Xshareclasses:bootClassesOnly suboption, to troubleshoot problems when creating the cache. Container awareness in the OpenJ9 VM is now enabled by default When using container technology, applications are typically run on their own and do not need to compete for memory. If the VM detects that it is running in a container environment, and a memory limit for the container is set, the VM automatically adjusts the maximum default Java heap size. In earlier releases, this behavior was enabled by setting the -XX:+UseContainerSupport option. This setting is now the default. For more information about the Java heap size set for a container, see -XX:[+|-]UseContainerSupport . Pause-less garbage collection mode is now available on Linux x86 platforms Pause-less garbage collection mode is aimed at large heap, response-time sensitive applications. When enabled, the VM attempts to reduce GC pause times. In earlier releases, pause-less garbage collection mode ( -Xgc:concurrentScavenge ) was available only on IBM z14 hardware. This mode is now available on 64-bit x86 Linux platforms. Restrictions: The Generational Concurrent ( gencon ) garbage collection policy must be used. (This is the default policy.) Compressed references must be used. See -Xcompressedrefs . Compressed references are enabled by default when the maximum heap size ( -Xmx ) \u2264 57 GB. The concurrent scavenge option is ignored if the maximum heap size is > 57 GB. You can now restrict identity hash codes to non-negative values OpenJ9 allows both positive and negative identity hashcodes, which can be problematic if your program (incorrectly) assumes hashcodes can only be positive. However, you can now use the -XX:[+|-]PositiveIdentityHash option to limit identity hash codes to non-negative values. Support for OpenJDK HotSpot options For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:MaxHeapSize -XX:InitialHeapSize Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.10.0 and v 0.11.0 releases, see the Release notes .","title":"Version 0.11.0"},{"location":"version0.11/#whats-new-in-version-0110","text":"The following new features and notable changes since v 0.10.0 are included in this release: New binaries and changes to supported environments. OpenSSL is now supported for improved native cryptographic performance Changes to the location of the default shared cache and cache snapshot directory New class data sharing suboptions Container awareness in the OpenJ9 VM is now enabled by default Pause-less garbage collection mode is now available on Linux x86 platforms You can now restrict identity hash codes to non-negative values Support for OpenJDK HotSpot options","title":"What's new in version 0.11.0"},{"location":"version0.11/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.11/#binaries-and-supported-environments","text":"OpenJ9 release 0.11.0 provides limited support for the macOS\u00ae platform on OpenJDK 11. Early builds of OpenJDK 11 with OpenJ9 on macOS are available at the AdoptOpenJDK project at the following link: OpenJDK version 11 Support for macOS on OpenJDK 8 is coming soon. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments","title":"Binaries and supported environments"},{"location":"version0.11/#openssl-is-now-supported-for-improved-native-cryptographic-performance","text":"OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binary due to an unresolved problem.","title":"OpenSSL is now supported for improved native cryptographic performance"},{"location":"version0.11/#changes-to-the-location-of-the-default-shared-cache-and-cache-snapshot-directory","text":"To increase security, the default shared classes cache directory is changed on non-Windows platforms from /tmp/javasharedresources/ to the user's home directory, unless you specify -Xshareclasses:groupAccess . If you use the groupAccess suboption, the default directory is unchanged because some members of the group might not have access to the user home directory. Note: For persistent caches, the shared classes cache directory cannot be on an NFS mount. If your user home directory is on an NFS mount, either move it or use the -Xshareclasses:cacheDir=<directory> suboption to specify a different directory for the cache. In general, caches cannot be shared across different Java releases, so you cannot re-use a cache that was created by a previous level of Java 11; if you use the name and cacheDir suboptions to specify an existing cache, the VM attempts to delete the cache and create a new one. However, on Windows, the cache cannot be deleted if it is in use, in which case the VM continues to use the existing cache. You can find and remove old caches or snapshots by using the following command-line options: For persistent caches: - -Xshareclasses:cacheDir=/tmp/javasharedresources/,listAllCaches to find the cache - -Xshareclasses:cacheDir=/tmp/javasharedresources/,name=<cacheName>,destroy to remove the cache For nonpersistent caches or snapshots: - -Xshareclasses:cacheDir=/tmp,listAllCaches to find the item - -Xshareclasses:cacheDir=/tmp,name=<snapshotName>,destroySnapshot to remove the item","title":"Changes to the location of the default shared cache and cache snapshot directory"},{"location":"version0.11/#new-class-data-sharing-suboptions","text":"-Xshareclasses:bootClassesOnly : disables caching of classes that are loaded by non-bootstrap class loaders. This suboption also enables the nonfatal suboption, which allows the VM to start even if there was an error creating the shared classes cache. -Xshareclasses:fatal : prevents the VM from starting if there was an error creating the shared classes cache. You might want to enable this suboption when using the -Xshareclasses:bootClassesOnly suboption, to troubleshoot problems when creating the cache.","title":"New class data sharing suboptions"},{"location":"version0.11/#container-awareness-in-the-openj9-vm-is-now-enabled-by-default","text":"When using container technology, applications are typically run on their own and do not need to compete for memory. If the VM detects that it is running in a container environment, and a memory limit for the container is set, the VM automatically adjusts the maximum default Java heap size. In earlier releases, this behavior was enabled by setting the -XX:+UseContainerSupport option. This setting is now the default. For more information about the Java heap size set for a container, see -XX:[+|-]UseContainerSupport .","title":"Container awareness in the OpenJ9 VM is now enabled by default"},{"location":"version0.11/#pause-less-garbage-collection-mode-is-now-available-on-linux-x86-platforms","text":"Pause-less garbage collection mode is aimed at large heap, response-time sensitive applications. When enabled, the VM attempts to reduce GC pause times. In earlier releases, pause-less garbage collection mode ( -Xgc:concurrentScavenge ) was available only on IBM z14 hardware. This mode is now available on 64-bit x86 Linux platforms. Restrictions: The Generational Concurrent ( gencon ) garbage collection policy must be used. (This is the default policy.) Compressed references must be used. See -Xcompressedrefs . Compressed references are enabled by default when the maximum heap size ( -Xmx ) \u2264 57 GB. The concurrent scavenge option is ignored if the maximum heap size is > 57 GB.","title":"Pause-less garbage collection mode is now available on Linux x86 platforms"},{"location":"version0.11/#you-can-now-restrict-identity-hash-codes-to-non-negative-values","text":"OpenJ9 allows both positive and negative identity hashcodes, which can be problematic if your program (incorrectly) assumes hashcodes can only be positive. However, you can now use the -XX:[+|-]PositiveIdentityHash option to limit identity hash codes to non-negative values.","title":"You can now restrict identity hash codes to non-negative values"},{"location":"version0.11/#support-for-openjdk-hotspot-options","text":"For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:MaxHeapSize -XX:InitialHeapSize","title":"Support for OpenJDK HotSpot options"},{"location":"version0.11/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.10.0 and v 0.11.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.12/","text":"What's new in version 0.12.x Version 0.12.0 The following new features and notable changes since v 0.11.0 are included in this release: Improved flexibility for managing the size of the JIT code cache Idle-tuning is enabled by default when OpenJ9 runs in a docker container Changes to default shared classes cache directory permissions (not Windows) OpenSSL is now supported for improved native cryptographic performance Improved support for pause-less garbage collection RSA algorithm support for OpenSSL IBM_JAVA_OPTIONS is deprecated Warning: Following the release of OpenJ9 0.12.0, an intermittent problem was identified with OpenSSL V1.1.x acceleration of the cryptographic Digest algorithm. For more information about the issue, see #4530 . You can turn off the Digest algorithm by setting the -Djdk.nativeDigest system property to false . A new release of OpenJ9 (0.12.1) is available that disables the Digest algorithm by default. Features and changes Binaries and supported environments OpenJ9 release 0.12.0 provides support for OpenJDK 8 with OpenJ9 and OpenJDK 11 with OpenJ9 . In this release support is extended to the 64-bit macOS\u00ae platform on OpenJDK with OpenJ9. Builds for all platforms are available from the AdoptOpenJDK project at the following links: OpenJDK 8 with OpenJ9 OpenJDK 11 with OpenJ9 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Improved flexibility for managing the size of the JIT code cache The JIT code cache stores the native code of compiled Java\u2122 methods. By default, the size of the code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. In earlier releases the size of the code cache could be increased from the default value by using the -Xcodecachetotal command line option. In this release the size can also be decreased by using this option, with a minimum size of 2 MB. The size of the JIT code cache also affects the size of the JIT data cache, which holds metadata about compiled methods. If you use the -Xcodecachetotal option to manage the size of the code cache, the size of the data cache is adjusted by the same proportion. For more information, see -Xcodecachetotal . Idle-tuning is enabled by default when OpenJ9 runs in a docker container In an earlier release, a set of idle-tuning options were introduced to manage the footprint of the Java heap when the OpenJ9 VM is in an idle state. These options could be set manually on the command line. In this release, the following two options are enabled by default when OpenJ9 is running in a container: -XX:[+|-]IdleTuningGcOnIdle , which runs a garbage collection cycle and releases free memory pages back to the operating system when the VM state is set to idle. -XX:[+|-]IdleTuningCompactOnIdle , which compacts the object heap to reduce fragmentation when the VM state is set to idle. By default, the VM must be idle for 180 seconds before the status is set to idle. To control the wait time before an idle state is set, use the -XX:IdleTuningMinIdleWaitTime option. To turn off idle detection, set the value to 0 . Changes to default shared classes cache directory permissions (not Windows) If you do not use the cachDirPerm suboption to specify permissions for a shared classes cache directory, and the cache directory is not the /tmp/javasharedresources default, the following changes apply: When creating a new cache directory, the default permissions are now stricter. If the cache directory already exists, permissions are now unchanged (previously, when a cache was opened using this directory, the permissions would be set to 0777). For more information, see -Xshareclasses . OpenSSL is now supported for improved native cryptographic performance OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: OpenJDK 8 with OpenJ9 includes OpenSSL support since v 0.11.0. Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binaries due to an unresolved problem. Improved support for pause-less garbage collection Concurrent scavenge mode is now supported on 64-bit Windows operating systems. In Eclipse OpenJ9 v 0.11.0, support was added for -Xgc:concurrentScavenge on Linux x86-64 virtual machines that use compressed references. In this release, support is now available for Linux x86-64 large-heap virtual machines (non-compressed references). For more information, see the -Xgc:concurrentScavenge option. RSA algorithm support for OpenSSL OpenSSL v1.1 support for the RSA algorithm is added in this release, providing improved cryptographic performance. OpenSSL support is enabled by default. If you want to turn off support for the RSA algorithm, set the -Djdk.nativeRSA system property to false . IBM_JAVA_OPTIONS is deprecated The VM environment variable IBM_JAVA_OPTIONS is deprecated and is replaced by OPENJ9_JAVA_OPTIONS . IBM_JAVA_OPTIONS will be removed in a future release. For more information about the use of this variable, see the general options in Environment variables . Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.11.0 and v 0.12.0 releases, see the Release notes . Version 0.12.1 The following change is implemented since v 0.12.0: By default, OpenJ9 provides native cryptographic acceleration using OpenSSL v 1.1.x for the Digest, CBC, GCM, and RSA algorithms. Under certain circumstances acceleration of the Digest algorithm was found to cause a segmentation error. Cryptographic acceleration of the Digest algorithm is now turned off by default. The system property -Djdk.nativeDigest cannot be used to turn on support. This property is ignored by the VM. Full release information Release notes to describe the changes between Eclipse OpenJ9 v 0.12.0 and v 0.12.1 releases, can be found in the OpenJ9 GitHub repository .","title":"Version 0.12.0"},{"location":"version0.12/#whats-new-in-version-012x","text":"","title":"What's new in version 0.12.x"},{"location":"version0.12/#version-0120","text":"The following new features and notable changes since v 0.11.0 are included in this release: Improved flexibility for managing the size of the JIT code cache Idle-tuning is enabled by default when OpenJ9 runs in a docker container Changes to default shared classes cache directory permissions (not Windows) OpenSSL is now supported for improved native cryptographic performance Improved support for pause-less garbage collection RSA algorithm support for OpenSSL IBM_JAVA_OPTIONS is deprecated Warning: Following the release of OpenJ9 0.12.0, an intermittent problem was identified with OpenSSL V1.1.x acceleration of the cryptographic Digest algorithm. For more information about the issue, see #4530 . You can turn off the Digest algorithm by setting the -Djdk.nativeDigest system property to false . A new release of OpenJ9 (0.12.1) is available that disables the Digest algorithm by default.","title":"Version 0.12.0"},{"location":"version0.12/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.12/#binaries-and-supported-environments","text":"OpenJ9 release 0.12.0 provides support for OpenJDK 8 with OpenJ9 and OpenJDK 11 with OpenJ9 . In this release support is extended to the 64-bit macOS\u00ae platform on OpenJDK with OpenJ9. Builds for all platforms are available from the AdoptOpenJDK project at the following links: OpenJDK 8 with OpenJ9 OpenJDK 11 with OpenJ9 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.12/#improved-flexibility-for-managing-the-size-of-the-jit-code-cache","text":"The JIT code cache stores the native code of compiled Java\u2122 methods. By default, the size of the code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. In earlier releases the size of the code cache could be increased from the default value by using the -Xcodecachetotal command line option. In this release the size can also be decreased by using this option, with a minimum size of 2 MB. The size of the JIT code cache also affects the size of the JIT data cache, which holds metadata about compiled methods. If you use the -Xcodecachetotal option to manage the size of the code cache, the size of the data cache is adjusted by the same proportion. For more information, see -Xcodecachetotal .","title":"Improved flexibility for managing the size of the JIT code cache"},{"location":"version0.12/#idle-tuning-is-enabled-by-default-when-openj9-runs-in-a-docker-container","text":"In an earlier release, a set of idle-tuning options were introduced to manage the footprint of the Java heap when the OpenJ9 VM is in an idle state. These options could be set manually on the command line. In this release, the following two options are enabled by default when OpenJ9 is running in a container: -XX:[+|-]IdleTuningGcOnIdle , which runs a garbage collection cycle and releases free memory pages back to the operating system when the VM state is set to idle. -XX:[+|-]IdleTuningCompactOnIdle , which compacts the object heap to reduce fragmentation when the VM state is set to idle. By default, the VM must be idle for 180 seconds before the status is set to idle. To control the wait time before an idle state is set, use the -XX:IdleTuningMinIdleWaitTime option. To turn off idle detection, set the value to 0 .","title":"Idle-tuning is enabled by default when OpenJ9 runs in a docker container"},{"location":"version0.12/#changes-to-default-shared-classes-cache-directory-permissions-not-windows","text":"If you do not use the cachDirPerm suboption to specify permissions for a shared classes cache directory, and the cache directory is not the /tmp/javasharedresources default, the following changes apply: When creating a new cache directory, the default permissions are now stricter. If the cache directory already exists, permissions are now unchanged (previously, when a cache was opened using this directory, the permissions would be set to 0777). For more information, see -Xshareclasses .","title":"Changes to default shared classes cache directory permissions (not Windows)"},{"location":"version0.12/#openssl-is-now-supported-for-improved-native-cryptographic-performance","text":"OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: OpenJDK 8 with OpenJ9 includes OpenSSL support since v 0.11.0. Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binaries due to an unresolved problem.","title":"OpenSSL is now supported for improved native cryptographic performance"},{"location":"version0.12/#improved-support-for-pause-less-garbage-collection","text":"Concurrent scavenge mode is now supported on 64-bit Windows operating systems. In Eclipse OpenJ9 v 0.11.0, support was added for -Xgc:concurrentScavenge on Linux x86-64 virtual machines that use compressed references. In this release, support is now available for Linux x86-64 large-heap virtual machines (non-compressed references). For more information, see the -Xgc:concurrentScavenge option.","title":"Improved support for pause-less garbage collection"},{"location":"version0.12/#rsa-algorithm-support-for-openssl","text":"OpenSSL v1.1 support for the RSA algorithm is added in this release, providing improved cryptographic performance. OpenSSL support is enabled by default. If you want to turn off support for the RSA algorithm, set the -Djdk.nativeRSA system property to false .","title":"RSA algorithm support for OpenSSL"},{"location":"version0.12/#ibm_java_options-is-deprecated","text":"The VM environment variable IBM_JAVA_OPTIONS is deprecated and is replaced by OPENJ9_JAVA_OPTIONS . IBM_JAVA_OPTIONS will be removed in a future release. For more information about the use of this variable, see the general options in Environment variables .","title":"IBM_JAVA_OPTIONS is deprecated"},{"location":"version0.12/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.11.0 and v 0.12.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.12/#version-0121","text":"The following change is implemented since v 0.12.0: By default, OpenJ9 provides native cryptographic acceleration using OpenSSL v 1.1.x for the Digest, CBC, GCM, and RSA algorithms. Under certain circumstances acceleration of the Digest algorithm was found to cause a segmentation error. Cryptographic acceleration of the Digest algorithm is now turned off by default. The system property -Djdk.nativeDigest cannot be used to turn on support. This property is ignored by the VM.","title":"Version 0.12.1"},{"location":"version0.12/#full-release-information_1","text":"Release notes to describe the changes between Eclipse OpenJ9 v 0.12.0 and v 0.12.1 releases, can be found in the OpenJ9 GitHub repository .","title":"Full release information"},{"location":"version0.13/","text":"What's new in version 0.13.0 The following new features and notable changes since v 0.12.1 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New Java\u2122 process status tool Writing a Java dump to STDOUT or STDERR Better diagnostic information for Linux systems that implement control groups Improved support for pause-less garbage collection Features and changes Binaries and supported environments OpenJ9 release 0.13.0 supports OpenJDK 12, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 12 OpenJDK 12 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.12.0. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.13.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Support for OpenSSL 1.0.2 OpenSSL cryptographic support is extended to include OpenSSL 1.0.2 for the Digest, CBC, GCM, and RSA algorithms. Support is enabled by default. On Linux and AIX platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . In addition, support for the OpenSSL Digest algorithm is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path. New Java process status tool A Java process status tool ( jps ) is available for querying running Java processes. For more information, see Java process status . Writing a Java dump to STDOUT or STDERR You can now write a Java dump file to STDOUT or STDERR by using the -Xdump command-line option. See Writing to STDOUT / STDERR for details. Better diagnostic information for Linux systems that implement control groups If you use control groups (cgroups) to manage resources on Linux systems, information about CPU and memory limits is now recorded in a Java dump file. This information is particularly important for applications that run in Docker containers, because when resource limits are set inside a container, the Docker Engine relies on cgroups to enforce the settings. If you are getting a Java OutOfMemoryError error because a container limit has been set on the amount of memory available to an application and this allocation is not sufficient, you can diagnose this problem from the Java dump file. You can find the cgroup information in the ENVINFO section. For sample output, see Java dump (ENVINFO) . Improved support for pause-less garbage collection Concurrent scavenge mode is now supported on the following platforms: Linux on POWER LE AIX For more information, see the -Xgc:concurrentScavenge option. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.12.1 and v 0.13.0 releases, see the Release notes .","title":"Version 0.13.0"},{"location":"version0.13/#whats-new-in-version-0130","text":"The following new features and notable changes since v 0.12.1 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New Java\u2122 process status tool Writing a Java dump to STDOUT or STDERR Better diagnostic information for Linux systems that implement control groups Improved support for pause-less garbage collection","title":"What's new in version 0.13.0"},{"location":"version0.13/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.13/#binaries-and-supported-environments","text":"OpenJ9 release 0.13.0 supports OpenJDK 12, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 12 OpenJDK 12 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.12.0. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.13.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.13/#support-for-openssl-102","text":"OpenSSL cryptographic support is extended to include OpenSSL 1.0.2 for the Digest, CBC, GCM, and RSA algorithms. Support is enabled by default. On Linux and AIX platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . In addition, support for the OpenSSL Digest algorithm is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path.","title":"Support for OpenSSL 1.0.2"},{"location":"version0.13/#new-java-process-status-tool","text":"A Java process status tool ( jps ) is available for querying running Java processes. For more information, see Java process status .","title":"New Java process status tool"},{"location":"version0.13/#writing-a-java-dump-to-stdout-or-stderr","text":"You can now write a Java dump file to STDOUT or STDERR by using the -Xdump command-line option. See Writing to STDOUT / STDERR for details.","title":"Writing a Java dump to STDOUT or STDERR"},{"location":"version0.13/#better-diagnostic-information-for-linux-systems-that-implement-control-groups","text":"If you use control groups (cgroups) to manage resources on Linux systems, information about CPU and memory limits is now recorded in a Java dump file. This information is particularly important for applications that run in Docker containers, because when resource limits are set inside a container, the Docker Engine relies on cgroups to enforce the settings. If you are getting a Java OutOfMemoryError error because a container limit has been set on the amount of memory available to an application and this allocation is not sufficient, you can diagnose this problem from the Java dump file. You can find the cgroup information in the ENVINFO section. For sample output, see Java dump (ENVINFO) .","title":"Better diagnostic information for Linux systems that implement control groups"},{"location":"version0.13/#improved-support-for-pause-less-garbage-collection","text":"Concurrent scavenge mode is now supported on the following platforms: Linux on POWER LE AIX For more information, see the -Xgc:concurrentScavenge option.","title":"Improved support for pause-less garbage collection"},{"location":"version0.13/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.12.1 and v 0.13.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.14/","text":"What's new in version 0.14.x Version 0.14.0 The following new features and notable changes since v 0.13.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New option for ignoring or reporting unrecognized -XX: options Improved support for pause-less garbage collection New Java stack ( jstack ) tool for obtaining stack traces and thread information New Java process status ( jps ) tool New experimental option to improve the performance of JVMTI watched fields New option to prevent a network query being used to determine host name and IP address Changes to the shared classes cache generation number Change to the default native stack size on 64-bit z/OS\u00ae Features and changes Binaries and supported environments OpenJ9 release 0.14.0 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 12 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Support for OpenSSL 1.0.2 OpenJ9 release 0.13.0 introduced support for OpenSSL 1.0.2 for Java 12. In this release, support is extended to Java 8 and Java 11. OpenSSL is enabled by default for the CBC, Digest, GCM, and RSA cryptographic algorithms. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . Note: Support for the OpenSSL Digest algorithm on Java 8 and 11 is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path. New option for ignoring or reporting unrecognized -XX: options By default, unrecognized -XX: command-line options are ignored, which prevents an application failing to start. You can now use -XX:-IgnoreUnrecognizedXXColonOptions to turn off this behavior, so that unrecognized -XX: options are reported instead. For more information, see -XX:[+|-]IgnoreUnrecognizedXXColonOptions . Improved support for pause-less garbage collection Support for Concurrent scavenge mode is now extended to Linux on POWER\u00ae BE architectures. For more information, see -Xgc:concurrentScavenge . New jstack tool for obtaining stack traces and thread information For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jstack tool. To learn how to use the tool and about any differences compared to the HotSpot tool of the same name, see Java stack tool . New jps tool OpenJ9 release 0.13.0 introduced support for the jps tool for Java 12. In this release, support is added for Java 8 and 11. The jps tool can be used to query running Java processes. For more information, see Java process status . New experimental option to improve the performance of JVMTI watched fields The -XX:[+|-]JITInlineWatches option is introduced in this release. When enabled, the option turns on experimental JIT operations that are intended to improve the performance of JVMTI watched fields. This option is currently supported only on x86 platforms (Windows\u00ae, macOS\u00ae, and Linux). New option to prevent a network query being used to determine host name and IP address By default, a network query is used to determine the host name and IP address for troubleshooting purposes. To avoid your program waiting to time out if a nameserver cannot be contacted, you can now prevent the query from being performed. For more information, see -XX:[+|-]ReadIPInfoForRAS . Changes to the shared classes cache generation number On all platforms, the format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache, rather than re-creating or reusing an existing cache. To save space, all existing shared caches can be removed unless they are in use by an earlier release. For more information about destroying a shared classes cache, see -Xshareclasses . Change to the default native stack size on 64-bit z/OS The default stack size for operating system threads on 64-bit z/OS is changed from 384 KB to the operating system minimum of 1 MB. For more information about this setting, see -Xmso . Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.13.0 and v 0.14.0 releases, see the Release notes . Version 0.14.2 The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.1 OpenSSL Digest algorithm disabled Features and changes Binaries and supported environments OpenJ9 release 0.14.2 supports OpenJDK 8 and 11. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 The Windows (MSI) installer for OpenJDK v8 (64-bit) can now be used to optionally install the IcedTea-Web package, which provides equivalent functionality to Java Web Start. For more information about the installer, see the AdoptOpenJDK Installation page . For more information about migrating to IcedTea-Web, read the AdoptOpenJDK Migration Guide . To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Support for OpenSSL 1.0.1 OpenSSL version 1.0.1 support is now enabled; Earlier releases supported only OpenSSL 1.0.2 and 1.1.x. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . OpenSSL Digest algorithm disabled Due to issue #5611 , the Digest algorithm is disabled.","title":"Version 0.14.0"},{"location":"version0.14/#whats-new-in-version-014x","text":"","title":"What's new in version 0.14.x"},{"location":"version0.14/#version-0140","text":"The following new features and notable changes since v 0.13.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New option for ignoring or reporting unrecognized -XX: options Improved support for pause-less garbage collection New Java stack ( jstack ) tool for obtaining stack traces and thread information New Java process status ( jps ) tool New experimental option to improve the performance of JVMTI watched fields New option to prevent a network query being used to determine host name and IP address Changes to the shared classes cache generation number Change to the default native stack size on 64-bit z/OS\u00ae","title":"Version 0.14.0"},{"location":"version0.14/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.14/#binaries-and-supported-environments","text":"OpenJ9 release 0.14.0 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 12 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.14/#support-for-openssl-102","text":"OpenJ9 release 0.13.0 introduced support for OpenSSL 1.0.2 for Java 12. In this release, support is extended to Java 8 and Java 11. OpenSSL is enabled by default for the CBC, Digest, GCM, and RSA cryptographic algorithms. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . Note: Support for the OpenSSL Digest algorithm on Java 8 and 11 is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path.","title":"Support for OpenSSL 1.0.2"},{"location":"version0.14/#new-option-for-ignoring-or-reporting-unrecognized-xx-options","text":"By default, unrecognized -XX: command-line options are ignored, which prevents an application failing to start. You can now use -XX:-IgnoreUnrecognizedXXColonOptions to turn off this behavior, so that unrecognized -XX: options are reported instead. For more information, see -XX:[+|-]IgnoreUnrecognizedXXColonOptions .","title":"New option for ignoring or reporting unrecognized -XX: options"},{"location":"version0.14/#improved-support-for-pause-less-garbage-collection","text":"Support for Concurrent scavenge mode is now extended to Linux on POWER\u00ae BE architectures. For more information, see -Xgc:concurrentScavenge .","title":"Improved support for pause-less garbage collection"},{"location":"version0.14/#new-jstack-tool-for-obtaining-stack-traces-and-thread-information","text":"For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jstack tool. To learn how to use the tool and about any differences compared to the HotSpot tool of the same name, see Java stack tool .","title":"New jstack tool for obtaining stack traces and thread information"},{"location":"version0.14/#new-jps-tool","text":"OpenJ9 release 0.13.0 introduced support for the jps tool for Java 12. In this release, support is added for Java 8 and 11. The jps tool can be used to query running Java processes. For more information, see Java process status .","title":"New jps tool"},{"location":"version0.14/#new-experimental-option-to-improve-the-performance-of-jvmti-watched-fields","text":"The -XX:[+|-]JITInlineWatches option is introduced in this release. When enabled, the option turns on experimental JIT operations that are intended to improve the performance of JVMTI watched fields. This option is currently supported only on x86 platforms (Windows\u00ae, macOS\u00ae, and Linux).","title":"New experimental option to improve the performance of JVMTI watched fields"},{"location":"version0.14/#new-option-to-prevent-a-network-query-being-used-to-determine-host-name-and-ip-address","text":"By default, a network query is used to determine the host name and IP address for troubleshooting purposes. To avoid your program waiting to time out if a nameserver cannot be contacted, you can now prevent the query from being performed. For more information, see -XX:[+|-]ReadIPInfoForRAS .","title":"New option to prevent a network query being used to determine host name and IP address"},{"location":"version0.14/#changes-to-the-shared-classes-cache-generation-number","text":"On all platforms, the format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache, rather than re-creating or reusing an existing cache. To save space, all existing shared caches can be removed unless they are in use by an earlier release. For more information about destroying a shared classes cache, see -Xshareclasses .","title":"Changes to the shared classes cache generation number"},{"location":"version0.14/#change-to-the-default-native-stack-size-on-64-bit-zos","text":"The default stack size for operating system threads on 64-bit z/OS is changed from 384 KB to the operating system minimum of 1 MB. For more information about this setting, see -Xmso .","title":"Change to the default native stack size on 64-bit z/OS"},{"location":"version0.14/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.13.0 and v 0.14.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.14/#version-0142","text":"The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.1 OpenSSL Digest algorithm disabled","title":"Version 0.14.2"},{"location":"version0.14/#features-and-changes_1","text":"","title":"Features and changes"},{"location":"version0.14/#binaries-and-supported-environments_1","text":"OpenJ9 release 0.14.2 supports OpenJDK 8 and 11. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 The Windows (MSI) installer for OpenJDK v8 (64-bit) can now be used to optionally install the IcedTea-Web package, which provides equivalent functionality to Java Web Start. For more information about the installer, see the AdoptOpenJDK Installation page . For more information about migrating to IcedTea-Web, read the AdoptOpenJDK Migration Guide . To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.14/#support-for-openssl-101","text":"OpenSSL version 1.0.1 support is now enabled; Earlier releases supported only OpenSSL 1.0.2 and 1.1.x. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations .","title":"Support for OpenSSL 1.0.1"},{"location":"version0.14/#openssl-digest-algorithm-disabled","text":"Due to issue #5611 , the Digest algorithm is disabled.","title":"OpenSSL Digest algorithm disabled"},{"location":"version0.15/","text":"What's new in version 0.15.1 The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Performance improvements for JVMTI watched fields Support for pause-less garbage collection on IBM Z systems ChaCha20 algorithm support for OpenSSL OpenSSL Digest algorithm disabled Support for OpenJDK HotSpot options Support for Transparent Huge Pages (THP) Support for low-overhead heap profiling (JEP 331) New Java memory map (jmap) tool Automatically setting an initial heap size Removal of -Xdiagnosticscollector option Change in behaviour of -XX:[+|-]IdleTuningCompactOnIdle Addition of heuristics for compaction during idle GC Change in shared classes behavior for checking timestamps of jar or zip files Features and changes Binaries and supported environments OpenJ9 release 0.15.0 and 0.15.1 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: - OpenJDK version 8 - OpenJDK version 11 - OpenJDK version 12 Note: The binaries at AdoptOpenJDK are labeled 0.15.1 due to a missing change. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Performance improvements for JVMTI watched fields OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which, when enabled, turned on experimental JIT operations to improve the performance of JVMTI watched fields. Following successful results, this option is now enabled by default. This option is now also supported on z/OS\u00ae and Linux for IBM Z\u00ae, in addition to x86 platforms (Windows\u00ae, macOS\u00ae, and Linux). Support for pause-less garbage collection on IBM Z systems Support for Concurrent scavenge mode is now extended to Linux on IBM Z\u00ae systems and z/OS\u00ae. For more information, see -Xgc:concurrentScavenge . ChaCha20 algorithm support for OpenSSL The ChaCha20 and ChaCha20-Poly1305 algorithms can now use OpenSSL on Java 11. For more information, see -Djdk.nativeChaCha20 . OpenSSL Digest algorithm disabled Due to issue #5611 , the Digest algorithm is disabled. This algorithm was disabled for Java 8 and 11 in release 0.14.2, which did not support Java 12. Support for OpenJDK HotSpot options For compatibility, the -XX:OnOutOfMemoryError OpenJDK Hotspot option is now supported by OpenJ9. Support for Transparent Huge Pages (THP) The VM now supports the allocation of huge pages on Linux when you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting. To enable this feature, set -XX:+TransparentHugePage on the command line when you start your application. This option is currently not enabled by default. Support for low-overhead heap profiling JEP 331 provides a mechanism for sampling Java heap allocations with a low overhead via the JVM Tool Interface (JVMTI). Restrictions: JEP 331 is implemented for OpenJ9 with the following limitations: The balanced and metronome garbage collection policies are not supported. The JEP331 JVMTI agent and the Health Center agent both set a sampling interval, which by default is different. If both agents are used at the same time the Health Center agent will get incorrect results, unless the sampling intervals are adjusted to use the same value. New Java memory map tool The Java memory map (jmap) tool is similar to the HotSpot tool of the same name, and can be used to print statistics about classes on the heap, including the number of objects and their aggregate size. For usage information, see Java memory map (jmap) tool . Automatically setting an initial heap size OpenJ9 can now learn and set an appropriate initial heap size for an application as an alternative to a user manually sizing and setting an -Xms value. The VM records the size of the heap when startup processing ends, writing this data to the shared classes cache. An average value is set over a few restarts, helping to ensure that the value used for the initial heap size is as accurate as possible. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. To turn on this behavior, set the -XX:+UseGCStartupHints option on the command line when you start your application. Removal of -Xdiagnosticscollector option This option was redundant and has now been removed. If you try to use this option on the command line, the VM outputs this error message: JVMJ9VM007E Command-line option unrecognised: -Xdiagnosticscollector Change in behaviour of -XX:IdleTuningCompactOnIdle -XX:[+|-]IdleTuningCompactOnIdle is now no longer effective when -XX:+IdleTuningGcOnIdle is not specified. Heuristics for compaction during idle GC OpenJ9 now automatically compacts the heap when certain triggers are met during idle garbage collection (GC). As a result of this change, -XX:[+|-]IdleTuningCompactOnIdle is deprecated. Change in shared classes behavior for checking timestamps of jar or zip files In earlier releases, the shared classes cache checks timestamps of jar or zip files every time a class is loaded and reloads a class if the timestamp has changed. This behavior is now changed; timestamps are checked only when zip or jar files are added to class loaders and used for the first time to look for a class, which can improve class-loading performance. If jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. To revert to the behavior of earlier releases, set the -Xshareclasses:checkURLTimestamps option on the command line when you start your application. Note: Multiple -Xshareclasses: options are not combined, only the last one is used. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.14.0 and v 0.15.1 releases, see the Release notes .","title":"Version 0.15.1"},{"location":"version0.15/#whats-new-in-version-0151","text":"The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Performance improvements for JVMTI watched fields Support for pause-less garbage collection on IBM Z systems ChaCha20 algorithm support for OpenSSL OpenSSL Digest algorithm disabled Support for OpenJDK HotSpot options Support for Transparent Huge Pages (THP) Support for low-overhead heap profiling (JEP 331) New Java memory map (jmap) tool Automatically setting an initial heap size Removal of -Xdiagnosticscollector option Change in behaviour of -XX:[+|-]IdleTuningCompactOnIdle Addition of heuristics for compaction during idle GC Change in shared classes behavior for checking timestamps of jar or zip files","title":"What's new in version 0.15.1"},{"location":"version0.15/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.15/#binaries-and-supported-environments","text":"OpenJ9 release 0.15.0 and 0.15.1 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: - OpenJDK version 8 - OpenJDK version 11 - OpenJDK version 12 Note: The binaries at AdoptOpenJDK are labeled 0.15.1 due to a missing change. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.15/#performance-improvements-for-jvmti-watched-fields","text":"OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which, when enabled, turned on experimental JIT operations to improve the performance of JVMTI watched fields. Following successful results, this option is now enabled by default. This option is now also supported on z/OS\u00ae and Linux for IBM Z\u00ae, in addition to x86 platforms (Windows\u00ae, macOS\u00ae, and Linux).","title":"Performance improvements for JVMTI watched fields"},{"location":"version0.15/#support-for-pause-less-garbage-collection-on-ibm-z-systems","text":"Support for Concurrent scavenge mode is now extended to Linux on IBM Z\u00ae systems and z/OS\u00ae. For more information, see -Xgc:concurrentScavenge .","title":"Support for pause-less garbage collection on IBM Z systems"},{"location":"version0.15/#chacha20-algorithm-support-for-openssl","text":"The ChaCha20 and ChaCha20-Poly1305 algorithms can now use OpenSSL on Java 11. For more information, see -Djdk.nativeChaCha20 .","title":"ChaCha20 algorithm support for OpenSSL"},{"location":"version0.15/#openssl-digest-algorithm-disabled","text":"Due to issue #5611 , the Digest algorithm is disabled. This algorithm was disabled for Java 8 and 11 in release 0.14.2, which did not support Java 12.","title":"OpenSSL Digest algorithm disabled"},{"location":"version0.15/#support-for-openjdk-hotspot-options","text":"For compatibility, the -XX:OnOutOfMemoryError OpenJDK Hotspot option is now supported by OpenJ9.","title":"Support for OpenJDK HotSpot options"},{"location":"version0.15/#support-for-transparent-huge-pages-thp","text":"The VM now supports the allocation of huge pages on Linux when you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting. To enable this feature, set -XX:+TransparentHugePage on the command line when you start your application. This option is currently not enabled by default.","title":"Support for Transparent Huge Pages (THP)"},{"location":"version0.15/#support-for-low-overhead-heap-profiling","text":"JEP 331 provides a mechanism for sampling Java heap allocations with a low overhead via the JVM Tool Interface (JVMTI). Restrictions: JEP 331 is implemented for OpenJ9 with the following limitations: The balanced and metronome garbage collection policies are not supported. The JEP331 JVMTI agent and the Health Center agent both set a sampling interval, which by default is different. If both agents are used at the same time the Health Center agent will get incorrect results, unless the sampling intervals are adjusted to use the same value.","title":"Support for low-overhead heap profiling"},{"location":"version0.15/#new-java-memory-map-tool","text":"The Java memory map (jmap) tool is similar to the HotSpot tool of the same name, and can be used to print statistics about classes on the heap, including the number of objects and their aggregate size. For usage information, see Java memory map (jmap) tool .","title":"New Java memory map tool"},{"location":"version0.15/#automatically-setting-an-initial-heap-size","text":"OpenJ9 can now learn and set an appropriate initial heap size for an application as an alternative to a user manually sizing and setting an -Xms value. The VM records the size of the heap when startup processing ends, writing this data to the shared classes cache. An average value is set over a few restarts, helping to ensure that the value used for the initial heap size is as accurate as possible. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. To turn on this behavior, set the -XX:+UseGCStartupHints option on the command line when you start your application.","title":"Automatically setting an initial heap size"},{"location":"version0.15/#removal-of-xdiagnosticscollector-option","text":"This option was redundant and has now been removed. If you try to use this option on the command line, the VM outputs this error message: JVMJ9VM007E Command-line option unrecognised: -Xdiagnosticscollector","title":"Removal of -Xdiagnosticscollector option"},{"location":"version0.15/#change-in-behaviour-of-xxidletuningcompactonidle","text":"-XX:[+|-]IdleTuningCompactOnIdle is now no longer effective when -XX:+IdleTuningGcOnIdle is not specified.","title":"Change in behaviour of -XX:IdleTuningCompactOnIdle"},{"location":"version0.15/#heuristics-for-compaction-during-idle-gc","text":"OpenJ9 now automatically compacts the heap when certain triggers are met during idle garbage collection (GC). As a result of this change, -XX:[+|-]IdleTuningCompactOnIdle is deprecated.","title":"Heuristics for compaction during idle GC"},{"location":"version0.15/#change-in-shared-classes-behavior-for-checking-timestamps-of-jar-or-zip-files","text":"In earlier releases, the shared classes cache checks timestamps of jar or zip files every time a class is loaded and reloads a class if the timestamp has changed. This behavior is now changed; timestamps are checked only when zip or jar files are added to class loaders and used for the first time to look for a class, which can improve class-loading performance. If jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. To revert to the behavior of earlier releases, set the -Xshareclasses:checkURLTimestamps option on the command line when you start your application. Note: Multiple -Xshareclasses: options are not combined, only the last one is used.","title":"Change in shared classes behavior for checking timestamps of jar or zip files"},{"location":"version0.15/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.14.0 and v 0.15.1 releases, see the Release notes .","title":"Full release information"},{"location":"version0.16/","text":"What's new in version 0.16.0 The following new features and notable changes since v 0.15.1 are included in this release: New binaries and changes to supported environments Some class data sharing is enabled by default Automatic setting of initial heap size is enabled by default Option to share VM anonymous classes Performance improvements for JVMTI watched fields on Power Systems Linux on x86: Support for Transparent Huge Pages (THP) New Java\u2122 diagnostic command ( jcmd ) tool Changes to the shared classes cache generation number The -Xverify:none and -noverify options are deprecated Features and changes Binaries and supported environments OpenJ9 release 0.16.0 supports OpenJDK 13, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 13 OpenJDK 13 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.15.2. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.16.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Some class data sharing is enabled by default Class data sharing is enabled by default for bootstrap classes, unless your application is running in a container. You can use the -Xshareclasses option to change the default behavior, including using -Xshareclasses:none to disable all class data sharing. For more information, see Class data sharing . Automatic setting of initial heap size is enabled by default OpenJ9 version 0.15.1 introduced the -XX:[+|-]UseGCStartupHints option, which, when enabled, turned on the automatic learning and setting of an appropriate heap size for an application. This option is now enabled by default. Option to share VM anonymous classes Prior to version 0.16.0, anonymous classes, those created by Unsafe.defineAnonymousClass , were not stored in the shared classes cache. They are now stored there by default, which means they are available for ahead-of-time (AOT) compilation, potentially improving startup performance. A new command, -XX:[+|-]ShareAnonymousClasses , is introduced that enables you to stop anonymous classes being stored in the shared classes cache. Performance improvements for JVMTI watched fields on Power Systems OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which turns on JIT operations to improve the performance of JVMTI watched fields. This option, which was enabled by default in version 0.15.1, is now also supported on AIX\u00ae and Linux on Power Systems\u2122. Linux\u00ae on x86: Support for Transparent Huge Pages (THP) When you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting on Linux on x86 systems, THP is now enabled by default. To disable this feature, set -XX:-TransparentHugePage on the command line when you start your application. The THP setting on other systems remains disabled by default when you use madvise , but can be enabled by setting -XX:+TransparentHugePage . New jcmd tool For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jcmd tool for running diagnostic commands on a VM. For more information, see Java diagnostic command tool . Changes to the shared classes cache generation number The format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache rather than re-creating or reusing an existing cache. To save space, you can remove all existing shared caches unless they are in use by an earlier release. As a result of the format change, a layer column now appears in the output of the -Xshareclasses:listAllCaches option. This change is to support a future enhancement. For more information about the -Xshareclasses option, including the destroy options that you can use to remove caches, see -Xshareclasses . The -Xverify:none and -noverify options are deprecated The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.15.1 and v 0.16.0 releases, see the Release notes .","title":"Version 0.16.0"},{"location":"version0.16/#whats-new-in-version-0160","text":"The following new features and notable changes since v 0.15.1 are included in this release: New binaries and changes to supported environments Some class data sharing is enabled by default Automatic setting of initial heap size is enabled by default Option to share VM anonymous classes Performance improvements for JVMTI watched fields on Power Systems Linux on x86: Support for Transparent Huge Pages (THP) New Java\u2122 diagnostic command ( jcmd ) tool Changes to the shared classes cache generation number The -Xverify:none and -noverify options are deprecated","title":"What's new in version 0.16.0"},{"location":"version0.16/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.16/#binaries-and-supported-environments","text":"OpenJ9 release 0.16.0 supports OpenJDK 13, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 13 OpenJDK 13 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.15.2. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.16.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.16/#some-class-data-sharing-is-enabled-by-default","text":"Class data sharing is enabled by default for bootstrap classes, unless your application is running in a container. You can use the -Xshareclasses option to change the default behavior, including using -Xshareclasses:none to disable all class data sharing. For more information, see Class data sharing .","title":"Some class data sharing is enabled by default"},{"location":"version0.16/#automatic-setting-of-initial-heap-size-is-enabled-by-default","text":"OpenJ9 version 0.15.1 introduced the -XX:[+|-]UseGCStartupHints option, which, when enabled, turned on the automatic learning and setting of an appropriate heap size for an application. This option is now enabled by default.","title":"Automatic setting of initial heap size is enabled by default"},{"location":"version0.16/#option-to-share-vm-anonymous-classes","text":"Prior to version 0.16.0, anonymous classes, those created by Unsafe.defineAnonymousClass , were not stored in the shared classes cache. They are now stored there by default, which means they are available for ahead-of-time (AOT) compilation, potentially improving startup performance. A new command, -XX:[+|-]ShareAnonymousClasses , is introduced that enables you to stop anonymous classes being stored in the shared classes cache.","title":"Option to share VM anonymous classes"},{"location":"version0.16/#performance-improvements-for-jvmti-watched-fields-on-power-systems","text":"OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which turns on JIT operations to improve the performance of JVMTI watched fields. This option, which was enabled by default in version 0.15.1, is now also supported on AIX\u00ae and Linux on Power Systems\u2122.","title":"Performance improvements for JVMTI watched fields on Power Systems"},{"location":"version0.16/#linux-on-x86-support-for-transparent-huge-pages-thp","text":"When you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting on Linux on x86 systems, THP is now enabled by default. To disable this feature, set -XX:-TransparentHugePage on the command line when you start your application. The THP setting on other systems remains disabled by default when you use madvise , but can be enabled by setting -XX:+TransparentHugePage .","title":"Linux&reg; on x86: Support for Transparent Huge Pages (THP)"},{"location":"version0.16/#new-jcmd-tool","text":"For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jcmd tool for running diagnostic commands on a VM. For more information, see Java diagnostic command tool .","title":"New jcmd tool"},{"location":"version0.16/#changes-to-the-shared-classes-cache-generation-number","text":"The format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache rather than re-creating or reusing an existing cache. To save space, you can remove all existing shared caches unless they are in use by an earlier release. As a result of the format change, a layer column now appears in the output of the -Xshareclasses:listAllCaches option. This change is to support a future enhancement. For more information about the -Xshareclasses option, including the destroy options that you can use to remove caches, see -Xshareclasses .","title":"Changes to the shared classes cache generation number"},{"location":"version0.16/#the-xverifynone-and-noverify-options-are-deprecated","text":"The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions.","title":"The -Xverify:none and -noverify options are deprecated"},{"location":"version0.16/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.15.1 and v 0.16.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.17/","text":"What's new in version 0.17.0 The following new features and notable changes since v 0.16.0 are included in this release: New binaries and changes to supported environments New shared classes cache suboptions for layered caches New shared classes cache suboption to skip disk space check Option to share 'Unsafe' classes Option to record class relationships in the verifier Support for the IBM z15\u00ae processor Digest algorithm is re-enabled Direct Dump Reader (DDR) VM restriction removed The format of the HOOKS section of a Java dump has changed LUDCL caching disabled by default Features and changes Binaries and supported environments OpenJ9 release 0.17.0 supports OpenJDK 8, 11, and 13. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 13 Note: The Windows\u00ae and macOS\u00ae binaries from the AdoptOpenJDK community for OpenJDK 8, 11, and 13 have been updated to OpenSSL v1.1.1d. Look for the following release names to identify these packages: OpenJDK 8: jdk8u232-b09.1_openj9-0.17.0 OpenJDK 11: jdk-11.0.5+10.1_openj9-0.17.0 OpenjDK 13: jdk-13.0.1+9.1_openj9-0.17.0) Note: The last release of OpenJDK 8 and 11 from AdoptOpenJDK is Eclipse OpenJ9 0.15.1. To read about other features and changes in the VM since 0.15.1, check the Version 0.16.0 release notes too. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . New shared classes cache suboptions for layered caches (Experimental, 64-bit only) New suboptions are available for creating layered caches, where a cache builds on another cache with the same name. You can use these suboptions to save space when building a Docker container, for example. Note: Because these suboptions are experimental, do not use them in a production environment. The new options are: createLayer layer=<number> (see this section for more information about layered caches) printTopLayerStats destroyAllLayers New shared classes cache suboption to skip disk space check When creating a persistent shared classes cache, the OpenJ9 VM checks that there is sufficient disk space available on the file system. For file systems that do not support the checking of free space, you can set the -Xshareclasses:noPersistentDiskSpaceCheck option, which causes the VM to skip the space checking operation. If there isn't enough disk space available when the cache is written, a SIGBUS or SIGSEGV signal occurs and the VM ends. For more information, see the -Xshareclasses:noPersistentDiskSpaceCheck option. Option to share 'Unsafe' classes Classes created through Unsafe.defineClass are now stored by default in the shared classes cache. You can use the -XX:-ShareUnsafeClasses option to change the default behavior. For more information, see -XX:[+|-]ShareUnsafeClasses . Option to record class relationships in the verifier A new command line option -XX:+ClassRelationshipVerifier allows you to record class relationships in the verifier, which avoids unnecessary class loading and reduces VM startup time. This is a new approach to bytecode verification that delays validating the relationships between classes until the classes are required to be loaded for a program's execution thus loading only those classes that are needed. For more information, see -XX:[+|-]ClassRelationshipVerifier . Support for the IBM z15 processor This release adds JIT compiler support for exploiting z15 instructions. Digest algorithm is re-enabled Issue #5611 is fixed, so support for the Digest algorithm is re-enabled. For more information about this support, see Cryptographic operations . Direct Dump Reader (DDR) VM restriction removed Prior to this version, you had to use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core when using DDR. This restriction has now been removed. The format of the HOOKS section of a Java dump has changed The format of the HOOKS section of a Java dump, which shows internal VM event callbacks, has changed: Recorded times have been changed from milliseconds to microseconds to provide increased precision. A new field, 3HKTOTALTIME , is included, which gives the total duration of previous events. The hook data is now reset after each Java dump. For more information and an example of the new format, see Java dump: HOOKS LUDCL caching disabled by default By caching the Latest User Defined Class Loader (LUDCL), Java applications that use deserialization extensively can see a performance improvement. This capability is controlled by the -Dcom.ibm.enableClassCaching system property and is now disabled by default due to issue #7332 . Note: Versions of the documentation before 0.17.0 incorrectly identified this property as disabled by default when it was actually enabled by default in the VM. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.16 and v 0.17.0 releases, see the Release notes .","title":"Version 0.17.0"},{"location":"version0.17/#whats-new-in-version-0170","text":"The following new features and notable changes since v 0.16.0 are included in this release: New binaries and changes to supported environments New shared classes cache suboptions for layered caches New shared classes cache suboption to skip disk space check Option to share 'Unsafe' classes Option to record class relationships in the verifier Support for the IBM z15\u00ae processor Digest algorithm is re-enabled Direct Dump Reader (DDR) VM restriction removed The format of the HOOKS section of a Java dump has changed LUDCL caching disabled by default","title":"What's new in version 0.17.0"},{"location":"version0.17/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.17/#binaries-and-supported-environments","text":"OpenJ9 release 0.17.0 supports OpenJDK 8, 11, and 13. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 13 Note: The Windows\u00ae and macOS\u00ae binaries from the AdoptOpenJDK community for OpenJDK 8, 11, and 13 have been updated to OpenSSL v1.1.1d. Look for the following release names to identify these packages: OpenJDK 8: jdk8u232-b09.1_openj9-0.17.0 OpenJDK 11: jdk-11.0.5+10.1_openj9-0.17.0 OpenjDK 13: jdk-13.0.1+9.1_openj9-0.17.0) Note: The last release of OpenJDK 8 and 11 from AdoptOpenJDK is Eclipse OpenJ9 0.15.1. To read about other features and changes in the VM since 0.15.1, check the Version 0.16.0 release notes too. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.17/#new-shared-classes-cache-suboptions-for-layered-caches","text":"(Experimental, 64-bit only) New suboptions are available for creating layered caches, where a cache builds on another cache with the same name. You can use these suboptions to save space when building a Docker container, for example. Note: Because these suboptions are experimental, do not use them in a production environment. The new options are: createLayer layer=<number> (see this section for more information about layered caches) printTopLayerStats destroyAllLayers","title":"New shared classes cache suboptions for layered caches"},{"location":"version0.17/#new-shared-classes-cache-suboption-to-skip-disk-space-check","text":"When creating a persistent shared classes cache, the OpenJ9 VM checks that there is sufficient disk space available on the file system. For file systems that do not support the checking of free space, you can set the -Xshareclasses:noPersistentDiskSpaceCheck option, which causes the VM to skip the space checking operation. If there isn't enough disk space available when the cache is written, a SIGBUS or SIGSEGV signal occurs and the VM ends. For more information, see the -Xshareclasses:noPersistentDiskSpaceCheck option.","title":"New shared classes cache suboption to skip disk space check"},{"location":"version0.17/#option-to-share-unsafe-classes","text":"Classes created through Unsafe.defineClass are now stored by default in the shared classes cache. You can use the -XX:-ShareUnsafeClasses option to change the default behavior. For more information, see -XX:[+|-]ShareUnsafeClasses .","title":"Option to share 'Unsafe' classes"},{"location":"version0.17/#option-to-record-class-relationships-in-the-verifier","text":"A new command line option -XX:+ClassRelationshipVerifier allows you to record class relationships in the verifier, which avoids unnecessary class loading and reduces VM startup time. This is a new approach to bytecode verification that delays validating the relationships between classes until the classes are required to be loaded for a program's execution thus loading only those classes that are needed. For more information, see -XX:[+|-]ClassRelationshipVerifier .","title":"Option to record class relationships in the verifier"},{"location":"version0.17/#support-for-the-ibm-z15-processor","text":"This release adds JIT compiler support for exploiting z15 instructions.","title":"Support for the IBM z15 processor"},{"location":"version0.17/#digest-algorithm-is-re-enabled","text":"Issue #5611 is fixed, so support for the Digest algorithm is re-enabled. For more information about this support, see Cryptographic operations .","title":"Digest algorithm is re-enabled"},{"location":"version0.17/#direct-dump-reader-ddr-vm-restriction-removed","text":"Prior to this version, you had to use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core when using DDR. This restriction has now been removed.","title":"Direct Dump Reader (DDR) VM restriction removed"},{"location":"version0.17/#the-format-of-the-hooks-section-of-a-java-dump-has-changed","text":"The format of the HOOKS section of a Java dump, which shows internal VM event callbacks, has changed: Recorded times have been changed from milliseconds to microseconds to provide increased precision. A new field, 3HKTOTALTIME , is included, which gives the total duration of previous events. The hook data is now reset after each Java dump. For more information and an example of the new format, see Java dump: HOOKS","title":"The format of the HOOKS section of a Java dump has changed"},{"location":"version0.17/#ludcl-caching-disabled-by-default","text":"By caching the Latest User Defined Class Loader (LUDCL), Java applications that use deserialization extensively can see a performance improvement. This capability is controlled by the -Dcom.ibm.enableClassCaching system property and is now disabled by default due to issue #7332 . Note: Versions of the documentation before 0.17.0 incorrectly identified this property as disabled by default when it was actually enabled by default in the VM.","title":"LUDCL caching disabled by default"},{"location":"version0.17/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.16 and v 0.17.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.8/","text":"Release notes - version 0.8.0 Version 0.8.0 is the first release of Eclipse OpenJ9, as defined in the release plan . This release supports OpenJDK Version 8 binaries at AdoptOpenJDK.net that contain the Eclipse OpenJ9 virtual machine. For more information about supported platforms, and any issues and limitations, read the OpenJ9 GitHub release notes .","title":"Version 0.8.0"},{"location":"version0.8/#release-notes-version-080","text":"Version 0.8.0 is the first release of Eclipse OpenJ9, as defined in the release plan . This release supports OpenJDK Version 8 binaries at AdoptOpenJDK.net that contain the Eclipse OpenJ9 virtual machine. For more information about supported platforms, and any issues and limitations, read the OpenJ9 GitHub release notes .","title":"Release notes - version 0.8.0"},{"location":"version0.9/","text":"What's new in version 0.9.0 The following new features and notable changes from v.0.8.0 are included in this release: New binaries and supported environments. The idle tuning feature is now supported on Linux running on Power\u00ae Systems and IBM Z\u00ae Systems. A new Garbage Collection (GC) policy is available that performs no housekeeping. A command line option is provided to automatically set a larger Java heap size for applications that run in containers. You can now specify the maximum Java heap size as a percentage value. The shared classes feature now supports nested jar files. System dump data can now be read to help diagnose problems on Linux and Windows platforms. There are notable changes to the java.lang.String class. There are notable changes to the com.ibm.oti.shared.SharedClassCacheInfo class. Features and changes Binaries and supported platforms The following additional OpenJDK binaries that contain the OpenJ9 VM are now available from the AdoptOpenJDK community: OpenJDK version 10 OpenJDK version 8 for 32-bit Windows OpenJDK version 8 for x86 64-bit Linux (Large Heap) for Java heaps >57 GB. Complete platform support information for OpenJ9 can be found in Supported environments Idle tuning feature The idle tuning feature in OpenJ9 keeps your memory footprint small by releasing unused memory back to the operating system. Prior to Eclipse v 0.9.0 this feature was available only on Linux x86 architectures with the gencon garbage collection policy. From v 0.9.0, this feature is now available on Linux for IBM POWER\u00ae and IBM Z\u00ae architectures. For more information about this feature, see the following command line options, which control this behavior: -XX:[+|-]IdleTuningCompactOnIdle -XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle The following blog post describes the benefits of using this feature: Are you still paying for unused memory when your Java app is idle? New GC policy A new GC policy is introduced for JEP 318: Epsilon: A No-Op Garbage Collector . When this policy is enabled, the Java object heap is expanded in the normal way until the limit is reached, but memory is not reclaimed through garbage collection. When the limit is reached the VM shuts down. This JEP has a number of use cases including short-lived applications and certain test scenarios. To enable this policy you can use one of the following options: -Xgcpolicy:nogc -XX:+UseNoGC Modifying the default Java heap size for applications that run in containers When using container technology, applications are typically run on their own and do not need to compete for memory. In this release, changes are introduced to detect when OpenJ9 is running inside a container. If your application is running in a container and you want the VM to allocate a larger fraction of memory to the Java heap, set the -XX:+UseContainerSupport option on the command line. The following table shows the maximum Java heap size that gets set, depending on the memory available: Physical memory <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512M Greater than 2 GB 75% <size> The default heap size for containers only takes affect when running in a container environment and when -XX:+UseContainerSupport is specified, which is expected to be the default in a future release. Specifying the maximum Java heap size as a percentage value OpenJ9 now supports setting the heap size as a percentage of the physical memory. The following OpenJDK options are recognized and can be set for the VM: -XX:MaxRAMPercentage -XX:InitialRAMPercentage To understand how to set these options, see -XX:InitialRAMPercentage / -XX:MaxRAMPercentage . If your application is running in a container and you have specified -XX:+UseContainerSupport , as described in Modifying the default Java heap size for applications that run in containers , both the default heap size for containers and the -XX:MaxRAMPercentage and -XX:InitialRAMPercentage options are based on the available container memory. Shared classes support for nested jar files Changes are made to the com.ibm.oti.shared API to support nested jar files. Direct Dump Reader enabled on Linux and Windows Direct Dump Reader (DDR) support is now enabled for the OpenJ9 VM on all Linux architectures and on Windows. The DDR code enables the VM to read system dump data by using the OpenJ9 Diagnostic Tool Framework for Java (DTFJ) API or the jdmpview tool. If you use the Eclipse Memory Analyzer Tool (MAT) , you can also analyze OpenJ9 or IBM VMs by installing the DTFJ plugin. (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java) You must use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core. This restriction will be fixed in a later version of OpenJ9. Changes to the java.lang.String class To match the behavior of OpenJDK, java.lang.String no longer has a count field, which changes the way that String.subString() works compared to Java 8. String.subString() now copies the value array. Similarly, StringBuffer and StringBuilder do not share the value array with any String created by toString() . For performance and compatibility with the new String object layout, the OpenJ9 implementations of StringBuffer and StringBuilder have been deprecated in favor of the OpenJDK implementations. Changes to the SharedClassCacheInfo class SharedClassCacheInfo.getCacheJVMLevel() used to return the JVMLEVEL constant that maps to a Java version number, for example JVMLEVEL_JAVA8 . This call now returns only the Java version number, for example 10 for Java 10. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.8.0 and v 0.9.0 releases, see the Release notes .","title":"Version 0.9.0"},{"location":"version0.9/#whats-new-in-version-090","text":"The following new features and notable changes from v.0.8.0 are included in this release: New binaries and supported environments. The idle tuning feature is now supported on Linux running on Power\u00ae Systems and IBM Z\u00ae Systems. A new Garbage Collection (GC) policy is available that performs no housekeeping. A command line option is provided to automatically set a larger Java heap size for applications that run in containers. You can now specify the maximum Java heap size as a percentage value. The shared classes feature now supports nested jar files. System dump data can now be read to help diagnose problems on Linux and Windows platforms. There are notable changes to the java.lang.String class. There are notable changes to the com.ibm.oti.shared.SharedClassCacheInfo class.","title":"What's new in version 0.9.0"},{"location":"version0.9/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.9/#binaries-and-supported-platforms","text":"The following additional OpenJDK binaries that contain the OpenJ9 VM are now available from the AdoptOpenJDK community: OpenJDK version 10 OpenJDK version 8 for 32-bit Windows OpenJDK version 8 for x86 64-bit Linux (Large Heap) for Java heaps >57 GB. Complete platform support information for OpenJ9 can be found in Supported environments","title":"Binaries and supported platforms"},{"location":"version0.9/#idle-tuning-feature","text":"The idle tuning feature in OpenJ9 keeps your memory footprint small by releasing unused memory back to the operating system. Prior to Eclipse v 0.9.0 this feature was available only on Linux x86 architectures with the gencon garbage collection policy. From v 0.9.0, this feature is now available on Linux for IBM POWER\u00ae and IBM Z\u00ae architectures. For more information about this feature, see the following command line options, which control this behavior: -XX:[+|-]IdleTuningCompactOnIdle -XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle The following blog post describes the benefits of using this feature: Are you still paying for unused memory when your Java app is idle?","title":"Idle tuning feature"},{"location":"version0.9/#new-gc-policy","text":"A new GC policy is introduced for JEP 318: Epsilon: A No-Op Garbage Collector . When this policy is enabled, the Java object heap is expanded in the normal way until the limit is reached, but memory is not reclaimed through garbage collection. When the limit is reached the VM shuts down. This JEP has a number of use cases including short-lived applications and certain test scenarios. To enable this policy you can use one of the following options: -Xgcpolicy:nogc -XX:+UseNoGC","title":"New GC policy"},{"location":"version0.9/#modifying-the-default-java-heap-size-for-applications-that-run-in-containers","text":"When using container technology, applications are typically run on their own and do not need to compete for memory. In this release, changes are introduced to detect when OpenJ9 is running inside a container. If your application is running in a container and you want the VM to allocate a larger fraction of memory to the Java heap, set the -XX:+UseContainerSupport option on the command line. The following table shows the maximum Java heap size that gets set, depending on the memory available: Physical memory <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512M Greater than 2 GB 75% <size> The default heap size for containers only takes affect when running in a container environment and when -XX:+UseContainerSupport is specified, which is expected to be the default in a future release.","title":"Modifying the default Java heap size for applications that run in containers"},{"location":"version0.9/#specifying-the-maximum-java-heap-size-as-a-percentage-value","text":"OpenJ9 now supports setting the heap size as a percentage of the physical memory. The following OpenJDK options are recognized and can be set for the VM: -XX:MaxRAMPercentage -XX:InitialRAMPercentage To understand how to set these options, see -XX:InitialRAMPercentage / -XX:MaxRAMPercentage . If your application is running in a container and you have specified -XX:+UseContainerSupport , as described in Modifying the default Java heap size for applications that run in containers , both the default heap size for containers and the -XX:MaxRAMPercentage and -XX:InitialRAMPercentage options are based on the available container memory.","title":"Specifying the maximum Java heap size as a percentage value"},{"location":"version0.9/#shared-classes-support-for-nested-jar-files","text":"Changes are made to the com.ibm.oti.shared API to support nested jar files.","title":"Shared classes support for nested jar files"},{"location":"version0.9/#direct-dump-reader-enabled-on-linux-and-windows","text":"Direct Dump Reader (DDR) support is now enabled for the OpenJ9 VM on all Linux architectures and on Windows. The DDR code enables the VM to read system dump data by using the OpenJ9 Diagnostic Tool Framework for Java (DTFJ) API or the jdmpview tool. If you use the Eclipse Memory Analyzer Tool (MAT) , you can also analyze OpenJ9 or IBM VMs by installing the DTFJ plugin. (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java) You must use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core. This restriction will be fixed in a later version of OpenJ9.","title":"Direct Dump Reader enabled on Linux and Windows"},{"location":"version0.9/#changes-to-the-javalangstring-class","text":"To match the behavior of OpenJDK, java.lang.String no longer has a count field, which changes the way that String.subString() works compared to Java 8. String.subString() now copies the value array. Similarly, StringBuffer and StringBuilder do not share the value array with any String created by toString() . For performance and compatibility with the new String object layout, the OpenJ9 implementations of StringBuffer and StringBuilder have been deprecated in favor of the OpenJDK implementations.","title":"Changes to the java.lang.String class"},{"location":"version0.9/#changes-to-the-sharedclasscacheinfo-class","text":"SharedClassCacheInfo.getCacheJVMLevel() used to return the JVMLEVEL constant that maps to a Java version number, for example JVMLEVEL_JAVA8 . This call now returns only the Java version number, for example 10 for Java 10.","title":"Changes to the SharedClassCacheInfo class"},{"location":"version0.9/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.8.0 and v 0.9.0 releases, see the Release notes .","title":"Full release information"},{"location":"x/","text":"-X Displays help on nonstandard options. Syntax -X","title":"-X"},{"location":"x/#-x","text":"Displays help on nonstandard options.","title":"-X"},{"location":"x/#syntax","text":"-X","title":"Syntax"},{"location":"x_jvm_commands/","text":"Using -X command-line options Use these options to configure the OpenJ9 virtual machine (VM). Unlike standard options, options prefixed with -X are nonstandard and are typically unique to a Java\u2122 virtual machine implementation. However, in some cases, -X option names are common to different VM implementations and might have the same function. For options that take a <size> parameter, suffix the number with \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , -Xmx16384k , or -Xmx16777216 on the command line.","title":"Using -X options"},{"location":"x_jvm_commands/#using-x-command-line-options","text":"Use these options to configure the OpenJ9 virtual machine (VM). Unlike standard options, options prefixed with -X are nonstandard and are typically unique to a Java\u2122 virtual machine implementation. However, in some cases, -X option names are common to different VM implementations and might have the same function. For options that take a <size> parameter, suffix the number with \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , -Xmx16384k , or -Xmx16777216 on the command line.","title":"Using -X command-line options"},{"location":"xaggressive/","text":"-Xaggressive Enables performance optimizations and new platform exploitation that are expected to be the default in future releases. Syntax -Xaggressive","title":"-Xaggressive"},{"location":"xaggressive/#-xaggressive","text":"Enables performance optimizations and new platform exploitation that are expected to be the default in future releases.","title":"-Xaggressive"},{"location":"xaggressive/#syntax","text":"-Xaggressive","title":"Syntax"},{"location":"xalwaysclassgc/","text":"-Xalwaysclassgc Always perform dynamic class unloading checks during global garbage collection. Syntax -Xalwaysclassgc Default behavior If you don't set this option, the default behavior is defined by -Xclassgc .","title":"-Xalwaysclassgc"},{"location":"xalwaysclassgc/#-xalwaysclassgc","text":"Always perform dynamic class unloading checks during global garbage collection.","title":"-Xalwaysclassgc"},{"location":"xalwaysclassgc/#syntax","text":"-Xalwaysclassgc","title":"Syntax"},{"location":"xalwaysclassgc/#default-behavior","text":"If you don't set this option, the default behavior is defined by -Xclassgc .","title":"Default behavior"},{"location":"xaot/","text":"-Xaot / -Xnoaot Use this option to control the behavior of the ahead-of-time (AOT) compiler. AOT compilation allows the compilation of Java\u2122 classes into native code for subsequent executions of the same program. The AOT compiler works with the class data sharing framework. The AOT compiler generates native code dynamically while an application runs and caches any generated AOT code in the shared data cache. Subsequent VMs that execute the method can load and use the AOT code from the shared data cache without incurring the performance decrease experienced with JIT-compiled native code. Performance Because AOT code must persist over different program executions, AOT-generated code does not perform as well as JIT-generated code. AOT code usually performs better than interpreted code. In a VM without an AOT compiler or with the AOT compiler disabled, the JIT compiler selectively compiles frequently used methods into optimized native code. There is a time cost associated with compiling methods because the JIT compiler operates while the application is running. Because methods begin by being interpreted and most JIT compilations occur during startup, startup times can be increased. Startup performance can be improved by using the shared AOT code to provide native code without compiling. There is a small time cost to load the AOT code for a method from the shared data cache and bind it into a running program. The time cost is low compared to the time it takes the JIT compiler to compile that method. Default behavior The AOT compiler is enabled by default, but is only active when shared classes are enabled. By default, shared classes are disabled so that no AOT activity occurs. When the AOT compiler is active, the compiler selects the methods to be AOT compiled with the primary goal of improving startup time. Syntax Setting Action Default -Xaot Enable AOT yes -Xaot:<parameter>[=<value>]{,<parameter>[=<value>]} Enable AOT with modifications -Xnoaot Disable AOT Parameters for -Xaot Note: Although the AOT compiler is enabled by default, it is not active unless shared classes are enabled. Using this option on its own therefore has no effect. Use the -Xshareclasses option to enable shared classes. You can concatenate several parameters by using commas. Parameter Effect count The number of times a method is called before it is compiled or loaded from an existing shared class cache. exclude The method you want to exclude when AOT code is compiled or loaded from the shared classes cache. limitFile Compile or load only the methods listed in the specified limit file. loadExclude Do not load specified methods. loadLimit Load specified methods only. loadLimitFile Load only the methods listed in the specified limit file). verbose Reports information about the AOT and JIT compiler configuration and method compilation. count -Xaot:count=<n> where <n> is the number of times a method is called before it is compiled or loaded from an existing shared class cache. For example, setting -Xaot:count=0 forces the AOT compiler to compile everything on first execution. exclude -Xaot:exclude=<method> where <method> is the Java method you want to exclude when AOT code is compiled or loaded from the shared classes cache. Use this option if the method causes the program to fail. limitFile -Xaot:limitFile=(<filename>,<m>,<n>) Compile or load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not compiled or loaded. loadExclude -Xaot:loadExclude=<method_prefix> Do not load methods beginning with <method_prefix> . loadLimit -Xaot:loadLimit=<method_prefix> Load methods beginning with <method_prefix> only. loadLimitFile -Xaot:loadLimitFile=(<filename>,<m>,<n>) Load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not loaded. verbose -Xaot:verbose Reports information about the AOT and JIT compiler configuration and method compilation. See also -Xquickstart","title":"-Xnoaot"},{"location":"xaot/#-xaot-xnoaot","text":"Use this option to control the behavior of the ahead-of-time (AOT) compiler. AOT compilation allows the compilation of Java\u2122 classes into native code for subsequent executions of the same program. The AOT compiler works with the class data sharing framework. The AOT compiler generates native code dynamically while an application runs and caches any generated AOT code in the shared data cache. Subsequent VMs that execute the method can load and use the AOT code from the shared data cache without incurring the performance decrease experienced with JIT-compiled native code.","title":"-Xaot / -Xnoaot"},{"location":"xaot/#performance","text":"Because AOT code must persist over different program executions, AOT-generated code does not perform as well as JIT-generated code. AOT code usually performs better than interpreted code. In a VM without an AOT compiler or with the AOT compiler disabled, the JIT compiler selectively compiles frequently used methods into optimized native code. There is a time cost associated with compiling methods because the JIT compiler operates while the application is running. Because methods begin by being interpreted and most JIT compilations occur during startup, startup times can be increased. Startup performance can be improved by using the shared AOT code to provide native code without compiling. There is a small time cost to load the AOT code for a method from the shared data cache and bind it into a running program. The time cost is low compared to the time it takes the JIT compiler to compile that method.","title":"Performance"},{"location":"xaot/#default-behavior","text":"The AOT compiler is enabled by default, but is only active when shared classes are enabled. By default, shared classes are disabled so that no AOT activity occurs. When the AOT compiler is active, the compiler selects the methods to be AOT compiled with the primary goal of improving startup time.","title":"Default behavior"},{"location":"xaot/#syntax","text":"Setting Action Default -Xaot Enable AOT yes -Xaot:<parameter>[=<value>]{,<parameter>[=<value>]} Enable AOT with modifications -Xnoaot Disable AOT","title":"Syntax"},{"location":"xaot/#parameters-for-xaot","text":"Note: Although the AOT compiler is enabled by default, it is not active unless shared classes are enabled. Using this option on its own therefore has no effect. Use the -Xshareclasses option to enable shared classes. You can concatenate several parameters by using commas. Parameter Effect count The number of times a method is called before it is compiled or loaded from an existing shared class cache. exclude The method you want to exclude when AOT code is compiled or loaded from the shared classes cache. limitFile Compile or load only the methods listed in the specified limit file. loadExclude Do not load specified methods. loadLimit Load specified methods only. loadLimitFile Load only the methods listed in the specified limit file). verbose Reports information about the AOT and JIT compiler configuration and method compilation.","title":"Parameters for -Xaot"},{"location":"xaot/#count","text":"-Xaot:count=<n> where <n> is the number of times a method is called before it is compiled or loaded from an existing shared class cache. For example, setting -Xaot:count=0 forces the AOT compiler to compile everything on first execution.","title":"count"},{"location":"xaot/#exclude","text":"-Xaot:exclude=<method> where <method> is the Java method you want to exclude when AOT code is compiled or loaded from the shared classes cache. Use this option if the method causes the program to fail.","title":"exclude"},{"location":"xaot/#limitfile","text":"-Xaot:limitFile=(<filename>,<m>,<n>) Compile or load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not compiled or loaded.","title":"limitFile"},{"location":"xaot/#loadexclude","text":"-Xaot:loadExclude=<method_prefix> Do not load methods beginning with <method_prefix> .","title":"loadExclude"},{"location":"xaot/#loadlimit","text":"-Xaot:loadLimit=<method_prefix> Load methods beginning with <method_prefix> only.","title":"loadLimit"},{"location":"xaot/#loadlimitfile","text":"-Xaot:loadLimitFile=(<filename>,<m>,<n>) Load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not loaded.","title":"loadLimitFile"},{"location":"xaot/#verbose","text":"-Xaot:verbose Reports information about the AOT and JIT compiler configuration and method compilation.","title":"verbose"},{"location":"xaot/#see-also","text":"-Xquickstart","title":"See also"},{"location":"xargencoding/","text":"-Xargencoding The java and javaw launchers accept arguments and class names containing any character that is in the character set of the current locale. You can also specify any Unicode character in the class name and arguments by using Java\u2122 escape sequences. To do this, use the -Xargencoding command-line option. Syntax -Xargencoding:<parameter> Parameters No parameter -Xargencoding You can use Unicode escape sequences in the argument list that you pass to this option. To specify a Unicode character, use escape sequences in the form \\u#### , where # is a hexadecimal digit (0-9, A-F). For example, to specify a class that is called HelloWorld and use Unicode encoding for both capital letters, use this command: :::java java -Xargencoding \\u0048ello\\u0057orld utf8 -Xargencoding:utf8 Use utf8 encoding. latin -Xargencoding:latin Use ISO8859_1 encoding.","title":"-Xargencoding"},{"location":"xargencoding/#-xargencoding","text":"The java and javaw launchers accept arguments and class names containing any character that is in the character set of the current locale. You can also specify any Unicode character in the class name and arguments by using Java\u2122 escape sequences. To do this, use the -Xargencoding command-line option.","title":"-Xargencoding"},{"location":"xargencoding/#syntax","text":"-Xargencoding:<parameter>","title":"Syntax"},{"location":"xargencoding/#parameters","text":"","title":"Parameters"},{"location":"xargencoding/#no-parameter","text":"-Xargencoding You can use Unicode escape sequences in the argument list that you pass to this option. To specify a Unicode character, use escape sequences in the form \\u#### , where # is a hexadecimal digit (0-9, A-F). For example, to specify a class that is called HelloWorld and use Unicode encoding for both capital letters, use this command: :::java java -Xargencoding \\u0048ello\\u0057orld","title":"No parameter"},{"location":"xargencoding/#utf8","text":"-Xargencoding:utf8 Use utf8 encoding.","title":"utf8"},{"location":"xargencoding/#latin","text":"-Xargencoding:latin Use ISO8859_1 encoding.","title":"latin"},{"location":"xbootclasspath/","text":"-Xbootclasspath This Oracle\u00ae Hotspot\u2122 option specifies the search path for bootstrap classes and resources. The default is to search for bootstrap classes and resources in the internal VM directories and .jar files. The option is recognized by the OpenJ9 VM. Syntax Limited to... Setting Effect -Xbootclasspath:<path> Sets the search path for bootstrap classes and resources. -Xbootclasspath/p:<path> Prepends the specified resources to the front of the bootstrap class path. -Xbootclasspath/a:<path> Appends the specified resources to the end of the bootstrap class path. where <path> represents directories and compressed or Java\u2122 archive files separated with colons (:). On Windows\u2122 systems, use a semicolon (;) as a separator. Oracle advise that you should \"not deploy applications that use this option to override a class in rt.jar , because this violates the JRE binary code license.\"","title":"-Xbootclasspath"},{"location":"xbootclasspath/#-xbootclasspath","text":"This Oracle\u00ae Hotspot\u2122 option specifies the search path for bootstrap classes and resources. The default is to search for bootstrap classes and resources in the internal VM directories and .jar files. The option is recognized by the OpenJ9 VM.","title":"-Xbootclasspath"},{"location":"xbootclasspath/#syntax","text":"Limited to... Setting Effect -Xbootclasspath:<path> Sets the search path for bootstrap classes and resources. -Xbootclasspath/p:<path> Prepends the specified resources to the front of the bootstrap class path. -Xbootclasspath/a:<path> Appends the specified resources to the end of the bootstrap class path. where <path> represents directories and compressed or Java\u2122 archive files separated with colons (:). On Windows\u2122 systems, use a semicolon (;) as a separator. Oracle advise that you should \"not deploy applications that use this option to override a class in rt.jar , because this violates the JRE binary code license.\"","title":"Syntax"},{"location":"xceehdlr/","text":"-XCEEHDLR (31-bit z/OS\u00ae only) Controls OpenJ9 VM Language Environment\u00ae condition handling. Syntax -XCEEHDLR Explanation Use the -XCEEHDLR option if you want the new behavior for the Java\u2122 and COBOL interoperability batch mode environment, because this option makes signal and condition handling behavior more predictable in a mixed Java and COBOL environment. When the -XCEEHDLR option is enabled, a condition triggered by an arithmetic operation while executing a Java Native Interface (JNI) component causes the VM to convert the Language Environment condition into a Java ConditionException . When the -XCEEHDLR option is used the VM does not install POSIX signal handlers for the following signals: SIGBUS SIGFPE SIGILL SIGSEGV SIGTRAP Instead, user condition handlers are registered by the VM, using the CEEHDLR() method. These condition handlers are registered every time a thread calls into the VM. Threads call into the VM using the Java Native Interface and including the invocation interfaces, for example JNI\\_CreateJavaVM . The Java runtime continues to register POSIX signal handlers for the following signals: SIGABRT SIGINT SIGQUIT SIGTERM Signal chaining using the libjsig.so library is not supported. When the -XCEEHDLR option is used, condition handler actions take place in the following sequence: All severity 0 and severity 1 conditions are percolated. If a Language Environment condition is triggered in JNI code as a result of an arithmetic operation, the VM condition handler resumes executing Java code as if the JNI native code had thrown a com.ibm.le.conditionhandling.ConditionException exception. This exception class is a subclass of java.lang.RuntimeException . Note: The Language Environment conditions that correspond to arithmetic operations are CEE3208S through CEE3234S . However, the Language Environment does not deliver conditions CEE3208S , CEE3213S , or CEE3234S to C applications, so the VM condition handler will not receive them. If the condition handling reaches this step, the condition is considered to be unrecoverable. RAS diagnostic information is generated, and the VM ends by calling the CEE3AB2() service with abend code 3565, reason code 0, and cleanup code 0. Restriction: You cannot use -Xsignal:userConditionHandler=percolate and -XCEEHDLR together. See also -Xsignal:userConditionHandler=percolate Signals used by the VM .","title":"-XCEEHDLR"},{"location":"xceehdlr/#-xceehdlr","text":"(31-bit z/OS\u00ae only) Controls OpenJ9 VM Language Environment\u00ae condition handling.","title":"-XCEEHDLR"},{"location":"xceehdlr/#syntax","text":"-XCEEHDLR","title":"Syntax"},{"location":"xceehdlr/#explanation","text":"Use the -XCEEHDLR option if you want the new behavior for the Java\u2122 and COBOL interoperability batch mode environment, because this option makes signal and condition handling behavior more predictable in a mixed Java and COBOL environment. When the -XCEEHDLR option is enabled, a condition triggered by an arithmetic operation while executing a Java Native Interface (JNI) component causes the VM to convert the Language Environment condition into a Java ConditionException . When the -XCEEHDLR option is used the VM does not install POSIX signal handlers for the following signals: SIGBUS SIGFPE SIGILL SIGSEGV SIGTRAP Instead, user condition handlers are registered by the VM, using the CEEHDLR() method. These condition handlers are registered every time a thread calls into the VM. Threads call into the VM using the Java Native Interface and including the invocation interfaces, for example JNI\\_CreateJavaVM . The Java runtime continues to register POSIX signal handlers for the following signals: SIGABRT SIGINT SIGQUIT SIGTERM Signal chaining using the libjsig.so library is not supported. When the -XCEEHDLR option is used, condition handler actions take place in the following sequence: All severity 0 and severity 1 conditions are percolated. If a Language Environment condition is triggered in JNI code as a result of an arithmetic operation, the VM condition handler resumes executing Java code as if the JNI native code had thrown a com.ibm.le.conditionhandling.ConditionException exception. This exception class is a subclass of java.lang.RuntimeException . Note: The Language Environment conditions that correspond to arithmetic operations are CEE3208S through CEE3234S . However, the Language Environment does not deliver conditions CEE3208S , CEE3213S , or CEE3234S to C applications, so the VM condition handler will not receive them. If the condition handling reaches this step, the condition is considered to be unrecoverable. RAS diagnostic information is generated, and the VM ends by calling the CEE3AB2() service with abend code 3565, reason code 0, and cleanup code 0. Restriction: You cannot use -Xsignal:userConditionHandler=percolate and -XCEEHDLR together.","title":"Explanation"},{"location":"xceehdlr/#see-also","text":"-Xsignal:userConditionHandler=percolate Signals used by the VM .","title":"See also"},{"location":"xcheck/","text":"-Xcheck You can use the -Xcheck option to run checks during OpenJ9 virtual machine (VM) startup, such as memory checks or checks on JNI functions. Syntax -Xcheck:<parameter> Parameters Parameter Effect classpath Checks the classpath and reports errors such as a missing directory or JAR file. dump Checks the operating system for settings that might truncate system dumps. (AIX\u00ae and Linux\u00ae only) gc Runs additional checks on garbage collection. jni Runs additional checks for JNI functions. memory Identifies memory leaks inside the VM using strict checks that cause the VM to exit on failure. vm Performs additional checks on the VM. classpath -Xcheck:classpath Checks the classpath and reports errors such as a missing directory or JAR file. dump AIX and Linux only -Xcheck:dump Checks operating system settings during VM startup. Messages are issued if the operating system has settings that might truncate system dumps. On AIX systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated This message indicates that the AIX operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM it might be truncated, and therefore of greatly reduced value in investigating the cause of crashes and other issues. For more information about how to set user limits on AIX, see Setting system resource limits on AIX and Linux systems . JVMJ9VM134W The system fullcore option is set to FALSE, system dumps may be truncated This message indicates that the AIX operating system Enable full CORE dump option is set to FALSE . This setting might result in truncated system dumps. For more information about how to set this option correctly on AIX, see Setting system resource limits on AIX and Linux systems . On Linux systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated. This message indicates that the Linux operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM, it might be truncated and therefore of greatly reduced value in investigating the cause of crashes and other issues. Review the documentation that is provided for your operating system to correctly configure the value for ulimits . For further information, see Setting system resource limits on AIX and Linux systems . JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, abrt-hook-ccpp , is configured in the operating system to intercept any system dump files that are generated. This program is part of the Automatic Bug Reporting Tool (ABRT). For more information, see Automatic Bug Reporting Tool . This tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the ABRT tool and messages that are written by the tool in /var/log/messages . If problems occur when generating system dumps from the VM, consider disabling ABRT. JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/share/apport/apport %p %s %c\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, apport , is configured in the operating system to intercept any system dump files that are generated. For more information about this tool, see: Apport The tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the Apport tool and messages that are written by the tool in /var/log/apport.log . If problems occur when generating system dumps from the VM, consider disabling the Apport tool. JVMJ9VM136W \"/proc/sys/kernel/core_pattern setting \"/tmp/cores/core.%e.%p.%h.%t \" specifies a format string for renaming core dumps. The JVM may be unable to locate core dumps and rename them. This message indicates that the Linux /proc/sys/kernel/core_pattern option is set to rename system dumps. The tokens that are used in the operating system dump name might interfere with the VM's system dump file processing, in particular with file names specified in the VM -Xdump options. If problems occur when generating system dumps from the VM, consider changing the /proc/sys/kernel/core_pattern setting to the default value of core . gc -Xcheck:gc[:help][:<scan options>][:<verify options>][:<misc options>] Runs additional checks on garbage collection. By default, no checks are made. There are many scan, verify, and miscellaneous suboptions available. If you do not specify any, all possible scan and verify suboptions are run, plus the miscellaneous verbose and check suboptions. For more information, see the output of -Xcheck:gc:help . jni -Xcheck:jni[:help][:<option>] Runs additional checks for JNI functions. By default, no checks are made. For more information, see the output of -Xcheck:jni:help . memory -Xcheck:memory[:<option>] Identifies memory leaks inside the VM by using strict checks that cause the VM to exit on failure. Restriction: You cannot include -Xcheck:memory in the options file (see -Xoptionsfile ). The available parameters are as follows: :all (Default if no options specified) Enables checking of all allocated and freed blocks on every free and allocate call. This check of the heap is the most thorough. It typically causes the VM to exit on nearly all memory-related problems soon after they are caused. This option has the greatest affect on performance. :callsite=<number_of_allocations> Displays callsite information every <number_of_allocations> . De-allocations are not counted. Callsite information is presented in a table with separate information for each callsite. Statistics include: The number and size of allocation and free requests since the last report. The number of the allocation request responsible for the largest allocation from each site. Callsites are presented as sourcefile:linenumber for C code and assembly function name for assembler code. Callsites that do not provide callsite information are accumulated into an \"unknown\" entry. :failat=<number_of_allocations> Causes memory allocation to fail (return NULL) after <number_of_allocations> . For example, setting <number_of_allocations> to 13 causes the 14th allocation to return NULL. De-allocations are not counted. Use this option to ensure that VM code reliably handles allocation failures. This option is useful for checking allocation site behavior rather than setting a specific allocation limit. :ignoreUnknownBlocks Ignores attempts to free memory that was not allocated using the -Xcheck:memory tool. Instead, the -Xcheck:memory statistics that are printed out at the end of a run indicates the number of \"unknown\" blocks that were freed. :mprotect=[top|bottom] Locks pages of memory on supported platforms, causing the program to stop if padding before or after the allocated block is accessed for reads or writes. An extra page is locked on each side of the block returned to the user. If you do not request an exact multiple of one page of memory, a region on one side of your memory is not locked. The top and bottom options control which side of the memory area is locked. top aligns your memory blocks to the top of the page (lower address), so buffer underruns result in an application failure. bottom aligns your memory blocks to the bottom of the page (higher address) so buffer overruns result in an application failure. Standard padding scans detect buffer underruns when using top and buffer overruns when using bottom . :nofree Keeps a list of blocks that are already used instead of freeing memory. This list, and the list of currently allocated blocks, is checked for memory corruption on every allocation and deallocation. Use this option to detect a dangling pointer (a pointer that is \"dereferenced\" after its target memory is freed). This option cannot be reliably used with long-running applications (such as WebSphere\u00ae Application Server), because \"freed\" memory is never reused or released by the VM. :noscan Checks for blocks that are not freed. This option has little effect on performance, but memory corruption is not detected. This option is compatible only with subAllocator , callsite , and callsitesmall . :quick Enables block padding only and is used to detect basic heap corruption. Every allocated block is padded with sentinel bytes, which are verified on every allocate and free. Block padding is faster than the default of checking every block, but is not as effective. :skipto=<number_of_allocations> Causes the program to check only on allocations that occur after <number_of_allocations> . De-allocations are not counted. Use this option to speed up VM startup when early allocations are not causing the memory problem. The VM performs approximately 250+ allocations during startup. :subAllocator[=<size_in_MB>] Allocates a dedicated and contiguous region of memory for all VM allocations. This option helps to determine if user JNI code or the VM is responsible for memory corruption. Corruption in the VM subAllocator heap suggests that the VM is causing the problem; corruption in the user-allocated memory suggests that user code is corrupting memory. Typically, user and VM allocated memory are interleaved. :zero Newly allocated blocks are set to 0 instead of being filled with the 0xE7E7xxxxxxxxE7E7 pattern. Setting these blocks to 0 helps you to determine whether a callsite is expecting zeroed memory, in which case the allocation request is followed by memset(pointer, 0, size) . vm -Xcheck:vm[:<option>] Performs additional checks on the VM. By default, no checking is performed. For more information, run -Xcheck:vm:help .","title":"-Xcheck"},{"location":"xcheck/#-xcheck","text":"You can use the -Xcheck option to run checks during OpenJ9 virtual machine (VM) startup, such as memory checks or checks on JNI functions.","title":"-Xcheck"},{"location":"xcheck/#syntax","text":"-Xcheck:<parameter>","title":"Syntax"},{"location":"xcheck/#parameters","text":"Parameter Effect classpath Checks the classpath and reports errors such as a missing directory or JAR file. dump Checks the operating system for settings that might truncate system dumps. (AIX\u00ae and Linux\u00ae only) gc Runs additional checks on garbage collection. jni Runs additional checks for JNI functions. memory Identifies memory leaks inside the VM using strict checks that cause the VM to exit on failure. vm Performs additional checks on the VM.","title":"Parameters"},{"location":"xcheck/#classpath","text":"-Xcheck:classpath Checks the classpath and reports errors such as a missing directory or JAR file.","title":"classpath"},{"location":"xcheck/#dump","text":"AIX and Linux only -Xcheck:dump Checks operating system settings during VM startup. Messages are issued if the operating system has settings that might truncate system dumps. On AIX systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated This message indicates that the AIX operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM it might be truncated, and therefore of greatly reduced value in investigating the cause of crashes and other issues. For more information about how to set user limits on AIX, see Setting system resource limits on AIX and Linux systems . JVMJ9VM134W The system fullcore option is set to FALSE, system dumps may be truncated This message indicates that the AIX operating system Enable full CORE dump option is set to FALSE . This setting might result in truncated system dumps. For more information about how to set this option correctly on AIX, see Setting system resource limits on AIX and Linux systems . On Linux systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated. This message indicates that the Linux operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM, it might be truncated and therefore of greatly reduced value in investigating the cause of crashes and other issues. Review the documentation that is provided for your operating system to correctly configure the value for ulimits . For further information, see Setting system resource limits on AIX and Linux systems . JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, abrt-hook-ccpp , is configured in the operating system to intercept any system dump files that are generated. This program is part of the Automatic Bug Reporting Tool (ABRT). For more information, see Automatic Bug Reporting Tool . This tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the ABRT tool and messages that are written by the tool in /var/log/messages . If problems occur when generating system dumps from the VM, consider disabling ABRT. JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/share/apport/apport %p %s %c\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, apport , is configured in the operating system to intercept any system dump files that are generated. For more information about this tool, see: Apport The tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the Apport tool and messages that are written by the tool in /var/log/apport.log . If problems occur when generating system dumps from the VM, consider disabling the Apport tool. JVMJ9VM136W \"/proc/sys/kernel/core_pattern setting \"/tmp/cores/core.%e.%p.%h.%t \" specifies a format string for renaming core dumps. The JVM may be unable to locate core dumps and rename them. This message indicates that the Linux /proc/sys/kernel/core_pattern option is set to rename system dumps. The tokens that are used in the operating system dump name might interfere with the VM's system dump file processing, in particular with file names specified in the VM -Xdump options. If problems occur when generating system dumps from the VM, consider changing the /proc/sys/kernel/core_pattern setting to the default value of core .","title":"dump"},{"location":"xcheck/#gc","text":"-Xcheck:gc[:help][:<scan options>][:<verify options>][:<misc options>] Runs additional checks on garbage collection. By default, no checks are made. There are many scan, verify, and miscellaneous suboptions available. If you do not specify any, all possible scan and verify suboptions are run, plus the miscellaneous verbose and check suboptions. For more information, see the output of -Xcheck:gc:help .","title":"gc"},{"location":"xcheck/#jni","text":"-Xcheck:jni[:help][:<option>] Runs additional checks for JNI functions. By default, no checks are made. For more information, see the output of -Xcheck:jni:help .","title":"jni"},{"location":"xcheck/#memory","text":"-Xcheck:memory[:<option>] Identifies memory leaks inside the VM by using strict checks that cause the VM to exit on failure. Restriction: You cannot include -Xcheck:memory in the options file (see -Xoptionsfile ). The available parameters are as follows: :all (Default if no options specified) Enables checking of all allocated and freed blocks on every free and allocate call. This check of the heap is the most thorough. It typically causes the VM to exit on nearly all memory-related problems soon after they are caused. This option has the greatest affect on performance. :callsite=<number_of_allocations> Displays callsite information every <number_of_allocations> . De-allocations are not counted. Callsite information is presented in a table with separate information for each callsite. Statistics include: The number and size of allocation and free requests since the last report. The number of the allocation request responsible for the largest allocation from each site. Callsites are presented as sourcefile:linenumber for C code and assembly function name for assembler code. Callsites that do not provide callsite information are accumulated into an \"unknown\" entry. :failat=<number_of_allocations> Causes memory allocation to fail (return NULL) after <number_of_allocations> . For example, setting <number_of_allocations> to 13 causes the 14th allocation to return NULL. De-allocations are not counted. Use this option to ensure that VM code reliably handles allocation failures. This option is useful for checking allocation site behavior rather than setting a specific allocation limit. :ignoreUnknownBlocks Ignores attempts to free memory that was not allocated using the -Xcheck:memory tool. Instead, the -Xcheck:memory statistics that are printed out at the end of a run indicates the number of \"unknown\" blocks that were freed. :mprotect=[top|bottom] Locks pages of memory on supported platforms, causing the program to stop if padding before or after the allocated block is accessed for reads or writes. An extra page is locked on each side of the block returned to the user. If you do not request an exact multiple of one page of memory, a region on one side of your memory is not locked. The top and bottom options control which side of the memory area is locked. top aligns your memory blocks to the top of the page (lower address), so buffer underruns result in an application failure. bottom aligns your memory blocks to the bottom of the page (higher address) so buffer overruns result in an application failure. Standard padding scans detect buffer underruns when using top and buffer overruns when using bottom . :nofree Keeps a list of blocks that are already used instead of freeing memory. This list, and the list of currently allocated blocks, is checked for memory corruption on every allocation and deallocation. Use this option to detect a dangling pointer (a pointer that is \"dereferenced\" after its target memory is freed). This option cannot be reliably used with long-running applications (such as WebSphere\u00ae Application Server), because \"freed\" memory is never reused or released by the VM. :noscan Checks for blocks that are not freed. This option has little effect on performance, but memory corruption is not detected. This option is compatible only with subAllocator , callsite , and callsitesmall . :quick Enables block padding only and is used to detect basic heap corruption. Every allocated block is padded with sentinel bytes, which are verified on every allocate and free. Block padding is faster than the default of checking every block, but is not as effective. :skipto=<number_of_allocations> Causes the program to check only on allocations that occur after <number_of_allocations> . De-allocations are not counted. Use this option to speed up VM startup when early allocations are not causing the memory problem. The VM performs approximately 250+ allocations during startup. :subAllocator[=<size_in_MB>] Allocates a dedicated and contiguous region of memory for all VM allocations. This option helps to determine if user JNI code or the VM is responsible for memory corruption. Corruption in the VM subAllocator heap suggests that the VM is causing the problem; corruption in the user-allocated memory suggests that user code is corrupting memory. Typically, user and VM allocated memory are interleaved. :zero Newly allocated blocks are set to 0 instead of being filled with the 0xE7E7xxxxxxxxE7E7 pattern. Setting these blocks to 0 helps you to determine whether a callsite is expecting zeroed memory, in which case the allocation request is followed by memset(pointer, 0, size) .","title":"memory"},{"location":"xcheck/#vm","text":"-Xcheck:vm[:<option>] Performs additional checks on the VM. By default, no checking is performed. For more information, run -Xcheck:vm:help .","title":"vm"},{"location":"xclassgc/","text":"-Xclassgc / -Xnoclassgc Enables and disables class garbage collection (the dynamic unloading of class objects by the VM). When enabled, garbage collection, occurs only on class loader changes. This is the default behavior. Note: Disabling class garbage collection is not recommended as this causes unlimited native memory growth, leading to out-of-memory errors. Syntax Setting Action Default -Xclassgc Enable GC yes -Xnoclassgc Disable GC","title":"-Xnoclassgc"},{"location":"xclassgc/#-xclassgc-xnoclassgc","text":"Enables and disables class garbage collection (the dynamic unloading of class objects by the VM). When enabled, garbage collection, occurs only on class loader changes. This is the default behavior. Note: Disabling class garbage collection is not recommended as this causes unlimited native memory growth, leading to out-of-memory errors.","title":"-Xclassgc / -Xnoclassgc"},{"location":"xclassgc/#syntax","text":"Setting Action Default -Xclassgc Enable GC yes -Xnoclassgc Disable GC","title":"Syntax"},{"location":"xcodecache/","text":"-Xcodecache Use this option to tune performance. This option sets the size of each block of memory that is allocated to store the native code of compiled Java\u2122 methods. By default, this size is selected internally according to the processor architecture and the capability of your system. The maximum value you can specify is 32 MB. If you set a value larger than 32 MB, the JIT ignores the input and sets the value to 32 MB. Note: The JIT compiler might allocate more than one code cache for an application. Use the -Xcodecachetotal option to set the maximum amount of memory that is used by all code caches. Syntax -Xcodecache<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"-Xcodecache"},{"location":"xcodecache/#-xcodecache","text":"Use this option to tune performance. This option sets the size of each block of memory that is allocated to store the native code of compiled Java\u2122 methods. By default, this size is selected internally according to the processor architecture and the capability of your system. The maximum value you can specify is 32 MB. If you set a value larger than 32 MB, the JIT ignores the input and sets the value to 32 MB. Note: The JIT compiler might allocate more than one code cache for an application. Use the -Xcodecachetotal option to set the maximum amount of memory that is used by all code caches.","title":"-Xcodecache"},{"location":"xcodecache/#syntax","text":"-Xcodecache<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xcodecachetotal/","text":"-Xcodecachetotal Use this option to set the maximum size limit for the JIT code cache. This option also affects the size of the JIT data cache. Syntax -Xcodecachetotal<size> The default size is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. See Using -X command-line options for more information about specifying the <size> parameter. Explanation By default, the total size of the JIT code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. Long-running, complex, server-type applications can fill the JIT code cache, which can cause performance problems because not all of the important methods can be JIT-compiled. Use the -Xcodecachetotal option to increase or decrease the maximum code cache size to a setting that suits your application. The minimum size of the code cache is restricted to 2 MB. The value that you specify is rounded up to a multiple of the code cache block size, as specified by the -Xcodecache option. If you specify a value for the -Xcodecachetotal option that is smaller than the default setting, that value is ignored. When you use this option, the maximum size limit for the JIT data cache, which holds metadata about compiled methods, is increased or decreased proportionally to support the JIT compilations. The maximum size limits, for both the JIT code and data caches, that are in use by the VM are shown in Javadump output. Look for lines that begin with 1STSEGLIMIT . Use this information together with verbose JIT tracing to determine suitable values for this option on your system. For example Javadump output, see Java dump: Storage Management (MEMINFO) . See also -Xjit","title":"-Xcodecachetotal"},{"location":"xcodecachetotal/#-xcodecachetotal","text":"Use this option to set the maximum size limit for the JIT code cache. This option also affects the size of the JIT data cache.","title":"-Xcodecachetotal"},{"location":"xcodecachetotal/#syntax","text":"-Xcodecachetotal<size> The default size is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xcodecachetotal/#explanation","text":"By default, the total size of the JIT code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. Long-running, complex, server-type applications can fill the JIT code cache, which can cause performance problems because not all of the important methods can be JIT-compiled. Use the -Xcodecachetotal option to increase or decrease the maximum code cache size to a setting that suits your application. The minimum size of the code cache is restricted to 2 MB. The value that you specify is rounded up to a multiple of the code cache block size, as specified by the -Xcodecache option. If you specify a value for the -Xcodecachetotal option that is smaller than the default setting, that value is ignored. When you use this option, the maximum size limit for the JIT data cache, which holds metadata about compiled methods, is increased or decreased proportionally to support the JIT compilations. The maximum size limits, for both the JIT code and data caches, that are in use by the VM are shown in Javadump output. Look for lines that begin with 1STSEGLIMIT . Use this information together with verbose JIT tracing to determine suitable values for this option on your system. For example Javadump output, see Java dump: Storage Management (MEMINFO) .","title":"Explanation"},{"location":"xcodecachetotal/#see-also","text":"-Xjit","title":"See also"},{"location":"xcomp/","text":"-Xcomp The use of this option is deprecated; use -Xjit:count=0 instead. Syntax -Xcomp","title":"-Xcomp"},{"location":"xcomp/#-xcomp","text":"The use of this option is deprecated; use -Xjit:count=0 instead.","title":"-Xcomp"},{"location":"xcomp/#syntax","text":"-Xcomp","title":"Syntax"},{"location":"xcompactexplicitgc/","text":"\u2011Xcompactexplicitgc / \u2011Xnocompactexplicitgc Enables or disables full compaction each time System.gc() is called. Compaction takes place on global garbage collections if you specify -Xcompactgc or if compaction triggers are met. Syntax Setting Action Default -Xcompactexplicitgc Enable compaction yes -Xnocompactexplicitgc Disable compaction See also Global garbage collection: Compaction phase","title":"-Xnocompactexplicitgc"},{"location":"xcompactexplicitgc/#xcompactexplicitgc-xnocompactexplicitgc","text":"Enables or disables full compaction each time System.gc() is called. Compaction takes place on global garbage collections if you specify -Xcompactgc or if compaction triggers are met.","title":"\u2011Xcompactexplicitgc / \u2011Xnocompactexplicitgc"},{"location":"xcompactexplicitgc/#syntax","text":"Setting Action Default -Xcompactexplicitgc Enable compaction yes -Xnocompactexplicitgc Disable compaction","title":"Syntax"},{"location":"xcompactexplicitgc/#see-also","text":"Global garbage collection: Compaction phase","title":"See also"},{"location":"xcompactgc/","text":"-Xcompactgc / -Xnocompactgc Enables or disables full compaction on all garbage collections (system and global). Syntax Setting Action -Xcompactgc Enable full compaction -Xnocompactgc Disable full compaction Default behavior If no compaction option is specified, the garbage collector compacts based on a series of triggers that attempt to compact only when it is beneficial to the future performance of the OpenJ9 VM. See also Global garbage collection: Compaction phase","title":"-Xnocompactgc"},{"location":"xcompactgc/#-xcompactgc-xnocompactgc","text":"Enables or disables full compaction on all garbage collections (system and global).","title":"-Xcompactgc / -Xnocompactgc"},{"location":"xcompactgc/#syntax","text":"Setting Action -Xcompactgc Enable full compaction -Xnocompactgc Disable full compaction","title":"Syntax"},{"location":"xcompactgc/#default-behavior","text":"If no compaction option is specified, the garbage collector compacts based on a series of triggers that attempt to compact only when it is beneficial to the future performance of the OpenJ9 VM.","title":"Default behavior"},{"location":"xcompactgc/#see-also","text":"Global garbage collection: Compaction phase","title":"See also"},{"location":"xcompilationthreads/","text":"-XcompilationThreads Use this option to specify the number of compilation threads that are used by the JIT compiler. Syntax -XcompilationThreads<n> where <n> is the number of threads, in the range 1-4 inclusive. A number greater than 4 prevents the Java\u2122 VM from starting successfully. Setting the compilation threads to zero does not prevent the JIT from working. Instead, if you do not want the JIT to work, use the -Xint option. Explanation When multiple compilation threads are used, the JIT might generate several diagnostic log files. A log file is generated for each compilation thread. The naming convention for the log file generated by the first compilation thread uses the following pattern: :::java <specified_filename>.<date>.<time>.<pid> The first compilation thread has ID 0. Log files generated by the second and subsequent compilation threads append the ID of the corresponding compilation thread as a suffix to the log file name. The pattern for these log file names is as follows: :::java <specified_filename>.<date>.<time>.<pid>.<compilation_thread_ID> For example, the second compilation thread has ID 1. The result is that the corresponding log file name has the form: :::java <specified_filename>.<date>.<time>.<pid>.1","title":"-XcompilationThreads"},{"location":"xcompilationthreads/#-xcompilationthreads","text":"Use this option to specify the number of compilation threads that are used by the JIT compiler.","title":"-XcompilationThreads"},{"location":"xcompilationthreads/#syntax","text":"-XcompilationThreads<n> where <n> is the number of threads, in the range 1-4 inclusive. A number greater than 4 prevents the Java\u2122 VM from starting successfully. Setting the compilation threads to zero does not prevent the JIT from working. Instead, if you do not want the JIT to work, use the -Xint option.","title":"Syntax"},{"location":"xcompilationthreads/#explanation","text":"When multiple compilation threads are used, the JIT might generate several diagnostic log files. A log file is generated for each compilation thread. The naming convention for the log file generated by the first compilation thread uses the following pattern: :::java <specified_filename>.<date>.<time>.<pid> The first compilation thread has ID 0. Log files generated by the second and subsequent compilation threads append the ID of the corresponding compilation thread as a suffix to the log file name. The pattern for these log file names is as follows: :::java <specified_filename>.<date>.<time>.<pid>.<compilation_thread_ID> For example, the second compilation thread has ID 1. The result is that the corresponding log file name has the form: :::java <specified_filename>.<date>.<time>.<pid>.1","title":"Explanation"},{"location":"xcompressedrefs/","text":"-Xcompressedrefs / -Xnocompressedrefs (64-bit only) Enables or disables the use of compressed references. Restriction: You cannot include -Xcompressedrefs in the options file (see -Xoptionsfile ). Syntax Setting Action Default -Xcompressedrefs Enable compression yes (see Default behavior ) -Xnocompressedrefs Disable compression Default behavior Compressed references are enabled by default when -Xmx \u2264 57 GB. z/OS\u00ae: This threshold value assumes that you have APAR OA49416 installed. If you do not have the APAR installed, the threshold value is 25 GB. AIX\u00ae and Linux\u00ae: For the metronome garbage collection policy, the threshold is 25 GB. See also Compressed references","title":"-Xnocompressedrefs"},{"location":"xcompressedrefs/#-xcompressedrefs-xnocompressedrefs","text":"(64-bit only) Enables or disables the use of compressed references. Restriction: You cannot include -Xcompressedrefs in the options file (see -Xoptionsfile ).","title":"-Xcompressedrefs / -Xnocompressedrefs"},{"location":"xcompressedrefs/#syntax","text":"Setting Action Default -Xcompressedrefs Enable compression yes (see Default behavior ) -Xnocompressedrefs Disable compression","title":"Syntax"},{"location":"xcompressedrefs/#default-behavior","text":"Compressed references are enabled by default when -Xmx \u2264 57 GB. z/OS\u00ae: This threshold value assumes that you have APAR OA49416 installed. If you do not have the APAR installed, the threshold value is 25 GB. AIX\u00ae and Linux\u00ae: For the metronome garbage collection policy, the threshold is 25 GB.","title":"Default behavior"},{"location":"xcompressedrefs/#see-also","text":"Compressed references","title":"See also"},{"location":"xconcurrentbackground/","text":"-Xconcurrentbackground Specifies the number of low-priority background threads attached to assist the mutator threads in concurrent mark. Syntax -Xconcurrentbackground<n> Default behavior The default is 0 for Linux\u00ae on IBM Z\u00ae and 1 on all other platforms.","title":"-Xconcurrentbackground"},{"location":"xconcurrentbackground/#-xconcurrentbackground","text":"Specifies the number of low-priority background threads attached to assist the mutator threads in concurrent mark.","title":"-Xconcurrentbackground"},{"location":"xconcurrentbackground/#syntax","text":"-Xconcurrentbackground<n>","title":"Syntax"},{"location":"xconcurrentbackground/#default-behavior","text":"The default is 0 for Linux\u00ae on IBM Z\u00ae and 1 on all other platforms.","title":"Default behavior"},{"location":"xconcurrentlevel/","text":"-Xconcurrentlevel This option indicates the ratio between the amount of heap allocated and the amount of heap marked (the allocation \"tax\" rate). Syntax -Xconcurrentlevel<number> Default behavior The default is 8.","title":"-Xconcurrentlevel"},{"location":"xconcurrentlevel/#-xconcurrentlevel","text":"This option indicates the ratio between the amount of heap allocated and the amount of heap marked (the allocation \"tax\" rate).","title":"-Xconcurrentlevel"},{"location":"xconcurrentlevel/#syntax","text":"-Xconcurrentlevel<number>","title":"Syntax"},{"location":"xconcurrentlevel/#default-behavior","text":"The default is 8.","title":"Default behavior"},{"location":"xconcurrentslack/","text":"-Xconcurrentslack Attempts to keep the specified amount of the heap space free in concurrent collectors by starting the concurrent operations earlier. Using this option can sometimes alleviate pause time problems in concurrent collectors at the cost of longer concurrent cycles, affecting total throughput. Syntax -Xconcurrentslack<size> See Using -X command-line options for more information about specifying the <size> parameter. Default behavior The default value is 0, which is optimal for most applications.","title":"-Xconcurrentslack"},{"location":"xconcurrentslack/#-xconcurrentslack","text":"Attempts to keep the specified amount of the heap space free in concurrent collectors by starting the concurrent operations earlier. Using this option can sometimes alleviate pause time problems in concurrent collectors at the cost of longer concurrent cycles, affecting total throughput.","title":"-Xconcurrentslack"},{"location":"xconcurrentslack/#syntax","text":"-Xconcurrentslack<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xconcurrentslack/#default-behavior","text":"The default value is 0, which is optimal for most applications.","title":"Default behavior"},{"location":"xconmeter/","text":"-Xconmeter This option determines the usage of which area, LOA (large object area) or SOA (small object area), is metered and hence which allocations are taxed during concurrent mark. Syntax -Xconmeter:<parameter> Parameters soa -Xconmeter:soa (Default) Applies the allocation tax to allocations from the small object area (SOA). loa -Xconmeter:loa Applies the allocation tax to allocations from the large object area (LOA). dynamic -Xconmeter:dynamic The collector dynamically determines which area to meter based on which area is exhausted first, whether it is the SOA or the LOA. Default behavior By default, allocation tax is applied to the SOA.","title":"-Xconmeter"},{"location":"xconmeter/#-xconmeter","text":"This option determines the usage of which area, LOA (large object area) or SOA (small object area), is metered and hence which allocations are taxed during concurrent mark.","title":"-Xconmeter"},{"location":"xconmeter/#syntax","text":"-Xconmeter:<parameter>","title":"Syntax"},{"location":"xconmeter/#parameters","text":"","title":"Parameters"},{"location":"xconmeter/#soa","text":"-Xconmeter:soa (Default) Applies the allocation tax to allocations from the small object area (SOA).","title":"soa"},{"location":"xconmeter/#loa","text":"-Xconmeter:loa Applies the allocation tax to allocations from the large object area (LOA).","title":"loa"},{"location":"xconmeter/#dynamic","text":"-Xconmeter:dynamic The collector dynamically determines which area to meter based on which area is exhausted first, whether it is the SOA or the LOA.","title":"dynamic"},{"location":"xconmeter/#default-behavior","text":"By default, allocation tax is applied to the SOA.","title":"Default behavior"},{"location":"xdisablejavadump/","text":"-Xdisablejavadump Turns off Java dump generation on errors and signals. Syntax -Xdisablejavadump Default behavior By default, Javadump generation is enabled. See also -Xdump","title":"-Xdisablejavadump"},{"location":"xdisablejavadump/#-xdisablejavadump","text":"Turns off Java dump generation on errors and signals.","title":"-Xdisablejavadump"},{"location":"xdisablejavadump/#syntax","text":"-Xdisablejavadump","title":"Syntax"},{"location":"xdisablejavadump/#default-behavior","text":"By default, Javadump generation is enabled.","title":"Default behavior"},{"location":"xdisablejavadump/#see-also","text":"-Xdump","title":"See also"},{"location":"xdump/","text":"-Xdump OpenJ9 produces various types of diagnostic information for analysis when different events occur, such as a general protection fault. The dumps produced are controlled by dump agents, which are initialized when the OpenJ9 virtual machine (VM) starts. The default settings for the dump agents are sufficient for most cases. However, you can use the -Xdump option on the command line to fine tune the dump agent settings. For example, you can use the -Xdump option to add and remove dump agents for various VM events, update default dump settings, and limit the number of dumps that are produced. A large set of options and suboptions are available for controlling dumps, which provides a lot of flexibility. Xdump Option Builder Use the Xdump Option Builder tool to help you specify the correct options and avoid incompatibilities. Syntax -Xdump:<parameter> The following table lists the help options for -Xdump , which provide usage and configuration information: Command Result -Xdump:help Displays general dump help. -Xdump:events Lists available trigger events. -Xdump:request Lists additional VM requests. -Xdump:tokens Lists recognized label tokens. -Xdump:what Shows registered agents on startup. -Xdump:<agent>:help Displays dump agent usage information. The following options can be used to control the production of diagnostic data: Parameter Result -Xdump:none Removes all default dump agents and any preceding dump options. -Xdump:dynamic Enable support for pluggable agents -Xdump:nofailover Discards dumps when the default or specified dump location is full. -Xdump:directory=<path> Specifies a directory for all dump types to be written to. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents. -Xdump:suspendwith=<offset> Modifies the signal that is used to suspend VM threads while a dump file is being written. Use <offset> to change the default signal number. (Linux\u00ae only) -Xdump:<agent>:<suboptions> Provides detailed suboptions per dump agent that provide more granular control. Dump agents can be configured at a very granular level by specifying suboptions. The <events> suboption is the prime trigger mechanism. The full set of suboptions are listed in the following table: Dump agent suboptions Result -Xdump:<agent>:none Removes the dump agent. -Xdump:<agent>:defaults Prints the default options for the dump agent. -Xdump:<agent>:events=<events> Triggers a dump agent when a specific event occurs. -Xdump:<agent>:exec=<command> Starts an external application for the dump agent. -Xdump:<agent>:file=<filename> Specifies where to write the dump for the dump agent. -Xdump:<agent>:filter=<filter> Filters dumps by wildcards or events. -Xdump:<agent>:msg_filter=<filter> Filters on text strings within an exception message. -Xdump:<agent>:opts=<options> Used by specific dump agents to select the type of dump file to produce. -Xdump:<agent>:priority=<0-999> Specifies the priority that the dump agents run in. -Xdump:<agent>:range=<ranges> Starts and stops a dump agent on a particular occurrence of a VM. -Xdump:<agent>:request=<requests> Asks the VM to prepare the state before starting the dump agent. You can have multiple -Xdump options on the command line. You can also have multiple dump types triggered by multiple events. For example, the following command turns off the creation of heap dump files, and creates a dump agent that produces a heap dump file and a Java\u2122 dump file when either a vmstart or vmstop event occurs: java -Xdump:heap:none -Xdump:heap+java:events=vmstart+vmstop -mp . -m <class> [args...] Note: Multiple suboptions that follow an Xdump suboption must be split with a comma (,), for example: java -Xdump:java:events=vmstart,file=/STDERR/ -version For more detailed information on the these parameters and suboptions, including examples, see Parameters . Dump agents A dump agent performs diagnostic tasks when triggered. Most dump agents save information on the state of the VM in some form of dump or trace file for later analysis. An exception is the \"tool\" agent, which can be used to trigger external processes when specific events occur. Dump agent Description stack Stack dumps are very basic dumps in which the status and Java stack of the thread is written to stderr. console Console dumps are very basic dumps, in which the status of every Java thread is written to stderr. system System dumps capture the raw process image or address space of an application. tool The tool option allows external processes to be started when an event occurs. java Java dumps are an internally generated and formatted analysis of the VM, giving information that includes the Java threads present, the classes loaded, and heap statistics. heap Heap dumps capture all object instances in the heap, including each object address, type or class name, size, and references to other objects. snap Take a snap of the trace buffers, which contain tracepoint data. ceedump LE CEEDUMP dumps are z/OS\u00ae formatted summary system dumps that show stack traces for each thread that is in the VM process, together with register information and a short dump of storage for each register. jit JIT compiler dumps contain diagnostic data in a binary format. Default dump agents During VM initialization a set of dump agents are added by default. You can override this set of dump agents using -Xdump on the command line. To show the registered dump agents, user the Xdump:what option on the command line. The following sample output shows the default dump agents that are in place on a Linux system: java -Xdump:what Registered dump agents ---------------------- -Xdump:system: events=gpf+abort+traceassert+corruptcache, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=999, request=serial ---------------------- -Xdump:system: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..1, priority=999, request=exclusive+compact+prepwalk ---------------------- -Xdump:heap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.%seq.phd, range=1..4, priority=500, request=exclusive+compact+prepwalk, opts=PHD ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- -Xdump:java: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..4, priority=400, request=exclusive+preempt ---------------------- -Xdump:snap: events=gpf+abort+traceassert+corruptcache, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..0, priority=300, request=serial ---------------------- -Xdump:snap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..4, priority=300, request=serial ---------------------- -Xdump:jit: events=gpf+abort, label=/home/user/jitdump.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=200, request=serial ---------------------- Dump agent tokens You can use tokens to add context to dump file names and directories, and to pass command-line arguments to the tool agent. The tokens available are listed in the following table: Token Description %Y Year (4 digits) %y Year (2 digits) %m Month (2 digits) %d Day of the month (2 digits) %H Hour ( 2 digits) %M Minute (2 digits) %S Second (2 digits) %pid Process ID %uid User name %seq Dump counter %tick msec counter %home Java home directory %last Last dump %job Job name (z/OS only) %jobid Job ID (z/OS only) %asid Address space ID (z/OS only) &DS Dump Section. An incrementing sequence number used for splitting TDUMP files to be less than 2 GB in size. (z/OS 64-bit only) Merging -Xdump agents If you configure more than one dump agent, each responds to events according to its configuration. However, the internal structures representing the dump agent configuration might not match the command line, because dump agents are merged for efficiency. Two sets of options can be merged as long as none of the agent settings conflict. This means that the list of installed dump agents and their parameters produced by -Xdump:what might not be grouped in the same way as the original -Xdump options that configured them. For example, you can use the following command to specify that a dump agent creates a Java dump file on class unload: java -Xdump:java:events=unload -Xdump:what This command does not create a new agent, as can be seen in the results from the -Xdump:what option. ... ---------------------- -Xdump:java: events=gpf+user+abort+unload+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- The configuration is merged with the existing Java dump agent for events gpf , user , abort , traceassert , and corruptcache , because none of the specified options for the new unload agent conflict with those for the existing agent. In the previous example, if one of the parameters for the unload agent is changed so that it conflicts with the existing agent, then it cannot be merged. For example, the following command specifies a different priority, forcing a separate agent to be created: java -Xdump:java:events=unload,priority=100 -Xdump:what The results of the -Xdump:what option in the command are as follows. ... ---------------------- -Xdump:java: events=unload, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=100, request=exclusive+preempt ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- To merge dump agents, the request , filter , opts , label , and range parameters must match exactly. If you specify multiple agents that filter on the same string, but keep all other parameters the same, the agents are merged. For example: java -Xdump:none -Xdump:java:events=uncaught,filter=java/lang/NullPointerException -Xdump:java:events=unload,filter=java/lang/NullPointerException -Xdump:what The results of this command are as follows: Registered dump agents ---------------------- -Xdump:java: events=unload+uncaught, filter=java/lang/NullPointerException, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- Dump events Dump agents are triggered by events occurring during operation of the OpenJ9 VM. Some events can be filtered to improve the relevance of the output. The following table shows the events that are available as dump agent triggers: Event Triggered when.... Filters on .... gpf A General Protection Fault (GPF) occurs. Not applicable user The VM receives the SIGQUIT (Linux, macOS\u00ae, AIX\u00ae, z/OS) or SIGBREAK (Windows\u2122) signal from the operating system. Not applicable abort The VM receives the SIGABRT signal from the operating system. Not applicable vmstart The virtual machine is started. Not applicable vmstop The virtual machine stops. Exit code; for example, filter=#129..#192#-42#255 load A class is loaded. Class name; for example, filter=java/lang/String unload A class us unloaded. Not applicable throw An exception is thrown. Exception class name; for example, filter=java/lang/OutOfMem* catch An exception is caught. Exception class name; for example, filter=*Memory* uncaught A Java exception is not caught by the application. Exception class name; for example, filter=*MemoryError systhrow A Java exception is about to be thrown by the VM. This is different from the 'throw' event because it is only triggered for error conditions detected internally in the VM. Exception class name; for example, filter=java/lang/OutOfMem* . thrstart A new thread is started. Not applicable blocked A thread becomes blocked. Not applicable thrstop A thread stops. Not applicable fullgc A garbage collection cycle is started. Not applicable slow A thread takes longer than 50ms to respond to an internal VM request. Time taken; for example, filter=#300ms will trigger when a thread takes longer than 300ms to respond to an internal VM request. allocation A Java object is allocated with a size matching the given filter specification. Object size; a filter must be supplied. For example, filter=#5m will trigger on objects larger than 5 Mb. Ranges are also supported; for example, filter=#256k..512k will trigger on objects between 256 Kb and 512 Kb in size. traceassert An internal error occurs in the VM. Not applicable corruptcache The VM finds that the shared class cache is corrupt. Not applicable excessivegc An excessive amount of time is being spent in the garbage collector. Not applicable Note: The gpf , traceassert , and abort events cannot trigger a heap dump, prepare the heap (request=prepwalk), or compact the heap (request=compact). Parameters -Xdump:<agent>:<suboptions> descriptions and examples. help To print usage information for a specific dump agent, use -Xdump:<agent>:help none:<options> Use the -Xdump:none option to add and remove dump agents for various VM events, update default dump settings (such as the dump name), and limit the number of dumps that are produced. The option can be used to affect all agents by specifying -Xdump:none:<options> or specific agents by specifying -Xdump:<agent>:none:<suboptions> where <suboptions> is one of the following control types: events=<event> exec=<command> file=<filename> filter=<filter> opts=<options> priority=<0-999> range=<ranges> request=<requests> Explanations for these suboptions are provided elsewhere in this topic. To remove all default dump agents and any preceding dump options, use -Xdump:none . Use this option so that you can subsequently specify a completely new dump configuration. You can also remove dump agents of a particular type. Here are some examples: To turn off all heap dumps (including default agents) but leave Java dumps enabled, use the following option: -Xdump:java+heap:events=vmstop -Xdump:heap:none To turn off all dump agents for corruptcache events: -Xdump:none:events=corruptcache To turn off just system dumps for corruptcache events: -Xdump:system:none:events=corruptcache To turn off all dumps when a java/lang/OutOfMemory error is thrown: -Xdump:none:events=systhrow,filter=java/lang/OutOfMemoryError To turn off just system dumps when a java/lang/OutOfMemory error is thrown: -Xdump:system:none:events=systhrow,filter=java/lang/OutOfMemoryError If you remove all dump agents by using -Xdump:none with no further -Xdump options, the VM still provides these basic diagnostic outputs: If a user signal (kill -QUIT) is sent to the VM, a brief listing of the Java threads including their stacks, status, and monitor information is written to stderr. If a crash occurs, information about the location of the crash, VM options, and native and Java stack traces are written to stderr. A system dump file is also written to the user's home directory. Note: Removing dump agents and specifying a new dump configuration can require a long set of command-line options. To reuse command-line options, save the new dump configuration in a file and use the -Xoptionsfile option. For more information, see -Xoptionsfile . defaults Each dump type has default options. To view the default options for a particular dump type, use -Xdump:<agent>:defaults . You can change the default options at run time. For example, you can direct Java dump files into a separate directory for each process, and guarantee unique files by adding a sequence number to the file name using: -Xdump:java:defaults:file=dumps/%pid/javacore-%seq.txt` Or, for example, on z/OS, you can add the jobname to the Java dump file name using: -Xdump:java:defaults:file=javacore.%job.%H%M%S.txt This option does not add a Java dump agent; it updates the default settings for Java dump agents. Further Java dump agents will then create dump files using this specification for filenames, unless overridden. Note: Changing the defaults for a dump type will also affect the default agents for that dump type added by the VM during initialization. For example if you change the default file name for Java dump files, that will change the file name used by the default Java dump agents. However, changing the default range option will not change the range used by the default Java dump agents, because those agents override the range option with specific values. events=<event> To trigger a dump as a result of an event, use the -Xdump:<agent>:events=<event> suboption. For a list of possible events, see Dump events . For example, the following command instructs the VM to create a dump agent at startup that produces a Heap dump whenever the vmstop event happens: -Xdump:heap:events=vmstop exec=<command> The exec suboption is used by the tool dump agent to specify an external application to start. You can set a specific command to run for a particular dump agent with the following command: -Xdump:<agent>:exec=<command> file=<filename> The file suboption specifies where the diagnostics information is written for the specified dump type. The syntax is -Xdump:<agent>:file=<filename> . For example, to create a Heap dump called my.dmp when a vmstop event is received, use: java -Xdump:heap:events=vmstop,file=my.dmp When producing system dump files on z/OS platforms, use the dsn option instead of the file option. For example: java -Xdump:system:events=vmstop,dsn=%uid.MYDUMP Writing to STDOUT / STDERR Add one of the following options to write a Java dump file to STDOUT or STDERR respectively: -Xdump:java:file=/STDOUT/ -Xdump:java:file=/STDERR/ The keywords /STDOUT/ and /STDERR/ are not case sensitive; /stdout/ and /stderr/ are equivalent. By common convention, you can use a dash ( - ) to refer to STDOUT: -Xdump:java:file=- Tokens You can use tokens to add context to dump file names. For a list of tokens, see Dump agent tokens . File location The location for the dump file is selected from the following options, in this order: The location specified by the -Xdump:<agent>:file suboption on the command line (if that location includes a path). This location applies to the specified dump agent type only. The location specified by the -Xdump:directory option on the command line. This location applies to all dump agent types. The location specified by the relevant environment variable: Dump agent type z/OS operating systems Other operating systems Java dumps _CEE_DMPTARG IBM_JAVACOREDIR Heap dumps _CEE_DMPTARG IBM_HEAPDUMPDIR System dumps JAVA_DUMP_TDUMP_PATTERN IBM_COREDIR JIT dumps _CEE_DMPTARG IBM_COREDIR Snap traces _CEE_DMPTARG IBM_COREDIR The current working directory of the OpenJ9 VM process. If the directory does not exist, it is created. If the dump file cannot be written to the selected location, the VM reverts to using the following locations, in this order: On Windows platforms only, the system default location is C:\\WINDOWS . The location specified by the TMPDIR environment variable. The C:\\Temp on Windows operating systems, or the /tmp directory on other operating systems. This VM action does not apply to system dumps on z/OS operating systems that use the dsn option. You can prevent the VM reverting to different dump locations by using the -Xdump:nofailover option. filter=<filter> Some VM events occur thousands of times during the lifetime of an application. Dump agents can use filters and ranges to avoid producing an excessive number of dump files. The following syntax must be used: -Xdump:<agent>:filter=<filter> Wildcards You can use a wildcard in your exception event filter by placing an asterisk only at the beginning or end of the filter. The following command does not work because the second asterisk is not at the end: -Xdump:java:events=throw,filter=*InvalidArgumentException#*.myVirtualMethod To fix the problem, change this filter to the following string: -Xdump:java:events=throw,filter=*InvalidArgumentException#MyApplication.* Class loading and exception events You can filter class loading ( load ) and exception ( throw , catch , uncaught , systhrow ) events by the name of the class that is being loaded, thrown or caught. For example: -Xdump:java:events=load,filter=java/lang/String -Xdump:java:events=throw,filter=java/lang/ArrayStoreException -Xdump:java:events=catch,filter=java/lang/NullPointerException In addition, you can filter throw , uncaught , and systhrow exception events by the name of the method that throws the exception. The name of the parent class must include the full package name, using the forward slash (/) as a separator. Use a dot (.) to separate the method name from the class name. You can use an asterisk (*) as a wildcard character, to include all methods (optional portions are shown in brackets). For example: -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] For example, to trigger a Java dump when method MyApplication.myMethod() throws a NullPointerException exception, use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.myMethod The stack frame offset allows you to filter on the name of a method that calls the throwing method. This option is useful if the exception is being thrown from a general purpose or utility class. For example, to trigger a Java dump when a method called by MyApplication.main() throws a NullPointerException , use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.main#1 The default value of the stack frame offset is zero. You can filter the catch exception events by Java method name (optional portions are shown in brackets). For example: -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] You can filter throw , uncaught , and systhrowexception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] You can filter the catch exception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] Note: The filters apply to the stacktrace and fire every time the same exception is rethrown, which might result in multiple Java core files. vmstop event You can filter the VM shut down event ( vmstop ) by using one or more exit codes: -Xdump:java:events=vmstop,filter=#129..192#-42#255 slow event You can filter the slow event to change the time threshold from the default of 50 ms: -Xdump:java:events=slow,filter=#300ms allocation event You must filter the allocation event to specify the size of objects that cause a trigger. You can set the filter size from zero up to the maximum value of a 32-bit pointer on 32-bit platforms, or the maximum value of a 64-bit pointer on 64-bit platforms. Setting the lower filter value to zero triggers a dump on all allocations. For example, to trigger dumps on allocations greater than 5 Mb in size, use: -Xdump:stack:events=allocation,filter=#5m To trigger dumps on allocations between 256Kb and 512Kb in size, use: -Xdump:stack:events=allocation,filter=#256k..512k Other events If you apply a filter to an event that does not support filtering, the filter is ignored. msg_filter=<filter> You can use the msg_filter suboption to filter on text strings within an exception message, allowing you to reduce the number of dump files produced. This option is supported only for the following events: throw , catch , systhrow , and uncaught . Use the following syntax to include message filtering in your dump output: -Xdump:<agent>:events=<event>,msg_filter=<filter>` where <filter> is a text string from the exceptions that you want to include in the dump file. This suboption supports asterisks as wild cards. The following example filters java/lang/VerifyError exceptions that contains the text string class format : -Xdump:java:events=throw,filter=java/lang/VerifyError,msg_filter=*class format* opts=<options> The full syntax is -Xdump:<agent>:opts=<options> . The heap dump agent uses this suboption to specify the type of file to produce. On z/OS, the system dump agent uses this suboption to specify the type of dump to produce. Heap dumps You can specify a PHD heap dump file (PHD), a classic text heap dump file (CLASSIC), or both. The default is a PHD file. For example: -Xdump:heap:opts=PHD -Xdump:heap:opts=CLASSIC -Xdump:heap:opts=PHD+CLASSIC z/OS system dumps You can specify a system transaction dump (IEATDUMP), an LE dump (CEEDUMP), or both. The default is an IEADUMP file. For example: -Xdump:system:opts=IEATDUMP -Xdump:system:opts=CEEDUMP -Xdump:system:opts=IEATDUMP+CEEDUMP The ceedump agent is the preferred way to specify LE dumps, for example: -Xdump:ceedump:events=gpf Tool dumps The tool dump agent supports two suboptions that can be specified using the opts subption. You can run the external process asynchronously with opts=ASYNC. You can also specify a delay in milliseconds that produces a pause after starting the command. These two options can be used independently or together. The following examples show different options for starting a new process that runs myProgram : -Xdump:tool:events=vmstop,exec=myProgram Without the opts suboption, the tool dump agent starts the process, and waits for the process to end before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC When opts=ASYNC is specified, the tool dump agent starts the process, and continues without waiting for the new process to end. -Xdump:tool:events=vmstop,exec=myProgram,opts=WAIT1000 This option starts the process, waits for the process to end, and then waits a further 1 second (1000 milliseconds) before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC+WAIT10000 Finally the last example starts the process and waits for 10 seconds before continuing, whether the process is still running or not. This last form is useful if you are starting a process that does not end, but requires time to initialize properly. priority=<0-999> One event can generate multiple dump files. The agents that produce each dump file run sequentially and their order is determined by the priority keyword set for each agent. The full syntax for this command is -Xdump:<agent>:priority=<0-999> . Examination of the output from -Xdump:what shows that a gpf event produces a snap trace, a Java dump file, and a system dump file. In this example, the system dump runs first, with priority 999. The snap dump runs second, with priority 500. The Java dump runs last, with priority 10: -Xdump:heap:events=vmstop,priority=123 The maximum value allowed for priority is 999. Higher priority dump agents are started first. If you do not specifically set a priority, default values are taken based on the dump type. The default priority and the other default values for a particular type of dump, can be displayed by using -Xdump:<type>:defaults . For example: java -Xdump:heap:defaults -version Default -Xdump:heap settings: events=gpf+user filter= file=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.phd range=1..0 priority=500 request=exclusive+compact+prepwalk opts=PHD range=<ranges> You can start and stop dump agents on a particular occurrence of a VM event by using the range suboption: -Xdump:<agent>:range=<ranges> For example: -Xdump:java:events=fullgc,range=100..200 Note: range=1..0 against an event means \"on every occurrence\". The VM default dump agents have the range suboption set to 1..0 for all events except systhrow. Most systhrow events with filter=java/lang/OutOfMemoryError have the range suboption set to 1..4, which limits the number of dump files produced on OutOfMemory conditions to a maximum of 4. For more information, see Default dump agents . If you add a new dump agent and do not specify the range, a default of 1..0 is used. request=<requests> Use the request suboption to ask the VM to prepare the state before starting the dump agent: -Xdump:<agent>:request=<requests> The available suboptions are listed in the following table: suboption value Description exclusive Request exclusive access to the VM. compact Run garbage collection. This option removes all unreachable objects from the heap before the dump file is generated. prepwalk Prepare the heap for walking. You must also specify exclusive when you use this option. serial Suspend other dumps until this dump is finished. preempt Applies to the Java dump agent and controls whether native threads in the process are forcibly pre-empted in order to collect stack traces. If this option is not specified, only Java stack traces are collected in the Java dump. You can specify more than one request option by using + . For example: -Xdump:heap:request=exclusive+compact+prepwalk The VM exclusive access mechanism allows a VM thread to halt the activity of other VM threads in a controlled way by using internal VM locks. When the request=exclusive option is specified for a dump agent, the VM thread that is producing the dump waits for threads that are running Java code to halt, and for garbage collection operations to complete, before the dump file is written. This process helps ensure that the dump has consistent data. When the dump is complete, the mechanism allows the other threads to resume. By default, only system dumps for OutOfMemoryError exceptions request exclusive access. Other system dump events typically result from a crash. In these cases, exclusive access is not requested because acquiring locks during a crash can be problematic. If system dumps are requested by using the com.ibm.jvm.Dump.SystemDump() API, the default system dump agent settings are used, and exclusive access is not requested. However, if you intend to use the system dump file for Java heap memory analysis, use the following option to request exclusive access when the dump is taken: -Xdump:system:defaults:request=exclusive+compact+prepwalk These settings avoid capturing a dump file with in-flight data during garbage collection. As an alternative, you can use the com.ibm.jvm.Dump.triggerDump() API and specify request=exclusive+compact+prepwalk on the API call. For more information about the com.ibm.jvm.Dump API , see the API reference information. The default setting of the request suboption for Java dump files is request=exclusive+preempt . To change the settings so that Java dump files are produced without pre-empting threads to collect native stack traces, use the following option: -Xdump:java:request=exclusive In general, the default request options are sufficient. Dump output Dump output is written to different files, depending on the type of dump and the platform. File names include a time stamp. Dump type File name (AIX, Linux, macOS, Windows) File name (z/OS) System dump core.%Y%m%d.%H%M%S.%pid.dmp %uid.JVM.TDUMP.%job.D%Y%m%d.T%H%M%S (31-bit), %uid.JVM.%job.D%y%m%d.T%H%M%S.X&DS (64-bit) See Note Java dump javacore.%Y%m%d.%H%M%S.%pid.%seq.txt javacore.%Y%m%d.%H%M%S.%pid.%seq.txt Heap dump heapdump.%Y%m%d.%H%M%S.%pid.phd heapdump.%Y%m%d.T%H%M%S.phd JIT dump jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp LE CEEDUMP - CEEDUMP.%Y%m%d.%H%M%S.%pid See Note The tokens used in this table, for example %Y , are described in Dump agent tokens . Note: On z/OS, the system dump file name can be set with the JAVA_DUMP_TDUMP_PATTERN environment variable. The CEEDUMP, which is not produced by default, is stored in the directory specified by _CEE_DMPTARG or the current directory if _CEE_DMPTARG is not specified. System dumps on Linux Linux does not provide an operating system API for generating a system dump from a running process. The VM produces system dumps on Linux by using the fork() API to start an identical process to the parent VM process. The VM then generates a SIGSEGV signal in the child process. The SIGSEGV signal causes Linux to create a system dump for the child process. The parent VM processes and renames the system dump, as required, by the -Xdump options, and might add additional data into the dump file. The system dump file for the child process contains an exact copy of the memory areas used in the parent. The dump viewer can obtain information about the Java threads, classes, and heap from the system dump. However, the dump viewer, and other system dump debuggers show only the single native thread that was running in the child process. You can use the Linux kernel.core_pattern setting to specify the name and path for system dumps. The VM dump agents override the Linux system dump name and path by renaming the dump as specified in the -Xdump options. If the kernel.core_pattern setting specifies a different file system to the -Xdump options, the VM dump agents might be unable to change the file path. In this case the VM renames the dump file, but leaves the file path unchanged. You can find the dump file name and location in the JVMDUMP010I message. Note: If you use the %t specifier in the kernel.core_pattern setting, the VM does not rename the dump. The VM cannot determine the exact time that Linux generated the core file, and therefore cannot be certain which Linux dump file is the correct one to rename. See also -Xtrace -Xdisablejavadump","title":"-Xdump"},{"location":"xdump/#-xdump","text":"OpenJ9 produces various types of diagnostic information for analysis when different events occur, such as a general protection fault. The dumps produced are controlled by dump agents, which are initialized when the OpenJ9 virtual machine (VM) starts. The default settings for the dump agents are sufficient for most cases. However, you can use the -Xdump option on the command line to fine tune the dump agent settings. For example, you can use the -Xdump option to add and remove dump agents for various VM events, update default dump settings, and limit the number of dumps that are produced. A large set of options and suboptions are available for controlling dumps, which provides a lot of flexibility.","title":"-Xdump"},{"location":"xdump/#xdump-option-builder","text":"Use the Xdump Option Builder tool to help you specify the correct options and avoid incompatibilities.","title":"Xdump Option Builder"},{"location":"xdump/#syntax","text":"-Xdump:<parameter> The following table lists the help options for -Xdump , which provide usage and configuration information: Command Result -Xdump:help Displays general dump help. -Xdump:events Lists available trigger events. -Xdump:request Lists additional VM requests. -Xdump:tokens Lists recognized label tokens. -Xdump:what Shows registered agents on startup. -Xdump:<agent>:help Displays dump agent usage information. The following options can be used to control the production of diagnostic data: Parameter Result -Xdump:none Removes all default dump agents and any preceding dump options. -Xdump:dynamic Enable support for pluggable agents -Xdump:nofailover Discards dumps when the default or specified dump location is full. -Xdump:directory=<path> Specifies a directory for all dump types to be written to. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents. -Xdump:suspendwith=<offset> Modifies the signal that is used to suspend VM threads while a dump file is being written. Use <offset> to change the default signal number. (Linux\u00ae only) -Xdump:<agent>:<suboptions> Provides detailed suboptions per dump agent that provide more granular control. Dump agents can be configured at a very granular level by specifying suboptions. The <events> suboption is the prime trigger mechanism. The full set of suboptions are listed in the following table: Dump agent suboptions Result -Xdump:<agent>:none Removes the dump agent. -Xdump:<agent>:defaults Prints the default options for the dump agent. -Xdump:<agent>:events=<events> Triggers a dump agent when a specific event occurs. -Xdump:<agent>:exec=<command> Starts an external application for the dump agent. -Xdump:<agent>:file=<filename> Specifies where to write the dump for the dump agent. -Xdump:<agent>:filter=<filter> Filters dumps by wildcards or events. -Xdump:<agent>:msg_filter=<filter> Filters on text strings within an exception message. -Xdump:<agent>:opts=<options> Used by specific dump agents to select the type of dump file to produce. -Xdump:<agent>:priority=<0-999> Specifies the priority that the dump agents run in. -Xdump:<agent>:range=<ranges> Starts and stops a dump agent on a particular occurrence of a VM. -Xdump:<agent>:request=<requests> Asks the VM to prepare the state before starting the dump agent. You can have multiple -Xdump options on the command line. You can also have multiple dump types triggered by multiple events. For example, the following command turns off the creation of heap dump files, and creates a dump agent that produces a heap dump file and a Java\u2122 dump file when either a vmstart or vmstop event occurs: java -Xdump:heap:none -Xdump:heap+java:events=vmstart+vmstop -mp . -m <class> [args...] Note: Multiple suboptions that follow an Xdump suboption must be split with a comma (,), for example: java -Xdump:java:events=vmstart,file=/STDERR/ -version For more detailed information on the these parameters and suboptions, including examples, see Parameters .","title":"Syntax"},{"location":"xdump/#dump-agents","text":"A dump agent performs diagnostic tasks when triggered. Most dump agents save information on the state of the VM in some form of dump or trace file for later analysis. An exception is the \"tool\" agent, which can be used to trigger external processes when specific events occur. Dump agent Description stack Stack dumps are very basic dumps in which the status and Java stack of the thread is written to stderr. console Console dumps are very basic dumps, in which the status of every Java thread is written to stderr. system System dumps capture the raw process image or address space of an application. tool The tool option allows external processes to be started when an event occurs. java Java dumps are an internally generated and formatted analysis of the VM, giving information that includes the Java threads present, the classes loaded, and heap statistics. heap Heap dumps capture all object instances in the heap, including each object address, type or class name, size, and references to other objects. snap Take a snap of the trace buffers, which contain tracepoint data. ceedump LE CEEDUMP dumps are z/OS\u00ae formatted summary system dumps that show stack traces for each thread that is in the VM process, together with register information and a short dump of storage for each register. jit JIT compiler dumps contain diagnostic data in a binary format.","title":"Dump agents"},{"location":"xdump/#default-dump-agents","text":"During VM initialization a set of dump agents are added by default. You can override this set of dump agents using -Xdump on the command line. To show the registered dump agents, user the Xdump:what option on the command line. The following sample output shows the default dump agents that are in place on a Linux system: java -Xdump:what Registered dump agents ---------------------- -Xdump:system: events=gpf+abort+traceassert+corruptcache, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=999, request=serial ---------------------- -Xdump:system: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..1, priority=999, request=exclusive+compact+prepwalk ---------------------- -Xdump:heap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.%seq.phd, range=1..4, priority=500, request=exclusive+compact+prepwalk, opts=PHD ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- -Xdump:java: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..4, priority=400, request=exclusive+preempt ---------------------- -Xdump:snap: events=gpf+abort+traceassert+corruptcache, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..0, priority=300, request=serial ---------------------- -Xdump:snap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..4, priority=300, request=serial ---------------------- -Xdump:jit: events=gpf+abort, label=/home/user/jitdump.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=200, request=serial ----------------------","title":"Default dump agents"},{"location":"xdump/#dump-agent-tokens","text":"You can use tokens to add context to dump file names and directories, and to pass command-line arguments to the tool agent. The tokens available are listed in the following table: Token Description %Y Year (4 digits) %y Year (2 digits) %m Month (2 digits) %d Day of the month (2 digits) %H Hour ( 2 digits) %M Minute (2 digits) %S Second (2 digits) %pid Process ID %uid User name %seq Dump counter %tick msec counter %home Java home directory %last Last dump %job Job name (z/OS only) %jobid Job ID (z/OS only) %asid Address space ID (z/OS only) &DS Dump Section. An incrementing sequence number used for splitting TDUMP files to be less than 2 GB in size. (z/OS 64-bit only)","title":"Dump agent tokens"},{"location":"xdump/#merging-xdump-agents","text":"If you configure more than one dump agent, each responds to events according to its configuration. However, the internal structures representing the dump agent configuration might not match the command line, because dump agents are merged for efficiency. Two sets of options can be merged as long as none of the agent settings conflict. This means that the list of installed dump agents and their parameters produced by -Xdump:what might not be grouped in the same way as the original -Xdump options that configured them. For example, you can use the following command to specify that a dump agent creates a Java dump file on class unload: java -Xdump:java:events=unload -Xdump:what This command does not create a new agent, as can be seen in the results from the -Xdump:what option. ... ---------------------- -Xdump:java: events=gpf+user+abort+unload+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- The configuration is merged with the existing Java dump agent for events gpf , user , abort , traceassert , and corruptcache , because none of the specified options for the new unload agent conflict with those for the existing agent. In the previous example, if one of the parameters for the unload agent is changed so that it conflicts with the existing agent, then it cannot be merged. For example, the following command specifies a different priority, forcing a separate agent to be created: java -Xdump:java:events=unload,priority=100 -Xdump:what The results of the -Xdump:what option in the command are as follows. ... ---------------------- -Xdump:java: events=unload, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=100, request=exclusive+preempt ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- To merge dump agents, the request , filter , opts , label , and range parameters must match exactly. If you specify multiple agents that filter on the same string, but keep all other parameters the same, the agents are merged. For example: java -Xdump:none -Xdump:java:events=uncaught,filter=java/lang/NullPointerException -Xdump:java:events=unload,filter=java/lang/NullPointerException -Xdump:what The results of this command are as follows: Registered dump agents ---------------------- -Xdump:java: events=unload+uncaught, filter=java/lang/NullPointerException, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ----------------------","title":"Merging -Xdump agents"},{"location":"xdump/#dump-events","text":"Dump agents are triggered by events occurring during operation of the OpenJ9 VM. Some events can be filtered to improve the relevance of the output. The following table shows the events that are available as dump agent triggers: Event Triggered when.... Filters on .... gpf A General Protection Fault (GPF) occurs. Not applicable user The VM receives the SIGQUIT (Linux, macOS\u00ae, AIX\u00ae, z/OS) or SIGBREAK (Windows\u2122) signal from the operating system. Not applicable abort The VM receives the SIGABRT signal from the operating system. Not applicable vmstart The virtual machine is started. Not applicable vmstop The virtual machine stops. Exit code; for example, filter=#129..#192#-42#255 load A class is loaded. Class name; for example, filter=java/lang/String unload A class us unloaded. Not applicable throw An exception is thrown. Exception class name; for example, filter=java/lang/OutOfMem* catch An exception is caught. Exception class name; for example, filter=*Memory* uncaught A Java exception is not caught by the application. Exception class name; for example, filter=*MemoryError systhrow A Java exception is about to be thrown by the VM. This is different from the 'throw' event because it is only triggered for error conditions detected internally in the VM. Exception class name; for example, filter=java/lang/OutOfMem* . thrstart A new thread is started. Not applicable blocked A thread becomes blocked. Not applicable thrstop A thread stops. Not applicable fullgc A garbage collection cycle is started. Not applicable slow A thread takes longer than 50ms to respond to an internal VM request. Time taken; for example, filter=#300ms will trigger when a thread takes longer than 300ms to respond to an internal VM request. allocation A Java object is allocated with a size matching the given filter specification. Object size; a filter must be supplied. For example, filter=#5m will trigger on objects larger than 5 Mb. Ranges are also supported; for example, filter=#256k..512k will trigger on objects between 256 Kb and 512 Kb in size. traceassert An internal error occurs in the VM. Not applicable corruptcache The VM finds that the shared class cache is corrupt. Not applicable excessivegc An excessive amount of time is being spent in the garbage collector. Not applicable Note: The gpf , traceassert , and abort events cannot trigger a heap dump, prepare the heap (request=prepwalk), or compact the heap (request=compact).","title":"Dump events"},{"location":"xdump/#parameters","text":"-Xdump:<agent>:<suboptions> descriptions and examples.","title":"Parameters"},{"location":"xdump/#help","text":"To print usage information for a specific dump agent, use -Xdump:<agent>:help","title":"help"},{"location":"xdump/#noneoptions","text":"Use the -Xdump:none option to add and remove dump agents for various VM events, update default dump settings (such as the dump name), and limit the number of dumps that are produced. The option can be used to affect all agents by specifying -Xdump:none:<options> or specific agents by specifying -Xdump:<agent>:none:<suboptions> where <suboptions> is one of the following control types: events=<event> exec=<command> file=<filename> filter=<filter> opts=<options> priority=<0-999> range=<ranges> request=<requests> Explanations for these suboptions are provided elsewhere in this topic. To remove all default dump agents and any preceding dump options, use -Xdump:none . Use this option so that you can subsequently specify a completely new dump configuration. You can also remove dump agents of a particular type. Here are some examples: To turn off all heap dumps (including default agents) but leave Java dumps enabled, use the following option: -Xdump:java+heap:events=vmstop -Xdump:heap:none To turn off all dump agents for corruptcache events: -Xdump:none:events=corruptcache To turn off just system dumps for corruptcache events: -Xdump:system:none:events=corruptcache To turn off all dumps when a java/lang/OutOfMemory error is thrown: -Xdump:none:events=systhrow,filter=java/lang/OutOfMemoryError To turn off just system dumps when a java/lang/OutOfMemory error is thrown: -Xdump:system:none:events=systhrow,filter=java/lang/OutOfMemoryError If you remove all dump agents by using -Xdump:none with no further -Xdump options, the VM still provides these basic diagnostic outputs: If a user signal (kill -QUIT) is sent to the VM, a brief listing of the Java threads including their stacks, status, and monitor information is written to stderr. If a crash occurs, information about the location of the crash, VM options, and native and Java stack traces are written to stderr. A system dump file is also written to the user's home directory. Note: Removing dump agents and specifying a new dump configuration can require a long set of command-line options. To reuse command-line options, save the new dump configuration in a file and use the -Xoptionsfile option. For more information, see -Xoptionsfile .","title":"none:&lt;options&gt;"},{"location":"xdump/#defaults","text":"Each dump type has default options. To view the default options for a particular dump type, use -Xdump:<agent>:defaults . You can change the default options at run time. For example, you can direct Java dump files into a separate directory for each process, and guarantee unique files by adding a sequence number to the file name using: -Xdump:java:defaults:file=dumps/%pid/javacore-%seq.txt` Or, for example, on z/OS, you can add the jobname to the Java dump file name using: -Xdump:java:defaults:file=javacore.%job.%H%M%S.txt This option does not add a Java dump agent; it updates the default settings for Java dump agents. Further Java dump agents will then create dump files using this specification for filenames, unless overridden. Note: Changing the defaults for a dump type will also affect the default agents for that dump type added by the VM during initialization. For example if you change the default file name for Java dump files, that will change the file name used by the default Java dump agents. However, changing the default range option will not change the range used by the default Java dump agents, because those agents override the range option with specific values.","title":"defaults"},{"location":"xdump/#eventsevent","text":"To trigger a dump as a result of an event, use the -Xdump:<agent>:events=<event> suboption. For a list of possible events, see Dump events . For example, the following command instructs the VM to create a dump agent at startup that produces a Heap dump whenever the vmstop event happens: -Xdump:heap:events=vmstop","title":"events=&lt;event&gt;"},{"location":"xdump/#execcommand","text":"The exec suboption is used by the tool dump agent to specify an external application to start. You can set a specific command to run for a particular dump agent with the following command: -Xdump:<agent>:exec=<command>","title":"exec=&lt;command&gt;"},{"location":"xdump/#filefilename","text":"The file suboption specifies where the diagnostics information is written for the specified dump type. The syntax is -Xdump:<agent>:file=<filename> . For example, to create a Heap dump called my.dmp when a vmstop event is received, use: java -Xdump:heap:events=vmstop,file=my.dmp When producing system dump files on z/OS platforms, use the dsn option instead of the file option. For example: java -Xdump:system:events=vmstop,dsn=%uid.MYDUMP","title":"file=&lt;filename&gt;"},{"location":"xdump/#writing-to-stdoutstderr","text":"Add one of the following options to write a Java dump file to STDOUT or STDERR respectively: -Xdump:java:file=/STDOUT/ -Xdump:java:file=/STDERR/ The keywords /STDOUT/ and /STDERR/ are not case sensitive; /stdout/ and /stderr/ are equivalent. By common convention, you can use a dash ( - ) to refer to STDOUT: -Xdump:java:file=-","title":"Writing to STDOUT/STDERR"},{"location":"xdump/#tokens","text":"You can use tokens to add context to dump file names. For a list of tokens, see Dump agent tokens .","title":"Tokens"},{"location":"xdump/#file-location","text":"The location for the dump file is selected from the following options, in this order: The location specified by the -Xdump:<agent>:file suboption on the command line (if that location includes a path). This location applies to the specified dump agent type only. The location specified by the -Xdump:directory option on the command line. This location applies to all dump agent types. The location specified by the relevant environment variable: Dump agent type z/OS operating systems Other operating systems Java dumps _CEE_DMPTARG IBM_JAVACOREDIR Heap dumps _CEE_DMPTARG IBM_HEAPDUMPDIR System dumps JAVA_DUMP_TDUMP_PATTERN IBM_COREDIR JIT dumps _CEE_DMPTARG IBM_COREDIR Snap traces _CEE_DMPTARG IBM_COREDIR The current working directory of the OpenJ9 VM process. If the directory does not exist, it is created. If the dump file cannot be written to the selected location, the VM reverts to using the following locations, in this order: On Windows platforms only, the system default location is C:\\WINDOWS . The location specified by the TMPDIR environment variable. The C:\\Temp on Windows operating systems, or the /tmp directory on other operating systems. This VM action does not apply to system dumps on z/OS operating systems that use the dsn option. You can prevent the VM reverting to different dump locations by using the -Xdump:nofailover option.","title":"File location"},{"location":"xdump/#filterfilter","text":"Some VM events occur thousands of times during the lifetime of an application. Dump agents can use filters and ranges to avoid producing an excessive number of dump files. The following syntax must be used: -Xdump:<agent>:filter=<filter>","title":"filter=&lt;filter&gt;"},{"location":"xdump/#wildcards","text":"You can use a wildcard in your exception event filter by placing an asterisk only at the beginning or end of the filter. The following command does not work because the second asterisk is not at the end: -Xdump:java:events=throw,filter=*InvalidArgumentException#*.myVirtualMethod To fix the problem, change this filter to the following string: -Xdump:java:events=throw,filter=*InvalidArgumentException#MyApplication.*","title":"Wildcards"},{"location":"xdump/#class-loading-and-exception-events","text":"You can filter class loading ( load ) and exception ( throw , catch , uncaught , systhrow ) events by the name of the class that is being loaded, thrown or caught. For example: -Xdump:java:events=load,filter=java/lang/String -Xdump:java:events=throw,filter=java/lang/ArrayStoreException -Xdump:java:events=catch,filter=java/lang/NullPointerException In addition, you can filter throw , uncaught , and systhrow exception events by the name of the method that throws the exception. The name of the parent class must include the full package name, using the forward slash (/) as a separator. Use a dot (.) to separate the method name from the class name. You can use an asterisk (*) as a wildcard character, to include all methods (optional portions are shown in brackets). For example: -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] For example, to trigger a Java dump when method MyApplication.myMethod() throws a NullPointerException exception, use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.myMethod The stack frame offset allows you to filter on the name of a method that calls the throwing method. This option is useful if the exception is being thrown from a general purpose or utility class. For example, to trigger a Java dump when a method called by MyApplication.main() throws a NullPointerException , use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.main#1 The default value of the stack frame offset is zero. You can filter the catch exception events by Java method name (optional portions are shown in brackets). For example: -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] You can filter throw , uncaught , and systhrowexception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] You can filter the catch exception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] Note: The filters apply to the stacktrace and fire every time the same exception is rethrown, which might result in multiple Java core files.","title":"Class loading and exception events"},{"location":"xdump/#vmstop-event","text":"You can filter the VM shut down event ( vmstop ) by using one or more exit codes: -Xdump:java:events=vmstop,filter=#129..192#-42#255","title":"vmstop event"},{"location":"xdump/#slow-event","text":"You can filter the slow event to change the time threshold from the default of 50 ms: -Xdump:java:events=slow,filter=#300ms","title":"slow event"},{"location":"xdump/#allocation-event","text":"You must filter the allocation event to specify the size of objects that cause a trigger. You can set the filter size from zero up to the maximum value of a 32-bit pointer on 32-bit platforms, or the maximum value of a 64-bit pointer on 64-bit platforms. Setting the lower filter value to zero triggers a dump on all allocations. For example, to trigger dumps on allocations greater than 5 Mb in size, use: -Xdump:stack:events=allocation,filter=#5m To trigger dumps on allocations between 256Kb and 512Kb in size, use: -Xdump:stack:events=allocation,filter=#256k..512k","title":"allocation event"},{"location":"xdump/#other-events","text":"If you apply a filter to an event that does not support filtering, the filter is ignored.","title":"Other events"},{"location":"xdump/#msg_filterfilter","text":"You can use the msg_filter suboption to filter on text strings within an exception message, allowing you to reduce the number of dump files produced. This option is supported only for the following events: throw , catch , systhrow , and uncaught . Use the following syntax to include message filtering in your dump output: -Xdump:<agent>:events=<event>,msg_filter=<filter>` where <filter> is a text string from the exceptions that you want to include in the dump file. This suboption supports asterisks as wild cards. The following example filters java/lang/VerifyError exceptions that contains the text string class format : -Xdump:java:events=throw,filter=java/lang/VerifyError,msg_filter=*class format*","title":"msg_filter=&lt;filter&gt;"},{"location":"xdump/#optsoptions","text":"The full syntax is -Xdump:<agent>:opts=<options> . The heap dump agent uses this suboption to specify the type of file to produce. On z/OS, the system dump agent uses this suboption to specify the type of dump to produce.","title":"opts=&lt;options&gt;"},{"location":"xdump/#heap-dumps","text":"You can specify a PHD heap dump file (PHD), a classic text heap dump file (CLASSIC), or both. The default is a PHD file. For example: -Xdump:heap:opts=PHD -Xdump:heap:opts=CLASSIC -Xdump:heap:opts=PHD+CLASSIC","title":"Heap dumps"},{"location":"xdump/#zos-system-dumps","text":"You can specify a system transaction dump (IEATDUMP), an LE dump (CEEDUMP), or both. The default is an IEADUMP file. For example: -Xdump:system:opts=IEATDUMP -Xdump:system:opts=CEEDUMP -Xdump:system:opts=IEATDUMP+CEEDUMP The ceedump agent is the preferred way to specify LE dumps, for example: -Xdump:ceedump:events=gpf","title":"z/OS system dumps"},{"location":"xdump/#tool-dumps","text":"The tool dump agent supports two suboptions that can be specified using the opts subption. You can run the external process asynchronously with opts=ASYNC. You can also specify a delay in milliseconds that produces a pause after starting the command. These two options can be used independently or together. The following examples show different options for starting a new process that runs myProgram : -Xdump:tool:events=vmstop,exec=myProgram Without the opts suboption, the tool dump agent starts the process, and waits for the process to end before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC When opts=ASYNC is specified, the tool dump agent starts the process, and continues without waiting for the new process to end. -Xdump:tool:events=vmstop,exec=myProgram,opts=WAIT1000 This option starts the process, waits for the process to end, and then waits a further 1 second (1000 milliseconds) before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC+WAIT10000 Finally the last example starts the process and waits for 10 seconds before continuing, whether the process is still running or not. This last form is useful if you are starting a process that does not end, but requires time to initialize properly.","title":"Tool dumps"},{"location":"xdump/#priority0-999","text":"One event can generate multiple dump files. The agents that produce each dump file run sequentially and their order is determined by the priority keyword set for each agent. The full syntax for this command is -Xdump:<agent>:priority=<0-999> . Examination of the output from -Xdump:what shows that a gpf event produces a snap trace, a Java dump file, and a system dump file. In this example, the system dump runs first, with priority 999. The snap dump runs second, with priority 500. The Java dump runs last, with priority 10: -Xdump:heap:events=vmstop,priority=123 The maximum value allowed for priority is 999. Higher priority dump agents are started first. If you do not specifically set a priority, default values are taken based on the dump type. The default priority and the other default values for a particular type of dump, can be displayed by using -Xdump:<type>:defaults . For example: java -Xdump:heap:defaults -version Default -Xdump:heap settings: events=gpf+user filter= file=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.phd range=1..0 priority=500 request=exclusive+compact+prepwalk opts=PHD","title":"priority=&lt;0-999&gt;"},{"location":"xdump/#rangeranges","text":"You can start and stop dump agents on a particular occurrence of a VM event by using the range suboption: -Xdump:<agent>:range=<ranges> For example: -Xdump:java:events=fullgc,range=100..200 Note: range=1..0 against an event means \"on every occurrence\". The VM default dump agents have the range suboption set to 1..0 for all events except systhrow. Most systhrow events with filter=java/lang/OutOfMemoryError have the range suboption set to 1..4, which limits the number of dump files produced on OutOfMemory conditions to a maximum of 4. For more information, see Default dump agents . If you add a new dump agent and do not specify the range, a default of 1..0 is used.","title":"range=&lt;ranges&gt;"},{"location":"xdump/#requestrequests","text":"Use the request suboption to ask the VM to prepare the state before starting the dump agent: -Xdump:<agent>:request=<requests> The available suboptions are listed in the following table: suboption value Description exclusive Request exclusive access to the VM. compact Run garbage collection. This option removes all unreachable objects from the heap before the dump file is generated. prepwalk Prepare the heap for walking. You must also specify exclusive when you use this option. serial Suspend other dumps until this dump is finished. preempt Applies to the Java dump agent and controls whether native threads in the process are forcibly pre-empted in order to collect stack traces. If this option is not specified, only Java stack traces are collected in the Java dump. You can specify more than one request option by using + . For example: -Xdump:heap:request=exclusive+compact+prepwalk The VM exclusive access mechanism allows a VM thread to halt the activity of other VM threads in a controlled way by using internal VM locks. When the request=exclusive option is specified for a dump agent, the VM thread that is producing the dump waits for threads that are running Java code to halt, and for garbage collection operations to complete, before the dump file is written. This process helps ensure that the dump has consistent data. When the dump is complete, the mechanism allows the other threads to resume. By default, only system dumps for OutOfMemoryError exceptions request exclusive access. Other system dump events typically result from a crash. In these cases, exclusive access is not requested because acquiring locks during a crash can be problematic. If system dumps are requested by using the com.ibm.jvm.Dump.SystemDump() API, the default system dump agent settings are used, and exclusive access is not requested. However, if you intend to use the system dump file for Java heap memory analysis, use the following option to request exclusive access when the dump is taken: -Xdump:system:defaults:request=exclusive+compact+prepwalk These settings avoid capturing a dump file with in-flight data during garbage collection. As an alternative, you can use the com.ibm.jvm.Dump.triggerDump() API and specify request=exclusive+compact+prepwalk on the API call. For more information about the com.ibm.jvm.Dump API , see the API reference information. The default setting of the request suboption for Java dump files is request=exclusive+preempt . To change the settings so that Java dump files are produced without pre-empting threads to collect native stack traces, use the following option: -Xdump:java:request=exclusive In general, the default request options are sufficient.","title":"request=&lt;requests&gt;"},{"location":"xdump/#dump-output","text":"Dump output is written to different files, depending on the type of dump and the platform. File names include a time stamp. Dump type File name (AIX, Linux, macOS, Windows) File name (z/OS) System dump core.%Y%m%d.%H%M%S.%pid.dmp %uid.JVM.TDUMP.%job.D%Y%m%d.T%H%M%S (31-bit), %uid.JVM.%job.D%y%m%d.T%H%M%S.X&DS (64-bit) See Note Java dump javacore.%Y%m%d.%H%M%S.%pid.%seq.txt javacore.%Y%m%d.%H%M%S.%pid.%seq.txt Heap dump heapdump.%Y%m%d.%H%M%S.%pid.phd heapdump.%Y%m%d.T%H%M%S.phd JIT dump jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp LE CEEDUMP - CEEDUMP.%Y%m%d.%H%M%S.%pid See Note The tokens used in this table, for example %Y , are described in Dump agent tokens . Note: On z/OS, the system dump file name can be set with the JAVA_DUMP_TDUMP_PATTERN environment variable. The CEEDUMP, which is not produced by default, is stored in the directory specified by _CEE_DMPTARG or the current directory if _CEE_DMPTARG is not specified.","title":"Dump output"},{"location":"xdump/#system-dumps-on-linux","text":"Linux does not provide an operating system API for generating a system dump from a running process. The VM produces system dumps on Linux by using the fork() API to start an identical process to the parent VM process. The VM then generates a SIGSEGV signal in the child process. The SIGSEGV signal causes Linux to create a system dump for the child process. The parent VM processes and renames the system dump, as required, by the -Xdump options, and might add additional data into the dump file. The system dump file for the child process contains an exact copy of the memory areas used in the parent. The dump viewer can obtain information about the Java threads, classes, and heap from the system dump. However, the dump viewer, and other system dump debuggers show only the single native thread that was running in the child process. You can use the Linux kernel.core_pattern setting to specify the name and path for system dumps. The VM dump agents override the Linux system dump name and path by renaming the dump as specified in the -Xdump options. If the kernel.core_pattern setting specifies a different file system to the -Xdump options, the VM dump agents might be unable to change the file path. In this case the VM renames the dump file, but leaves the file path unchanged. You can find the dump file name and location in the JVMDUMP010I message. Note: If you use the %t specifier in the kernel.core_pattern setting, the VM does not rename the dump. The VM cannot determine the exact time that Linux generated the core file, and therefore cannot be certain which Linux dump file is the correct one to rename.","title":"System dumps on Linux"},{"location":"xdump/#see-also","text":"-Xtrace -Xdisablejavadump","title":"See also"},{"location":"xenableexcessivegc/","text":"\u2011Xenableexcessivegc / \u2011Xdisableexcessivegc Enables or disables the throwing of an OutOfMemory exception if excessive time is spent in the GC. If excessive time is spent in the GC, the option returns null for an allocate request and thus causes an OutOfMemory exception to be thrown. Note: The OutOfMemory exception is thrown only when the heap has been fully expanded and the percentage of application run time that is not spent in garbage collection is at least 95%. This percentage is the default value that triggers an excessive GC event. You can control this value with the -Xgc:excessiveGCratio option. Syntax Setting Effect Default -Xenableexcessivegc Enable exception yes -Xdisableexcessivegc Disable exception","title":"-Xenableexcessivegc"},{"location":"xenableexcessivegc/#xenableexcessivegc-xdisableexcessivegc","text":"Enables or disables the throwing of an OutOfMemory exception if excessive time is spent in the GC. If excessive time is spent in the GC, the option returns null for an allocate request and thus causes an OutOfMemory exception to be thrown. Note: The OutOfMemory exception is thrown only when the heap has been fully expanded and the percentage of application run time that is not spent in garbage collection is at least 95%. This percentage is the default value that triggers an excessive GC event. You can control this value with the -Xgc:excessiveGCratio option.","title":"\u2011Xenableexcessivegc / \u2011Xdisableexcessivegc"},{"location":"xenableexcessivegc/#syntax","text":"Setting Effect Default -Xenableexcessivegc Enable exception yes -Xdisableexcessivegc Disable exception","title":"Syntax"},{"location":"xenableexplicitgc/","text":"\u2011Xenableexplicitgc / \u2011Xdisableexplicitgc Enables and disables garbage collection (GC) when calls are made to System.gc() . Syntax Setting Effect Default -Xenableexplicitgc Enable GC yes -Xdisableexplicitgc Disable GC Explanation Although it is possible to programmatically trigger a garbage collection by calling System.gc() , performance can be adversely affected by halting the application before it is really necessary. Use this option to prevent the VM responding to application requests for a garage collection cycle.","title":"-Xenableexplicitgc"},{"location":"xenableexplicitgc/#xenableexplicitgc-xdisableexplicitgc","text":"Enables and disables garbage collection (GC) when calls are made to System.gc() .","title":"\u2011Xenableexplicitgc / \u2011Xdisableexplicitgc"},{"location":"xenableexplicitgc/#syntax","text":"Setting Effect Default -Xenableexplicitgc Enable GC yes -Xdisableexplicitgc Disable GC","title":"Syntax"},{"location":"xenableexplicitgc/#explanation","text":"Although it is possible to programmatically trigger a garbage collection by calling System.gc() , performance can be adversely affected by halting the application before it is really necessary. Use this option to prevent the VM responding to application requests for a garage collection cycle.","title":"Explanation"},{"location":"xenablestringconstantgc/","text":"\u2011Xenablestringconstantgc / \u2011Xdisablestringconstantgc Enables or disables the collection of strings from the string intern table. Syntax Setting Effect Default -Xenablestringconstantgc Enable collection yes -Xdisablestringconstantgc Disable collection","title":"-Xenablestringconstantgc"},{"location":"xenablestringconstantgc/#xenablestringconstantgc-xdisablestringconstantgc","text":"Enables or disables the collection of strings from the string intern table.","title":"\u2011Xenablestringconstantgc / \u2011Xdisablestringconstantgc"},{"location":"xenablestringconstantgc/#syntax","text":"Setting Effect Default -Xenablestringconstantgc Enable collection yes -Xdisablestringconstantgc Disable collection","title":"Syntax"},{"location":"xfastresolve/","text":"-Xfastresolve Tune performance by improving the resolution time for classes when the field count exceeds the specified threshold. If profiling tools show significant costs in field resolution, change the threshold until the costs are reduced. If you enable this option, additional memory is used when the threshold is exceeded. Note: The use of this option is deprecated. Syntax -Xfastresolve<n> where <n> is the required threshold.","title":"-Xfastresolve"},{"location":"xfastresolve/#-xfastresolve","text":"Tune performance by improving the resolution time for classes when the field count exceeds the specified threshold. If profiling tools show significant costs in field resolution, change the threshold until the costs are reduced. If you enable this option, additional memory is used when the threshold is exceeded. Note: The use of this option is deprecated.","title":"-Xfastresolve"},{"location":"xfastresolve/#syntax","text":"-Xfastresolve<n> where <n> is the required threshold.","title":"Syntax"},{"location":"xfuture/","text":"-Xfuture As described in the Oracle \"Non-Standard Options\" documentation , this Hotspot option turns on strict class-file format checks. For compatibility, this option is also supported by the OpenJ9 VM. Syntax -Xfuture Explanation Oracle recommend that you use this flag when you are developing new code because stricter checks will become the default in future releases. Note: You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier . Default behavior By default, strict format checks are disabled.","title":"-Xfuture"},{"location":"xfuture/#-xfuture","text":"As described in the Oracle \"Non-Standard Options\" documentation , this Hotspot option turns on strict class-file format checks. For compatibility, this option is also supported by the OpenJ9 VM.","title":"-Xfuture"},{"location":"xfuture/#syntax","text":"-Xfuture","title":"Syntax"},{"location":"xfuture/#explanation","text":"Oracle recommend that you use this flag when you are developing new code because stricter checks will become the default in future releases. Note: You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier .","title":"Explanation"},{"location":"xfuture/#default-behavior","text":"By default, strict format checks are disabled.","title":"Default behavior"},{"location":"xgc/","text":"-Xgc Options that change the behavior of the Garbage Collector (GC). Syntax -Xgc:<parameter> Parameters Parameter Effect concurrentScavenge Enables a garbage collection (GC) mode with less pause times. dnssExpectedTimeRatioMaximum Sets the maximum time to spend on GC of the nursery area. dnssExpectedTimeRatioMinimum Sets the minimum time to spend on GC of the nursery area. excessiveGCratio Sets a boundary value beyond which GC is deemed to be excessive. minContractPercent Sets the minimum percentage of the heap that can be contracted at any given time. maxContractPercent Sets the maximum percentage of the heap that can be contracted at any given time. overrideHiresTimerCheck Overrides GC operating system checks for timer resolution. preferredHeapBase Sets a memory range for the Java\u2122 heap. (AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. scvTenureAge Sets the initial scavenger tenure age in the generational concurrent GC policy. stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required. tlhIncrementSize Sets the size of the thread local heap (TLH). increment tlhInitialSize Sets the initial size of the thread local. heap tlhMaximumSize Sets the maximum size of the thread local. heap verboseFormat Sets the verbose GC format. concurrentScavenge (64-bit: Windows, AIX, Linux (x86, POWER\u00ae, or IBM Z\u00ae), and z/OS\u00ae) -Xgc:concurrentScavenge This option supports pause-less garbage collection mode when you use the Generational Concurrent ( gencon ) garbage collection policy (the default policy). If you set this option, the VM attempts to reduce GC pause times for response-time sensitive, large-heap applications. Note: Linux on Z and z/OS This option is supported by all generations of IBM Z\u00ae hardware to enable pause-less GC with two modes of operation: hardware-based and software-based operations. IBM z13\u2122 and earlier hardware operates in software-based pause-less GC mode; and IBM z14\u2122 and later hardware (with supported software) operates in hardware-based mode. Hardware-based pause-less GC is supported on IBM z14\u2122 and later hardware running the following software: Operating systems: z/OS V2R3 z/OS V2R2 and APAR OA51643 . RHEL 7.5 (minimum kernel level 4.14) Ubuntu 18.04 (minimum kernel level 4.15) Hypervisors: IBM z/VM 6.4 with APAR VM65987 IBM z/VM 7.1 KVM solutions with QEMU 2.10 or later and minimum host kernel level 4.12 (for example, RHEL 7.5 with kernel level 4.14) If these requirements are not met, the option is ignored. Note: On z/OS, the virtual storage used might exceed the Java maximum heap size. Set the z/OS memory limit, specified by ulimit -M , to a larger value than the maximum heap size. dnssExpectedTimeRatioMaximum -Xgc:dnssExpectedTimeRatioMaximum=<value> Setting Value Default <value> [percentage] 5 The maximum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals. dnssExpectedTimeRatioMinimum -Xgc:dnssExpectedTimeRatioMinimum=<value> Setting Value Default <value> [percentage] 1 The minimum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals. excessiveGCratio -Xgc:excessiveGCratio=<value> Setting Value Default <value> [percentage] 95 where <value> is a percentage of total application run time that is not spent in GC. The default value is 95, which means that anything over 5% of total application run time spent on GC is deemed excessive. This option can be used only when -Xenableexcessivegc is set (enabled by default). minContractPercent -Xgc:minContractPercent=<n> Setting Value Default <n> [percentage] - The minimum percentage of the heap that can be contracted at any given time. maxContractPercent -Xgc:maxContractPercent=<n> Setting Value Default <n> [percentage] - The maximum percentage of the heap that can be contracted at any given time. For example, -Xgc:maxContractPercent=20 causes the heap to contract by as much as 20%. overrideHiresTimerCheck -Xgc:overrideHiresTimerCheck When the VM starts, the GC checks that the operating system can meet the timer resolution requirements for the requested target pause time. Typically, this check correctly identifies operating systems that can deliver adequate time resolution. However, in some cases the operating system provides a more conservative answer than strictly necessary for GC pause time management, which prevents startup. Specifying this parameter causes the GC to ignore the answer returned by the operating system. The VM starts, but GC pause time management remains subject to operating system performance, which might not provide adequate timer resolution. Note: Use this option with caution, and only when you are unable to use a supported operating system. preferredHeapBase (AIX, Linux, macOS, and Windows only) -Xgc:preferredHeapBase=<address> Setting Value Default <value> [hexadecimal] - where, <address> is the base memory address for the heap. Use this option with the -Xcompressedrefs option to allocate the heap you specify with the -Xmx option, in a memory range of your choice. If -Xcompressedrefs is not specified, this option has no effect. In the following example, the heap is located at the 4 GB mark, leaving the lowest 4 GB of address space for use by other processes. -Xgc:preferredHeapBase=0x100000000 If the heap cannot be allocated in a contiguous block at the preferredHeapBase address you specified, an error occurs detailing a Garbage Collection (GC) allocation failure startup. When the preferredHeapBase option is used with the -Xlp option, the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size. scvNoAdaptiveTenure -Xgc:scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. The initial age that is set is maintained throughout the run time of the VM. See scvTenureAge . scvTenureAge -Xgc:scvTenureAge=<n> Setting Value Default <n> [1 - 14] 10 Sets the initial scavenger tenure age in the generational concurrent GC policy. For more information, see Generational Concurrent policy . stdGlobalCompactToSatisfyAllocate -Xgc:stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required to satisfy the current allocation failure by removing the dynamic compaction triggers that look at heap occupancy. This option works only with the following GC policies: gencon optthruput optavgpause tlhIncrementSize -Xgc:tlhIncrementSize=<bytes> Sets the increment size of the thread local heap (TLH), which plays a key role in cache allocation. Threads start creating TLHs with a predefined initial size (default 2 KB). On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). Use this option to control the increment size. tlhInitialSize -Xgc:tlhInitialSize=<bytes> Sets the initial size of the TLH. The default size is 2 KB. tlhMaximumSize -Xgc:tlhMaximumSize=<bytes> Sets the maximum size of the TLH. The size of the TLH varies from 512 bytes (768 on 64-bit JVMs) to 128 KB, depending on the allocation rate of the thread. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. Typically, when the maximum TLH size is increased, you should also increase the increment size ( -XtlhIncrementSize ) proportionally, so that active threads can reach the maximum requested TLH size more quickly. verboseFormat -Xgc:verboseFormat=<format> Setting Value Default <format> default yes deprecated default : The default verbose garbage collection format for OpenJ9. For more information, see Verbose garbage collection logging . deprecated : The verbose garbage collection format available in the IBM J9 VM V2.4 and earlier.","title":"-Xgc"},{"location":"xgc/#-xgc","text":"Options that change the behavior of the Garbage Collector (GC).","title":"-Xgc"},{"location":"xgc/#syntax","text":"-Xgc:<parameter>","title":"Syntax"},{"location":"xgc/#parameters","text":"Parameter Effect concurrentScavenge Enables a garbage collection (GC) mode with less pause times. dnssExpectedTimeRatioMaximum Sets the maximum time to spend on GC of the nursery area. dnssExpectedTimeRatioMinimum Sets the minimum time to spend on GC of the nursery area. excessiveGCratio Sets a boundary value beyond which GC is deemed to be excessive. minContractPercent Sets the minimum percentage of the heap that can be contracted at any given time. maxContractPercent Sets the maximum percentage of the heap that can be contracted at any given time. overrideHiresTimerCheck Overrides GC operating system checks for timer resolution. preferredHeapBase Sets a memory range for the Java\u2122 heap. (AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. scvTenureAge Sets the initial scavenger tenure age in the generational concurrent GC policy. stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required. tlhIncrementSize Sets the size of the thread local heap (TLH). increment tlhInitialSize Sets the initial size of the thread local. heap tlhMaximumSize Sets the maximum size of the thread local. heap verboseFormat Sets the verbose GC format.","title":"Parameters"},{"location":"xgc/#concurrentscavenge","text":"(64-bit: Windows, AIX, Linux (x86, POWER\u00ae, or IBM Z\u00ae), and z/OS\u00ae) -Xgc:concurrentScavenge This option supports pause-less garbage collection mode when you use the Generational Concurrent ( gencon ) garbage collection policy (the default policy). If you set this option, the VM attempts to reduce GC pause times for response-time sensitive, large-heap applications. Note: Linux on Z and z/OS This option is supported by all generations of IBM Z\u00ae hardware to enable pause-less GC with two modes of operation: hardware-based and software-based operations. IBM z13\u2122 and earlier hardware operates in software-based pause-less GC mode; and IBM z14\u2122 and later hardware (with supported software) operates in hardware-based mode. Hardware-based pause-less GC is supported on IBM z14\u2122 and later hardware running the following software: Operating systems: z/OS V2R3 z/OS V2R2 and APAR OA51643 . RHEL 7.5 (minimum kernel level 4.14) Ubuntu 18.04 (minimum kernel level 4.15) Hypervisors: IBM z/VM 6.4 with APAR VM65987 IBM z/VM 7.1 KVM solutions with QEMU 2.10 or later and minimum host kernel level 4.12 (for example, RHEL 7.5 with kernel level 4.14) If these requirements are not met, the option is ignored. Note: On z/OS, the virtual storage used might exceed the Java maximum heap size. Set the z/OS memory limit, specified by ulimit -M , to a larger value than the maximum heap size.","title":"concurrentScavenge"},{"location":"xgc/#dnssexpectedtimeratiomaximum","text":"-Xgc:dnssExpectedTimeRatioMaximum=<value> Setting Value Default <value> [percentage] 5 The maximum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals.","title":"dnssExpectedTimeRatioMaximum"},{"location":"xgc/#dnssexpectedtimeratiominimum","text":"-Xgc:dnssExpectedTimeRatioMinimum=<value> Setting Value Default <value> [percentage] 1 The minimum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals.","title":"dnssExpectedTimeRatioMinimum"},{"location":"xgc/#excessivegcratio","text":"-Xgc:excessiveGCratio=<value> Setting Value Default <value> [percentage] 95 where <value> is a percentage of total application run time that is not spent in GC. The default value is 95, which means that anything over 5% of total application run time spent on GC is deemed excessive. This option can be used only when -Xenableexcessivegc is set (enabled by default).","title":"excessiveGCratio"},{"location":"xgc/#mincontractpercent","text":"-Xgc:minContractPercent=<n> Setting Value Default <n> [percentage] - The minimum percentage of the heap that can be contracted at any given time.","title":"minContractPercent"},{"location":"xgc/#maxcontractpercent","text":"-Xgc:maxContractPercent=<n> Setting Value Default <n> [percentage] - The maximum percentage of the heap that can be contracted at any given time. For example, -Xgc:maxContractPercent=20 causes the heap to contract by as much as 20%.","title":"maxContractPercent"},{"location":"xgc/#overridehirestimercheck","text":"-Xgc:overrideHiresTimerCheck When the VM starts, the GC checks that the operating system can meet the timer resolution requirements for the requested target pause time. Typically, this check correctly identifies operating systems that can deliver adequate time resolution. However, in some cases the operating system provides a more conservative answer than strictly necessary for GC pause time management, which prevents startup. Specifying this parameter causes the GC to ignore the answer returned by the operating system. The VM starts, but GC pause time management remains subject to operating system performance, which might not provide adequate timer resolution. Note: Use this option with caution, and only when you are unable to use a supported operating system.","title":"overrideHiresTimerCheck"},{"location":"xgc/#preferredheapbase","text":"(AIX, Linux, macOS, and Windows only) -Xgc:preferredHeapBase=<address> Setting Value Default <value> [hexadecimal] - where, <address> is the base memory address for the heap. Use this option with the -Xcompressedrefs option to allocate the heap you specify with the -Xmx option, in a memory range of your choice. If -Xcompressedrefs is not specified, this option has no effect. In the following example, the heap is located at the 4 GB mark, leaving the lowest 4 GB of address space for use by other processes. -Xgc:preferredHeapBase=0x100000000 If the heap cannot be allocated in a contiguous block at the preferredHeapBase address you specified, an error occurs detailing a Garbage Collection (GC) allocation failure startup. When the preferredHeapBase option is used with the -Xlp option, the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size.","title":"preferredHeapBase"},{"location":"xgc/#scvnoadaptivetenure","text":"-Xgc:scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. The initial age that is set is maintained throughout the run time of the VM. See scvTenureAge .","title":"scvNoAdaptiveTenure"},{"location":"xgc/#scvtenureage","text":"-Xgc:scvTenureAge=<n> Setting Value Default <n> [1 - 14] 10 Sets the initial scavenger tenure age in the generational concurrent GC policy. For more information, see Generational Concurrent policy .","title":"scvTenureAge"},{"location":"xgc/#stdglobalcompacttosatisfyallocate","text":"-Xgc:stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required to satisfy the current allocation failure by removing the dynamic compaction triggers that look at heap occupancy. This option works only with the following GC policies: gencon optthruput optavgpause","title":"stdGlobalCompactToSatisfyAllocate"},{"location":"xgc/#tlhincrementsize","text":"-Xgc:tlhIncrementSize=<bytes> Sets the increment size of the thread local heap (TLH), which plays a key role in cache allocation. Threads start creating TLHs with a predefined initial size (default 2 KB). On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). Use this option to control the increment size.","title":"tlhIncrementSize"},{"location":"xgc/#tlhinitialsize","text":"-Xgc:tlhInitialSize=<bytes> Sets the initial size of the TLH. The default size is 2 KB.","title":"tlhInitialSize"},{"location":"xgc/#tlhmaximumsize","text":"-Xgc:tlhMaximumSize=<bytes> Sets the maximum size of the TLH. The size of the TLH varies from 512 bytes (768 on 64-bit JVMs) to 128 KB, depending on the allocation rate of the thread. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. Typically, when the maximum TLH size is increased, you should also increase the increment size ( -XtlhIncrementSize ) proportionally, so that active threads can reach the maximum requested TLH size more quickly.","title":"tlhMaximumSize"},{"location":"xgc/#verboseformat","text":"-Xgc:verboseFormat=<format> Setting Value Default <format> default yes deprecated default : The default verbose garbage collection format for OpenJ9. For more information, see Verbose garbage collection logging . deprecated : The verbose garbage collection format available in the IBM J9 VM V2.4 and earlier.","title":"verboseFormat"},{"location":"xgcpolicy/","text":"-Xgcpolicy Controls the behavior of the garbage collector by specifying different garbage collection policies. Syntax -Xgcpolicy:<parameter> Parameters Parameter Default balanced gencon yes metronome (AIX\u00ae, Linux\u00ae x86 only) nogc optavgpause optthruput Specify the garbage collection policy that you want the OpenJ9 VM to use: balanced -Xgcpolicy:balanced The balanced policy policy uses mark, sweep, compact and generational style garbage collection. The concurrent mark phase is disabled; concurrent garbage collection technology is used, but not in the way that concurrent mark is implemented for other policies. The balanced policy uses a region-based layout for the Java\u2122 heap. These regions are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The policy tries to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance. If you are using large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER\u2122 platforms only), the balanced policy might further improve application throughput. Note: If you are using the balanced GC policy in a Docker container that uses the default seccomp Docker profile, you must start the container with --security-opt seccomp=unconfined to exploit NUMA characteristics. These options are not required if you are running in Kubernetes, because unconfined is set by default (see Seccomp ). For more information about this policy, including when to use it, see Balanced Garbage Collection policy . Defaults and options The initial heap size is Xmx/1024 , rounded down to the nearest power of 2, where Xmx is the maximum heap size available. You can override this value by specifying the -Xms option on the command line. The following options can also be specified on the command line with -Xgcpolicy:balanced : -Xalwaysclassgc -Xclassgc -Xcompactexplicitgc -Xdisableexcessivegc -Xdisableexplicitgc -Xenableexcessivegc -Xgcthreads<number> -Xgcworkpackets<number> -Xmaxe<size> -Xmaxf<percentage> -Xmaxt<percentage> -Xmca<size> -Xmco<size> -Xmine<size> -Xminf<percentage> -Xmint<percentage> -Xmn<size> -Xmns<size> -Xmnx<size> -Xms<size> -Xmx<size> -Xnoclassgc -Xnocompactexplicitgc -Xnuma:none -Xsoftmx<size> -Xsoftrefthreshold<number> -Xverbosegclog[:<file> [, <X>,<Y>]] The behavior of the following options is different when specified with -Xgcpolicy:balanced : -Xcompactgc Compaction occurs when a System.gc() call is received (default). Compaction always occurs on all other collection types. -Xnocompactgc Compaction does not occur when a System.gc() call is received. Compaction always occurs on all other collection types. The following options are ignored when specified with -Xgcpolicy:balanced : -Xconcurrentbackground<number> -Xconcurrentlevel<number> -Xconcurrentslack<size> -Xconmeter:<soa | loa | dynamic> -Xdisablestringconstantgc -Xenablestringconstantgc -Xloa -Xloainitial<percentage> -Xloamaximum<percentage> -Xloaminimum<percentage> -Xmo<size> -Xmoi<size> -Xmos<size> -Xmr<size> -Xmrx<size> -Xnoloa -Xnopartialcompactgc (deprecated) -Xpartialcompactgc (deprecated) gencon -Xgcpolicy:gencon The generational concurrent policy (default) uses a concurrent mark phase combined with generational garbage collection to help minimize the time that is spent in any garbage collection pause. This policy is particularly useful for applications with many short-lived objects, such as transactional applications. Pause times can be significantly shorter than with the optthruput policy, while still producing good throughput. Heap fragmentation is also reduced. metronome (AIX, Linux x86 only) -Xgcpolicy:metronome The metronome policy is an incremental, deterministic garbage collector with short pause times. Applications that are dependent on precise response times can take advantage of this technology by avoiding potentially long delays from garbage collection activity. The metronome policy is supported on specific hardware and operating system configurations. For more information, see Using the Metronome Garbage Collector . Defaults and options -Xgc:synchronousGCOnOOM | -Xgc:nosynchronousGCOnOOM One occasion when garbage collection occurs is when the heap runs out of memory. If there is no more free space in the heap, using -Xgc:synchronousGCOnOOM stops your application while garbage collection removes unused objects. If free space runs out again, consider decreasing the target utilization to allow garbage collection more time to complete. Setting -Xgc:nosynchronousGCOnOOM implies that when heap memory is full your application stops and issues an out-of-memory message. The default is -Xgc:synchronousGCOnOOM . -Xnoclassgc Disables class garbage collection. This option switches off garbage collection of storage associated with Java classes that are no longer being used by the OpenJ9 VM. The default behavior is -Xnoclassgc. -Xgc:targetPauseTime=N Sets the garbage collection pause time, where N is the time in milliseconds. When this option is specified, the GC operates with pauses that do not exceed the value specified. If this option is not specified the default pause time is set to 3 milliseconds. For example, running with -Xgc:targetPauseTime=20 causes the GC to pause for no longer than 20 milliseconds during GC operations. -Xgc:targetUtilization=N Sets the application utilization to N% ; the Garbage Collector attempts to use at most (100-N)% of each time interval. Reasonable values are in the range of 50-80%. Applications with low allocation rates might be able to run at 90%. The default is 70%. This example shows the maximum size of the heap memory is 30 MB. The garbage collector attempts to use 25% of each time interval because the target utilization for the application is 75%. java -Xgcpolicy:metronome -Xmx30m -Xgc:targetUtilization=75 Test -Xgc:threads=N Specifies the number of GC threads to run. The default is the number of processor cores available to the process. The maximum value you can specify is the number of processors available to the operating system. -Xgc:verboseGCCycleTime=N N is the time in milliseconds that the summary information should be dumped. Note: The cycle time does not mean that the summary information is dumped precisely at that time, but when the last garbage collection event that meets this time criterion passes. -Xmx<size> Specifies the Java heap size. Unlike other garbage collection strategies, the real-time Metronome GC does not support heap expansion. There is not an initial or maximum heap size option. You can specify only the maximum heap size. nogc -Xgcpolicy:nogc This policy handles only memory allocation and heap expansion, but doesn't reclaim any memory. If the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. Because there is no GC pause and most overheads on allocations are eliminated, the impact on runtime performance is minimized. This policy therefore provides benfits for \"garbage-free\" applications. See the following section, \"When to use nogc\", for some possible use cases. You should be especially careful when using any of the following techniques with nogc because memory is never released under this policy: - Finalization - Direct memory access - Weak, soft, and phantom references This policy can also be enabled with the -XX:+UseNoGC option. Further details are available at JEP 318: Epsilon: A No-Op Garbage Collector . When to use nogc For most Java applications, you should not use nogc . However, there are some particular situations where it can be appropriate: Testing during development GC performance. Use nogc as a baseline when testing the performance of other GC policies, including the provision of a low-latency baseline. Application memory. Use nogc to test your settings for allocated memory. If you use -Xmx to set the heap size that should not be exceeded, then your application will crash with a heap dump if it tries to exceed your memory limit. Running applications with minimal or no GC requrements You might use nogc when an application is so short lived that allocated memory is never exhausted and running a full GC cycle is therefore a waste of resources. Similarly, when memory application is well understood or where there is rarely memory to be reclaimed, you might prefer to avoid unnecessary GC cycles and rely on a failover mechanism to occasionally restart the VM as necessary. optavgpause -Xgcpolicy:optavgpause The \"optimize for pause time\" policy uses concurrent mark and concurrent sweep phases. Pause times are shorter than with optthruput , but application throughput is reduced because some garbage collection work is taking place while the application is running. Consider using this policy if you have a large heap size (available on 64-bit platforms), because this policy limits the effect of increasing heap size on the length of the garbage collection pause. However, if your application uses many short-lived objects, the gencon policy might produce better performance. optthruput -Xgcpolicy:optthruput The \"optimize for throughput\" policy disables the concurrent mark phase. The application stops during global garbage collection, so long pauses can occur. This configuration is typically used for large-heap applications when high application throughput, rather than short garbage collection pauses, is the main performance goal. If your application cannot tolerate long garbage collection pauses, consider using another policy, such as gencon .","title":"-Xgcpolicy"},{"location":"xgcpolicy/#-xgcpolicy","text":"Controls the behavior of the garbage collector by specifying different garbage collection policies.","title":"-Xgcpolicy"},{"location":"xgcpolicy/#syntax","text":"-Xgcpolicy:<parameter>","title":"Syntax"},{"location":"xgcpolicy/#parameters","text":"Parameter Default balanced gencon yes metronome (AIX\u00ae, Linux\u00ae x86 only) nogc optavgpause optthruput Specify the garbage collection policy that you want the OpenJ9 VM to use:","title":"Parameters"},{"location":"xgcpolicy/#balanced","text":"-Xgcpolicy:balanced The balanced policy policy uses mark, sweep, compact and generational style garbage collection. The concurrent mark phase is disabled; concurrent garbage collection technology is used, but not in the way that concurrent mark is implemented for other policies. The balanced policy uses a region-based layout for the Java\u2122 heap. These regions are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The policy tries to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance. If you are using large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER\u2122 platforms only), the balanced policy might further improve application throughput. Note: If you are using the balanced GC policy in a Docker container that uses the default seccomp Docker profile, you must start the container with --security-opt seccomp=unconfined to exploit NUMA characteristics. These options are not required if you are running in Kubernetes, because unconfined is set by default (see Seccomp ). For more information about this policy, including when to use it, see Balanced Garbage Collection policy .","title":"balanced"},{"location":"xgcpolicy/#defaults-and-options","text":"The initial heap size is Xmx/1024 , rounded down to the nearest power of 2, where Xmx is the maximum heap size available. You can override this value by specifying the -Xms option on the command line. The following options can also be specified on the command line with -Xgcpolicy:balanced : -Xalwaysclassgc -Xclassgc -Xcompactexplicitgc -Xdisableexcessivegc -Xdisableexplicitgc -Xenableexcessivegc -Xgcthreads<number> -Xgcworkpackets<number> -Xmaxe<size> -Xmaxf<percentage> -Xmaxt<percentage> -Xmca<size> -Xmco<size> -Xmine<size> -Xminf<percentage> -Xmint<percentage> -Xmn<size> -Xmns<size> -Xmnx<size> -Xms<size> -Xmx<size> -Xnoclassgc -Xnocompactexplicitgc -Xnuma:none -Xsoftmx<size> -Xsoftrefthreshold<number> -Xverbosegclog[:<file> [, <X>,<Y>]] The behavior of the following options is different when specified with -Xgcpolicy:balanced : -Xcompactgc Compaction occurs when a System.gc() call is received (default). Compaction always occurs on all other collection types. -Xnocompactgc Compaction does not occur when a System.gc() call is received. Compaction always occurs on all other collection types. The following options are ignored when specified with -Xgcpolicy:balanced : -Xconcurrentbackground<number> -Xconcurrentlevel<number> -Xconcurrentslack<size> -Xconmeter:<soa | loa | dynamic> -Xdisablestringconstantgc -Xenablestringconstantgc -Xloa -Xloainitial<percentage> -Xloamaximum<percentage> -Xloaminimum<percentage> -Xmo<size> -Xmoi<size> -Xmos<size> -Xmr<size> -Xmrx<size> -Xnoloa -Xnopartialcompactgc (deprecated) -Xpartialcompactgc (deprecated)","title":"Defaults and options"},{"location":"xgcpolicy/#gencon","text":"-Xgcpolicy:gencon The generational concurrent policy (default) uses a concurrent mark phase combined with generational garbage collection to help minimize the time that is spent in any garbage collection pause. This policy is particularly useful for applications with many short-lived objects, such as transactional applications. Pause times can be significantly shorter than with the optthruput policy, while still producing good throughput. Heap fragmentation is also reduced.","title":"gencon"},{"location":"xgcpolicy/#metronome-aix-linux-x86-only","text":"-Xgcpolicy:metronome The metronome policy is an incremental, deterministic garbage collector with short pause times. Applications that are dependent on precise response times can take advantage of this technology by avoiding potentially long delays from garbage collection activity. The metronome policy is supported on specific hardware and operating system configurations. For more information, see Using the Metronome Garbage Collector .","title":"metronome (AIX, Linux x86 only)"},{"location":"xgcpolicy/#defaults-and-options_1","text":"-Xgc:synchronousGCOnOOM | -Xgc:nosynchronousGCOnOOM One occasion when garbage collection occurs is when the heap runs out of memory. If there is no more free space in the heap, using -Xgc:synchronousGCOnOOM stops your application while garbage collection removes unused objects. If free space runs out again, consider decreasing the target utilization to allow garbage collection more time to complete. Setting -Xgc:nosynchronousGCOnOOM implies that when heap memory is full your application stops and issues an out-of-memory message. The default is -Xgc:synchronousGCOnOOM . -Xnoclassgc Disables class garbage collection. This option switches off garbage collection of storage associated with Java classes that are no longer being used by the OpenJ9 VM. The default behavior is -Xnoclassgc. -Xgc:targetPauseTime=N Sets the garbage collection pause time, where N is the time in milliseconds. When this option is specified, the GC operates with pauses that do not exceed the value specified. If this option is not specified the default pause time is set to 3 milliseconds. For example, running with -Xgc:targetPauseTime=20 causes the GC to pause for no longer than 20 milliseconds during GC operations. -Xgc:targetUtilization=N Sets the application utilization to N% ; the Garbage Collector attempts to use at most (100-N)% of each time interval. Reasonable values are in the range of 50-80%. Applications with low allocation rates might be able to run at 90%. The default is 70%. This example shows the maximum size of the heap memory is 30 MB. The garbage collector attempts to use 25% of each time interval because the target utilization for the application is 75%. java -Xgcpolicy:metronome -Xmx30m -Xgc:targetUtilization=75 Test -Xgc:threads=N Specifies the number of GC threads to run. The default is the number of processor cores available to the process. The maximum value you can specify is the number of processors available to the operating system. -Xgc:verboseGCCycleTime=N N is the time in milliseconds that the summary information should be dumped. Note: The cycle time does not mean that the summary information is dumped precisely at that time, but when the last garbage collection event that meets this time criterion passes. -Xmx<size> Specifies the Java heap size. Unlike other garbage collection strategies, the real-time Metronome GC does not support heap expansion. There is not an initial or maximum heap size option. You can specify only the maximum heap size.","title":"Defaults and options"},{"location":"xgcpolicy/#nogc","text":"-Xgcpolicy:nogc This policy handles only memory allocation and heap expansion, but doesn't reclaim any memory. If the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. Because there is no GC pause and most overheads on allocations are eliminated, the impact on runtime performance is minimized. This policy therefore provides benfits for \"garbage-free\" applications. See the following section, \"When to use nogc\", for some possible use cases. You should be especially careful when using any of the following techniques with nogc because memory is never released under this policy: - Finalization - Direct memory access - Weak, soft, and phantom references This policy can also be enabled with the -XX:+UseNoGC option. Further details are available at JEP 318: Epsilon: A No-Op Garbage Collector .","title":"nogc"},{"location":"xgcpolicy/#when-to-use-nogc","text":"For most Java applications, you should not use nogc . However, there are some particular situations where it can be appropriate: Testing during development GC performance. Use nogc as a baseline when testing the performance of other GC policies, including the provision of a low-latency baseline. Application memory. Use nogc to test your settings for allocated memory. If you use -Xmx to set the heap size that should not be exceeded, then your application will crash with a heap dump if it tries to exceed your memory limit. Running applications with minimal or no GC requrements You might use nogc when an application is so short lived that allocated memory is never exhausted and running a full GC cycle is therefore a waste of resources. Similarly, when memory application is well understood or where there is rarely memory to be reclaimed, you might prefer to avoid unnecessary GC cycles and rely on a failover mechanism to occasionally restart the VM as necessary.","title":"When to use nogc"},{"location":"xgcpolicy/#optavgpause","text":"-Xgcpolicy:optavgpause The \"optimize for pause time\" policy uses concurrent mark and concurrent sweep phases. Pause times are shorter than with optthruput , but application throughput is reduced because some garbage collection work is taking place while the application is running. Consider using this policy if you have a large heap size (available on 64-bit platforms), because this policy limits the effect of increasing heap size on the length of the garbage collection pause. However, if your application uses many short-lived objects, the gencon policy might produce better performance.","title":"optavgpause"},{"location":"xgcpolicy/#optthruput","text":"-Xgcpolicy:optthruput The \"optimize for throughput\" policy disables the concurrent mark phase. The application stops during global garbage collection, so long pauses can occur. This configuration is typically used for large-heap applications when high application throughput, rather than short garbage collection pauses, is the main performance goal. If your application cannot tolerate long garbage collection pauses, consider using another policy, such as gencon .","title":"optthruput"},{"location":"xgcsplitheap/","text":"-Xgc:splitheap (Windows\u2122 32-bit only) By default, the VM uses a contiguous Java\u2122 heap to store Java objects. However, on Windows 32-bit systems, there are restrictions in the 32-bit memory space that prevents a process accessing more than 2GB of memory, even if there is more memory available. To increase the maximum allocatable heap size, OpenJ9 can split the heap, allowing memory use up to the 4GB limit. Restrictions: A split heap forces the Garbage Collector to use the gencon policy and allocates the new and old areas of the generational Java heap in separate areas of memory. Resizing of the new and old memory areas is disabled. This option can be used only with Java SE version 8 runtime environments. This option is deprecated in Version 8 and will be removed from future versions. Syntax -Xgc:splitheap Explanation Use -Xgc:splitheap for applications that must run on the 32-bit VM because of 32-bit JNI libraries, a 32-bit operating system, or 32-bit hardware, but need large Java heaps. By using a larger heap, you can allocate more objects before incurring a garbage collection and you can increase the number of live objects that you can use before an OutOfMemoryError exception occurs. With a split heap, the old area is committed to its maximum size (set with -Xmox ) in a lower region of memory and the new area is committed to its maximum size (set with -Xmnx ) in a higher region of memory. This option is not recommended if your application works in the any of the following ways: Performs poorly under the gencon garbage collection policy. Loads a very large number of classes. Uses large amounts of native system memory in JNI libraries; the increased size Java heap might reserve too much of the application's address space.","title":"-Xgc:splitheap"},{"location":"xgcsplitheap/#-xgcsplitheap","text":"(Windows\u2122 32-bit only) By default, the VM uses a contiguous Java\u2122 heap to store Java objects. However, on Windows 32-bit systems, there are restrictions in the 32-bit memory space that prevents a process accessing more than 2GB of memory, even if there is more memory available. To increase the maximum allocatable heap size, OpenJ9 can split the heap, allowing memory use up to the 4GB limit. Restrictions: A split heap forces the Garbage Collector to use the gencon policy and allocates the new and old areas of the generational Java heap in separate areas of memory. Resizing of the new and old memory areas is disabled. This option can be used only with Java SE version 8 runtime environments. This option is deprecated in Version 8 and will be removed from future versions.","title":"-Xgc:splitheap"},{"location":"xgcsplitheap/#syntax","text":"-Xgc:splitheap","title":"Syntax"},{"location":"xgcsplitheap/#explanation","text":"Use -Xgc:splitheap for applications that must run on the 32-bit VM because of 32-bit JNI libraries, a 32-bit operating system, or 32-bit hardware, but need large Java heaps. By using a larger heap, you can allocate more objects before incurring a garbage collection and you can increase the number of live objects that you can use before an OutOfMemoryError exception occurs. With a split heap, the old area is committed to its maximum size (set with -Xmox ) in a lower region of memory and the new area is committed to its maximum size (set with -Xmnx ) in a higher region of memory. This option is not recommended if your application works in the any of the following ways: Performs poorly under the gencon garbage collection policy. Loads a very large number of classes. Uses large amounts of native system memory in JNI libraries; the increased size Java heap might reserve too much of the application's address space.","title":"Explanation"},{"location":"xgcthreads/","text":"-Xgcthreads Sets the number of threads that the Garbage Collector uses for parallel operations. Syntax -Xgcthreads<number> Explanation The total number of GC threads is composed of one application thread with the remainder being dedicated GC threads. By default, the number is set to n-1 , where n is the number of reported CPUs, up to a maximum of 64. Where SMT or hyperthreading is in place, the number of reported CPUs is larger than the number of physical CPUs. Likewise, where virtualization is in place, the number of reported CPUs is the number of virtual CPUs assigned to the operating system. To set it to a different number, for example 4, use -Xgcthreads4 . The minimum valid value is 1, which disables parallel operations, at the cost of performance. No advantage is gained if you increase the number of threads to more than the default setting. On systems running multiple VMs or in LPAR environments where multiple VMs can share the same physical CPUs, you might want to restrict the number of GC threads used by each VM. The restriction helps prevent the total number of parallel operation GC threads for all VMs exceeding the number of physical CPUs present, when multiple VMs perform garbage collection at the same time.","title":"-Xgcthreads"},{"location":"xgcthreads/#-xgcthreads","text":"Sets the number of threads that the Garbage Collector uses for parallel operations.","title":"-Xgcthreads"},{"location":"xgcthreads/#syntax","text":"-Xgcthreads<number>","title":"Syntax"},{"location":"xgcthreads/#explanation","text":"The total number of GC threads is composed of one application thread with the remainder being dedicated GC threads. By default, the number is set to n-1 , where n is the number of reported CPUs, up to a maximum of 64. Where SMT or hyperthreading is in place, the number of reported CPUs is larger than the number of physical CPUs. Likewise, where virtualization is in place, the number of reported CPUs is the number of virtual CPUs assigned to the operating system. To set it to a different number, for example 4, use -Xgcthreads4 . The minimum valid value is 1, which disables parallel operations, at the cost of performance. No advantage is gained if you increase the number of threads to more than the default setting. On systems running multiple VMs or in LPAR environments where multiple VMs can share the same physical CPUs, you might want to restrict the number of GC threads used by each VM. The restriction helps prevent the total number of parallel operation GC threads for all VMs exceeding the number of physical CPUs present, when multiple VMs perform garbage collection at the same time.","title":"Explanation"},{"location":"xgcworkpackets/","text":"-Xgcworkpackets Specifies the total number of work packets available in the global collector. Syntax -Xgcworkpackets<number> Explanation If you do not specify a value, the collector allocates a number of packets based on the maximum heap size.","title":"-Xgcworkpackets"},{"location":"xgcworkpackets/#-xgcworkpackets","text":"Specifies the total number of work packets available in the global collector.","title":"-Xgcworkpackets"},{"location":"xgcworkpackets/#syntax","text":"-Xgcworkpackets<number>","title":"Syntax"},{"location":"xgcworkpackets/#explanation","text":"If you do not specify a value, the collector allocates a number of packets based on the maximum heap size.","title":"Explanation"},{"location":"xifa/","text":"-Xifa (z/OS\u00ae only) Enables Java\u2122 applications to run on IFAs if they are available. z/OS V1R6 or later can run Java applications on a special-purpose assist processor called the System z\u2122 Application Assist Processor (zAAP). zAAPs operate asynchronously with the general purpose processors to execute Java programming under control of the VM. The zAAP is also known as an IFA (Integrated Facility for Applications). Only Java code and system native methods can be on IFA processors. Syntax Setting Value Default -Xifa:<value> on yes off force (obsolete) Note: The force option is obsolete and should not normally be used. This option is superseded by the SYS1.PARMLIB(IEAOPTxx) PROJECTCPU=YES parameter, which is available on all supported levels of z/OS. Xifa:force can be used for testing purposes when a zAAP is not available, but can have a negative performance impact.","title":"-Xifa"},{"location":"xifa/#-xifa","text":"(z/OS\u00ae only) Enables Java\u2122 applications to run on IFAs if they are available. z/OS V1R6 or later can run Java applications on a special-purpose assist processor called the System z\u2122 Application Assist Processor (zAAP). zAAPs operate asynchronously with the general purpose processors to execute Java programming under control of the VM. The zAAP is also known as an IFA (Integrated Facility for Applications). Only Java code and system native methods can be on IFA processors.","title":"-Xifa"},{"location":"xifa/#syntax","text":"Setting Value Default -Xifa:<value> on yes off force (obsolete) Note: The force option is obsolete and should not normally be used. This option is superseded by the SYS1.PARMLIB(IEAOPTxx) PROJECTCPU=YES parameter, which is available on all supported levels of z/OS. Xifa:force can be used for testing purposes when a zAAP is not available, but can have a negative performance impact.","title":"Syntax"},{"location":"xint/","text":"-Xint As described in the Oracle \"Non-Standard Options\" documentation , this VM option runs an application in interpreted-only mode. For compatibility, this option is also supported by the OpenJ9 VM. Syntax -Xint Explanation If you use this option, the OpenJ9 VM uses only the interpreter, disabling the OpenJ9 just-in-time (JIT) and ahead-of-time (AOT) compilers. By default, both these compilers are enabled, although the AOT compiler is not used by the VM unless shared classes are also enabled.","title":"-Xint"},{"location":"xint/#-xint","text":"As described in the Oracle \"Non-Standard Options\" documentation , this VM option runs an application in interpreted-only mode. For compatibility, this option is also supported by the OpenJ9 VM.","title":"-Xint"},{"location":"xint/#syntax","text":"-Xint","title":"Syntax"},{"location":"xint/#explanation","text":"If you use this option, the OpenJ9 VM uses only the interpreter, disabling the OpenJ9 just-in-time (JIT) and ahead-of-time (AOT) compilers. By default, both these compilers are enabled, although the AOT compiler is not used by the VM unless shared classes are also enabled.","title":"Explanation"},{"location":"xjit/","text":"-Xjit / -Xnojit Use this option to control the behavior of the JIT compiler. Specifying -Xjit with no parameters, has no effect as the JIT compiler is enabled by default. -Xnojit turns off the JIT compiler but does not affect the AOT compiler. Syntax Setting Action Default -Xjit Enable JIT yes -Xjit[:<parameter>=<value>{,<parameter>=<value>}] Enable JIT with options -Xnojit Disable JIT Parameters These parameters can be used to modify the behavior of -Xjit : Parameter Effect count Forces compilation of methods on first invocation. disableRMODE64 Allows the JIT to allocate executable code caches above the 2 GB memory bar. enableGPU Allows the JIT to offload certain processing tasks to a graphics processing unit (GPU) exclude Excludes the specified method from compilation. <limitFile> Compile methods that are listed in the limit file. optlevel Forces the JIT compiler to compile all methods at a specific optimization level. verbose Reports information about the JIT and AOT compiler configuration and method compilation. vlog Sends verbose output to a file. count -Xjit:count=<n> where <n> is the number of times a method is called before it is compiled. For example, setting count=0 forces the JIT compiler to compile everything on first execution, which is useful for problem determination. disableRMODE64 (z/OS\u00ae only) -Xjit:disableRMODE64 From z/OS V2R3, residency mode for 64-bit applications (RMODE64) is enabled by default. This feature allows the JIT to allocate executable code caches above the 2 GB memory bar, which is the default behavior. Use this option to turn off this JIT behavior. enableGPU (Windows (x86-64) or Linux (x86-64 and IBM POWER LE)) -Xjit:enableGPU Enables the JIT compiler to offload certain processing tasks to a graphics processing unit (GPU). The JIT determines which functions to offload based on performance heuristics. Systems must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0. To troubleshoot operations between the JIT compiler and the GPU, use -Xjit:enableGPU={verbose} , which provides output showing the processing tasks that are offloaded and their status. To send this output to a file ( output.txt ), run -Xjit:enableGPU={verbose},vlog=output.txt when you start your application. exclude -Xjit:exclude=<method> Excludes the specified method from compilation. limitFile -Xjit:limitFile=(<vlog_filename>, <m>, <n>) Compile only the methods that are listed on lines <m> to <n> in the specified limit file, where the limit file is a verbose log that you generated with the -Xjit:verbose,vlog=<vlog_filename> option. Methods that are not listed in the limit file and methods that are listed on lines outside the range are not compiled. optlevel -Xjit:optlevel=[noOpt|cold|warm|hot|veryHot|scorching] Forces the JIT compiler to compile all methods at a specific optimization level. Specifying optlevel might have an unexpected effect on performance, including reduced overall performance. verbose -Xjit:verbose Generates a JIT verbose log. The log provides a summary of which methods were compiled by the JIT and some of the compilation heurisic decisions that were taken while the JIT operates inside the OpenJ9 VM. -Xjit:verbose={compileStart} Prints out a line when the JIT is about to start compiling a method. -Xjit:verbose={compileEnd} Prints out a line when the JIT stops compiling a method. -Xjit:verbose={compilePerformance} Adds the values time (time taken to do the compilation) and mem (the amount of memory that was allocated during the compilation) into each line. This option includes the compileStart and compileEnd suboptions by default. -Xjit:verbose={disableInlining} Turns off inlining operations. -Xjit:verbose={inlining} Shows the methods that are inlined. Note: Suboptions can be chained together by using a | character. When used, you must enclose the full option name in single quotes (') to avoid the shell misinterpreting these characters as pipe commands. For example: java '-Xjit:verbose={compileStart|compileEnd|inlining}' -version vlog -Xjit:vlog=<vlog_filename> Sends verbose output to a file, of the format <vlog_filename>.<date>.<time>.<JVM_process_ID> , which is created in your current directory. Running the command multiple times produces multiple distinct versions of this file. If you do not specify this parameter, the output is sent to the standard error output stream (STDERR). This type of log file can be used with the limitFile suboption to target the compilation of specific methods. Examples Generating a JIT verbose log The following example requests a JIT verbose log of the java -version command: java -Xjit:verbose,vlog=vlogfile -version Analyzing JIT performance The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the following information to compilation entry: the amount of time taken to do the compilation. the amount of memory that was allocated during the compilation. Analyzing inlining operations The following example generates output that contains performance data and inlining operations. The suboptions count and -XcompilationThreads1 are used only to simplify the output. These options are not recommended for production because performance will be affected. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version See also Diagnosing a JIT or AOT problem","title":"-Xnojit"},{"location":"xjit/#-xjit-xnojit","text":"Use this option to control the behavior of the JIT compiler. Specifying -Xjit with no parameters, has no effect as the JIT compiler is enabled by default. -Xnojit turns off the JIT compiler but does not affect the AOT compiler.","title":"-Xjit / -Xnojit"},{"location":"xjit/#syntax","text":"Setting Action Default -Xjit Enable JIT yes -Xjit[:<parameter>=<value>{,<parameter>=<value>}] Enable JIT with options -Xnojit Disable JIT","title":"Syntax"},{"location":"xjit/#parameters","text":"These parameters can be used to modify the behavior of -Xjit : Parameter Effect count Forces compilation of methods on first invocation. disableRMODE64 Allows the JIT to allocate executable code caches above the 2 GB memory bar. enableGPU Allows the JIT to offload certain processing tasks to a graphics processing unit (GPU) exclude Excludes the specified method from compilation. <limitFile> Compile methods that are listed in the limit file. optlevel Forces the JIT compiler to compile all methods at a specific optimization level. verbose Reports information about the JIT and AOT compiler configuration and method compilation. vlog Sends verbose output to a file.","title":"Parameters"},{"location":"xjit/#count","text":"-Xjit:count=<n> where <n> is the number of times a method is called before it is compiled. For example, setting count=0 forces the JIT compiler to compile everything on first execution, which is useful for problem determination.","title":"count"},{"location":"xjit/#disablermode64","text":"(z/OS\u00ae only) -Xjit:disableRMODE64 From z/OS V2R3, residency mode for 64-bit applications (RMODE64) is enabled by default. This feature allows the JIT to allocate executable code caches above the 2 GB memory bar, which is the default behavior. Use this option to turn off this JIT behavior.","title":"disableRMODE64"},{"location":"xjit/#enablegpu","text":"(Windows (x86-64) or Linux (x86-64 and IBM POWER LE)) -Xjit:enableGPU Enables the JIT compiler to offload certain processing tasks to a graphics processing unit (GPU). The JIT determines which functions to offload based on performance heuristics. Systems must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0. To troubleshoot operations between the JIT compiler and the GPU, use -Xjit:enableGPU={verbose} , which provides output showing the processing tasks that are offloaded and their status. To send this output to a file ( output.txt ), run -Xjit:enableGPU={verbose},vlog=output.txt when you start your application.","title":"enableGPU"},{"location":"xjit/#exclude","text":"-Xjit:exclude=<method> Excludes the specified method from compilation.","title":"exclude"},{"location":"xjit/#limitfile","text":"-Xjit:limitFile=(<vlog_filename>, <m>, <n>) Compile only the methods that are listed on lines <m> to <n> in the specified limit file, where the limit file is a verbose log that you generated with the -Xjit:verbose,vlog=<vlog_filename> option. Methods that are not listed in the limit file and methods that are listed on lines outside the range are not compiled.","title":"limitFile"},{"location":"xjit/#optlevel","text":"-Xjit:optlevel=[noOpt|cold|warm|hot|veryHot|scorching] Forces the JIT compiler to compile all methods at a specific optimization level. Specifying optlevel might have an unexpected effect on performance, including reduced overall performance.","title":"optlevel"},{"location":"xjit/#verbose","text":"-Xjit:verbose Generates a JIT verbose log. The log provides a summary of which methods were compiled by the JIT and some of the compilation heurisic decisions that were taken while the JIT operates inside the OpenJ9 VM. -Xjit:verbose={compileStart} Prints out a line when the JIT is about to start compiling a method. -Xjit:verbose={compileEnd} Prints out a line when the JIT stops compiling a method. -Xjit:verbose={compilePerformance} Adds the values time (time taken to do the compilation) and mem (the amount of memory that was allocated during the compilation) into each line. This option includes the compileStart and compileEnd suboptions by default. -Xjit:verbose={disableInlining} Turns off inlining operations. -Xjit:verbose={inlining} Shows the methods that are inlined. Note: Suboptions can be chained together by using a | character. When used, you must enclose the full option name in single quotes (') to avoid the shell misinterpreting these characters as pipe commands. For example: java '-Xjit:verbose={compileStart|compileEnd|inlining}' -version","title":"verbose"},{"location":"xjit/#vlog","text":"-Xjit:vlog=<vlog_filename> Sends verbose output to a file, of the format <vlog_filename>.<date>.<time>.<JVM_process_ID> , which is created in your current directory. Running the command multiple times produces multiple distinct versions of this file. If you do not specify this parameter, the output is sent to the standard error output stream (STDERR). This type of log file can be used with the limitFile suboption to target the compilation of specific methods.","title":"vlog"},{"location":"xjit/#examples","text":"","title":"Examples"},{"location":"xjit/#generating-a-jit-verbose-log","text":"The following example requests a JIT verbose log of the java -version command: java -Xjit:verbose,vlog=vlogfile -version","title":"Generating a JIT verbose log"},{"location":"xjit/#analyzing-jit-performance","text":"The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the following information to compilation entry: the amount of time taken to do the compilation. the amount of memory that was allocated during the compilation.","title":"Analyzing JIT performance"},{"location":"xjit/#analyzing-inlining-operations","text":"The following example generates output that contains performance data and inlining operations. The suboptions count and -XcompilationThreads1 are used only to simplify the output. These options are not recommended for production because performance will be affected. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version","title":"Analyzing inlining operations"},{"location":"xjit/#see-also","text":"Diagnosing a JIT or AOT problem","title":"See also"},{"location":"xjni/","text":"-Xjni Sets JNI options. Syntax -Xjni:<parameter> Parameters arrayCacheMax -Xjni:arrayCacheMax=<size in bytes> -Xjni:arrayCacheMax=unlimited Sets the maximum size of the array cache. The default size is 128 KB ( -Xjni:arrayCacheMax=131072 ).","title":"-Xjni"},{"location":"xjni/#-xjni","text":"Sets JNI options.","title":"-Xjni"},{"location":"xjni/#syntax","text":"-Xjni:<parameter>","title":"Syntax"},{"location":"xjni/#parameters","text":"","title":"Parameters"},{"location":"xjni/#arraycachemax","text":"-Xjni:arrayCacheMax=<size in bytes> -Xjni:arrayCacheMax=unlimited Sets the maximum size of the array cache. The default size is 128 KB ( -Xjni:arrayCacheMax=131072 ).","title":"arrayCacheMax"},{"location":"xlinenumbers/","text":"-Xlinenumbers / -Xnolinenumbers Enables or disables line numbers in stack traces for debugging. Syntax Setting Effect Default -Xlinenumbers Enable yes -Xnolinenumbers Disable Explanation If you start the OpenJ9 VM with -Xnolinenumbers when creating a new shared classes cache, the Class Debug Area is not created. The option -Xnolinenumbers advises the VM not to load any class debug information, so there is no need for this region. If -Xscdmx is also used on the command line to specify a non zero debug area size, then a debug area is created despite the use of -Xnolinenumbers .","title":"-Xnolinenumbers"},{"location":"xlinenumbers/#-xlinenumbers-xnolinenumbers","text":"Enables or disables line numbers in stack traces for debugging.","title":"-Xlinenumbers / -Xnolinenumbers"},{"location":"xlinenumbers/#syntax","text":"Setting Effect Default -Xlinenumbers Enable yes -Xnolinenumbers Disable","title":"Syntax"},{"location":"xlinenumbers/#explanation","text":"If you start the OpenJ9 VM with -Xnolinenumbers when creating a new shared classes cache, the Class Debug Area is not created. The option -Xnolinenumbers advises the VM not to load any class debug information, so there is no need for this region. If -Xscdmx is also used on the command line to specify a non zero debug area size, then a debug area is created despite the use of -Xnolinenumbers .","title":"Explanation"},{"location":"xloa/","text":"-Xloa / -Xnoloa This option enables or prevents allocation of a large object area (LOA) during garbage collection. Syntax Setting Effect Default -Xloa Enable LOA yes (see Default behavior) -Xnoloa Disable LOA Default behavior By default, allocations are made in the small object area (SOA). If there is no room in the SOA, and an object is larger than 64KB, the object is allocated in the LOA. If the LOA is not used, it is shrunk to zero after a few collections. You can disable it explicitly by specifying the -Xnoloa option. Explanation The LOA is an area of the tenure area of the heap set used solely to satisfy allocations for large objects. The LOA is used when the allocation request cannot be satisfied in the main area (the SOA of the tenure heap. As objects are allocated and freed, the heap can become fragmented in such a way that allocation can be met only by time-consuming compactions. This problem is more pronounced if an application allocates large objects. In an attempt to alleviate this problem, the LOA is allocated. A large object in this context is considered to be any object 64 KB or greater in size. Allocations for new TLH objects are not considered to be large objects. Note: The Balanced Garbage Collection policy does not use the LOA. Therefore, when specifying - Xgcpolicy:balanced , any LOA options passed on the command line are ignored. The policy addresses the issues of LOA by reorganizing object layout with the VM to reduce heap fragmentation and compaction requirements. See also -Xloainitial / -Xloaminimum / -Xloamaximum","title":"-Xnoloa"},{"location":"xloa/#-xloa-xnoloa","text":"This option enables or prevents allocation of a large object area (LOA) during garbage collection.","title":"-Xloa / -Xnoloa"},{"location":"xloa/#syntax","text":"Setting Effect Default -Xloa Enable LOA yes (see Default behavior) -Xnoloa Disable LOA","title":"Syntax"},{"location":"xloa/#default-behavior","text":"By default, allocations are made in the small object area (SOA). If there is no room in the SOA, and an object is larger than 64KB, the object is allocated in the LOA. If the LOA is not used, it is shrunk to zero after a few collections. You can disable it explicitly by specifying the -Xnoloa option.","title":"Default behavior"},{"location":"xloa/#explanation","text":"The LOA is an area of the tenure area of the heap set used solely to satisfy allocations for large objects. The LOA is used when the allocation request cannot be satisfied in the main area (the SOA of the tenure heap. As objects are allocated and freed, the heap can become fragmented in such a way that allocation can be met only by time-consuming compactions. This problem is more pronounced if an application allocates large objects. In an attempt to alleviate this problem, the LOA is allocated. A large object in this context is considered to be any object 64 KB or greater in size. Allocations for new TLH objects are not considered to be large objects. Note: The Balanced Garbage Collection policy does not use the LOA. Therefore, when specifying - Xgcpolicy:balanced , any LOA options passed on the command line are ignored. The policy addresses the issues of LOA by reorganizing object layout with the VM to reduce heap fragmentation and compaction requirements.","title":"Explanation"},{"location":"xloa/#see-also","text":"-Xloainitial / -Xloaminimum / -Xloamaximum","title":"See also"},{"location":"xloaminimum/","text":"-Xloainitial / -Xloaminimum / -Xloamaximum Specifies the initial, minimum, and maximum proportion of the current tenure space allocated to the large object area (LOA). The LOA does not shrink to less than the minimum value. Syntax Setting Effect Default -Xloainitial<value> Set initial space 0.05 -Xloaminimum<value> Set minimum space 0.01 -Xloamaximum<value> Set minimum space 0.5 See also -Xloa / Xnoloa","title":"-Xloaminimum"},{"location":"xloaminimum/#-xloainitial-xloaminimum-xloamaximum","text":"Specifies the initial, minimum, and maximum proportion of the current tenure space allocated to the large object area (LOA). The LOA does not shrink to less than the minimum value.","title":"-Xloainitial / -Xloaminimum / -Xloamaximum"},{"location":"xloaminimum/#syntax","text":"Setting Effect Default -Xloainitial<value> Set initial space 0.05 -Xloaminimum<value> Set minimum space 0.01 -Xloamaximum<value> Set minimum space 0.5","title":"Syntax"},{"location":"xloaminimum/#see-also","text":"-Xloa / Xnoloa","title":"See also"},{"location":"xlockreservation/","text":"-XlockReservation Enables an optimization that presumes a monitor is owned by the thread that last acquired it. This optimization minimizes the runtime cost of acquiring and releasing a monitor for a single thread if the monitor is rarely acquired by multiple threads. Syntax -XlockReservation","title":"-XlockReservation"},{"location":"xlockreservation/#-xlockreservation","text":"Enables an optimization that presumes a monitor is owned by the thread that last acquired it. This optimization minimizes the runtime cost of acquiring and releasing a monitor for a single thread if the monitor is rarely acquired by multiple threads.","title":"-XlockReservation"},{"location":"xlockreservation/#syntax","text":"-XlockReservation","title":"Syntax"},{"location":"xlockword/","text":"-Xlockword Test whether performance optimizations are negatively impacting an application. Syntax -Xlockword:<parameters> Parameters mode -Xlockword:mode=all -Xlockword:mode=default Locking optimizations typically reduce memory usage and improve performance. However, there might be some situations where a smaller heap size is achieved for an application, but overall application performance decreases. For example, if your application synchronizes on objects that are not typically synchronized on, such as Java.lang.String , run the following test: Use the following command-line option to revert to behavior that is closer to earlier versions and monitor application performance: -Xlockword:mode=all If performance does not improve, remove the previous command-line options or use the following command-line option to reestablish the new behavior: -Xlockword:mode=default nolockword -Xlockword:nolockword=<class_name> Removes the lockword from object instances of the class <class_name> , reducing the space required for these objects. However, this action might have an adverse effect on synchronization for those objects. You should only use this option for troubleshooting. what -Xlockword:what Shows the current lockword configuration.","title":"-Xlockword"},{"location":"xlockword/#-xlockword","text":"Test whether performance optimizations are negatively impacting an application.","title":"-Xlockword"},{"location":"xlockword/#syntax","text":"-Xlockword:<parameters>","title":"Syntax"},{"location":"xlockword/#parameters","text":"","title":"Parameters"},{"location":"xlockword/#mode","text":"-Xlockword:mode=all -Xlockword:mode=default Locking optimizations typically reduce memory usage and improve performance. However, there might be some situations where a smaller heap size is achieved for an application, but overall application performance decreases. For example, if your application synchronizes on objects that are not typically synchronized on, such as Java.lang.String , run the following test: Use the following command-line option to revert to behavior that is closer to earlier versions and monitor application performance: -Xlockword:mode=all If performance does not improve, remove the previous command-line options or use the following command-line option to reestablish the new behavior: -Xlockword:mode=default","title":"mode"},{"location":"xlockword/#nolockword","text":"-Xlockword:nolockword=<class_name> Removes the lockword from object instances of the class <class_name> , reducing the space required for these objects. However, this action might have an adverse effect on synchronization for those objects. You should only use this option for troubleshooting.","title":"nolockword"},{"location":"xlockword/#what","text":"-Xlockword:what Shows the current lockword configuration.","title":"what"},{"location":"xlog/","text":"-Xlog Enables message logging. Note: Changes made to message logging using the -Xlog option do not affect messages written to the standard error stream ( stderr ). Syntax -Xlog:<parameter>{,<parameter>} Parameters Restriction: The parameters all , none and help must be used on their own and cannot be combined. However, the other parameters can be grouped. For example, to include error, vital and warning messages use -Xlog:error,vital,warn . For message details see OpenJ9 VM messages . help -Xlog:help Gives details the available parameters. (This parameter cannot be combined with others.) error -Xlog:error Turns on logging for all OpenJ9 VM error messages (default). vital -Xlog:vital Turns on logging for selected information messages JVMDUMP006I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the OpenJ9 VM (default). info -Xlog:info Turns on logging for all OpenJ9 VM information messages. warn -Xlog:warn Turns on logging for all OpenJ9 VM warning messages. config -Xlog:config Turns on logging for all OpenJ9 VM configuration messages. all -Xlog:all Turns on logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.) none -Xlog:none Turns off logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.)","title":"-Xlog"},{"location":"xlog/#-xlog","text":"Enables message logging. Note: Changes made to message logging using the -Xlog option do not affect messages written to the standard error stream ( stderr ).","title":"-Xlog"},{"location":"xlog/#syntax","text":"-Xlog:<parameter>{,<parameter>}","title":"Syntax"},{"location":"xlog/#parameters","text":"Restriction: The parameters all , none and help must be used on their own and cannot be combined. However, the other parameters can be grouped. For example, to include error, vital and warning messages use -Xlog:error,vital,warn . For message details see OpenJ9 VM messages .","title":"Parameters"},{"location":"xlog/#help","text":"-Xlog:help Gives details the available parameters. (This parameter cannot be combined with others.)","title":"help"},{"location":"xlog/#error","text":"-Xlog:error Turns on logging for all OpenJ9 VM error messages (default).","title":"error"},{"location":"xlog/#vital","text":"-Xlog:vital Turns on logging for selected information messages JVMDUMP006I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the OpenJ9 VM (default).","title":"vital"},{"location":"xlog/#info","text":"-Xlog:info Turns on logging for all OpenJ9 VM information messages.","title":"info"},{"location":"xlog/#warn","text":"-Xlog:warn Turns on logging for all OpenJ9 VM warning messages.","title":"warn"},{"location":"xlog/#config","text":"-Xlog:config Turns on logging for all OpenJ9 VM configuration messages.","title":"config"},{"location":"xlog/#all","text":"-Xlog:all Turns on logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.)","title":"all"},{"location":"xlog/#none","text":"-Xlog:none Turns off logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.)","title":"none"},{"location":"xlp/","text":"-Xlp Requests the OpenJ9 VM to allocate the Java\u2122 object heap and JIT code cache memory with large pages. Note: This option is deprecated in all versions later than Java 8. Use the -Xlp:codecache and -Xlp:objectheap options instead. Restriction: This option does not work on macOS\u00ae. If you use the -Xgc:preferredHeapBase option with -Xlp , the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output. Syntax -Xlp[<size>] See Using -X command-line options for more information about the <size> parameter. Explanation AIX\u00ae If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If a size is not specified, this option requests the VM to allocate the Java object heap (the heap from which Java objects are allocated) with large (16 MB) pages. If large pages are not available, the Java object heap is allocated with the next smaller page size that is supported by the system. AIX requires special configuration to enable large pages. The VM supports the use of large pages only to back the Java object heap shared memory segments. The VM uses shmget() with the SHM_LGPG and SHM_PIN flags to allocate large pages. The -Xlp option replaces the environment variable IBM_JAVA_LARGE_PAGE_SIZE , which is now ignored if set. For more information about configuring AIX support for large pages, see Large pages in the AIX product documentation. Linux\u00ae If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If large pages are not available, the VM does not start and produces an error message. The VM uses shmget() to allocate large pages for the heap. Large pages are supported by systems that have Linux kernels v2.6 or higher. Note: Linux for IBM Z\u00ae supports only a large page size of 1 M. Depending on the architecture, 1 MB or 2 MB large pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap . Windows\u2122 If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. z/OS\u00ae If <size> is specified but unsuccessful, or if executable pages of that size are not supported, 1 M pageable is attempted. If 1 M pageable is not available, the JIT code cache memory is allocated by using the default or smallest available executable page size. If <size> is not specified, the 1 M nonpageable size is used. If large pages are not supported by the hardware, or enabled in RACF\u00ae, the VM does not start and produces an error message. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 31-bit VM. The -Xlp[<size>] option supports only a large page size of 2 G and 1 M (nonpageable). 1 M pageable pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap . Specifying -Xlp1M uses a 1 M pageable size for the code cache, when available. Specifying -Xlp2G sets the object heap size, but generates a warning that 2 G nonpageable pages cannot be used for the code cache. Use the -Xlp:objectheap:pagesize=2G,nonpageable option to avoid the warning. Limitation and workaround The VM ends if insufficient operating system resources are available to satisfy the request. However, an error message is not issued. There are a number of reasons why the VM cannot honor a large page request. For example, there might be insufficient large pages available on the system at the time of the request. To check whether the -Xlp request was honored, you can review the output from -verbose:gc . Look for the attributes requestedPageSize and pageSize in the -verbose:gc log file. The attribute requestedPageSize contains the value specified by -Xlp . The attribute pageSize is the actual page size used by the VM. See also Configuring large page memory allocation .","title":"-Xlp"},{"location":"xlp/#-xlp","text":"Requests the OpenJ9 VM to allocate the Java\u2122 object heap and JIT code cache memory with large pages. Note: This option is deprecated in all versions later than Java 8. Use the -Xlp:codecache and -Xlp:objectheap options instead. Restriction: This option does not work on macOS\u00ae. If you use the -Xgc:preferredHeapBase option with -Xlp , the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output.","title":"-Xlp"},{"location":"xlp/#syntax","text":"-Xlp[<size>] See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xlp/#explanation","text":"","title":"Explanation"},{"location":"xlp/#aix","text":"If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If a size is not specified, this option requests the VM to allocate the Java object heap (the heap from which Java objects are allocated) with large (16 MB) pages. If large pages are not available, the Java object heap is allocated with the next smaller page size that is supported by the system. AIX requires special configuration to enable large pages. The VM supports the use of large pages only to back the Java object heap shared memory segments. The VM uses shmget() with the SHM_LGPG and SHM_PIN flags to allocate large pages. The -Xlp option replaces the environment variable IBM_JAVA_LARGE_PAGE_SIZE , which is now ignored if set. For more information about configuring AIX support for large pages, see Large pages in the AIX product documentation.","title":"AIX&reg;"},{"location":"xlp/#linux","text":"If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If large pages are not available, the VM does not start and produces an error message. The VM uses shmget() to allocate large pages for the heap. Large pages are supported by systems that have Linux kernels v2.6 or higher. Note: Linux for IBM Z\u00ae supports only a large page size of 1 M. Depending on the architecture, 1 MB or 2 MB large pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap .","title":"Linux&reg;"},{"location":"xlp/#windows","text":"If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM.","title":"Windows&trade;"},{"location":"xlp/#zos","text":"If <size> is specified but unsuccessful, or if executable pages of that size are not supported, 1 M pageable is attempted. If 1 M pageable is not available, the JIT code cache memory is allocated by using the default or smallest available executable page size. If <size> is not specified, the 1 M nonpageable size is used. If large pages are not supported by the hardware, or enabled in RACF\u00ae, the VM does not start and produces an error message. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 31-bit VM. The -Xlp[<size>] option supports only a large page size of 2 G and 1 M (nonpageable). 1 M pageable pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap . Specifying -Xlp1M uses a 1 M pageable size for the code cache, when available. Specifying -Xlp2G sets the object heap size, but generates a warning that 2 G nonpageable pages cannot be used for the code cache. Use the -Xlp:objectheap:pagesize=2G,nonpageable option to avoid the warning.","title":"z/OS&reg;"},{"location":"xlp/#limitation-and-workaround","text":"The VM ends if insufficient operating system resources are available to satisfy the request. However, an error message is not issued. There are a number of reasons why the VM cannot honor a large page request. For example, there might be insufficient large pages available on the system at the time of the request. To check whether the -Xlp request was honored, you can review the output from -verbose:gc . Look for the attributes requestedPageSize and pageSize in the -verbose:gc log file. The attribute requestedPageSize contains the value specified by -Xlp . The attribute pageSize is the actual page size used by the VM.","title":"Limitation and workaround"},{"location":"xlp/#see-also","text":"Configuring large page memory allocation .","title":"See also"},{"location":"xlpcodecache/","text":"-Xlp:codecache Requests the OpenJ9 VM to allocate the JIT code cache by using large page sizes. If the requested large page size is not available, the VM starts, but the JIT code cache is allocated by using a platform-defined size. A warning is displayed when the requested page size is not available. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output. Syntax AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:codecache:pagesize=<size> z/OS\u00ae: -Xlp:codecache:pagesize=<size>,pageable See Using -X command-line options for more information about the <size> parameter. Default values AIX The code cache page size is controlled by the DATAPSIZE setting of the LDR_CNTRL environment variable. The page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. For more information about the LDR_CNTRL environment variable, see Working with the LDR_CNTRL environment variable . Linux The default size for the code cache depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages Linux on Power Systems\u2122: The code cache page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. On other architectures, the VM uses the default operating system page size. macOS The default size for the code cache is 4 KB large pages. z/OS 1 MB pageable pages, when available, are the default size for the code cache. The -Xlp:codecache:pagesize=<size>,pageable option supports only a large page size of 1 MB pageable large pages. The use of 1 MB pageable large pages for the JIT code cache can improve the runtime performance of some Java\u2122 applications. A page size of 4 KB can also be used. See also Configuring large page memory allocation .","title":"-Xlp:codecache"},{"location":"xlpcodecache/#-xlpcodecache","text":"Requests the OpenJ9 VM to allocate the JIT code cache by using large page sizes. If the requested large page size is not available, the VM starts, but the JIT code cache is allocated by using a platform-defined size. A warning is displayed when the requested page size is not available. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output.","title":"-Xlp:codecache"},{"location":"xlpcodecache/#syntax","text":"AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:codecache:pagesize=<size> z/OS\u00ae: -Xlp:codecache:pagesize=<size>,pageable See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xlpcodecache/#default-values","text":"","title":"Default values"},{"location":"xlpcodecache/#aix","text":"The code cache page size is controlled by the DATAPSIZE setting of the LDR_CNTRL environment variable. The page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. For more information about the LDR_CNTRL environment variable, see Working with the LDR_CNTRL environment variable .","title":"AIX"},{"location":"xlpcodecache/#linux","text":"The default size for the code cache depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages Linux on Power Systems\u2122: The code cache page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. On other architectures, the VM uses the default operating system page size.","title":"Linux"},{"location":"xlpcodecache/#macos","text":"The default size for the code cache is 4 KB large pages.","title":"macOS"},{"location":"xlpcodecache/#zos","text":"1 MB pageable pages, when available, are the default size for the code cache. The -Xlp:codecache:pagesize=<size>,pageable option supports only a large page size of 1 MB pageable large pages. The use of 1 MB pageable large pages for the JIT code cache can improve the runtime performance of some Java\u2122 applications. A page size of 4 KB can also be used.","title":"z/OS"},{"location":"xlpcodecache/#see-also","text":"Configuring large page memory allocation .","title":"See also"},{"location":"xlpobjectheap/","text":"-Xlp:objectheap Requests the OpenJ9 VM to allocate the Java\u2122 object heap by using large page sizes. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output. Syntax AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:objectheap:pagesize=<size>[,strict|warn] z/OS\u00ae: -Xlp:objectheap:pagesize=<size>[,strict|warn][,pageable|nonpageable] See Using -X command-line options for more information about the <size> parameter. Parameters pagesize -Xlp:objectheap:pagesize=<size> The large page size that you require. If the operating system does not have sufficient resources to satisfy the request, the page size you requested might not be available when the VM starts up. By default, the VM starts and the Java object heap is allocated by using a different platform-defined page size. Alternatively, you can use the strict or warn suboptions to customize behavior. Default page sizes On Linux systems, the default size for the object heap depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages On other architectures, the VM uses the default operating system page size. On macOS, the default page size is 4 KB. strict | warn -Xlp:objectheap:strict -Xlp:objectheap:warn strict causes an error message to be generated if large pages are requested but cannot be obtained. This option causes the VM to end. warn causes a warning message to be generated if large pages are requested but cannot be obtained. This option allows the VM to continue. Note: If both strict and warn are specified, strict takes precedence. pageable | nonpageable -Xlp:objectheap:pageable -Xlp:objectheap:nonpageable On z/OS systems, defines the type of memory to allocate for the Java object heap. 1 MB pageable pages, when available, are the default size for the object heap. Supported large page sizes are 2 GB nonpageable, 1 MB nonpageable, and 1 MB pageable. A page size of 4 KB can also be used. See also Configuring large page memory allocation .","title":"-Xlp:objectheap"},{"location":"xlpobjectheap/#-xlpobjectheap","text":"Requests the OpenJ9 VM to allocate the Java\u2122 object heap by using large page sizes. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output.","title":"-Xlp:objectheap"},{"location":"xlpobjectheap/#syntax","text":"AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:objectheap:pagesize=<size>[,strict|warn] z/OS\u00ae: -Xlp:objectheap:pagesize=<size>[,strict|warn][,pageable|nonpageable] See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xlpobjectheap/#parameters","text":"","title":"Parameters"},{"location":"xlpobjectheap/#pagesize","text":"-Xlp:objectheap:pagesize=<size> The large page size that you require. If the operating system does not have sufficient resources to satisfy the request, the page size you requested might not be available when the VM starts up. By default, the VM starts and the Java object heap is allocated by using a different platform-defined page size. Alternatively, you can use the strict or warn suboptions to customize behavior.","title":"pagesize"},{"location":"xlpobjectheap/#default-page-sizes","text":"On Linux systems, the default size for the object heap depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages On other architectures, the VM uses the default operating system page size. On macOS, the default page size is 4 KB.","title":"Default page sizes"},{"location":"xlpobjectheap/#strict-warn","text":"-Xlp:objectheap:strict -Xlp:objectheap:warn strict causes an error message to be generated if large pages are requested but cannot be obtained. This option causes the VM to end. warn causes a warning message to be generated if large pages are requested but cannot be obtained. This option allows the VM to continue. Note: If both strict and warn are specified, strict takes precedence.","title":"strict | warn"},{"location":"xlpobjectheap/#pageablenonpageable","text":"-Xlp:objectheap:pageable -Xlp:objectheap:nonpageable On z/OS systems, defines the type of memory to allocate for the Java object heap. 1 MB pageable pages, when available, are the default size for the object heap. Supported large page sizes are 2 GB nonpageable, 1 MB nonpageable, and 1 MB pageable. A page size of 4 KB can also be used.","title":"pageable|nonpageable"},{"location":"xlpobjectheap/#see-also","text":"Configuring large page memory allocation .","title":"See also"},{"location":"xmca/","text":"-Xmca / -Xmco Sets the expansion step for the memory allocated to store the RAM ( -Xmca ) and ROM ( -Xmco ) portions of loaded classes. Each time more memory is required to store classes in RAM or ROM, the allocated memory is increased by the amount set. If the expansion step size you choose is too large, OutOfMemoryError is reported. The exact value of a \"too large\" expansion step size varies according to the platform and the specific machine configuration. You can use the -verbose:sizes option to find out the value that is being used by the VM. Syntax Setting Effect Default -Xmca<size> Set expansion step for RAM 32 KB -Xmco<size> Set expansion step for ROM 128 KB See Using -X command-line options for more information about the <size> parameter.","title":"-Xmco"},{"location":"xmca/#-xmca-xmco","text":"Sets the expansion step for the memory allocated to store the RAM ( -Xmca ) and ROM ( -Xmco ) portions of loaded classes. Each time more memory is required to store classes in RAM or ROM, the allocated memory is increased by the amount set. If the expansion step size you choose is too large, OutOfMemoryError is reported. The exact value of a \"too large\" expansion step size varies according to the platform and the specific machine configuration. You can use the -verbose:sizes option to find out the value that is being used by the VM.","title":"-Xmca / -Xmco"},{"location":"xmca/#syntax","text":"Setting Effect Default -Xmca<size> Set expansion step for RAM 32 KB -Xmco<size> Set expansion step for ROM 128 KB See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmcrs/","text":"-Xmcrs Sets an initial size for an area in memory that is reserved for any native classes, monitors, and threads that are used by compressed references within the lowest 4 GB memory area. You can use the -verbose:sizes option to find out the value that is being used by the VM. Notes: Native memory OutOfMemoryError exceptions might occur when using compressed references if the lowest 4 GB of address space becomes full, particularly when loading classes, starting threads, or using monitors. If you are not using compressed references and this option is set, the option is ignored and the output of -verbose:sizes shows -Xmcrs0 . Syntax -Xmcrs<size> See Using -X command-line options for more information about the <size> parameter.","title":"-Xmcrs"},{"location":"xmcrs/#-xmcrs","text":"Sets an initial size for an area in memory that is reserved for any native classes, monitors, and threads that are used by compressed references within the lowest 4 GB memory area. You can use the -verbose:sizes option to find out the value that is being used by the VM. Notes: Native memory OutOfMemoryError exceptions might occur when using compressed references if the lowest 4 GB of address space becomes full, particularly when loading classes, starting threads, or using monitors. If you are not using compressed references and this option is set, the option is ignored and the output of -verbose:sizes shows -Xmcrs0 .","title":"-Xmcrs"},{"location":"xmcrs/#syntax","text":"-Xmcrs<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmine/","text":"-Xmine / -Xmaxe Set the minimum and maximum amounts by which the garbage collector expands the heap. Syntax Setting Default -Xmine<size> 1 MB -Xmaxe<size> 0 (unlimited expansion) See Using -X command-line options for more information about the <size> parameter. Explanation Typically, the garbage collector expands the heap by the amount required to restore the free space to 30% (or the amount specified by -Xminf ). If heap expansion is required: -Xmine forces the expansion to be at least the specified value. For example, -Xmine10M sets the expansion size to a minimum of 10 MB. -Xmaxe limits the expansion to the specified value. For example -Xmaxe50M prevents expansion by more than 50 MB. ( -Xmaxe0 allows unlimited expansion.) See also Heap shrinkage Heap expansion","title":"-Xmine"},{"location":"xmine/#-xmine-xmaxe","text":"Set the minimum and maximum amounts by which the garbage collector expands the heap.","title":"-Xmine / -Xmaxe"},{"location":"xmine/#syntax","text":"Setting Default -Xmine<size> 1 MB -Xmaxe<size> 0 (unlimited expansion) See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmine/#explanation","text":"Typically, the garbage collector expands the heap by the amount required to restore the free space to 30% (or the amount specified by -Xminf ). If heap expansion is required: -Xmine forces the expansion to be at least the specified value. For example, -Xmine10M sets the expansion size to a minimum of 10 MB. -Xmaxe limits the expansion to the specified value. For example -Xmaxe50M prevents expansion by more than 50 MB. ( -Xmaxe0 allows unlimited expansion.)","title":"Explanation"},{"location":"xmine/#see-also","text":"Heap shrinkage Heap expansion","title":"See also"},{"location":"xminf/","text":"-Xminf / -Xmaxf Specifies the minimum and maximum proportion of the heap that must remain free after a global garbage collection (GC) cycle. If the free space is above or below these limits, the OpenJ9 VM attempts to adjust the heap size so that: -Xminf \u2264 free space \u2264 -Xmaxf . Syntax Setting Effect Default -Xminf<value> Set minimum free space 0.3 -Xmaxf<value> Set maximum free space 0.6 The value range is 0.0 - 1.0. For the gencon GC policy, the values apply only to the Tenure part of the heap and only at global GC points. For the optthruput and optavgpause GC policies, these values apply to the whole heap at every GC point. See also Heap shrinkage Heap expansion","title":"-Xminf"},{"location":"xminf/#-xminf-xmaxf","text":"Specifies the minimum and maximum proportion of the heap that must remain free after a global garbage collection (GC) cycle. If the free space is above or below these limits, the OpenJ9 VM attempts to adjust the heap size so that: -Xminf \u2264 free space \u2264 -Xmaxf .","title":"-Xminf / -Xmaxf"},{"location":"xminf/#syntax","text":"Setting Effect Default -Xminf<value> Set minimum free space 0.3 -Xmaxf<value> Set maximum free space 0.6 The value range is 0.0 - 1.0. For the gencon GC policy, the values apply only to the Tenure part of the heap and only at global GC points. For the optthruput and optavgpause GC policies, these values apply to the whole heap at every GC point.","title":"Syntax"},{"location":"xminf/#see-also","text":"Heap shrinkage Heap expansion","title":"See also"},{"location":"xmint/","text":"-Xmint / -Xmaxt Sets the minimum and maximum proportion of time to spend in the garbage collection (GC) process as a percentage of the overall running time that included the last three GC runs. If the percentage of time drops to less than the minimum, the OpenJ9 VM tries to shrink the heap. If the percentage of time exceeds the maximum, the OpenJ9 VM tries to expand the heap. Restrictions: This option applies only to GC policies that include stop-the-world (STW) operations, such as -Xgcpolicy:optthruput . Syntax Setting Effect Default -Xmint<value> Set minimum time in GC 5 -Xmaxt<value> Set maximum time in GC 13","title":"-Xmint"},{"location":"xmint/#-xmint-xmaxt","text":"Sets the minimum and maximum proportion of time to spend in the garbage collection (GC) process as a percentage of the overall running time that included the last three GC runs. If the percentage of time drops to less than the minimum, the OpenJ9 VM tries to shrink the heap. If the percentage of time exceeds the maximum, the OpenJ9 VM tries to expand the heap. Restrictions: This option applies only to GC policies that include stop-the-world (STW) operations, such as -Xgcpolicy:optthruput .","title":"-Xmint / -Xmaxt"},{"location":"xmint/#syntax","text":"Setting Effect Default -Xmint<value> Set minimum time in GC 5 -Xmaxt<value> Set maximum time in GC 13","title":"Syntax"},{"location":"xmn/","text":"-Xmn / -Xmns / -Xmnx Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon . If the scavenger is disabled, this option is ignored. You can use the -verbose:sizes option to find out the value that is being used by the VM. Syntax Setting Effect Default -Xmn<size> Equivalent to setting both -Xmns and -Xmnx Not set -Xmns<size> Set initial size 25% of -Xms -Xmnx<size> Set maximum size 25% of -Xmx See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmn with either -Xmns or -Xmnx , the VM does not start, returning an error.","title":"-Xmnx"},{"location":"xmn/#-xmn-xmns-xmnx","text":"Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon . If the scavenger is disabled, this option is ignored. You can use the -verbose:sizes option to find out the value that is being used by the VM.","title":"-Xmn / -Xmns / -Xmnx"},{"location":"xmn/#syntax","text":"Setting Effect Default -Xmn<size> Equivalent to setting both -Xmns and -Xmnx Not set -Xmns<size> Set initial size 25% of -Xms -Xmnx<size> Set maximum size 25% of -Xmx See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmn with either -Xmns or -Xmnx , the VM does not start, returning an error.","title":"Syntax"},{"location":"xmo/","text":"-Xmo / -Xmoi / -Xmos / -Xmox Sets the size and behavior of the old (tenure) heap when using -Xgcpolicy:gencon . You can use the -verbose:sizes option to find out the values that the VM is currently using. Syntax Setting Effect Default -Xmo<size> Equivalent to setting both -Xmos and -Xmox not set -Xmoi<size> Set increment size of old (tenure) heap See Note -Xmos<size> Set initial size of old (tenure) heap 75% of -Xms -Xmox<size> Set maximum size of old (tenure) heap Same as -Xmx Note: By default, the increment size ( -Xmoi ) is calculated on the expansion size, set by -Xmine and -Xminf . If you set -Xmoi to zero, no expansion is allowed. See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmo with either -Xmos or -Xmox , the VM does not start, returning an error.","title":"-Xmox"},{"location":"xmo/#-xmo-xmoi-xmos-xmox","text":"Sets the size and behavior of the old (tenure) heap when using -Xgcpolicy:gencon . You can use the -verbose:sizes option to find out the values that the VM is currently using.","title":"-Xmo / -Xmoi / -Xmos / -Xmox"},{"location":"xmo/#syntax","text":"Setting Effect Default -Xmo<size> Equivalent to setting both -Xmos and -Xmox not set -Xmoi<size> Set increment size of old (tenure) heap See Note -Xmos<size> Set initial size of old (tenure) heap 75% of -Xms -Xmox<size> Set maximum size of old (tenure) heap Same as -Xmx Note: By default, the increment size ( -Xmoi ) is calculated on the expansion size, set by -Xmine and -Xminf . If you set -Xmoi to zero, no expansion is allowed. See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmo with either -Xmos or -Xmox , the VM does not start, returning an error.","title":"Syntax"},{"location":"xmr/","text":"-Xmr / -Xmrx Sets the initial and maximum size of the the garbage collection \"remembered set\", which is a list of objects in the old (tenured) heap that have references to objects in the new area. Syntax Setting Effect Default -Xmr<size> Set initial size 16 K -Xmrx<size> Set maximium size See Using -X command-line options for more information about the <size> parameter.","title":"-Xmrx"},{"location":"xmr/#-xmr-xmrx","text":"Sets the initial and maximum size of the the garbage collection \"remembered set\", which is a list of objects in the old (tenured) heap that have references to objects in the new area.","title":"-Xmr / &nbsp; -Xmrx"},{"location":"xmr/#syntax","text":"Setting Effect Default -Xmr<size> Set initial size 16 K -Xmrx<size> Set maximium size See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xms/","text":"-Xms / -Xmx These Oracle\u00ae Hotspot\u2122 options set the initial/minimum Java\u2122 heap size, and the maximum heap size respectively. These options are recognized by the OpenJ9 VM. Notes: If you set -Xms > -Xmx , the OpenJ9 VM fails with the message -Xms too large for -Xmx . If you exceed the limit set by the -Xmx option, the OpenJ9 VM generates an OutofMemoryError . If you are allocating the Java heap with large pages, see also -Xlp and More effective heap usage using compressed references . You can also use the -Xmo option (not supported by the balanced garbage collection policy): If the scavenger is enabled, -Xms \u2265 -Xmn + -Xmo If the scavenger is disabled, -Xms \u2265 -Xmo Syntax Setting Effect Default -Xms<size> Set initial heap size 8 MB -Xmx<size> Set maximum heap size 25% of available memory (25 GB maximum) See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values. Examples -Xms2m -Xmx64m Heap starts at 2 MB and grows to a maximum of 64 MB. -Xms100m -Xmx100m Heap starts at 100 MB and never grows. -Xms50m Heap starts at 50 MB and grows to the default maximum. -Xmx256m Heap starts at default initial value and grows to a maximum of 256 MB. See also -Xsoftmx (Set \"soft\" maximum Java heap size)","title":"-Xmx"},{"location":"xms/#-xms-xmx","text":"These Oracle\u00ae Hotspot\u2122 options set the initial/minimum Java\u2122 heap size, and the maximum heap size respectively. These options are recognized by the OpenJ9 VM. Notes: If you set -Xms > -Xmx , the OpenJ9 VM fails with the message -Xms too large for -Xmx . If you exceed the limit set by the -Xmx option, the OpenJ9 VM generates an OutofMemoryError . If you are allocating the Java heap with large pages, see also -Xlp and More effective heap usage using compressed references . You can also use the -Xmo option (not supported by the balanced garbage collection policy): If the scavenger is enabled, -Xms \u2265 -Xmn + -Xmo If the scavenger is disabled, -Xms \u2265 -Xmo","title":"-Xms / -Xmx"},{"location":"xms/#syntax","text":"Setting Effect Default -Xms<size> Set initial heap size 8 MB -Xmx<size> Set maximum heap size 25% of available memory (25 GB maximum) See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values.","title":"Syntax"},{"location":"xms/#examples","text":"-Xms2m -Xmx64m Heap starts at 2 MB and grows to a maximum of 64 MB. -Xms100m -Xmx100m Heap starts at 100 MB and never grows. -Xms50m Heap starts at 50 MB and grows to the default maximum. -Xmx256m Heap starts at default initial value and grows to a maximum of 256 MB.","title":"Examples"},{"location":"xms/#see-also","text":"-Xsoftmx (Set \"soft\" maximum Java heap size)","title":"See also"},{"location":"xmso/","text":"-Xmso Sets the native stack size for operating system threads. You can use the -verbose:sizes option to find out the values that the VM is currently using. When a native method makes a call into the VM, the VM calculates whether the memory required for the call will exceed the -Xmso value. If so, a java/lang/StackOverflowError error is thrown. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; this option applies to the native stack only. For the Java stack option, see the link in the See also section. Syntax -Xmso<size> See Using -X command-line options for more information about the <size> parameter. Default setting Default values vary by platform. See Default settings for the OpenJ9 VM . See also -Xiss/-Xss/-Xssi (stack size and increment for Java\u2122 threads)","title":"-Xmso"},{"location":"xmso/#-xmso","text":"Sets the native stack size for operating system threads. You can use the -verbose:sizes option to find out the values that the VM is currently using. When a native method makes a call into the VM, the VM calculates whether the memory required for the call will exceed the -Xmso value. If so, a java/lang/StackOverflowError error is thrown. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; this option applies to the native stack only. For the Java stack option, see the link in the See also section.","title":"-Xmso"},{"location":"xmso/#syntax","text":"-Xmso<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmso/#default-setting","text":"Default values vary by platform. See Default settings for the OpenJ9 VM .","title":"Default setting"},{"location":"xmso/#see-also","text":"-Xiss/-Xss/-Xssi (stack size and increment for Java\u2122 threads)","title":"See also"},{"location":"xnumanone/","text":"-Xnuma:none (AIX\u00ae, Linux\u00ae, and Windows\u2122 only) Use this option to turn off non-uniform memory architecture (NUMA) awareness when using the balanced garbage collection policy. For workloads that do most of their work in one thread, or workloads that maintain a full heap, turning off NUMA awareness can improve performance. Syntax -Xnuma:none Default behavior NUMA awareness is enabled by default.","title":"-Xnuma:none"},{"location":"xnumanone/#-xnumanone","text":"(AIX\u00ae, Linux\u00ae, and Windows\u2122 only) Use this option to turn off non-uniform memory architecture (NUMA) awareness when using the balanced garbage collection policy. For workloads that do most of their work in one thread, or workloads that maintain a full heap, turning off NUMA awareness can improve performance.","title":"-Xnuma:none"},{"location":"xnumanone/#syntax","text":"-Xnuma:none","title":"Syntax"},{"location":"xnumanone/#default-behavior","text":"NUMA awareness is enabled by default.","title":"Default behavior"},{"location":"xoptionsfile/","text":"-Xoptionsfile Specifies a file that contains VM options and definitions. The contents of the options file are recorded in the ENVINFO section of a Java\u2122 dump. Syntax -Xoptionsfile=<file_name> where <file_name> specifies a file that contains options that are processed as if they had been entered directly as command-line options. Explanation At startup, the VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. <path> is the VM directory, as show in Directory conventions . <path> is the <java_home>/lib directory, where <java_home> is the directory for your runtime environment. The file options.default is empty but can be updated with any options that you want to specify at run time. The options file does not support these options: -assert -fullversion -help -showversion -version -Xcompressedrefs -Xcheck:memory -Xoptionsfile Although you cannot use -Xoptionsfile recursively within an options file, you can use -Xoptionsfile multiple times on the same command line to load more than one options files. Some options use quoted strings as parameters. Do not split quoted strings over multiple lines using the forward slash line continuation character (\\). The Yen symbol (\u00a5) is not supported as a line continuation character. For example, the following example is not valid in an options file: :::java -Xevents=vmstop,exec=\"cmd /c \\ echo %pid has finished.\" The following example is valid in an options file: :::java -Xevents=vmstop, \\ exec=\"cmd /c echo %pid has finished.\" Example Here is an example of an options file: :::java #My options file -X<option1> -X<option2>=\\ <value1>,\\ <value2> -D<sysprop1>=<value1> See also Specifying command-line options Javadump: TITLE, GPINFO, and ENVINFO sections","title":"-Xoptionsfile"},{"location":"xoptionsfile/#-xoptionsfile","text":"Specifies a file that contains VM options and definitions. The contents of the options file are recorded in the ENVINFO section of a Java\u2122 dump.","title":"-Xoptionsfile"},{"location":"xoptionsfile/#syntax","text":"-Xoptionsfile=<file_name> where <file_name> specifies a file that contains options that are processed as if they had been entered directly as command-line options.","title":"Syntax"},{"location":"xoptionsfile/#explanation","text":"At startup, the VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. <path> is the VM directory, as show in Directory conventions . <path> is the <java_home>/lib directory, where <java_home> is the directory for your runtime environment. The file options.default is empty but can be updated with any options that you want to specify at run time. The options file does not support these options: -assert -fullversion -help -showversion -version -Xcompressedrefs -Xcheck:memory -Xoptionsfile Although you cannot use -Xoptionsfile recursively within an options file, you can use -Xoptionsfile multiple times on the same command line to load more than one options files. Some options use quoted strings as parameters. Do not split quoted strings over multiple lines using the forward slash line continuation character (\\). The Yen symbol (\u00a5) is not supported as a line continuation character. For example, the following example is not valid in an options file: :::java -Xevents=vmstop,exec=\"cmd /c \\ echo %pid has finished.\" The following example is valid in an options file: :::java -Xevents=vmstop, \\ exec=\"cmd /c echo %pid has finished.\"","title":"Explanation"},{"location":"xoptionsfile/#example","text":"Here is an example of an options file: :::java #My options file -X<option1> -X<option2>=\\ <value1>,\\ <value2> -D<sysprop1>=<value1>","title":"Example"},{"location":"xoptionsfile/#see-also","text":"Specifying command-line options Javadump: TITLE, GPINFO, and ENVINFO sections","title":"See also"},{"location":"xquickstart/","text":"-Xquickstart This option causes the JIT compiler to run with a subset of optimizations, which can improve the performance of short-running applications. Note: For compatibility with other Java\u2122 virtual machines, you can also specify the -client option, which results in identical behavior to -Xquickstart . Syntax -Xquickstart Default behavior By default, -Xquickstart is disabled. Explanation The JIT compiler is tuned for long-running applications typically used on a server. When you specify this option, the compiler uses a subset of optimizations, which results in faster compilation times that improve startup time. However, longer running applications might run more slowly, especially applications that contain hot methods and other methods using a large amount of processing resource. When the AOT compiler is active (both shared classes and AOT compilation enabled), -Xquickstart causes all methods to be AOT compiled. The AOT compilation improves the startup time of subsequent runs, but might reduce performance for longer running applications, especially those that contain hot methods. Note: The implementation of -Xquickstart is subject to change in future releases.","title":"-Xquickstart"},{"location":"xquickstart/#-xquickstart","text":"This option causes the JIT compiler to run with a subset of optimizations, which can improve the performance of short-running applications. Note: For compatibility with other Java\u2122 virtual machines, you can also specify the -client option, which results in identical behavior to -Xquickstart .","title":"-Xquickstart"},{"location":"xquickstart/#syntax","text":"-Xquickstart","title":"Syntax"},{"location":"xquickstart/#default-behavior","text":"By default, -Xquickstart is disabled.","title":"Default behavior"},{"location":"xquickstart/#explanation","text":"The JIT compiler is tuned for long-running applications typically used on a server. When you specify this option, the compiler uses a subset of optimizations, which results in faster compilation times that improve startup time. However, longer running applications might run more slowly, especially applications that contain hot methods and other methods using a large amount of processing resource. When the AOT compiler is active (both shared classes and AOT compilation enabled), -Xquickstart causes all methods to be AOT compiled. The AOT compilation improves the startup time of subsequent runs, but might reduce performance for longer running applications, especially those that contain hot methods. Note: The implementation of -Xquickstart is subject to change in future releases.","title":"Explanation"},{"location":"xrs/","text":"-Xrs Prevents the OpenJ9 runtime environment from handling any internally or externally generated signals such as SIGSEGV and SIGABRT . Any signals that are raised are handled by the default operating system handlers, which you might want if you are using a debugger such as GDB or WinDbg to diagnose problems in JNI code. Disabling signal handling in the OpenJ9 VM reduces performance by approximately 2-4%, depending on the application. Note: Setting this option prevents dumps being generated by the OpenJ9 VM for signals such as SIGSEGV and SIGABRT , because the VM is no longer intercepting these signals. Syntax -Xrs -Xrs:sync Parameters If you specify the sync parameter: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: Disables signal handling in the VM for SIGSEGV , SIGFPE , SIGBUS , SIGILL , SIGTRAP , and SIGABRT signals. However, the VM still handles the SIGQUIT and SIGTERM signals, among others. On Windows\u2122 systems: Hardware exceptions are not handled by the OpenJ9 VM when this option is specified. However, the Windows CTRL_BREAK_EVENT signal, triggered by the Ctrl-Break key combination, is still handled by the VM. Linux and macOS systems always use the SIGUSR1 signal.","title":"-Xrs"},{"location":"xrs/#-xrs","text":"Prevents the OpenJ9 runtime environment from handling any internally or externally generated signals such as SIGSEGV and SIGABRT . Any signals that are raised are handled by the default operating system handlers, which you might want if you are using a debugger such as GDB or WinDbg to diagnose problems in JNI code. Disabling signal handling in the OpenJ9 VM reduces performance by approximately 2-4%, depending on the application. Note: Setting this option prevents dumps being generated by the OpenJ9 VM for signals such as SIGSEGV and SIGABRT , because the VM is no longer intercepting these signals.","title":"-Xrs"},{"location":"xrs/#syntax","text":"-Xrs -Xrs:sync","title":"Syntax"},{"location":"xrs/#parameters","text":"If you specify the sync parameter: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: Disables signal handling in the VM for SIGSEGV , SIGFPE , SIGBUS , SIGILL , SIGTRAP , and SIGABRT signals. However, the VM still handles the SIGQUIT and SIGTERM signals, among others. On Windows\u2122 systems: Hardware exceptions are not handled by the OpenJ9 VM when this option is specified. However, the Windows CTRL_BREAK_EVENT signal, triggered by the Ctrl-Break key combination, is still handled by the VM. Linux and macOS systems always use the SIGUSR1 signal.","title":"Parameters"},{"location":"xsamplingexpirationtime/","text":"-XsamplingExpirationTime Disables JIT sampling after a specified amount of time. When the JIT sampling thread is disabled, no processor cycles are used by an idle OpenJ9 VM. Use this option with care; after the sampling thread is disabled, you cannot reactivate it. However, because the profiling frequency is automatically reduced, you should not have to use this option. Allow the sampling thread to run for long enough to identify important optimizations. Syntax -XsamplingExpirationTime<time> where <time> is specified in seconds. Explanation The JIT sampling thread profiles the running Java\u2122 application to discover commonly used methods. The memory and processor usage of the sampling thread is negligible, and the frequency of profiling is automatically reduced when the OpenJ9 VM is idle, to once per second instead of once every 10ms, or once every 100 seconds if the idle state lasts more than 50 seconds.","title":"-XsamplingExpirationTime"},{"location":"xsamplingexpirationtime/#-xsamplingexpirationtime","text":"Disables JIT sampling after a specified amount of time. When the JIT sampling thread is disabled, no processor cycles are used by an idle OpenJ9 VM. Use this option with care; after the sampling thread is disabled, you cannot reactivate it. However, because the profiling frequency is automatically reduced, you should not have to use this option. Allow the sampling thread to run for long enough to identify important optimizations.","title":"-XsamplingExpirationTime"},{"location":"xsamplingexpirationtime/#syntax","text":"-XsamplingExpirationTime<time> where <time> is specified in seconds.","title":"Syntax"},{"location":"xsamplingexpirationtime/#explanation","text":"The JIT sampling thread profiles the running Java\u2122 application to discover commonly used methods. The memory and processor usage of the sampling thread is negligible, and the frequency of profiling is automatically reduced when the OpenJ9 VM is idle, to once per second instead of once every 10ms, or once every 100 seconds if the idle state lasts more than 50 seconds.","title":"Explanation"},{"location":"xscdmx/","text":"-Xscdmx Use the -Xscdmx option to control the size of the class debug area when you create a shared class cache. Syntax -Xscdmx<size> See Using -X command-line options for more information about the <size> parameter. Explanation The -Xscdmx option works in a similar way to the -Xscmx option, which is used to control the overall size of the shared class cache. The size of -Xscdmx must be smaller than the size of -Xscmx . By default, the size of the class debug area is a percentage of the free class data bytes in a newly created or empty cache. A class debug area is still created if you use the -Xnolinenumbers option with the -Xscdmx option on the command line.","title":"-Xscdmx"},{"location":"xscdmx/#-xscdmx","text":"Use the -Xscdmx option to control the size of the class debug area when you create a shared class cache.","title":"-Xscdmx"},{"location":"xscdmx/#syntax","text":"-Xscdmx<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscdmx/#explanation","text":"The -Xscdmx option works in a similar way to the -Xscmx option, which is used to control the overall size of the shared class cache. The size of -Xscdmx must be smaller than the size of -Xscmx . By default, the size of the class debug area is a percentage of the free class data bytes in a newly created or empty cache. A class debug area is still created if you use the -Xnolinenumbers option with the -Xscdmx option on the command line.","title":"Explanation"},{"location":"xscminaot/","text":"-Xscminaot / -Xscmaxaot When you create a shared classes cache, you can use these options to set the minimum and maximum number of bytes in the class cache to reserve for AOT data. Setting -Xscmaxaot is useful if you want a certain amount of cache space guaranteed for non-AOT data. Syntax Setting Effect Default -Xscminaot<size> Set minimum size for AOT class cache 0 -Xscmaxaot<size> Set maximum size for AOT class cache The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter. -Xscminaot If -Xscminaot is not specified, no space is reserved for AOT data. However, AOT data is still written to the cache until the cache is full or the -Xscmaxaot limit is reached. The value of -Xscminaot must not exceed the value of -Xscmx or -Xscmaxaot and should be considerably less than the total cache size, because AOT data can be created only for cached classes. If the value of -Xscminaot equals the value of -Xscmx , no class data or AOT data can be stored. You can also adjust the -Xscminaot value by using: -Xshareclasses:adjustminaot=<size> option MemoryMXBean.setSharedClassCacheMinAotBytes() method in the com.ibm.lang.management API You can also adjust the -Xscmaxaot value by using: -Xshareclasses:adjustmaxaot=<size> option MemoryMXBean.setSharedClassCacheMaxAotBytes() method in the com.ibm.lang.management API. -Xscmaxaot The value of this option must not be smaller than the value of -Xscminaot and must not be larger than the value of -Xscmx . When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of AOT data that is not stored due to the current setting of the maximum AOT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxAotUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum AOT data space size accordingly if you want to add the unstored AOT data to the shared cache. See also -Xshareclasses","title":"-Xscminaot"},{"location":"xscminaot/#-xscminaot-xscmaxaot","text":"When you create a shared classes cache, you can use these options to set the minimum and maximum number of bytes in the class cache to reserve for AOT data. Setting -Xscmaxaot is useful if you want a certain amount of cache space guaranteed for non-AOT data.","title":"-Xscminaot / -Xscmaxaot"},{"location":"xscminaot/#syntax","text":"Setting Effect Default -Xscminaot<size> Set minimum size for AOT class cache 0 -Xscmaxaot<size> Set maximum size for AOT class cache The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscminaot/#-xscminaot","text":"If -Xscminaot is not specified, no space is reserved for AOT data. However, AOT data is still written to the cache until the cache is full or the -Xscmaxaot limit is reached. The value of -Xscminaot must not exceed the value of -Xscmx or -Xscmaxaot and should be considerably less than the total cache size, because AOT data can be created only for cached classes. If the value of -Xscminaot equals the value of -Xscmx , no class data or AOT data can be stored. You can also adjust the -Xscminaot value by using: -Xshareclasses:adjustminaot=<size> option MemoryMXBean.setSharedClassCacheMinAotBytes() method in the com.ibm.lang.management API You can also adjust the -Xscmaxaot value by using: -Xshareclasses:adjustmaxaot=<size> option MemoryMXBean.setSharedClassCacheMaxAotBytes() method in the com.ibm.lang.management API.","title":"-Xscminaot"},{"location":"xscminaot/#-xscmaxaot","text":"The value of this option must not be smaller than the value of -Xscminaot and must not be larger than the value of -Xscmx . When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of AOT data that is not stored due to the current setting of the maximum AOT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxAotUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum AOT data space size accordingly if you want to add the unstored AOT data to the shared cache.","title":"-Xscmaxaot"},{"location":"xscminaot/#see-also","text":"-Xshareclasses","title":"See also"},{"location":"xscminjitdata/","text":"-Xscminjitdata / -Xscmaxjitdata When you create a shared classes cache, you can use these options to set a minimum and maximum number of bytes in the class cache that can be used for JIT data. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of JIT data that is not stored due to the current setting of the the maximum JIT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxJitDataUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum JIT data space size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store the JIT data. Subsequent VMs can store JIT data in the shared cache. Syntax Setting Effect Default -Xscminjitdata<size> Set minimum size for JIT data 0 (See Default behavior ) -Xscmaxjitdata<size> Set maximum size for JIT data The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter. Default behavior If -Xscminjitdata is not specified, no space is reserved for JIT data, although JIT data is still written to the cache until the cache is full or the -Xscmaxjitdata limit is reached. Explanation -Xscminjitdata The value of -Xscminjitdata must not exceed the value of -Xscmx or -Xscmaxjitdata . The value of -Xscminjitdata must always be considerably less than the total cache size, because JIT data can be created only for cached classes. If the value of -Xscminjitdata equals the value of -Xscmx , no class data or JIT data can be stored. You can also adjust the -Xscminjitdata value by using: -Xshareclasses:adjustminjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API. -Xscmaxjitdata Setting -Xscmaxjitdata is useful if you want a certain amount of cache space guaranteed for non-JIT data. If this option is not specified, the maximum limit for JIT data is the amount of free space in the cache. The value of this option must not be smaller than the value of -Xscminjitdata , and must not be larger than the value of -Xscmx . You can also adjust the -Xscmaxjitdata value by using: -Xshareclasses:adjustmaxjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API. See also -Xscmx","title":"-Xscminjitdata"},{"location":"xscminjitdata/#-xscminjitdata-xscmaxjitdata","text":"When you create a shared classes cache, you can use these options to set a minimum and maximum number of bytes in the class cache that can be used for JIT data. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of JIT data that is not stored due to the current setting of the the maximum JIT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxJitDataUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum JIT data space size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store the JIT data. Subsequent VMs can store JIT data in the shared cache.","title":"-Xscminjitdata / -Xscmaxjitdata"},{"location":"xscminjitdata/#syntax","text":"Setting Effect Default -Xscminjitdata<size> Set minimum size for JIT data 0 (See Default behavior ) -Xscmaxjitdata<size> Set maximum size for JIT data The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscminjitdata/#default-behavior","text":"If -Xscminjitdata is not specified, no space is reserved for JIT data, although JIT data is still written to the cache until the cache is full or the -Xscmaxjitdata limit is reached.","title":"Default behavior"},{"location":"xscminjitdata/#explanation","text":"","title":"Explanation"},{"location":"xscminjitdata/#-xscminjitdata","text":"The value of -Xscminjitdata must not exceed the value of -Xscmx or -Xscmaxjitdata . The value of -Xscminjitdata must always be considerably less than the total cache size, because JIT data can be created only for cached classes. If the value of -Xscminjitdata equals the value of -Xscmx , no class data or JIT data can be stored. You can also adjust the -Xscminjitdata value by using: -Xshareclasses:adjustminjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API.","title":"-Xscminjitdata"},{"location":"xscminjitdata/#-xscmaxjitdata","text":"Setting -Xscmaxjitdata is useful if you want a certain amount of cache space guaranteed for non-JIT data. If this option is not specified, the maximum limit for JIT data is the amount of free space in the cache. The value of this option must not be smaller than the value of -Xscminjitdata , and must not be larger than the value of -Xscmx . You can also adjust the -Xscmaxjitdata value by using: -Xshareclasses:adjustmaxjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API.","title":"-Xscmaxjitdata"},{"location":"xscminjitdata/#see-also","text":"-Xscmx","title":"See also"},{"location":"xscmx/","text":"-Xscmx For a new shared class cache, specifies either: the actual size of the cache, if the -XX:SharedCacheHardLimit option is not present the soft maximum size of the cache, if used with the -XX:SharedCacheHardLimit option (See -XX:SharedCacheHardLimit ) This option applies only if a cache is being created and no cache of the same name exists. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. You can also get this information by using the MemoryMXBean.getSharedClassCacheSoftmxUnstoredBytes() method in the com.ibm.lang.management API. You can increase the soft maximum size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store that data. Therefore, increasing the soft maximum size does not necessarily cause any more data to be stored in the shared cache by the current VM, but subsequent VMs can add data to the shared cache. Syntax -Xscmx<size> See Using -X command-line options for more information about the <size> parameter. Explanation Setting a soft maximum size If you specify the -Xscmx option with the -XX:SharedCacheHardLimit option, the -Xscmx option sets the soft maximum size of a new shared class cache, and the -XX:SharedCacheHardLimit option sets the actual maximum size. The value of the -Xscmx option must therefore not exceed the value of -XX:SharedCacheHardLimit . When the soft maximum limit is reached, no more data can be added into the shared cache, unless there is reserved AOT or JIT data space. If such reserved space exists, AOT or JIT data can still be added into the reserved space. The reserved AOT and JIT data spaces are counted as used space within the soft maximum size, so the soft maximum size should not be less than the minimum reserved space for AOT and JIT data if you specify the -Xscminaot or -Xscminjitdata options. You can change the soft maximum size by using the -Xshareclasses:adjustsoftmx=<size> option or the MemoryMXBean.setSharedClassCacheSoftmxBytes() method in the com.ibm.lang.management API. By using this API, Java\u2122 applications can dynamically monitor and adjust the cache soft maximum size as required. This function can be useful in virtualized or cloud environments, for example, where the shared cache size might change dynamically to meet business needs. For example, you might create a 64 MB shared cache and set a smaller value, such as 16 MB, for the -Xscmx option, to limit the data stored in the cache: :::java -XX:SharedCacheHardLimit=64m -Xscmx16m You can then use the com.ibm.lang.management API from within a Java application to increase the soft maximum value during run time, as load increases. This change allows the application to use more shared cache space than you specified initially. You can increase the soft maximum size if it is currently less than the actual cache size. If you attempt to reduce the soft maximum size to a value that is less than the number of bytes already used in the cache, the number of used bytes is set as the new soft maximum size. For more information about cache sizes, see Cache size limits . See also -Xscdmx (control the size of the class debug area)","title":"-Xscmx"},{"location":"xscmx/#-xscmx","text":"For a new shared class cache, specifies either: the actual size of the cache, if the -XX:SharedCacheHardLimit option is not present the soft maximum size of the cache, if used with the -XX:SharedCacheHardLimit option (See -XX:SharedCacheHardLimit ) This option applies only if a cache is being created and no cache of the same name exists. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. You can also get this information by using the MemoryMXBean.getSharedClassCacheSoftmxUnstoredBytes() method in the com.ibm.lang.management API. You can increase the soft maximum size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store that data. Therefore, increasing the soft maximum size does not necessarily cause any more data to be stored in the shared cache by the current VM, but subsequent VMs can add data to the shared cache.","title":"-Xscmx"},{"location":"xscmx/#syntax","text":"-Xscmx<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscmx/#explanation","text":"","title":"Explanation"},{"location":"xscmx/#setting-a-soft-maximum-size","text":"If you specify the -Xscmx option with the -XX:SharedCacheHardLimit option, the -Xscmx option sets the soft maximum size of a new shared class cache, and the -XX:SharedCacheHardLimit option sets the actual maximum size. The value of the -Xscmx option must therefore not exceed the value of -XX:SharedCacheHardLimit . When the soft maximum limit is reached, no more data can be added into the shared cache, unless there is reserved AOT or JIT data space. If such reserved space exists, AOT or JIT data can still be added into the reserved space. The reserved AOT and JIT data spaces are counted as used space within the soft maximum size, so the soft maximum size should not be less than the minimum reserved space for AOT and JIT data if you specify the -Xscminaot or -Xscminjitdata options. You can change the soft maximum size by using the -Xshareclasses:adjustsoftmx=<size> option or the MemoryMXBean.setSharedClassCacheSoftmxBytes() method in the com.ibm.lang.management API. By using this API, Java\u2122 applications can dynamically monitor and adjust the cache soft maximum size as required. This function can be useful in virtualized or cloud environments, for example, where the shared cache size might change dynamically to meet business needs. For example, you might create a 64 MB shared cache and set a smaller value, such as 16 MB, for the -Xscmx option, to limit the data stored in the cache: :::java -XX:SharedCacheHardLimit=64m -Xscmx16m You can then use the com.ibm.lang.management API from within a Java application to increase the soft maximum value during run time, as load increases. This change allows the application to use more shared cache space than you specified initially. You can increase the soft maximum size if it is currently less than the actual cache size. If you attempt to reduce the soft maximum size to a value that is less than the number of bytes already used in the cache, the number of used bytes is set as the new soft maximum size. For more information about cache sizes, see Cache size limits .","title":"Setting a soft maximum size"},{"location":"xscmx/#see-also","text":"-Xscdmx (control the size of the class debug area)","title":"See also"},{"location":"xshareclasses/","text":"-Xshareclasses Use the -Xshareclasses option to enable, disable, or modify class sharing behavior. Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. This option can take a number of parameters, some of which are cache utilities. Cache utilities perform the required operation on the specified cache, without starting the VM. You can combine multiple suboptions, which are separated by commas, but the cache utilities are mutually exclusive. When you are running cache utilities, the message Could not create the Java virtual machine is expected. Cache utilities do not create the virtual machine. Some cache utilities can work with caches from previous Java\u2122 versions or caches that are created by virtual machines (VMs) with different bit-widths. These caches are referred to as \"incompatible\" caches. See also the Class data sharing topic, which includes some best practices for using -Xshareclasses . Syntax -Xshareclasses:<parameter> When you specify -Xshareclasses without any parameters and without specifying either the -Xscmx or -XX:SharedCacheHardLimit options, a shared classes cache is created with a default size, as follows: For 64-bit platforms, the default size is 300 MB, with a \"soft\" maximum limit for the initial size of the cache ( -Xscmx ) of 64MB, with the following exceptions: For a persistent cache, if the free disk space is less than 6 GB, the default size is set to 64 MB and an -Xscmx size is not set. For a non-persistent cache on Linux\u00ae or macOS\u00ae systems, the cache size is limited by the maximum amount of memory that can be reserved by a process ( SHMMAX ). If SHMMAX is less than 300MB, the default shared cache size is set to equal SHMMAX . If SHMMAX is greater than 80 MB, -Xscmx is set to 64 MB. If SHMMAX is less than 80MB an -Xscmx size is not set. For other platforms, the default size is 16MB. Parameters adjustmaxaot (Cache utility) -Xshareclasses:adjustmaxaot=<size> Adjusts the maximum shared classes cache space that is allowed for AOT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxaot option. adjustminaot (Cache utility) -Xshareclasses:adjustminaot=<size> Adjusts the minimum shared classes cache space that is reserved for AOT data. Use the -Xscminaot option to set the initial minimum size. adjustmaxjitdata (Cache utility) -Xshareclasses:adjustmaxjitdata=<size> Adjusts the maximum shared classes cache space that is allowed for JIT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxjitdata option. adjustminjitdata (Cache utility) -Xshareclasses:adjustminjitdata=<size> Adjusts the minimum shared classes cache space that is reserved for JIT data. Use the -Xscminjitdata option to set the initial minimum size. adjustsoftmx (Cache utility) -Xshareclasses:adjustsoftmx=<size> Adjusts the soft maximum size of the cache. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. For more information about the soft maximum size, see -Xscmx . allowClasspaths -Xshareclasses:allowClasspaths Allows a VM to store classpaths into an existing shared cache that was created by using the restrictClasspaths option. bootClassesOnly -Xshareclasses:bootClassesOnly Disables caching of classes that are loaded by class loaders other than the bootstrap class loader. If you use this suboption, the nonfatal suboption is also set, so this suboption is the equivalent of specifying -Xshareclasses:bootClassesOnly,nonfatal . cacheDir -Xshareclasses:cacheDir=<directory> Sets the directory in which cache data is read and written. The following defaults apply: On Windows\u2122 systems, <directory> is the user's C:\\Documents and Settings\\<username>\\Local Settings\\Application Data\\javasharedresources directory. On other operating systems, <directory> is the user's home directory, unless the groupAccess parameter is specified, in which case it is /tmp/javasharedresources , because some members of the group might not have access to the user's home directory. You must have sufficient permissions in <directory> . On AIX\u00ae, Linux, macOS, and Windows systems, the VM writes persistent cache files directly into the directory specified. Persistent cache files can be safely moved and deleted from the file system. For persistent caches, the directory must not be on an NFS mount. Nonpersistent caches are stored in shared memory and have control files that describe the location of the memory. Control files are stored in a javasharedresources subdirectory of the cacheDir specified. Do not move or delete control files in this directory. The listAllCaches utility, the destroyAll utility, and the expire suboption work only in the scope of a given cacheDir . On AIX, Linux, and macOS systems, if you specify the cacheDir=<directory> option, persistent caches are created with the following permissions ( -rw-r--r-- ): User: read/write Group: read (read/write if you also specify -Xshareclasses:groupAccess ) Other: read only Otherwise, persistent caches are created with the same permissions as non-persistent caches. The permissions for non-persistent caches are -rw-r----- , or -rw-rw---- if you also specify -Xshareclasses:groupAccess . Note: It is good practice to set an application-specific cache directory to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory, and means that your application is therefore unaffected by a user running java -Xshareclasses:destroyAll . See Class data sharing: Best practices for using -Xshareclasses . cacheDirPerm (Not Windows) -Xshareclasses:cacheDirPerm=<permission> Sets Unix-style permissions when you are creating a cache directory. <permission> must be an octal number in the ranges 0700 - 0777 or 1700 - 1777. If <permission> is not valid, the VM ends with an appropriate error message. The permissions that are specified by this suboption are used only when you are creating a new cache directory. If the cache directory already exists, this suboption is ignored and the cache directory permissions are not changed. If you set this suboption to 0000, the default directory permissions are used. If you set this suboption to 1000, the machine default directory permissions are used, but the sticky bit is enabled. If the cache directory is the platform default directory, /tmp/javasharedresources , this suboption is ignored and the cache directory permissions are set to 0777. If you do not set this suboption, the default permissions are used according to the following conditions: Condition Permissions The cache directory is /tmp/javasharedresources . If this directory already exists with different permissions, the permissions are changed when the cache is opened.\u2020 0777 The cache directory is a new directory and you also specify the groupAcess suboption 0770 The cache directory is a new directory and you do not specify the groupAccess suboption 0700 The cache directory already exists and is not /tmp/javasharedresources Unchanged \u2020On z/OS\u00ae systems, permissions for existing cache directories are unchanged, to avoid generating RACF\u00ae errors, which generate log messages. Note: It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. See Class data sharing: Best practices for using -Xshareclasses . cacheRetransformed -Xshareclasses:cacheRetransformed Enables caching of classes that are transformed by using the JVMTI RetransformClasses function. For more information, see JVMTI redefinition and retransformation of classes . The option enableBCI is enabled by default. However, if you use the cacheRetransformed option, this option forces cache creation into -Xshareclasses:disableBCI mode. checkURLTimestamps -Xshareclasses:checkURLTimestamps Causes timestamps of jar or zip files to be checked every time a class is loaded. If a timestamp has changed, the class is loaded from the jar or zip file and not from the shared cache. This suboption is not enabled by default and reflects the legacy behavior of the shared classes cache. Note: The timestamp of a bootstrap jar or zip file is checked once when it is used for the first time to load a class. createLayer (Experimental, 64-bit only) -Xshareclasses:createLayer Creates layered caches. This suboption is experimental; do not use it in a production environment. If there are multiple VMs in a race condition while creating a layered cache, more than one new layered cache can be created. To avoid this situation, use the -Xshareclasses:layer=<number> suboption to create a new layered cache with a specific layer number. See layer for more information about layered caches. destroy (Cache utility) -Xshareclasses:destroy Destroys a cache that is specified by the name , cacheDir , and nonpersistent suboptions. A cache can be destroyed only if all VMs that are using it have ended and the user has sufficient permissions. destroyAll (Cache utility) -Xshareclasses:destroyAll Tries to destroy all the caches that are specified by the cacheDir and nonpersistent suboptions. On Windows and z/OS systems, a cache can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Note: On z/OS, when the destroyAll option is invoked from a 31-bit VM, 64-bit caches are not destroyed. Similarly, when the destroyAll option is invoked from a 64-bit VM, 31-bit caches are not destroyed. The following message is displayed: JVMSHRC735I: Use a nn-bit VM to perform the requested operation on the nn-bit shared cache \"cachename\" as the nn-bit VM cannot verify that the shared memory was created by the VM. On AIX, Linux, and macOS systems: Non-persistent caches can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Persistent caches that are still in use continue to exist even when you use this option, but they are unlinked from the file system so they are not visible to new VM invocations. If you update the VM then restart an application for which a persistent shared cache already exists, the VM unlinks the existing cache and creates a new cache. Because the unlinked caches are not visible to new VMs, you cannot find them by using the -Xshareclasses:listAllCaches option, and you cannot use the -Xshareclasses:printStats option on them. You can therefore have multiple unlinked caches that consume file system space until they are no longer in use. destroyAllLayers (Experimental, 64-bit only) -Xshareclasses:destroyAllLayers Destroys all shared cache layers that are specified by the name suboption. For example, -Xshareclasses:name=Cache1,destroyAllLayers destroys all layers of the cache called Cache1 . If you use the destroy suboption on a layered cache, for example -Xshareclasses:name=Cache1,destroy , only the top layer of the cache is destroyed. For more information about layered caches, see the layer suboption. destroyAllSnapshots (Cache utility) (Not Windows) -Xshareclasses:destroyAllSnapshots Destroys all shared cache snapshots that are available as a result of the specified cacheDir suboption. destroySnapshot (Cache utility) (Not Windows) -Xshareclasses:destroySnapshot Destroys a snapshot that is specified by the name and cacheDir suboptions. disableBCI -Xshareclasses:disableBCI Turns off BCI support. This option can be used to override -XXShareClassesEnableBCI . enableBCI -Xshareclasses:enableBCI This option is enabled by default. Allows a JVMTI ClassFileLoadHook event to be triggered every time, for classes that are loaded from the cache. This mode also prevents caching of classes that are modified by JVMTI agents. For more information about this option, see Using the JVMTI ClassFileLoadHook with cached classes . This option is incompatible with the cacheRetransformed option. Using the two options together causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created without the enableBCI suboption cannot be reused with the enableBCI suboption. Attempting to do so causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created with the enableBCI suboption can be reused without specifying this suboption. In this case, the VM detects that the cache was created with the enableBCI suboption and uses the cache in this mode. expire (Cache utility) -Xshareclasses:expire=<time_in_minutes> Destroys all caches that are unused for the time that is specified before loading shared classes. This option is not a utility option because it does not cause the VM to exit. On Windows systems, which have NTFS file systems, the expire option is accurate to the nearest hour. fatal -Xshareclasses:fatal The VM does not start if class data sharing fails, for example because there was an error when accessing the cache directory. An error message is generated. This suboption is specified by default unless you use the bootClassesOnly suboption, which is equivalent to -Xshareclasses:bootClassesOnly,nonfatal . You can override this behavior by specifying -Xshareclasses:bootClassesOnly,fatal . See also nonfatal . findAotMethods (Cache utility) -Xshareclasses:findAotMethods=<method_specification> -Xshareclasses:findAotMethods=help Print the AOT methods in the shared cache that match the method specifications. Methods that are already invalidated are indicated in the output. Use this suboption to check which AOT methods in the shared class cache would be invalidated by using the same method specifications with the invalidateAotMethods suboption. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax . groupAccess (Not Windows) -Xshareclasses:groupAccess Sets operating system permissions on a new cache to allow group access to the cache. Group access can be set only when permitted by the operating system umask setting. The default is user access only. On AIX, Linux, and macOS systems, if a user creates a cache by specifying the groupAccess suboption, other users in the same group must also specify this suboption to be granted access to the same cache. In certain situations, warning messages might be generated when the groupAccess suboption is used. This message can occur when persistent caches are used: JVMSHRC756W Failed to set group access permission on the shared cache file as requested by the 'groupAccess' sub-option These messages can occur when non-persistent caches are used: JVMSHRC759W Failed to set group access permission as requested by the 'groupAccess' sub-option on the semaphore control file associated with shared class cache. JVMSHRC760W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared memory control file associated with shared class cache. This message can occur in combination with the snapshotCache suboption: JVMSHRC761W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared cache snapshot file. All of these warning messages mean that the user's umask setting does not allow either, or both, of the group read and write permission to be set on the file. The typical umask setting restricts only the write permission. To resolve the warning, either change the umask setting or remove the groupAccess suboption. help -Xshareclasses:help Lists all the command-line options. invalidateAotMethods (Cache utility) -Xshareclasses:invalidateAotMethods=<method_specification> -Xshareclasses:invalidateAotMethods=help Modify the existing shared cache to invalidate the AOT methods that match the method specifications. Use this suboption to invalidate AOT methods that cause a failure in the application, without having to destroy the shared cache. Invalidated AOT methods remain in the shared cache, but are then excluded from being loaded. VMs that have not processed the methods, or new VMs that use the cache are not affected by the invalidated methods. The AOT methods are invalidated for the lifetime of the cache, but do not prevent the AOT methods from being compiled again if a new shared cache is created. To prevent AOT method compilation into a new shared cache, use the -Xaot:exclude option. For more information, see -Xaot . To identify AOT problems, see Diagnosing a JIT or AOT problem . To revalidate an AOT method, see the revalidateAotMethods suboption. Use the findAotMethod suboption to determine which AOT methods match the method specifications. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax . layer (Experimental, 64-bit only) -Xshareclasses:layer=<number> Creates layered caches. This suboption is experimental; do not use it in production. This suboption has the same effect as the createLayer suboption, but with the added ability to specify the layer number. One scenario where you might want to use a layered cache is if you are building a Docker image. Normally, writing to an existing shared cache in a lower image layer results in Docker duplicating the shared cache to the top layer (following the Docker copy-on-write strategy ). With a layered cache, you can instead write into a new cache in the top layer. The new cache builds on the existing cache, so space is saved in the image. The following example shows a Docker container with four layers: The lowest layer is a Ubuntu Docker image. The next layer is an OpenJ9 Docker image that is built on the Ubuntu image. As part of this image, the -Xshareclasses:name=Cache1 suboption is used to create a cache called Cache1 . The layer number assigned to this cache is 0. The listAllCaches suboption shows the cache and the layer number: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 The next Docker layer up is an Open Liberty image that is built on the OpenJ9 image. As part of this image, the -Xshareclasses:name=Cache1,layer=1 suboption is used to create another cache called Cache1. Because the layer=1 suboption is specified, this new cache is a layered cache, which builds on Cache1 in the previous container layer. (Open Liberty starts two VMs, so if you instead use the createLayer suboption here, two layered caches are created, with layer numbers of 1 and 2.) Note that cache layers are different from, and independent of, container layers. In the same way, another Docker layer is added for an Open Liberty Java application, and another layered cache is created to add to Cache1 . The listAllCaches suboption now shows all the caches and their layers: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 Cache1 Java8 64-bit persistent cr 1 Mon Sep 23 11:46:25 2019 Cache1 Java8 64-bit persistent cr 2 In use The caches are created in the same directory. When you use the -Xshareclasses:name=Cache1 suboption in future Java commands, all the caches are started. The top-layer cache is started in read/write mode, and lower-layer caches are started in read-only mode. Modifying a lower-layer cache would invalidate all the caches in the layers above. Restriction: The jvmtiSharedCacheInfo.isCorrupt field and the SharedClassCacheInfo.isCacheCorrupt() method cannot detect a corrupted cache that has a layer number other than 0 . However, when a VM starts a layered cache directly, for example when you specify the -Xshareclasses:name=<cache_name> option on the command line, the VM detects any corruption and generates an error message as usual, regardless of the layer number of the cache. listAllCaches (Cache utility) -Xshareclasses:listAllCaches Lists all the compatible and incompatible caches, and snapshots that exist in the specified cache directory. If you do not specify cacheDir , the default directory is used. Summary information, such as Java version and current usage, is displayed for each cache. mprotect AIX, z/OS 31-bit: -Xshareclasses:mprotect=[default|all|none] Linux, Windows, macOS: -Xshareclasses:mprotect=[default|all|partialpagesonstartup|onfind|nopartialpages|none] where: default : By default, the memory pages that contain the cache are always protected, unless a specific page is being updated. This protection helps prevent accidental or deliberate corruption to the cache. The cache header is not protected by default because this protection has a performance cost. On Linux, macOS, and Windows systems, after the startup phase, the Java virtual machine (VM) protects partially filled pages whenever new data is added to the shared class cache in the following sequence: The VM changes the memory protection of any partially filled pages to read/write. The VM adds the data to the cache. The VM changes the memory protection of any partially filled pages to read only. all : This value ensures that all the cache pages are protected, including the header. See Note. partialpagesonstartup : This value causes the VM to protect partially filled pages during startup as well as after the startup phase. This value is available only on Linux, macOS, and Windows systems. onfind : When this option is specified, the VM protects partially filled pages when it reads new data in the cache that is added by another VM. This option is available only on Linux, macOS, and Windows systems. nopartialpages : Use this value to turn off the protection of partially filled pages. This value is available only on Linux, macOS, and Windows systems. none : Specifying this value disables the page protection. Note: Specifying all has a negative impact on performance. You should specify all only for problem diagnosis and not for production. Specifying values partialpagesonstartup or onfind can also have a negative impact on performance when the cache is being populated. There is no further impact when the cache is full or no longer being modified. modified -Xshareclasses:modified=<modified_context> Used when a JVMTI agent is installed that might modify bytecode at run time. If you do not specify this suboption and a bytecode modification agent is installed, classes are safely shared with an extra performance cost. The <modified context> is a descriptor that is chosen by the user; for example, myModification1 . This option partitions the cache so that only VMs that are using context myModification1 can share the same classes. So if, for example, you run an application with a modification context and then run it again with a different modification context, all classes are stored twice in the cache. For more information, see Dealing with runtime bytecode modification . If you are migrating from IBM\u00ae SDK, Java Technology Edition, Version 7, or earlier releases, you must set -Xshareclasses:disableBCI when you use this option to retain the same behavior. name -Xshareclasses:name=<name> Connects to a cache of a given name, creating the cache if it does not exist. This option is also used to indicate the cache that is to be modified by cache utilities; for example, destroy . Use the listAllCaches utility to show which named caches are currently available. If you do not specify a name, the default name \"sharedcc_%u\" is used. \"%u\" in the cache name inserts the current user name. On operating systems other than Windows, you can specify \"%g\" in the cache name to insert the current group name. Note: It is good practice to explicitly specify a cache for your application. This avoids the application sharing a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note that you cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. See Class data sharing: Best practices for using -Xshareclasses . noaot -Xshareclasses:noaot Disables caching and loading of AOT code. AOT code already in the shared data cache can be loaded. noBootclasspath -Xshareclasses:noBootclasspath Disables the storage of classes that are loaded by the bootstrap class loader in the shared classes cache. Often used with the SharedClassURLFilter API to control exactly which classes are cached. For more information about shared class filtering, see Using the SharedClassHelper API . nocheckURLTimestamps -Xshareclasses:nocheckURLTimestamps Timestamps of jar or zip files are checked only when they are added to a class loader and used for the first time to look up a class. This is the default behavior, which can improve the performance of class loading from the shared classes cache, especially on Windows systems. To revert to the behavior of the shared classes cache in earlier releases, use the CheckURLTimeStamps suboption. Restriction: When the nocheckURLTimestamps suboption is used (default), if jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. If this scenario occurs, use the checkURLTimestamps option. nojitdata -Xshareclasses:nojitdata Disables caching of JIT data. JIT data already in the shared data cache can be loaded. none -Xshareclasses:none Added to the end of a command line, disables class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption disables the shared class utility APIs. To disable class data sharing without disabling the utility APIs, use the utilities suboption. For more information about the shared class utility APIs, see Obtaining information about shared caches . nonfatal -Xshareclasses:nonfatal Allows the VM to start even if class data sharing fails. Normal behavior for the VM is to refuse to start if class data sharing fails. If you select nonfatal and the shared classes cache fails to initialize, the VM attempts to connect to the cache in read-only mode. If this attempt fails, the VM starts without class data sharing. See also fatal . Note: Unless it is important that your application runs with class data sharing, it is good practice to set this parameter. See Class data sharing: Best practices for using -Xshareclasses . nonpersistent -Xshareclasses:nonpersistent Uses a nonpersistent cache. The cache is lost when the operating system shuts down. Nonpersistent and persistent caches can have the same name. On Linux, macOS, and Windows systems, you must always use the nonpersistent suboption when you run utilities such as destroy on a nonpersistent cache. z/OS supports only nonpersistent caches. Note: On macOS systems, you must set kern.sysv.shmmax and kern.sysv.shmall when using a nonpersistent cache. noPersistentDiskSpaceCheck -Xshareclasses:noPersistentDiskSpaceCheck Instructs the VM not to check for available storage on the file system before creating a persistent shared classes cache. This option prevents an error on file systems that do not support the checking of free space, where a value of 0 is returned and a shared cache cannot be created. Regardless of whether you choose to set this option, if there isn't enough disk space available when the VM writes to the shared cache memory, a SIGBUS or SIGSEGV signal occurs and the VM ends. If you are using the readonly suboption, the VM does not check the available disk space, so you do not need to set the noPersistentDiskSpaceCheck suboption. persistent -Xshareclasses:persistent Uses a persistent cache. The cache is created on disk, which persists beyond operating system restarts. Nonpersistent and persistent caches can have the same name. On AIX, you must always use the persistent suboption when you run utilities such as destroy on a persistent cache. Note: Persisent caches are not supported on z/OS systems. z/OS supports only nonpersistent caches. printAllStats (Cache utility) -Xshareclasses:printAllStats Displays detailed information about the contents of the cache that is specified in the name suboption. If the name is not specified, statistics are displayed about the default cache. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats=all ). Every class is listed in chronological order with a reference to the location from which it was loaded. For more information, see Diagnostic cache utilities . printStats (Cache utility) -Xshareclasses:printStats=<data_type>[+<data_type>] Displays summary information for the cache that is specified by the name , cacheDir , and nonpersistent suboptions. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats ). The most useful information that is displayed is how full the cache is and how many classes it contains. Stale classes are classes that are updated on the file system and which the cache has therefore marked as \"stale\". Stale classes are not purged from the cache and can be reused. Use the printStats=stale option to list all the stale entries and stale bytes. Specify one or more data types, which are separated by a plus symbol (+), to see more detailed information about the cache content. Data types include AOT data, class paths, and ROMMethods. For more information and for a full list of data types, see Diagnostic cache utilities . printTopLayerStats (Cache utility) -Xshareclasses:printTopLayerStats=<data_type>[+<data_type>] Equivalent to printStats but for the top layer cache only. readonly -Xshareclasses:readonly Opens an existing cache with read-only permissions. The Java virtual machine does not create a new cache with this suboption. Opening a cache read-only prevents the VM from making any updates to the cache. If you specify this suboption, the VM can connect to caches that were created by other users or groups without requiring write access. On AIX, Linux, and macOS systems, this access is permitted only if the cache was created by using the -Xshareclasses:cacheDir option to specify a directory with appropriate permissions. If you do not use the -Xshareclasses:cacheDir option, the cache is created with default permissions, which do not permit access by other users or groups. By default, this suboption is not specified. reset -Xshareclasses:reset Causes a cache to be destroyed and then re-created when the VM starts up. This option can be added to the end of a command line as -Xshareclasses:reset . restoreFromSnapshot (Cache utility) (Not Windows) -Xshareclasses:restoreFromSnapshot Restores a new non-persistent shared cache from a snapshot file. The snapshot and shared cache have the same name and location, as specified by the name and cacheDir suboptions. The non-persistent cache cannot already exist when the snapshot is restored. Restoring a snapshot does not remove the snapshot file; it can be restored multiple times. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to restore a snapshot. restrictClasspaths -Xshareclasses:restrictClasspaths Allows only the first VM that is initializing a shared cache to store classpaths in the cache. Subsequent VMs are not allowed to store classpaths in the cache unless the allowClasspaths option is specified. Use the restrictClasspaths option only if the application is designed to create class loaders of type java.net.URLClassloader or its subclass, such that their classpaths are unique to the instance of the application, but the classes that are loaded from these classpaths are the same. In such cases application classpaths that are stored by one VM cannot be used by another VM. For example, consider two VMs, VM1 and VM2, that are using class paths CP1 and CP2 respectively, where: CP1: url1;url2;url3;tempurl1;url4;url5 CP2: url1;url2;url3;tempurl2;url4;url5 These class paths differ only by one entry, which is the tempurl . The url1 , url2 , url3 , url4 , and url5 entries never change from run to run, whereas the tempurl entry is always different. This difference means that a class that is loaded from url4 or url5 , and stored into the shared cache by VM1, cannot be located by VM2. Therefore, an attempt by VM2 to load a class from url4 or url5 would cause it to store its own classpath CP2 into the shared cache, and also add new metadata for classes that are loaded from url4 or url5 . Addition of such unique class paths into the shared cache is not useful. Moreover, the additional metadata might adversely affect the performance of other VMs that connect to the shared cache. Because classes loaded from url4 or url5 are not loaded from the shared cache when the tempurl differs from the original, it is good practice to put the tempurl as the last entry in the class path. In situations such as that described in the example, the restrictClasspaths option can be used to restrict the addition of classpaths by ensuring that the first VM initializes the shared cache, and then prevents the addition of unique classpaths by subsequent VMs that attach to the shared cache. Note that use of the restrictClasspaths option in any other scenario is likely to negatively impact a VM's performance when it is using an existing cache. revalidateAotMethods (Cache utility) -Xshareclasses:revalidateAotMethods=<method_specification> -Xshareclasses:revalidateAotMethods=help Modify the shared cache to revalidate the AOT methods that match the method specifications. Use this suboption to revalidate AOT methods that were invalidated by using the invalidateAotMethods suboption. Revalidated AOT methods are then eligible for loading into a VM, but do not affect VMs where the methods have already been processed. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax . silent -Xshareclasses:silent Disables all shared class messages, including error messages. Unrecoverable error messages, which prevent the VM from initializing, are displayed. snapshotCache (Cache utility) (Not Windows) -Xshareclasses:snapshotCache Creates a snapshot file of an existing non-persistent shared cache. The snapshot has the same name and location as the shared cache, as specified by the name and cacheDir suboptions. The shared cache can be in use when the snapshot is taken, but VMs are blocked when they try to write to the shared cache, while the cache data is copied to the file. Typically, after a system is reinitialized, the snapshot file is used to restore the copy of the non-persistent cache into shared memory, via the restoreFromSnapshot suboption. Since this process removes all non-persistent caches from shared memory, restoring the cache from the snapshot file can result in better VM startup performance, because the contents of the shared cache, including classes and AOT code, do not have to be re-created. A snapshot can be created only if the user has sufficient permissions to create the destination snapshot file. If a snapshot of the same name exists already, it is overwritten. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to create a snapshot. For information about removing snapshot files, see the destroySnapshot and destroyAllSnapshots suboptions. utilities -Xshareclasses:utilities Can be added to the end of a command line to disable class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption is like none , but does not disable the shared class utility APIs. For more information about the shared class utility APIs, see Obtaining information about shared caches . verbose -Xshareclasses:verbose Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders ask their parents for a class if they can't find it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy. The standard option -verbose:class also enables class sharing verbose output if class sharing is enabled. verboseAOT -Xshareclasses:verboseAOT Enables verbose output when compiled AOT code is being found or stored in the cache. AOT code is generated heuristically. You might not see any AOT code that is generated at all for a small application. You can disable AOT caching by using the noaot suboption. See the Messages Guide for a list of the messages produced. verboseHelper -Xshareclasses:verboseHelper Enables verbose output for the Java Helper API. This output shows you how the Helper API is used by your class loader. verboseIO -Xshareclasses:verboseIO Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders must ask their parents for a class before they can load it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy. Method specification syntax The following examples show how to specify more than one method specification when you are using the findAotMethods , invalidateAotMethods , or revalidateAotMethods suboptions. Each method specification is defined as follows: <packagename>/<classname>[.<methodname>[(<parameters>)]] If you want to include more than one method specification in a single option, separate the specifications with a comma and enclose all the specifications in {braces}. For example: {<packagename/classname>}[.{<methodname>}[({<parameters>})]] You can use an asterisk (*) in most places as a wildcard. You can use an exclamation point (!) before the specification to mean \"everything except this\". Parameters are optional, but if specified, should be enclosed in parentheses and the following native signature formats must be used: B for byte C for char D for double F for float I for int J for long S for short Z for Boolean L<classname>; for objects [ before the signature means array If you want to specify parameters to distinguish between methods, you can use -Xshareclasses:findAotMethods=* (with a wildcard) to list all the parameter variations. Copy the signature for the method that you want from the output. For example, the signature for the parameters (byte[] bytes, int offset, int length, Charset charset) is ([BIILjava/nio/charset/Charset;) Here are some examples: Method signature Matches... * All AOT methods. java/lang/Object All AOT methods in the java.lang.Object class java/util/* All AOT classes and methods in the java.util package java/util/HashMap.putVal All putVal methods in the java.util.HashMap class java/util/HashMap.hash(Ljava/lang/Object;) The private java.util.HashMap.hash(java.lang.Object) method *.equals All equals methods in all classes {java/lang/Object,!java/lang/Object.clone} All methods in java.lang.Object except clone {java/util/*.*(),java/lang/Object.*(*)} All classes or methods with no input parameter in the java.util package, and all methods in java.lang.Object {java/util/*.*(),!java/util/*.*()} Nothing. See also -Xscmx -XX:SharedCacheHardLimit Class data sharing","title":"-Xshareclasses"},{"location":"xshareclasses/#-xshareclasses","text":"Use the -Xshareclasses option to enable, disable, or modify class sharing behavior. Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. This option can take a number of parameters, some of which are cache utilities. Cache utilities perform the required operation on the specified cache, without starting the VM. You can combine multiple suboptions, which are separated by commas, but the cache utilities are mutually exclusive. When you are running cache utilities, the message Could not create the Java virtual machine is expected. Cache utilities do not create the virtual machine. Some cache utilities can work with caches from previous Java\u2122 versions or caches that are created by virtual machines (VMs) with different bit-widths. These caches are referred to as \"incompatible\" caches. See also the Class data sharing topic, which includes some best practices for using -Xshareclasses .","title":"-Xshareclasses"},{"location":"xshareclasses/#syntax","text":"-Xshareclasses:<parameter> When you specify -Xshareclasses without any parameters and without specifying either the -Xscmx or -XX:SharedCacheHardLimit options, a shared classes cache is created with a default size, as follows: For 64-bit platforms, the default size is 300 MB, with a \"soft\" maximum limit for the initial size of the cache ( -Xscmx ) of 64MB, with the following exceptions: For a persistent cache, if the free disk space is less than 6 GB, the default size is set to 64 MB and an -Xscmx size is not set. For a non-persistent cache on Linux\u00ae or macOS\u00ae systems, the cache size is limited by the maximum amount of memory that can be reserved by a process ( SHMMAX ). If SHMMAX is less than 300MB, the default shared cache size is set to equal SHMMAX . If SHMMAX is greater than 80 MB, -Xscmx is set to 64 MB. If SHMMAX is less than 80MB an -Xscmx size is not set. For other platforms, the default size is 16MB.","title":"Syntax"},{"location":"xshareclasses/#parameters","text":"","title":"Parameters"},{"location":"xshareclasses/#adjustmaxaot-cache-utility","text":"-Xshareclasses:adjustmaxaot=<size> Adjusts the maximum shared classes cache space that is allowed for AOT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxaot option.","title":"adjustmaxaot (Cache utility)"},{"location":"xshareclasses/#adjustminaot-cache-utility","text":"-Xshareclasses:adjustminaot=<size> Adjusts the minimum shared classes cache space that is reserved for AOT data. Use the -Xscminaot option to set the initial minimum size.","title":"adjustminaot (Cache utility)"},{"location":"xshareclasses/#adjustmaxjitdata-cache-utility","text":"-Xshareclasses:adjustmaxjitdata=<size> Adjusts the maximum shared classes cache space that is allowed for JIT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxjitdata option.","title":"adjustmaxjitdata (Cache utility)"},{"location":"xshareclasses/#adjustminjitdata-cache-utility","text":"-Xshareclasses:adjustminjitdata=<size> Adjusts the minimum shared classes cache space that is reserved for JIT data. Use the -Xscminjitdata option to set the initial minimum size.","title":"adjustminjitdata (Cache utility)"},{"location":"xshareclasses/#adjustsoftmx-cache-utility","text":"-Xshareclasses:adjustsoftmx=<size> Adjusts the soft maximum size of the cache. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. For more information about the soft maximum size, see -Xscmx .","title":"adjustsoftmx (Cache utility)"},{"location":"xshareclasses/#allowclasspaths","text":"-Xshareclasses:allowClasspaths Allows a VM to store classpaths into an existing shared cache that was created by using the restrictClasspaths option.","title":"allowClasspaths"},{"location":"xshareclasses/#bootclassesonly","text":"-Xshareclasses:bootClassesOnly Disables caching of classes that are loaded by class loaders other than the bootstrap class loader. If you use this suboption, the nonfatal suboption is also set, so this suboption is the equivalent of specifying -Xshareclasses:bootClassesOnly,nonfatal .","title":"bootClassesOnly"},{"location":"xshareclasses/#cachedir","text":"-Xshareclasses:cacheDir=<directory> Sets the directory in which cache data is read and written. The following defaults apply: On Windows\u2122 systems, <directory> is the user's C:\\Documents and Settings\\<username>\\Local Settings\\Application Data\\javasharedresources directory. On other operating systems, <directory> is the user's home directory, unless the groupAccess parameter is specified, in which case it is /tmp/javasharedresources , because some members of the group might not have access to the user's home directory. You must have sufficient permissions in <directory> . On AIX\u00ae, Linux, macOS, and Windows systems, the VM writes persistent cache files directly into the directory specified. Persistent cache files can be safely moved and deleted from the file system. For persistent caches, the directory must not be on an NFS mount. Nonpersistent caches are stored in shared memory and have control files that describe the location of the memory. Control files are stored in a javasharedresources subdirectory of the cacheDir specified. Do not move or delete control files in this directory. The listAllCaches utility, the destroyAll utility, and the expire suboption work only in the scope of a given cacheDir . On AIX, Linux, and macOS systems, if you specify the cacheDir=<directory> option, persistent caches are created with the following permissions ( -rw-r--r-- ): User: read/write Group: read (read/write if you also specify -Xshareclasses:groupAccess ) Other: read only Otherwise, persistent caches are created with the same permissions as non-persistent caches. The permissions for non-persistent caches are -rw-r----- , or -rw-rw---- if you also specify -Xshareclasses:groupAccess . Note: It is good practice to set an application-specific cache directory to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory, and means that your application is therefore unaffected by a user running java -Xshareclasses:destroyAll . See Class data sharing: Best practices for using -Xshareclasses .","title":"cacheDir"},{"location":"xshareclasses/#cachedirperm","text":"(Not Windows) -Xshareclasses:cacheDirPerm=<permission> Sets Unix-style permissions when you are creating a cache directory. <permission> must be an octal number in the ranges 0700 - 0777 or 1700 - 1777. If <permission> is not valid, the VM ends with an appropriate error message. The permissions that are specified by this suboption are used only when you are creating a new cache directory. If the cache directory already exists, this suboption is ignored and the cache directory permissions are not changed. If you set this suboption to 0000, the default directory permissions are used. If you set this suboption to 1000, the machine default directory permissions are used, but the sticky bit is enabled. If the cache directory is the platform default directory, /tmp/javasharedresources , this suboption is ignored and the cache directory permissions are set to 0777. If you do not set this suboption, the default permissions are used according to the following conditions: Condition Permissions The cache directory is /tmp/javasharedresources . If this directory already exists with different permissions, the permissions are changed when the cache is opened.\u2020 0777 The cache directory is a new directory and you also specify the groupAcess suboption 0770 The cache directory is a new directory and you do not specify the groupAccess suboption 0700 The cache directory already exists and is not /tmp/javasharedresources Unchanged \u2020On z/OS\u00ae systems, permissions for existing cache directories are unchanged, to avoid generating RACF\u00ae errors, which generate log messages. Note: It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. See Class data sharing: Best practices for using -Xshareclasses .","title":"cacheDirPerm"},{"location":"xshareclasses/#cacheretransformed","text":"-Xshareclasses:cacheRetransformed Enables caching of classes that are transformed by using the JVMTI RetransformClasses function. For more information, see JVMTI redefinition and retransformation of classes . The option enableBCI is enabled by default. However, if you use the cacheRetransformed option, this option forces cache creation into -Xshareclasses:disableBCI mode.","title":"cacheRetransformed"},{"location":"xshareclasses/#checkurltimestamps","text":"-Xshareclasses:checkURLTimestamps Causes timestamps of jar or zip files to be checked every time a class is loaded. If a timestamp has changed, the class is loaded from the jar or zip file and not from the shared cache. This suboption is not enabled by default and reflects the legacy behavior of the shared classes cache. Note: The timestamp of a bootstrap jar or zip file is checked once when it is used for the first time to load a class.","title":"checkURLTimestamps"},{"location":"xshareclasses/#createlayer","text":"(Experimental, 64-bit only) -Xshareclasses:createLayer Creates layered caches. This suboption is experimental; do not use it in a production environment. If there are multiple VMs in a race condition while creating a layered cache, more than one new layered cache can be created. To avoid this situation, use the -Xshareclasses:layer=<number> suboption to create a new layered cache with a specific layer number. See layer for more information about layered caches.","title":"createLayer"},{"location":"xshareclasses/#destroy-cache-utility","text":"-Xshareclasses:destroy Destroys a cache that is specified by the name , cacheDir , and nonpersistent suboptions. A cache can be destroyed only if all VMs that are using it have ended and the user has sufficient permissions.","title":"destroy (Cache utility)"},{"location":"xshareclasses/#destroyall-cache-utility","text":"-Xshareclasses:destroyAll Tries to destroy all the caches that are specified by the cacheDir and nonpersistent suboptions. On Windows and z/OS systems, a cache can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Note: On z/OS, when the destroyAll option is invoked from a 31-bit VM, 64-bit caches are not destroyed. Similarly, when the destroyAll option is invoked from a 64-bit VM, 31-bit caches are not destroyed. The following message is displayed: JVMSHRC735I: Use a nn-bit VM to perform the requested operation on the nn-bit shared cache \"cachename\" as the nn-bit VM cannot verify that the shared memory was created by the VM. On AIX, Linux, and macOS systems: Non-persistent caches can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Persistent caches that are still in use continue to exist even when you use this option, but they are unlinked from the file system so they are not visible to new VM invocations. If you update the VM then restart an application for which a persistent shared cache already exists, the VM unlinks the existing cache and creates a new cache. Because the unlinked caches are not visible to new VMs, you cannot find them by using the -Xshareclasses:listAllCaches option, and you cannot use the -Xshareclasses:printStats option on them. You can therefore have multiple unlinked caches that consume file system space until they are no longer in use.","title":"destroyAll (Cache utility)"},{"location":"xshareclasses/#destroyalllayers","text":"(Experimental, 64-bit only) -Xshareclasses:destroyAllLayers Destroys all shared cache layers that are specified by the name suboption. For example, -Xshareclasses:name=Cache1,destroyAllLayers destroys all layers of the cache called Cache1 . If you use the destroy suboption on a layered cache, for example -Xshareclasses:name=Cache1,destroy , only the top layer of the cache is destroyed. For more information about layered caches, see the layer suboption.","title":"destroyAllLayers"},{"location":"xshareclasses/#destroyallsnapshots-cache-utility","text":"(Not Windows) -Xshareclasses:destroyAllSnapshots Destroys all shared cache snapshots that are available as a result of the specified cacheDir suboption.","title":"destroyAllSnapshots (Cache utility)"},{"location":"xshareclasses/#destroysnapshot-cache-utility","text":"(Not Windows) -Xshareclasses:destroySnapshot Destroys a snapshot that is specified by the name and cacheDir suboptions.","title":"destroySnapshot (Cache utility)"},{"location":"xshareclasses/#disablebci","text":"-Xshareclasses:disableBCI Turns off BCI support. This option can be used to override -XXShareClassesEnableBCI .","title":"disableBCI"},{"location":"xshareclasses/#enablebci","text":"-Xshareclasses:enableBCI This option is enabled by default. Allows a JVMTI ClassFileLoadHook event to be triggered every time, for classes that are loaded from the cache. This mode also prevents caching of classes that are modified by JVMTI agents. For more information about this option, see Using the JVMTI ClassFileLoadHook with cached classes . This option is incompatible with the cacheRetransformed option. Using the two options together causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created without the enableBCI suboption cannot be reused with the enableBCI suboption. Attempting to do so causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created with the enableBCI suboption can be reused without specifying this suboption. In this case, the VM detects that the cache was created with the enableBCI suboption and uses the cache in this mode.","title":"enableBCI"},{"location":"xshareclasses/#expire-cache-utility","text":"-Xshareclasses:expire=<time_in_minutes> Destroys all caches that are unused for the time that is specified before loading shared classes. This option is not a utility option because it does not cause the VM to exit. On Windows systems, which have NTFS file systems, the expire option is accurate to the nearest hour.","title":"expire (Cache utility)"},{"location":"xshareclasses/#fatal","text":"-Xshareclasses:fatal The VM does not start if class data sharing fails, for example because there was an error when accessing the cache directory. An error message is generated. This suboption is specified by default unless you use the bootClassesOnly suboption, which is equivalent to -Xshareclasses:bootClassesOnly,nonfatal . You can override this behavior by specifying -Xshareclasses:bootClassesOnly,fatal . See also nonfatal .","title":"fatal"},{"location":"xshareclasses/#findaotmethods-cache-utility","text":"-Xshareclasses:findAotMethods=<method_specification> -Xshareclasses:findAotMethods=help Print the AOT methods in the shared cache that match the method specifications. Methods that are already invalidated are indicated in the output. Use this suboption to check which AOT methods in the shared class cache would be invalidated by using the same method specifications with the invalidateAotMethods suboption. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax .","title":"findAotMethods (Cache utility)"},{"location":"xshareclasses/#groupaccess","text":"(Not Windows) -Xshareclasses:groupAccess Sets operating system permissions on a new cache to allow group access to the cache. Group access can be set only when permitted by the operating system umask setting. The default is user access only. On AIX, Linux, and macOS systems, if a user creates a cache by specifying the groupAccess suboption, other users in the same group must also specify this suboption to be granted access to the same cache. In certain situations, warning messages might be generated when the groupAccess suboption is used. This message can occur when persistent caches are used: JVMSHRC756W Failed to set group access permission on the shared cache file as requested by the 'groupAccess' sub-option These messages can occur when non-persistent caches are used: JVMSHRC759W Failed to set group access permission as requested by the 'groupAccess' sub-option on the semaphore control file associated with shared class cache. JVMSHRC760W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared memory control file associated with shared class cache. This message can occur in combination with the snapshotCache suboption: JVMSHRC761W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared cache snapshot file. All of these warning messages mean that the user's umask setting does not allow either, or both, of the group read and write permission to be set on the file. The typical umask setting restricts only the write permission. To resolve the warning, either change the umask setting or remove the groupAccess suboption.","title":"groupAccess"},{"location":"xshareclasses/#help","text":"-Xshareclasses:help Lists all the command-line options.","title":"help"},{"location":"xshareclasses/#invalidateaotmethods-cache-utility","text":"-Xshareclasses:invalidateAotMethods=<method_specification> -Xshareclasses:invalidateAotMethods=help Modify the existing shared cache to invalidate the AOT methods that match the method specifications. Use this suboption to invalidate AOT methods that cause a failure in the application, without having to destroy the shared cache. Invalidated AOT methods remain in the shared cache, but are then excluded from being loaded. VMs that have not processed the methods, or new VMs that use the cache are not affected by the invalidated methods. The AOT methods are invalidated for the lifetime of the cache, but do not prevent the AOT methods from being compiled again if a new shared cache is created. To prevent AOT method compilation into a new shared cache, use the -Xaot:exclude option. For more information, see -Xaot . To identify AOT problems, see Diagnosing a JIT or AOT problem . To revalidate an AOT method, see the revalidateAotMethods suboption. Use the findAotMethod suboption to determine which AOT methods match the method specifications. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax .","title":"invalidateAotMethods (Cache utility)"},{"location":"xshareclasses/#layer","text":"(Experimental, 64-bit only) -Xshareclasses:layer=<number> Creates layered caches. This suboption is experimental; do not use it in production. This suboption has the same effect as the createLayer suboption, but with the added ability to specify the layer number. One scenario where you might want to use a layered cache is if you are building a Docker image. Normally, writing to an existing shared cache in a lower image layer results in Docker duplicating the shared cache to the top layer (following the Docker copy-on-write strategy ). With a layered cache, you can instead write into a new cache in the top layer. The new cache builds on the existing cache, so space is saved in the image. The following example shows a Docker container with four layers: The lowest layer is a Ubuntu Docker image. The next layer is an OpenJ9 Docker image that is built on the Ubuntu image. As part of this image, the -Xshareclasses:name=Cache1 suboption is used to create a cache called Cache1 . The layer number assigned to this cache is 0. The listAllCaches suboption shows the cache and the layer number: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 The next Docker layer up is an Open Liberty image that is built on the OpenJ9 image. As part of this image, the -Xshareclasses:name=Cache1,layer=1 suboption is used to create another cache called Cache1. Because the layer=1 suboption is specified, this new cache is a layered cache, which builds on Cache1 in the previous container layer. (Open Liberty starts two VMs, so if you instead use the createLayer suboption here, two layered caches are created, with layer numbers of 1 and 2.) Note that cache layers are different from, and independent of, container layers. In the same way, another Docker layer is added for an Open Liberty Java application, and another layered cache is created to add to Cache1 . The listAllCaches suboption now shows all the caches and their layers: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 Cache1 Java8 64-bit persistent cr 1 Mon Sep 23 11:46:25 2019 Cache1 Java8 64-bit persistent cr 2 In use The caches are created in the same directory. When you use the -Xshareclasses:name=Cache1 suboption in future Java commands, all the caches are started. The top-layer cache is started in read/write mode, and lower-layer caches are started in read-only mode. Modifying a lower-layer cache would invalidate all the caches in the layers above. Restriction: The jvmtiSharedCacheInfo.isCorrupt field and the SharedClassCacheInfo.isCacheCorrupt() method cannot detect a corrupted cache that has a layer number other than 0 . However, when a VM starts a layered cache directly, for example when you specify the -Xshareclasses:name=<cache_name> option on the command line, the VM detects any corruption and generates an error message as usual, regardless of the layer number of the cache.","title":"layer"},{"location":"xshareclasses/#listallcaches-cache-utility","text":"-Xshareclasses:listAllCaches Lists all the compatible and incompatible caches, and snapshots that exist in the specified cache directory. If you do not specify cacheDir , the default directory is used. Summary information, such as Java version and current usage, is displayed for each cache.","title":"listAllCaches (Cache utility)"},{"location":"xshareclasses/#mprotect","text":"AIX, z/OS 31-bit: -Xshareclasses:mprotect=[default|all|none] Linux, Windows, macOS: -Xshareclasses:mprotect=[default|all|partialpagesonstartup|onfind|nopartialpages|none] where: default : By default, the memory pages that contain the cache are always protected, unless a specific page is being updated. This protection helps prevent accidental or deliberate corruption to the cache. The cache header is not protected by default because this protection has a performance cost. On Linux, macOS, and Windows systems, after the startup phase, the Java virtual machine (VM) protects partially filled pages whenever new data is added to the shared class cache in the following sequence: The VM changes the memory protection of any partially filled pages to read/write. The VM adds the data to the cache. The VM changes the memory protection of any partially filled pages to read only. all : This value ensures that all the cache pages are protected, including the header. See Note. partialpagesonstartup : This value causes the VM to protect partially filled pages during startup as well as after the startup phase. This value is available only on Linux, macOS, and Windows systems. onfind : When this option is specified, the VM protects partially filled pages when it reads new data in the cache that is added by another VM. This option is available only on Linux, macOS, and Windows systems. nopartialpages : Use this value to turn off the protection of partially filled pages. This value is available only on Linux, macOS, and Windows systems. none : Specifying this value disables the page protection. Note: Specifying all has a negative impact on performance. You should specify all only for problem diagnosis and not for production. Specifying values partialpagesonstartup or onfind can also have a negative impact on performance when the cache is being populated. There is no further impact when the cache is full or no longer being modified.","title":"mprotect"},{"location":"xshareclasses/#modified","text":"-Xshareclasses:modified=<modified_context> Used when a JVMTI agent is installed that might modify bytecode at run time. If you do not specify this suboption and a bytecode modification agent is installed, classes are safely shared with an extra performance cost. The <modified context> is a descriptor that is chosen by the user; for example, myModification1 . This option partitions the cache so that only VMs that are using context myModification1 can share the same classes. So if, for example, you run an application with a modification context and then run it again with a different modification context, all classes are stored twice in the cache. For more information, see Dealing with runtime bytecode modification . If you are migrating from IBM\u00ae SDK, Java Technology Edition, Version 7, or earlier releases, you must set -Xshareclasses:disableBCI when you use this option to retain the same behavior.","title":"modified"},{"location":"xshareclasses/#name","text":"-Xshareclasses:name=<name> Connects to a cache of a given name, creating the cache if it does not exist. This option is also used to indicate the cache that is to be modified by cache utilities; for example, destroy . Use the listAllCaches utility to show which named caches are currently available. If you do not specify a name, the default name \"sharedcc_%u\" is used. \"%u\" in the cache name inserts the current user name. On operating systems other than Windows, you can specify \"%g\" in the cache name to insert the current group name. Note: It is good practice to explicitly specify a cache for your application. This avoids the application sharing a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note that you cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. See Class data sharing: Best practices for using -Xshareclasses .","title":"name"},{"location":"xshareclasses/#noaot","text":"-Xshareclasses:noaot Disables caching and loading of AOT code. AOT code already in the shared data cache can be loaded.","title":"noaot"},{"location":"xshareclasses/#nobootclasspath","text":"-Xshareclasses:noBootclasspath Disables the storage of classes that are loaded by the bootstrap class loader in the shared classes cache. Often used with the SharedClassURLFilter API to control exactly which classes are cached. For more information about shared class filtering, see Using the SharedClassHelper API .","title":"noBootclasspath"},{"location":"xshareclasses/#nocheckurltimestamps","text":"-Xshareclasses:nocheckURLTimestamps Timestamps of jar or zip files are checked only when they are added to a class loader and used for the first time to look up a class. This is the default behavior, which can improve the performance of class loading from the shared classes cache, especially on Windows systems. To revert to the behavior of the shared classes cache in earlier releases, use the CheckURLTimeStamps suboption. Restriction: When the nocheckURLTimestamps suboption is used (default), if jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. If this scenario occurs, use the checkURLTimestamps option.","title":"nocheckURLTimestamps"},{"location":"xshareclasses/#nojitdata","text":"-Xshareclasses:nojitdata Disables caching of JIT data. JIT data already in the shared data cache can be loaded.","title":"nojitdata"},{"location":"xshareclasses/#none","text":"-Xshareclasses:none Added to the end of a command line, disables class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption disables the shared class utility APIs. To disable class data sharing without disabling the utility APIs, use the utilities suboption. For more information about the shared class utility APIs, see Obtaining information about shared caches .","title":"none"},{"location":"xshareclasses/#nonfatal","text":"-Xshareclasses:nonfatal Allows the VM to start even if class data sharing fails. Normal behavior for the VM is to refuse to start if class data sharing fails. If you select nonfatal and the shared classes cache fails to initialize, the VM attempts to connect to the cache in read-only mode. If this attempt fails, the VM starts without class data sharing. See also fatal . Note: Unless it is important that your application runs with class data sharing, it is good practice to set this parameter. See Class data sharing: Best practices for using -Xshareclasses .","title":"nonfatal"},{"location":"xshareclasses/#nonpersistent","text":"-Xshareclasses:nonpersistent Uses a nonpersistent cache. The cache is lost when the operating system shuts down. Nonpersistent and persistent caches can have the same name. On Linux, macOS, and Windows systems, you must always use the nonpersistent suboption when you run utilities such as destroy on a nonpersistent cache. z/OS supports only nonpersistent caches. Note: On macOS systems, you must set kern.sysv.shmmax and kern.sysv.shmall when using a nonpersistent cache.","title":"nonpersistent"},{"location":"xshareclasses/#nopersistentdiskspacecheck","text":"-Xshareclasses:noPersistentDiskSpaceCheck Instructs the VM not to check for available storage on the file system before creating a persistent shared classes cache. This option prevents an error on file systems that do not support the checking of free space, where a value of 0 is returned and a shared cache cannot be created. Regardless of whether you choose to set this option, if there isn't enough disk space available when the VM writes to the shared cache memory, a SIGBUS or SIGSEGV signal occurs and the VM ends. If you are using the readonly suboption, the VM does not check the available disk space, so you do not need to set the noPersistentDiskSpaceCheck suboption.","title":"noPersistentDiskSpaceCheck"},{"location":"xshareclasses/#persistent","text":"-Xshareclasses:persistent Uses a persistent cache. The cache is created on disk, which persists beyond operating system restarts. Nonpersistent and persistent caches can have the same name. On AIX, you must always use the persistent suboption when you run utilities such as destroy on a persistent cache. Note: Persisent caches are not supported on z/OS systems. z/OS supports only nonpersistent caches.","title":"persistent"},{"location":"xshareclasses/#printallstats-cache-utility","text":"-Xshareclasses:printAllStats Displays detailed information about the contents of the cache that is specified in the name suboption. If the name is not specified, statistics are displayed about the default cache. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats=all ). Every class is listed in chronological order with a reference to the location from which it was loaded. For more information, see Diagnostic cache utilities .","title":"printAllStats (Cache utility)"},{"location":"xshareclasses/#printstats-cache-utility","text":"-Xshareclasses:printStats=<data_type>[+<data_type>] Displays summary information for the cache that is specified by the name , cacheDir , and nonpersistent suboptions. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats ). The most useful information that is displayed is how full the cache is and how many classes it contains. Stale classes are classes that are updated on the file system and which the cache has therefore marked as \"stale\". Stale classes are not purged from the cache and can be reused. Use the printStats=stale option to list all the stale entries and stale bytes. Specify one or more data types, which are separated by a plus symbol (+), to see more detailed information about the cache content. Data types include AOT data, class paths, and ROMMethods. For more information and for a full list of data types, see Diagnostic cache utilities .","title":"printStats (Cache utility)"},{"location":"xshareclasses/#printtoplayerstats-cache-utility","text":"-Xshareclasses:printTopLayerStats=<data_type>[+<data_type>] Equivalent to printStats but for the top layer cache only.","title":"printTopLayerStats (Cache utility)"},{"location":"xshareclasses/#readonly","text":"-Xshareclasses:readonly Opens an existing cache with read-only permissions. The Java virtual machine does not create a new cache with this suboption. Opening a cache read-only prevents the VM from making any updates to the cache. If you specify this suboption, the VM can connect to caches that were created by other users or groups without requiring write access. On AIX, Linux, and macOS systems, this access is permitted only if the cache was created by using the -Xshareclasses:cacheDir option to specify a directory with appropriate permissions. If you do not use the -Xshareclasses:cacheDir option, the cache is created with default permissions, which do not permit access by other users or groups. By default, this suboption is not specified.","title":"readonly"},{"location":"xshareclasses/#reset","text":"-Xshareclasses:reset Causes a cache to be destroyed and then re-created when the VM starts up. This option can be added to the end of a command line as -Xshareclasses:reset .","title":"reset"},{"location":"xshareclasses/#restorefromsnapshot-cache-utility","text":"(Not Windows) -Xshareclasses:restoreFromSnapshot Restores a new non-persistent shared cache from a snapshot file. The snapshot and shared cache have the same name and location, as specified by the name and cacheDir suboptions. The non-persistent cache cannot already exist when the snapshot is restored. Restoring a snapshot does not remove the snapshot file; it can be restored multiple times. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to restore a snapshot.","title":"restoreFromSnapshot (Cache utility)"},{"location":"xshareclasses/#restrictclasspaths","text":"-Xshareclasses:restrictClasspaths Allows only the first VM that is initializing a shared cache to store classpaths in the cache. Subsequent VMs are not allowed to store classpaths in the cache unless the allowClasspaths option is specified. Use the restrictClasspaths option only if the application is designed to create class loaders of type java.net.URLClassloader or its subclass, such that their classpaths are unique to the instance of the application, but the classes that are loaded from these classpaths are the same. In such cases application classpaths that are stored by one VM cannot be used by another VM. For example, consider two VMs, VM1 and VM2, that are using class paths CP1 and CP2 respectively, where: CP1: url1;url2;url3;tempurl1;url4;url5 CP2: url1;url2;url3;tempurl2;url4;url5 These class paths differ only by one entry, which is the tempurl . The url1 , url2 , url3 , url4 , and url5 entries never change from run to run, whereas the tempurl entry is always different. This difference means that a class that is loaded from url4 or url5 , and stored into the shared cache by VM1, cannot be located by VM2. Therefore, an attempt by VM2 to load a class from url4 or url5 would cause it to store its own classpath CP2 into the shared cache, and also add new metadata for classes that are loaded from url4 or url5 . Addition of such unique class paths into the shared cache is not useful. Moreover, the additional metadata might adversely affect the performance of other VMs that connect to the shared cache. Because classes loaded from url4 or url5 are not loaded from the shared cache when the tempurl differs from the original, it is good practice to put the tempurl as the last entry in the class path. In situations such as that described in the example, the restrictClasspaths option can be used to restrict the addition of classpaths by ensuring that the first VM initializes the shared cache, and then prevents the addition of unique classpaths by subsequent VMs that attach to the shared cache. Note that use of the restrictClasspaths option in any other scenario is likely to negatively impact a VM's performance when it is using an existing cache.","title":"restrictClasspaths"},{"location":"xshareclasses/#revalidateaotmethods-cache-utility","text":"-Xshareclasses:revalidateAotMethods=<method_specification> -Xshareclasses:revalidateAotMethods=help Modify the shared cache to revalidate the AOT methods that match the method specifications. Use this suboption to revalidate AOT methods that were invalidated by using the invalidateAotMethods suboption. Revalidated AOT methods are then eligible for loading into a VM, but do not affect VMs where the methods have already been processed. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax .","title":"revalidateAotMethods (Cache utility)"},{"location":"xshareclasses/#silent","text":"-Xshareclasses:silent Disables all shared class messages, including error messages. Unrecoverable error messages, which prevent the VM from initializing, are displayed.","title":"silent"},{"location":"xshareclasses/#snapshotcache-cache-utility","text":"(Not Windows) -Xshareclasses:snapshotCache Creates a snapshot file of an existing non-persistent shared cache. The snapshot has the same name and location as the shared cache, as specified by the name and cacheDir suboptions. The shared cache can be in use when the snapshot is taken, but VMs are blocked when they try to write to the shared cache, while the cache data is copied to the file. Typically, after a system is reinitialized, the snapshot file is used to restore the copy of the non-persistent cache into shared memory, via the restoreFromSnapshot suboption. Since this process removes all non-persistent caches from shared memory, restoring the cache from the snapshot file can result in better VM startup performance, because the contents of the shared cache, including classes and AOT code, do not have to be re-created. A snapshot can be created only if the user has sufficient permissions to create the destination snapshot file. If a snapshot of the same name exists already, it is overwritten. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to create a snapshot. For information about removing snapshot files, see the destroySnapshot and destroyAllSnapshots suboptions.","title":"snapshotCache (Cache utility)"},{"location":"xshareclasses/#utilities","text":"-Xshareclasses:utilities Can be added to the end of a command line to disable class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption is like none , but does not disable the shared class utility APIs. For more information about the shared class utility APIs, see Obtaining information about shared caches .","title":"utilities"},{"location":"xshareclasses/#verbose","text":"-Xshareclasses:verbose Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders ask their parents for a class if they can't find it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy. The standard option -verbose:class also enables class sharing verbose output if class sharing is enabled.","title":"verbose"},{"location":"xshareclasses/#verboseaot","text":"-Xshareclasses:verboseAOT Enables verbose output when compiled AOT code is being found or stored in the cache. AOT code is generated heuristically. You might not see any AOT code that is generated at all for a small application. You can disable AOT caching by using the noaot suboption. See the Messages Guide for a list of the messages produced.","title":"verboseAOT"},{"location":"xshareclasses/#verbosehelper","text":"-Xshareclasses:verboseHelper Enables verbose output for the Java Helper API. This output shows you how the Helper API is used by your class loader.","title":"verboseHelper"},{"location":"xshareclasses/#verboseio","text":"-Xshareclasses:verboseIO Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders must ask their parents for a class before they can load it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy.","title":"verboseIO"},{"location":"xshareclasses/#method-specification-syntax","text":"The following examples show how to specify more than one method specification when you are using the findAotMethods , invalidateAotMethods , or revalidateAotMethods suboptions. Each method specification is defined as follows: <packagename>/<classname>[.<methodname>[(<parameters>)]] If you want to include more than one method specification in a single option, separate the specifications with a comma and enclose all the specifications in {braces}. For example: {<packagename/classname>}[.{<methodname>}[({<parameters>})]] You can use an asterisk (*) in most places as a wildcard. You can use an exclamation point (!) before the specification to mean \"everything except this\". Parameters are optional, but if specified, should be enclosed in parentheses and the following native signature formats must be used: B for byte C for char D for double F for float I for int J for long S for short Z for Boolean L<classname>; for objects [ before the signature means array If you want to specify parameters to distinguish between methods, you can use -Xshareclasses:findAotMethods=* (with a wildcard) to list all the parameter variations. Copy the signature for the method that you want from the output. For example, the signature for the parameters (byte[] bytes, int offset, int length, Charset charset) is ([BIILjava/nio/charset/Charset;) Here are some examples: Method signature Matches... * All AOT methods. java/lang/Object All AOT methods in the java.lang.Object class java/util/* All AOT classes and methods in the java.util package java/util/HashMap.putVal All putVal methods in the java.util.HashMap class java/util/HashMap.hash(Ljava/lang/Object;) The private java.util.HashMap.hash(java.lang.Object) method *.equals All equals methods in all classes {java/lang/Object,!java/lang/Object.clone} All methods in java.lang.Object except clone {java/util/*.*(),java/lang/Object.*(*)} All classes or methods with no input parameter in the java.util package, and all methods in java.lang.Object {java/util/*.*(),!java/util/*.*()} Nothing.","title":"Method specification syntax"},{"location":"xshareclasses/#see-also","text":"-Xscmx -XX:SharedCacheHardLimit Class data sharing","title":"See also"},{"location":"xsigcatch/","text":"-Xsigcatch / -Xnosigcatch Enables and disables VM signal handling code. Syntax Setting Effect Default -Xsigcatch Enable yes -Xnosigcatch Disable","title":"-Xsigcatch"},{"location":"xsigcatch/#-xsigcatch-xnosigcatch","text":"Enables and disables VM signal handling code.","title":"-Xsigcatch / -Xnosigcatch"},{"location":"xsigcatch/#syntax","text":"Setting Effect Default -Xsigcatch Enable yes -Xnosigcatch Disable","title":"Syntax"},{"location":"xsigchain/","text":"-Xsigchain / -Xnosigchain Enables and disables signal handler chaining. Syntax Setting Effect Default -Xsigchain Enable yes (except on z/OS\u00ae) -Xnosigchain Disable","title":"-Xsigchain"},{"location":"xsigchain/#-xsigchain-xnosigchain","text":"Enables and disables signal handler chaining.","title":"-Xsigchain / -Xnosigchain"},{"location":"xsigchain/#syntax","text":"Setting Effect Default -Xsigchain Enable yes (except on z/OS\u00ae) -Xnosigchain Disable","title":"Syntax"},{"location":"xsignal/","text":"-Xsignal (z/OS\u00ae only) This option controls the behavior of OpenJ9 VM signal handlers. Syntax -Xsignal:<parameter>=<value> Parameters Restriction: You cannot use these parameters together. posixSignalHandler -Xsignal:posixSignalHandler=cooperativeShutdown When the VM signal handlers for SIGSEGV, SIGILL, SIGBUS, SIGFPE, SIGTRAP, and SIGABRT end a process, they call exit() , by default. In this case, the z/OS\u2122 Language Environment\u00ae is not aware that the VM ended abnormally. With -Xsignal:posixSignalHandler=cooperativeShutdown , the VM no longer uses exit() to end the process from the signal handlers. Instead, the VM behaves in one of the following ways: In response to a z/OS hardware exception, the VM uses return() . In response to signals raised or injected by software, the VM ends the enclave with abend 3565 . Language Environment detects that the VM is ending abnormally and initiates Resource Recovery Services. userConditionHandler (31-bit z/OS only) -Xsignal:userConditionHandler=percolate This option results in similar behavior to the -XCEEHDLR option: the VM registers user condition handlers to handle the z/OS exceptions that would otherwise be handled by the VM POSIX signal handlers for the SIGBUS, SIGFPE, SIGILL, SIGSEGV, and SIGTRAP signals. As with the -XCEEHDLR option, the VM does not install POSIX signal handlers for these signals. This option differs from the -XCEEHDLR option in that the VM percolates all Language Environment\u00ae conditions that were not triggered and expected by the VM during normal running, including conditions that are severity 2 or greater. The VM generates its own diagnostic information before percolating severity 2 or greater conditions. The VM is in an undefined state after percolating a severity 2 or greater condition. Applications cannot resume running then call back into, or return to, the VM. See also -XCEEHDLR Signals used by the VM .","title":"-Xsignal"},{"location":"xsignal/#-xsignal","text":"(z/OS\u00ae only) This option controls the behavior of OpenJ9 VM signal handlers.","title":"-Xsignal"},{"location":"xsignal/#syntax","text":"-Xsignal:<parameter>=<value>","title":"Syntax"},{"location":"xsignal/#parameters","text":"Restriction: You cannot use these parameters together.","title":"Parameters"},{"location":"xsignal/#posixsignalhandler","text":"-Xsignal:posixSignalHandler=cooperativeShutdown When the VM signal handlers for SIGSEGV, SIGILL, SIGBUS, SIGFPE, SIGTRAP, and SIGABRT end a process, they call exit() , by default. In this case, the z/OS\u2122 Language Environment\u00ae is not aware that the VM ended abnormally. With -Xsignal:posixSignalHandler=cooperativeShutdown , the VM no longer uses exit() to end the process from the signal handlers. Instead, the VM behaves in one of the following ways: In response to a z/OS hardware exception, the VM uses return() . In response to signals raised or injected by software, the VM ends the enclave with abend 3565 . Language Environment detects that the VM is ending abnormally and initiates Resource Recovery Services.","title":"posixSignalHandler"},{"location":"xsignal/#userconditionhandler","text":"(31-bit z/OS only) -Xsignal:userConditionHandler=percolate This option results in similar behavior to the -XCEEHDLR option: the VM registers user condition handlers to handle the z/OS exceptions that would otherwise be handled by the VM POSIX signal handlers for the SIGBUS, SIGFPE, SIGILL, SIGSEGV, and SIGTRAP signals. As with the -XCEEHDLR option, the VM does not install POSIX signal handlers for these signals. This option differs from the -XCEEHDLR option in that the VM percolates all Language Environment\u00ae conditions that were not triggered and expected by the VM during normal running, including conditions that are severity 2 or greater. The VM generates its own diagnostic information before percolating severity 2 or greater conditions. The VM is in an undefined state after percolating a severity 2 or greater condition. Applications cannot resume running then call back into, or return to, the VM.","title":"userConditionHandler"},{"location":"xsignal/#see-also","text":"-XCEEHDLR Signals used by the VM .","title":"See also"},{"location":"xsoftmx/","text":"-Xsoftmx This option sets a \"soft\" maximum limit for the initial size of the Java\u2122 heap. Syntax -Xsoftmx<size> Explanation Use the -Xmx option to set a \"hard\" limit for the maximum size of the heap. By default, -Xsoftmx is set to the same value as -Xmx . The value of -Xms must be less than, or equal to, the value of -Xsoftmx . See the introduction to this topic for more information about specifying <size> parameters. You can set this option on the command line, then modify it at run time by using the MemoryMXBean.setMaxHeapSize() method in the com.ibm.lang.management API. By using this API, Java applications can dynamically monitor and adjust the heap size as required. This function can be useful in virtualized or cloud environments, for example, where the available memory might change dynamically to meet business needs. When you use the API, you must specify the value in bytes, such as 2147483648 instead of 2g . For example, you might set the initial heap size to 1 GB and the maximum heap size to 8 GB. You might set a smaller value, such as 2 GB, for -Xsoftmx , to limit the heap size that is used initially: :::java -Xms1g -Xsoftmx2g -Xmx8g You can then use the com.ibm.lang.management API from within a Java application to increase the -Xsoftmx value during run time, as load increases. This change allows the application to use more memory than you specified initially. If you reduce the -Xsoftmx value, the garbage collector attempts to respect the new limit. However, the ability to shrink the heap depends on a number of factors. There is no guarantee that a decrease in the heap size will occur. If or when the heap shrinks to less than the new limit, the heap will not grow beyond that limit. When the heap shrinks, the garbage collector might release memory. The ability of the operating system to reclaim and use this memory varies based on the capabilities of the operating system. Notes: When using -Xgcpolicy:gencon , -Xsoftmx applies only to the non-nursery portion of the heap. In some cases the heap grows to greater than the -Xsoftmx value because the nursery portion grows, making the heap size exceed the limit that is set. See -Xmn for limiting the nursery size. When using -Xgcpolicy:metronome , -Xsoftmx is ignored because the Metronome garbage collector does not support contraction or expansion of the heap. There might be little benefit in reducing the -Xsoftmx value when the Java heap is using large pages. Large pages are pinned in memory and are not reclaimed by the operating system, with the exception of 1M pageable pages on z/OS\u00ae. On certain platforms and processors the VM starts with large pages enabled by default for the Java heap when the operating system is configured to provide large pages. For more information, see Configuring large page memory allocation . A future version of the Java virtual machine might provide a hint to the operating system when large pages are no longer in use.","title":"-Xsoftmx"},{"location":"xsoftmx/#-xsoftmx","text":"This option sets a \"soft\" maximum limit for the initial size of the Java\u2122 heap.","title":"-Xsoftmx"},{"location":"xsoftmx/#syntax","text":"-Xsoftmx<size>","title":"Syntax"},{"location":"xsoftmx/#explanation","text":"Use the -Xmx option to set a \"hard\" limit for the maximum size of the heap. By default, -Xsoftmx is set to the same value as -Xmx . The value of -Xms must be less than, or equal to, the value of -Xsoftmx . See the introduction to this topic for more information about specifying <size> parameters. You can set this option on the command line, then modify it at run time by using the MemoryMXBean.setMaxHeapSize() method in the com.ibm.lang.management API. By using this API, Java applications can dynamically monitor and adjust the heap size as required. This function can be useful in virtualized or cloud environments, for example, where the available memory might change dynamically to meet business needs. When you use the API, you must specify the value in bytes, such as 2147483648 instead of 2g . For example, you might set the initial heap size to 1 GB and the maximum heap size to 8 GB. You might set a smaller value, such as 2 GB, for -Xsoftmx , to limit the heap size that is used initially: :::java -Xms1g -Xsoftmx2g -Xmx8g You can then use the com.ibm.lang.management API from within a Java application to increase the -Xsoftmx value during run time, as load increases. This change allows the application to use more memory than you specified initially. If you reduce the -Xsoftmx value, the garbage collector attempts to respect the new limit. However, the ability to shrink the heap depends on a number of factors. There is no guarantee that a decrease in the heap size will occur. If or when the heap shrinks to less than the new limit, the heap will not grow beyond that limit. When the heap shrinks, the garbage collector might release memory. The ability of the operating system to reclaim and use this memory varies based on the capabilities of the operating system. Notes: When using -Xgcpolicy:gencon , -Xsoftmx applies only to the non-nursery portion of the heap. In some cases the heap grows to greater than the -Xsoftmx value because the nursery portion grows, making the heap size exceed the limit that is set. See -Xmn for limiting the nursery size. When using -Xgcpolicy:metronome , -Xsoftmx is ignored because the Metronome garbage collector does not support contraction or expansion of the heap. There might be little benefit in reducing the -Xsoftmx value when the Java heap is using large pages. Large pages are pinned in memory and are not reclaimed by the operating system, with the exception of 1M pageable pages on z/OS\u00ae. On certain platforms and processors the VM starts with large pages enabled by default for the Java heap when the operating system is configured to provide large pages. For more information, see Configuring large page memory allocation . A future version of the Java virtual machine might provide a hint to the operating system when large pages are no longer in use.","title":"Explanation"},{"location":"xsoftrefthreshold/","text":"-Xsoftrefthreshold Sets the value used by the garbage collector to determine the number of garbage collections after which a soft reference is cleared if its referent has not been marked. Syntax -Xsoftrefthreshold<value> Default behavior The default value is 32. Explanation A soft reference (where its referent is not marked) is cleared after a number of garbage collection cycles calculated as: <value> * (proportion of free heap space) For example, if -Xsoftrefthreshold is set to 32, and the heap is 25% free, soft references are cleared after 8 garbage collection cycles.","title":"-Xsoftrefthreshold"},{"location":"xsoftrefthreshold/#-xsoftrefthreshold","text":"Sets the value used by the garbage collector to determine the number of garbage collections after which a soft reference is cleared if its referent has not been marked.","title":"-Xsoftrefthreshold"},{"location":"xsoftrefthreshold/#syntax","text":"-Xsoftrefthreshold<value>","title":"Syntax"},{"location":"xsoftrefthreshold/#default-behavior","text":"The default value is 32.","title":"Default behavior"},{"location":"xsoftrefthreshold/#explanation","text":"A soft reference (where its referent is not marked) is cleared after a number of garbage collection cycles calculated as: <value> * (proportion of free heap space) For example, if -Xsoftrefthreshold is set to 32, and the heap is 25% free, soft references are cleared after 8 garbage collection cycles.","title":"Explanation"},{"location":"xss/","text":"-Xiss / -Xss / -Xssi Sets the stack size and increment for Java\u2122 threads. If you exceed the maximum Java thread stack size, a java/lang/OutOfMemoryError message is reported. You can use the -verbose:sizes option to find out the values that the VM is currently using. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; these options apply to the Java stack only. For the native stack option, see the link in the See also section. Syntax Setting Effect Default -Xiss<size> Set initial Java thread stack size 2 KB -Xss<size> Set maximum Java thread stack size 320 KB (31/32-bit); 1024 KB (64-bit) -Xssi<size> Set Java thread stack size increment 16 KB See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values. See also -Xmso (Native stack size for operating system threads)","title":"-Xssi"},{"location":"xss/#-xiss-xss-xssi","text":"Sets the stack size and increment for Java\u2122 threads. If you exceed the maximum Java thread stack size, a java/lang/OutOfMemoryError message is reported. You can use the -verbose:sizes option to find out the values that the VM is currently using. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; these options apply to the Java stack only. For the native stack option, see the link in the See also section.","title":"-Xiss / -Xss / -Xssi"},{"location":"xss/#syntax","text":"Setting Effect Default -Xiss<size> Set initial Java thread stack size 2 KB -Xss<size> Set maximum Java thread stack size 320 KB (31/32-bit); 1024 KB (64-bit) -Xssi<size> Set Java thread stack size increment 16 KB See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values.","title":"Syntax"},{"location":"xss/#see-also","text":"-Xmso (Native stack size for operating system threads)","title":"See also"},{"location":"xtgc/","text":"-Xtgc Provides garbage collection tracing options. Syntax -Xtgc:<parameter>{,<parameter>} Parameters Specify one one or more of the following parameters in a comma-separated list: backtrace -Xtgc:backtrace Before a garbage collection, a single line is printed containing the name of the master thread for garbage collection, as well as the value of the osThread slot in the J9VMThread structure. compaction -Xtgc:compaction Prints extra information showing the relative time spent by threads in the \"move\" and \"fixup\" phases of compaction concurrent -Xtgc:concurrent Prints extra information showing the activity of the concurrent mark background thread dump -Xtgc:dump Prints a line of output for every free chunk of memory in the system, including \"dark matter\" (free chunks that are not on the free list for some reason, typically because they are too small). Each line contains the base address and the size in bytes of the chunk. If the chunk is followed in the heap by an object, the size and class name of the object is also printed. This argument has a similar effect to the terse argument. freeList -Xtgc:freeList Before a garbage collection, prints information about the free list and allocation statistics since the last garbage collection. Prints the number of items on the free list, including \"deferred\" entries (with the scavenger, the unused space is a deferred free list entry). For TLH and non-TLH allocations, prints the total number of allocations, the average allocation size, and the total number of bytes discarded during allocation. For non-TLH allocations, also included is the average number of entries that were searched before a sufficiently large entry was found. parallel -Xtgc:parallel Produces statistics on the activity of the parallel threads during the mark and sweep phases of a global garbage collection. scavenger -Xtgc:scavenger Prints extra information after each scavenger collection. A histogram is produced showing the number of instances of each class, and their relative ages, present in the survivor space. The information is obtained by performing a linear walk-through of the space. terse -Xtgc:terse Dumps the contents of the entire heap before and after a garbage collection. For each object or free chunk in the heap, a line of trace output is produced. Each line contains the base address, \"a\" if it is an allocated object, and \"f\" if it is a free chunk, the size of the chunk in bytes, and, if it is an object, its class name.","title":"-Xtgc"},{"location":"xtgc/#-xtgc","text":"Provides garbage collection tracing options.","title":"-Xtgc"},{"location":"xtgc/#syntax","text":"-Xtgc:<parameter>{,<parameter>}","title":"Syntax"},{"location":"xtgc/#parameters","text":"Specify one one or more of the following parameters in a comma-separated list:","title":"Parameters"},{"location":"xtgc/#backtrace","text":"-Xtgc:backtrace Before a garbage collection, a single line is printed containing the name of the master thread for garbage collection, as well as the value of the osThread slot in the J9VMThread structure.","title":"backtrace"},{"location":"xtgc/#compaction","text":"-Xtgc:compaction Prints extra information showing the relative time spent by threads in the \"move\" and \"fixup\" phases of compaction","title":"compaction"},{"location":"xtgc/#concurrent","text":"-Xtgc:concurrent Prints extra information showing the activity of the concurrent mark background thread","title":"concurrent"},{"location":"xtgc/#dump","text":"-Xtgc:dump Prints a line of output for every free chunk of memory in the system, including \"dark matter\" (free chunks that are not on the free list for some reason, typically because they are too small). Each line contains the base address and the size in bytes of the chunk. If the chunk is followed in the heap by an object, the size and class name of the object is also printed. This argument has a similar effect to the terse argument.","title":"dump"},{"location":"xtgc/#freelist","text":"-Xtgc:freeList Before a garbage collection, prints information about the free list and allocation statistics since the last garbage collection. Prints the number of items on the free list, including \"deferred\" entries (with the scavenger, the unused space is a deferred free list entry). For TLH and non-TLH allocations, prints the total number of allocations, the average allocation size, and the total number of bytes discarded during allocation. For non-TLH allocations, also included is the average number of entries that were searched before a sufficiently large entry was found.","title":"freeList"},{"location":"xtgc/#parallel","text":"-Xtgc:parallel Produces statistics on the activity of the parallel threads during the mark and sweep phases of a global garbage collection.","title":"parallel"},{"location":"xtgc/#scavenger","text":"-Xtgc:scavenger Prints extra information after each scavenger collection. A histogram is produced showing the number of instances of each class, and their relative ages, present in the survivor space. The information is obtained by performing a linear walk-through of the space.","title":"scavenger"},{"location":"xtgc/#terse","text":"-Xtgc:terse Dumps the contents of the entire heap before and after a garbage collection. For each object or free chunk in the heap, a line of trace output is produced. Each line contains the base address, \"a\" if it is an allocated object, and \"f\" if it is a free chunk, the size of the chunk in bytes, and, if it is an object, its class name.","title":"terse"},{"location":"xthr/","text":"-Xthr Syntax -Xthr:<parameter> Parameters AdaptSpin | noAdaptSpin -Xthr:AdaptSpin -Xthr:noAdaptSpin This tuning option is available to test whether performance optimizations are negatively impacting an application. fastNotify | noFastNotify -Xthr:fastNotify -Xthr:noFastNotify When a large number of threads try to acquire a Java\u2122 monitor, throughput of an application can be reduced. This issue is known as high contention. If high contention occurs when the Java wait and notify features are regularly used, you can use -Xthr:fastNotify to increase throughput. However, -Xthr:noFastNotify is the default setting, because it is faster in all other scenarios. cfsYield | noCfsYield (Linux\u00ae only) -Xthr:cfsYield -Xthr:noCfsYield The default value, cfsYield , enables threading optimizations for running on Linux with the Completely Fair Scheduler (CFS) in the default mode ( sched_compat_yield=0 ). The noCfsYield value disables these threading optimizations. You might want to use the noCfsYield value if your application uses the Thread.yield() method extensively, because otherwise you might see a performance decrease in cases where yielding is not beneficial. minimizeUserCPU -Xthr:minimizeUserCPU Minimizes user-mode CPU usage in thread synchronization where possible. The reduction in CPU usage might be a trade-off in exchange for decreased performance. secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors -Xthr:secondarySpinForObjectMonitors -Xthr:noSecondarySpinForObjectMonitors This tuning option is available to test whether performance optimizations are negatively impacting an application.","title":"-Xthr"},{"location":"xthr/#-xthr","text":"","title":"-Xthr"},{"location":"xthr/#syntax","text":"-Xthr:<parameter>","title":"Syntax"},{"location":"xthr/#parameters","text":"","title":"Parameters"},{"location":"xthr/#adaptspin-noadaptspin","text":"-Xthr:AdaptSpin -Xthr:noAdaptSpin This tuning option is available to test whether performance optimizations are negatively impacting an application.","title":"AdaptSpin | noAdaptSpin"},{"location":"xthr/#fastnotify-nofastnotify","text":"-Xthr:fastNotify -Xthr:noFastNotify When a large number of threads try to acquire a Java\u2122 monitor, throughput of an application can be reduced. This issue is known as high contention. If high contention occurs when the Java wait and notify features are regularly used, you can use -Xthr:fastNotify to increase throughput. However, -Xthr:noFastNotify is the default setting, because it is faster in all other scenarios.","title":"fastNotify | noFastNotify"},{"location":"xthr/#cfsyield-nocfsyield-linux-only","text":"-Xthr:cfsYield -Xthr:noCfsYield The default value, cfsYield , enables threading optimizations for running on Linux with the Completely Fair Scheduler (CFS) in the default mode ( sched_compat_yield=0 ). The noCfsYield value disables these threading optimizations. You might want to use the noCfsYield value if your application uses the Thread.yield() method extensively, because otherwise you might see a performance decrease in cases where yielding is not beneficial.","title":"cfsYield | noCfsYield (Linux&reg; only)"},{"location":"xthr/#minimizeusercpu","text":"-Xthr:minimizeUserCPU Minimizes user-mode CPU usage in thread synchronization where possible. The reduction in CPU usage might be a trade-off in exchange for decreased performance.","title":"minimizeUserCPU"},{"location":"xthr/#secondaryspinforobjectmonitors-nosecondaryspinforobjectmonitors","text":"-Xthr:secondarySpinForObjectMonitors -Xthr:noSecondarySpinForObjectMonitors This tuning option is available to test whether performance optimizations are negatively impacting an application.","title":"secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors"},{"location":"xtlhprefetch/","text":"-XtlhPrefetch (AIX\u00ae, Windows\u2122 only) Speculatively prefetches bytes in the thread local heap (TLH) ahead of the current allocation pointer during object allocation. This option helps reduce the performance cost of subsequent allocations. Syntax -XtlhPrefetch","title":"-XtlhPrefetch"},{"location":"xtlhprefetch/#-xtlhprefetch","text":"(AIX\u00ae, Windows\u2122 only) Speculatively prefetches bytes in the thread local heap (TLH) ahead of the current allocation pointer during object allocation. This option helps reduce the performance cost of subsequent allocations.","title":"-XtlhPrefetch"},{"location":"xtlhprefetch/#syntax","text":"-XtlhPrefetch","title":"Syntax"},{"location":"xtrace/","text":"-Xtrace OpenJ9 VM tracing is a powerful feature to help you diagnose problems with minimal effect on performance. Tracing is enabled by default, together with a small set of trace points going to memory buffers. You can enable tracepoints at run time by using levels, components, group names, or individual tracepoint identifiers to trace VM internal operations and instrumented Java\u2122 applications. You can also trace Java methods. See the About trace section that follows for more detail. Trace data can be output in human-readable or in compressed binary formats. The VM provides a tool to process and convert the compressed binary data into a readable format. See Trace formatter . Note: You can also control trace by using the com.ibm.jvm.Trace API or by using JVMTI from an external agent. Xtrace Option Builder Use the Xtrace Option Builder tool to help you specify the correct options and avoid incompatibilities. Syntax -Xtrace:<parameter> You can get help with -Xtrace by using the folowing options: -Xtrace:help Displays general trace help -Xtrace:what Shows the current trace settings Configuring trace The following parameters can be used to configure trace. (Follow links for more information about individual options.) Command Result -Xtrace:properties[=<filename>] Configures trace options based on a file -Xtrace:buffers=<size>[dynamic\\|nodynamic] Modifies the size of buffers that are used to store trace data -Xtrace:exception.output=<filename>[,<size>] Redirects exceptions trace data to a file. -Xtrace:methods=<method_specification> Traces methods -Xtrace:output=<filename>[,<size>[,<generations>]] Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:resume Resumes tracing globally. -Xtrace:resumecount=<count> Enables tracing at a thread level after a specified count. -Xtrace:sleeptime=<time> Pauses trace operations for a specified length of time. -Xtrace:stackdepth=<n> Limits the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:suspend Suspends tracing globally. -Xtrace:suspendcount=<count> Suspends tracing at a thread level after a specified count. -Xtrace:trigger=<clause> Determines when various triggered trace actions occur, including turning trace on or off. Note: If an option value contains commas, it must be enclosed in braces. For example: methods={java/lang/*,com/ibm/*} Controlling tracepoint activation The following parameters can be used to control tracepoint activation. (Follow links for more information about individual options.) Command Result -Xtrace:maximal=<tracepoint_specification> Records all associated data. -Xtrace:minimal=<tracepoint_specification> Records only the time stamp and tracepoint identifier. -Xtrace:count=<tracepoint_specification> Counts the tracepoints that are used in a trace configuration. -Xtrace:print=<tracepoint_specification> Prints the specified tracepoints to stderr in real time. -Xtrace:iprint=<tracepoint_specification> Prints the specified tracepoints to stderr in real time with indentation. -Xtrace:exception=<tracepoint_specification> Enables exception tracing. -Xtrace:external<tracepoint_specification> Routes trace data to trace listeners, which are registered by using the JVMTI APIs. -Xtrace:none[=<tracepoint_specification>] Prevents the trace engine from loading if it is the only trace option specified. Note: These options control which individual tracepoints are activated at run time and the implicit destination of the trace data. All these properties are independent of each other and can be mixed and matched in any way that you choose. For more information, see Tracepoint activation . About trace With the OpenJ9 trace feature, you can trace VM internal operations, Java applications, and Java methods, or any combination of these. VM internal operations The OpenJ9 virtual machine (VM) is extensively instrumented with tracepoints for tracing operations. Interpreting this trace data requires detailed knowledge of the VM, and is intended to diagnose VM problems. No guarantee is given that tracepoints will not vary from release to release and from platform to platform. Applications VM trace contains an application trace facility that allows tracepoints to be placed in Java code, enabling you to combine trace data with the other forms of trace. This capability is supported by the com.ibm.jvm.Trace API. Note that an instrumented Java application runs only on an OpenJ9 VM. For more information, see Application trace . Java methods Use method trace to debug and trace application code and the system classes provided with the VM. You can trace entry to and exit from Java methods run by the VM. You can select method trace by classname, method name, or both. You can also use wildcards to create complex method selections. For more information about command syntax, see methods . Trace can produce large amounts of data in a very short time. Before running trace, think carefully about what information you need in order to solve the problem. Here are some considerations: If you need only the trace information that is produced shortly before the problem occurs, consider wrapping the file by using the output option. In many cases, just use internal trace with an increased buffer size and snap the trace when the problem occurs. If the problem results in a thread stack dump or operating system signal or exception, trace buffers are snapped automatically to a file that is in the current directory. The file is called: Snapnnnn. yyyymmdd.hhmmssth.process.trc . You must also think carefully about which components need to be traced and what level of tracing is required. For example, if you are tracing a suspected shared classes problem, it might be enough to trace all components at level 1, and j9shr at level 9, while maximal can be used to show parameters and other information for the failing component. Tracepoint components and trace levels are described in the following sections: Tracepoint specification and Trace levels . There are two types of tracepoints inside the VM: Regular tracepoints include method tracepoints, application tracepoints, data tracepoints inside the VM and data tracepoints inside class libraries. You can display regular tracepoint data on the screen or save the data to a file. You can also use command line options to trigger specific actions when regular tracepoints fire. Auxiliary tracepoints are a special type of tracepoint that can be fired only when another tracepoint is being processed. For example, the stack frame information produced by the jstacktrace -Xtrace:trigger command. You cannot control where auxiliary tracepoint data is sent and you cannot set triggers on auxiliary tracepoints. Auxiliary tracepoint data is sent to the same destination as the tracepoint that caused them to be generated. Trace data can be written to one of the following locations: Memory buffers that can be dumped or snapped when a problem occurs. Use the -Xtrace:buffers=<size> option to control the size of the buffer allocated to each thread. Buffers allocated to a thread are discarded when that thread terminates. To examine the trace data captured in these memory buffers, you must snap or dump the data, then format the buffers. One or more files that are using buffered I/O. Use the -Xtrace:output option. An external agent in real time, using the -Xtrace:external option. stderr in real time. Any combination of the other items in this list. Default tracing By default, the equivalent of the following trace command line is always available in the VM: -Xtrace:maximal=all{level1},exception=j9mm{gclogger} When startup is complete, the equivalent of the following command line is added to enable level 2 trace points: -Xtrace:maximal=all{level2} Level 2 is used for default tracing that would produce too much data during the startup of the VM. If you set other trace options on the command line, or before the VM finishes startup (through use of JVMTI or the com.ibm.jvm.Trace API), the level 2 trace points are enabled just before your trace options are processed. This behavior ensures that the default level 2 trace points do not override any changes that you specify. The data generated by the tracepoints is continuously captured in wrapping memory buffers for each thread. You can find tracepoint information in the following diagnostics data: System memory dumps, extracted by using jdmpview. Snap traces, generated when the VM encounters a problem or an output file is specified. Using dump agents describes more ways to create a snap trace. For exception trace only, in Javadumps. Default memory management tracing The default trace options are designed to ensure that Javadumps always contain a record of the most recent memory management history, regardless of how much work the VM has performed since the garbage collection cycle was last called. The exception=j9mm{gclogger} clause of the default trace set specifies that a history of garbage collection cycles that have occurred in the VM is continuously recorded. The gclogger group of tracepoints in the j9mm component constitutes a set of tracepoints that record a snapshot of each garbage collection cycle. These tracepoints are recorded in their own separate buffer, called the exception buffer. The effect is that the tracepoints are not overwritten by the higher frequency tracepoints of the VM. The GC History section of the Javadump is based on the information in the exception buffer. If a garbage collection cycle has occurred in a traced VM, the Java dump probably contains a GC History section. Default assertion tracing The VM includes assertions, implemented as special trace points. By default, internal assertions are detected and diagnostics logs are produced to help assess the error. Assertion failures often indicate a serious problem, and the VM usually stops immediately. In these circumstances, raise an issue, including the standard error output and any diagnostic files that are produced. When an assertion trace point is reached, a message like the following output is produced on the standard error stream: 16:43:48.671 0x10a4800 j9vm.209 * ** ASSERTION FAILED ** at jniinv.c:251: ((javaVM == ((void *)0))) This error stream is followed with information about the diagnostic logs produced: JVMDUMP007I JVM Requesting System Dump using 'core.20060426.124348.976.dmp' JVMDUMP010I System Dump written to core.20060426.124348.976.dmp JVMDUMP007I JVM Requesting Snap Dump using 'Snap0001.20060426.124648.976.trc' JVMDUMP010I Snap Dump written to Snap0001.20060426.124648.976.trc Assertions are special trace points. They can be enabled or disabled by using the standard trace command-line options. Assertion failures might occur early during VM startup, before trace is enabled. In this case, the assert message has a different format, and is not prefixed by a timestamp or thread ID. For example: ** ASSERTION FAILED ** j9vmutil.15 at thrinfo.c:371 Assert_VMUtil_true(( publicFlags & 0x200)) Assertion failures that occur early during startup cannot be disabled. These failures do not produce diagnostic dumps, and do not cause the VM to stop. Tracepoint activation The options that control which individual tracepoints are activated at run time and the implicit destination of the trace data are listed under Syntax: Controlling tracepoint activation In some cases, you must use them with other options. For example, if you specify maximal or minimal tracepoints, the trace data is put into memory buffers. If you are going to send the data to a file, you must use an output option to specify the destination file name. With the exception of none , all options require at least one <tracepoint_specification> , which is described in the following section. Multiple statements of each type of trace are allowed and their effect is cumulative. If you want to use multiple trace options of the same name, use a properties file. (See properties .) Tracepoint specification Tracepoints are enabled by specifying component and tracepoint . If no qualifier parameters are entered, all tracepoints are enabled, except for <exception.output> trace, where the default is all {exception}. The <tracepoint_specification> syntax can be further broken down as follows: [!]<component>[{<group>}] or [!]<component>[{<type>}] or [!]<tracepoint_id>[,<tracepoint_id>] Where: The ! symbol is a logical not . That is, the tracepoints that are in a specification starting with ! are turned off. <component> is a Java component. <group> is a tracepoint group, which is a set of tracepoints that are defined within a component. <type> is the tracepoint type: entry , exit , event , exception , and eem . <tracepoint_id> is the tracepoint identifier. The tracepoint identifier constitutes the component name of the tracepoint, followed by its integer number inside that component. For example, j9mm.49 , j9shr.20-29 , j9vm.15 . To understand these numbers, see Determining the tracepoint ID of a tracepoint. Some tracepoints can be both an exit and an exception ; that is, the function ended with an error. If you specify either exit or exception , these tracepoints are included. Lists of Java components and tracepoint groups can be found in the tables that follow. The following table lists the possible Java components ( <component> ). To include all Java components, specify all . Component name Description avl VM AVL tree support io Class library java.io native code j9bcu VM byte code utilities j9bcverify VM byte code verification j9codertvm VM byte code run time j9dmp VM dump j9jcl VM class libraries j9jit VM JIT interface j9jni VM JNI support j9jvmti VM JVMTI support j9mm VM memory management j9prt VM port library j9scar VM class library interface j9shr VM shared classes j9trc VM trace j9util VM utilities j9vm VM general j9vmutil VM utilities j9vrb VM verbose stack walker map VM mapped memory support mt Java methods (see Note ) net Class library TCP/IP networking native code pool VM storage pool support rpc VM RPC support simplepool VM storage pool support sunvmi VM class library interface Note: When specifying the mt component you must also specify the methods option. The following table lists all the tracepoint groups ( <group> ). Each group is associated with one or more Java components: Component name or names Group name Description j9mm gclogger A set of tracepoints that record each garbage collection cycle. Equivalent to -verbose:gc output j9prt nlsmessage A set of tracepoints that record each NLS message that is issued by the VM. j9jcl , j9vm verboseclass A set of tracepoints that record each class as it is loaded. Equivalent to -verbose:class output. j9jni , j9vm checkjni A set of tracepoints that record JNI function checks. Equivalent to -Xcheck:jni output. j9vm checkmemory A set of tracepoints that record memory checks. Equivalent to -Xcheck:memory output. j9vm checkvm A set of tracepoints that record VM checks. Equivalent to -Xcheck:vm output. j9jit verbose A set of tracepoints that record JIT compiler configuration and method compilation. Equivalent to -Xjit:verbose output. mt compiledMethods A set of tracepoints that record compiled Java methods. mt nativeMethods A set of tracepoints that record Java native methods. mt staticMethods A set of tracepoints that record Java static methods. Here are some examples: To trace all tracepoints, specify the following command: -Xtrace:maximal=all To trace all tracepoints except **j9vrb** and **j9trc**, specify the following command: -Xtrace:minimal={all},minimal={!j9vrb,j9trc} To trace all entry and exit tracepoints in j9bcu , specify the following command: -Xtrace:maximal={j9bcu{entry},j9bcu{exit}} To trace all tracepoints in **j9mm** except tracepoints 20-30, specify the following command: -Xtrace:maximal=j9mm,maximal=!j9mm.20-30 To trace tracepoints j9prt.5 through j9prt.15 , specify the following command: -Xtrace:print=j9prt.5-15 To trace all **j9trc** tracepoints, specify the following command: -Xtrace:count=j9trc To trace all entry and exit tracepoints, specify the following command: -Xtrace:external={all{entry},all{exit}} Trace levels Tracepoints have been assigned levels 0 through 9 that are based on the importance of the tracepoint. A level 0 tracepoint is the most important. It is reserved for extraordinary events and errors. A level 9 tracepoint is in-depth component detail. To specify a given level of tracing, the level0 through level9 keywords are used. You can abbreviate these keywords to l0 through l9. For example, if level5 is selected, all tracepoints that have levels 0 through 5 are included. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. The level is provided as a modifier to a component specification, for example: -Xtrace:maximal={all{level5}} or -Xtrace:maximal={j9mm{L2},j9trc,j9bcu{level9},all{level1}} In the first example, tracepoints that have a level of 5 or less are enabled for all components. In the second example, all level 1 tracepoints are enabled. All level 2 tracepoints in j9mm are enabled. All tracepoints up to level 9 are enabled in j9bcu . Note: The level applies only to the current component. If multiple trace selection components are found in a trace properties file, the level is reset to the default for each new component. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. When the not operator is specified, the level is inverted; that is, !j9mm{level5} disables all tracepoints of level 6 or greater for the j9mm component. The following example enables trace for all components at level 9 (the default), but disables level 6 and higher for the locking component, and level 7 and higher for the storage component: -Xtrace:print={all},print={!j9trc{l5},j9mm{l6}} Here are some examples: To count the level zero and level one tracepoints matched, specify the following command: -Xtrace:count=all{L1} To produce maximal trace of all components at level 5 and j9mm at level 9, specify the following command: -Xtrace:maximal={all{level5},j9mm{L9}} To trace all components at level 6, but do not trace j9vrb at all, and do not trace the entry and exit tracepoints in the j9trc component, specify the following command: -Xtrace:minimal={all{l6}},minimal={!j9vrb,j9trc{entry},j9trc{exit}} Parameters Parameters to use with the -Xtrace option: buffers You can modify the size of the buffers to change how much diagnostic output is provided in a snap dump. This buffer is allocated for each thread that makes trace entries. The following table shows how this parameter can be set: Command Effect -Xtrace:buffers=<size> Creates buffers of the specified <size> in k (KB) or m (MB), allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>dynamic Creates buffers of the specified <size> , allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>nodynamic Creates buffers of the specified <size> , with a maximum allocation of two buffers per thread. If external trace is enabled, the number of buffers is doubled; that is, each thread allocates two or more buffers. The same buffer size is used for state and exception tracing, but, in this case, buffers are allocated globally. The default is 8 KB per thread. The dynamic and nodynamic suboptions have meaning only when tracing to an output file. Note: If nodynamic is specified, you might lose trace data if the volume of trace data exceeds the bandwidth of the trace output file. Message UTE115 is issued when the first trace entry is lost, and message UTE018 is issued when the VM ends. Here are some command line examples: To set a buffer size of 2 MB per thread, with dynamic buffering, use: -Xtrace:buffers=2m To limit each thread to 2 trace buffers, each of 128 KB: -Xtrace:buffers={128k,nodynamic} count (tracepoint) -Xtrace:count=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The count option requests that only a count of the selected tracepoints is kept. When the VM ends, all nonzero totals of tracepoints (sorted by tracepoint id) are written to a file, called utTrcCounters , in the current directory. This information is useful if you want to determine the overhead of particular tracepoints, but do not want to produce a large amount (GB) of trace data. For example, to count the tracepoints that are used in the default trace configuration, use the following command: -Xtrace:count=all{level1},count=j9mm{gclogger} exception (tracepoint) -Xtrace:exception=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When exception trace is enabled, the trace data is collected in internal buffers that are separate from the normal buffers. These internal buffers can then be written to a snap file or written to the file that is specified in an exception.output option. The exception option allows low-volume tracing in buffers and files that are distinct from the higher-volume information that minimal and maximal tracing have provided. In most cases, this information is exception-type data, but you can use this option to capture any trace data that you want. This form of tracing is channeled through a single set of buffers, as opposed to the buffer-per-thread approach for normal trace. Buffer contention might occur if high volumes of trace data are collected. A difference exists in the <tracepoint_specification> defaults for exception tracing; see Tracepoint specification . Notes: The exception trace buffers are intended for low-volume tracing. By default, the exception trace buffers log garbage collection (GC) event tracepoints, see Default tracing. You can send additional tracepoints to the exception buffers or turn off the GC tracepoints. Changing the exception trace buffers alters the contents of the GC History section in any Javadumps. When exception trace is entered for an active tracepoint, the current thread ID is checked against the previous caller's thread ID. If it is a different thread, or this is the first call to exception trace, a context tracepoint is put into the trace buffer first. This context tracepoint consists only of the current thread ID, which is necessary because of the single set of buffers for exception trace. (The formatter identifies all trace entries as coming from the Exception trace pseudo thread when it formats exception trace files.) exception.output Use exception output to redirect exceptions trace data to a file. -Xtrace:exception.output=<filename>[,<size>] Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps nondestructively to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Here are some examples: Exception trace output goes to file /u/traces/exception.trc with no size limit: -Xtrace:exception.output=/u/traces/exception.trc,maximal Exception trace output goes to file except and wraps at 2 MB: -Xtrace:exception.output={except,2m},maximal Exception trace output goes to a file whose filename contains today's date in yyyymmdd format (for example, traceout.20181025.trc ): -Xtrace:exception.output=traceout.%d.trc,maximal Exception trace output goes to a file whose filename contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:exception.output=tracefrompid%p.trc,maximal Exception trace output goes to a file whose filename contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:exception.output=traceout.%t.trc,maximal external (tracepoint) -Xtrace:external<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The external option routes trace data to trace listeners, which are registered by using the JVMTI RegisterTracePointSubscriber() and DeregisterTracePointSubscriber() APIs. help -Xtrace:help Displays general trace help iprint (tracepoint) -Xtrace:iprint=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The iprint option is the same as the print option, but uses indenting to format the trace. maximal (tracepoint) -Xtrace:maximal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. All associated data is traced. minimal and maximal traces are independent from any types that follow them. For example, if the maximal option is specified, it does not affect a later option such as print . methods Using method trace provides a complete and potentially large diagnosis of code paths inside your application and the system classes. Use wild cards and filtering to control method trace so that you can focus on the sections of code that interest you. To specify one or more method specifications, use the following syntax: -Xtrace:methods=<method_specification>[,<method_specification>] The syntax for <method_specification> can be further broken down to the following suboptions: -Xtrace:methods={[!][*][<package>/]<class>[*],[[*]<method>[*]|[()]]} Where: The delimiter between parts of the package name is a forward slash, \"/\". The ! in the methods parameter is a NOT operator that allows you to tell the VM not to trace the specified method or methods. The parentheses, (), define whether or not to include method parameters in the trace. If a method specification includes any commas, the whole specification must be enclosed in braces, for example: -Xtrace:methods={java/lang/*,java/util/*},print=mt It might be necessary to enclose your command line in quotation marks to prevent the shell intercepting and fragmenting comma-separated command lines, for example: \"-Xtrace:methods={java/lang/*,java/util/*},print=mt\" To output all method trace information to stderr, use either the print or iprint suboptions: -Xtrace:print=mt,methods=*.* -Xtrace:iprint=mt,methods=*.* The iprint suboption prints to stderr with indentation. To output method trace information in binary format, see the output option. Here are some examples: Tracing entry and exit of all methods in a given class: To trace all method entry and exit of the ReaderMain class in the default package and the java.lang.String class, specify the following command: -Xtrace:methods={ReaderMain.*,java/lang/String.*},print=mt Tracing entry, exit and input parameters of all methods in a class: To trace all method entry, exit, and input of the ReaderMain class in the default package, specify the following command: -Xtrace:methods=ReaderMain.*(),print=mt Tracing all methods in a given package: To trace all method entry, exit, and input of all classes in the package com.ibm.socket , specify the following command: -Xtrace:methods=com/ibm/socket/*.*(),print=mt Multiple method trace: To trace all method entry, exit, and input in the Widget class in the default package and all method entry and exit in the common package, specify the following command: -Xtrace:methods={Widget.*(),common/*},print=mt Using the ! operator: To trace all methods in the ArticleUI class in the default package except those beginning with \"get\", specify the following command: -Xtrace:methods={ArticleUI.*,!ArticleUI.get*},print=mt Tracing a specific method in a class: This example traces entry and exit of the substring method of the java.lang.String class . If there is more than one method with the same name, they are all traced. You cannot filter method trace by the signature of the method. -Xtrace:print=mt,methods={java/lang/String.substring} Tracing the constructor of a class: This example traces entry and exit of the constructors of the java.lang.String class. -Xtrace:print=mt,methods={java/lang/String.<init>} Here is some example output: java \"-Xtrace:methods={java/lang*.*},iprint=mt\" HW 10:02:42.281*0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/String.<clinit>()V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method The output lines comprise of: 0x9e900 , the current execenv (execution environment). Because every VM thread has its own execenv , you can regard execenv as a thread-id . All trace with the same execenv relates to a single thread. The individual tracepoint ID in the mt component that collects and emits the data. The remaining fields show whether a method is being entered (>) or exited (<), followed by details of the method. minimal (tracepoint) -Xtrace:minimal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. Only the time stamp and tracepoint identifier are recorded. When the trace is formatted, missing trace data is replaced with the characters \"???\" in the output file. minimal and maximal traces are independent from any types that follow them. For example, if the minimal option is specified, it does not affect a later option such as print . none (tracepoint) -Xtrace:none[=<tracepoint_specification>] For further information about <tracepoint_specification> syntax, see Tracepoint specification . -Xtrace:none prevents the trace engine from loading if it is the only trace option specified. However, if other -Xtrace options are on the command line, it is treated as the equivalent of -Xtrace:none=all and the trace engine still loads. If you specify other tracepoints without specifying -Xtrace:none , the tracepoints are added to the default set. output Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:output=<filename>[,<size>[,<generations>]]` Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p% (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Optionally, <generations> is a value 2 through 36. These values cause up to 36 files to be used sequentially as each file reaches its <size> threshold. When a file needs to be reused, it is overwritten. If <generations> is specified, the filename must contain a # (hash, pound symbol), which will be substituted with its generation identifier, the sequence of which is 0 through 9 followed by A through Z. Note: When tracing to a file, buffers for each thread are written when the buffer is full or when the VM ends. If a thread has been inactive for a period of time before the VM ends, what seems to be 'old' trace data is written to the file. When formatted, it then seems that trace data is missing from the other threads, but this is an unavoidable side-effect of the buffer-per-thread design. This effect becomes especially noticeable when you use the generation facility, and format individual earlier generations. Here are some examples: Trace output goes to file /u/traces/gc.problem with no size limit: -Xtrace:output=/u/traces/gc.problem,maximal=j9gc Trace output goes to file trace , which will wrap at 2 MB: -Xtrace:output={trace,2m},maximal=j9gc Trace output goes to files gc0.trc , gc1.trc , and gc2.trc , each 10 MB in size: -Xtrace:output={gc#.trc,10m,3},maximal=j9gc Trace output goes to a file, where the filename contains today's date in yyyymmdd format (for example, traceout.20181025.trc ): -Xtrace:output=traceout.%d.trc,maximal=j9gc Trace output goes to a file whose name contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:output=tracefrompid%p.trc,maximal=j9gc Trace output goes to a file whose name contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:output=traceout.%t.trc,maximal=j9gc print (tracepoint) -Xtrace:print=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The print option causes the specified tracepoints to be routed to stderr in real time. The VM tracepoints are formatted by using J9TraceFormat.dat . The class library tracepoints are formatted by J9TraceFormat.dat and TraceFormat.dat . properties You can use properties files to control trace. A properties file saves typing and allows you to create a library of files that are tailored to solving problems in a particular area. -Xtrace:properties[=<filename>] If <filename> is not specified, the VM searches for a default name of IBMTRACE.properties in the current directory. All the options that are in the file are processed in the sequence in which they are stored in the file, before the next option that is obtained through the normal mechanism is processed. Therefore, a command-line property always overrides a property that is in the file. Here is an example of a properties file: minimal=all // maximal=j9mm maximal=j9shr buffers=128k,nodynamic output=c:\\traces\\classloader.trc print=tpnid(j9vm.23-25) The following restrictions apply to the file: The file must be a flat ASCII file. Nesting is not supported; that is, the file cannot contain a properties option. You cannot leave properties that have the form <name>=<value> to default if they are specified in the property file; that is, you must specify a value, for example maximal=all . Do not add white space before, after, or within the trace options. If any error is found when the file is accessed, VM initialization fails with an explanatory error message and return code. To use a file trace.props stored in the c:\\trc\\gc directory, specify the following command: -Xtrace:properties=c:\\trc\\gc\\trace.props resume The resume option resumes tracing globally. -Xtrace:resume The suspend and resume options are not recursive. That is, two suspends that are followed by a single resume cause trace to be resumed. resumecount This trace option determines whether tracing is enabled for each thread. -Xtrace:resumecount=<count> If <count> is greater than zero, each thread initially has its tracing disabled and must receive <count> resumethis actions before it starts tracing. This option is used with the trigger option. Note: You cannot use resumecount and suspendcount together because they use the same internal counter. The following example starts with all tracing turned off. Each thread starts tracing when it has had three resumethis actions performed on it: -Xtrace:resumecount=3 sleeptime You can specify how long the sleep lasts when using the sleep trigger action. -Xtrace:sleeptime=nnn|aaams|bbbs Where: nnn sleeps for nnn milliseconds. aaams sleeps for aaa milliseconds. bbbs sleeps for bbb seconds. The default length of time is 30 seconds. If no units are specified, the default time unit is milliseconds. stackdepth Use this option to limit the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:stackdepth=<n> Where <n> is the maximum number of stack frames reported. suspend -Xtrace:suspend Suspends tracing globally for all threads and all forms of tracing but leaves tracepoints activated. suspendcount This trace option determines whether tracing is enabled for each thread. -Xtrace:suspendcount=<count> If <count> is greater than zero, each thread initially has its tracing enabled and must receive <count> suspendthis actions before it stops tracing. You cannot use resumecount and suspendcount together because they both set the same internal counter. This trace option is for use with the trigger option. The following example starts with tracing turned on. Each thread stops tracing when it has had three suspendthis actions performed on it: -Xtrace:suspendcount=3 trigger The trigger parameter determines when various triggered trace actions occur. Supported actions include turning tracing on and off for all threads, turning tracing on or off for the current thread, or producing various dumps. -Xtrace:trigger=<clause>[,<clause>] This trace option does not control what is traced. It controls only whether the information that has been selected by the other trace options is produced as normal or is blocked. Types Each clause of the trigger parameter can be one of the following types: a method ( -Xtrace:trigger=method{...} ) a tracepoint ID ( -Xtrace:trigger=tpnid{...} ) a group ( -Xtrace:trigger=group{...} ) You can specify multiple clauses of the same type if required, but you do not need to specify all types. method -Xtrace:trigger=method{<methodspec>[,<entryAction>[,<exitAction>[,<delayCount>[,<matchcount>]]]]} On entering a method that matches <methodspec> , the specified <entryAction> is run. On leaving a method that matches <methodspec> , the specified <exitAction> is run. If you specify a <delayCount> , the actions are performed only after a matching <methodspec> has been entered that many times. If you specify a <matchCount> , <entryAction> and <exitAction> are performed at most that many times. <methodspec> is the specification of a Java method, consisting of a class and a method name separated by a dot. For example, specify HelloWorld.main . If the class is in a package, the package name must be included, separated by slashes. For example, specify java/lang/String.getBytes . A wildcard \"*\" can be used at the start or end of the class and method names, or both. For example, you can specify */String.get* . To specify a constructor method, use <init> as the method name. Method signatures cannot be specified, so a method specification applies to all overloaded methods. tracepoint ID -Xtrace:trigger=tpnid{<tpnid>|<tpnidRange>,<action>[,<delayCount>[,<matchcount>]]} On finding the specified active tracepoint ID ( <tpnid> ) or a tracepoint ID) that falls inside the specified <tpnidRange> , the specified action is run . If you specify a <delayCount> , the action is performed only after the VM finds such an active <tpnid> that many times. If you specify a <matchCount> , <action> is performed at most that many times. group -Xtrace:trigger=group{<groupname>,<action>[,<delayCount>[,<matchcount>]]} On finding any active tracepoint that is defined as being in trace group <groupname> , for example Entry or Exit , the specified action is run . If you specify a <delayCount> , the action is performed only after that many active tracepoints from group <groupname> have been found. If you specify a <matchCount> , <action> is performed at most that many times. Actions Wherever an action ( <action> , <entryAction> , or <exitAction> ) must be specified in one of the trigger parameter clauses, you must select from these options: <action> Effect abort Halt the VM. ceedump This action is applicable to z/OS\u00ae only. For more information, see z/OS LE CEEDUMPs. coredump See sysdump . heapdump Produce a Heapdump. See Using Heapdump . javadump Produce a Javadump. See Using Javadump . jstacktrace Examine the Java stack of the current thread and generate auxiliary tracepoints for each stack frame. The auxiliary tracepoints are written to the same destination as the tracepoint or method trace that triggered the action. You can control the number of stack frames examined with the stackdepth=n option. See the stackdepth option. resume Resume all tracing (except for threads that are suspended by the action of the resumecount property and Trace.suspendThis() calls). resumethis Decrement the suspend count for this thread. If the suspend count is zero or less, resume tracing for this thread. sigsev Cause a segmentation violation. (Intended for use in debugging.) sleep Delay the current thread for a length of time controlled by the sleeptime option. The default is 30 seconds. See sleeptime option. snap Snap all active trace buffers to a file in the current working directory. The file name has the format: Snapnnnn.yyyymmdd.hhmmssth.ppppp.trc , where nnnn is the sequence number of the snap file since VM startup, yyyymmdd is the date, hhmmssth is the time, and ppppp is the process ID in decimal with leading zeros removed. suspend Suspend all tracing (except for special trace points). suspendthis Increment the suspend count for this thread. If the suspend-count is greater than zero, prevent all tracing for this thread. sysdump (or coredump ) Produce a system dump. See Dump agents( -Xdump:system ) . Here are some examples of using the trigger option: To produce a Java dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump} To produce a system dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,sysdump} To produce a Java dump when a class constructor is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<init>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a class static initializer is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<clinit>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a method is entered 1000 times and 1001 times, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump,,1000,2} To start tracing this thread when it enters any method in java/lang/String , and to stop tracing the thread after exiting the method, specify the following command: -Xtrace:resumecount=1 -Xtrace:trigger=method{java/lang/String.*,resumethis,suspendthis} To resume all tracing when any thread enters a method in any class that starts with error , specify the following command: -Xtrace:trigger=method{*.error*,resume} To trace (all threads) while the application is active; that is, not starting or shut down. (The application name is HelloWorld ), specify the following command: -Xtrace:suspend,trigger=method{HelloWorld.main,resume,suspend} To print a Java stack trace to the console when the mycomponent.1 tracepoint is reached, specify the following command: -Xtrace:print=mycomponent.1,trigger=tpnid{mycomponent.1,jstacktrace} To write a Java stack trace to the trace output file when the Sample.code() method is called, specify the following command: -Xtrace:maximal=mt,output=trc.out,methods={mycompany/mypackage/Sample.code},trigger=method{mycompany/mypackage/Sample.code,jstacktrace} what -Xtrace:what Shows the current trace settings See also Application trace Using Heapdump Using Javadump Dump viewer","title":"-Xtrace"},{"location":"xtrace/#-xtrace","text":"OpenJ9 VM tracing is a powerful feature to help you diagnose problems with minimal effect on performance. Tracing is enabled by default, together with a small set of trace points going to memory buffers. You can enable tracepoints at run time by using levels, components, group names, or individual tracepoint identifiers to trace VM internal operations and instrumented Java\u2122 applications. You can also trace Java methods. See the About trace section that follows for more detail. Trace data can be output in human-readable or in compressed binary formats. The VM provides a tool to process and convert the compressed binary data into a readable format. See Trace formatter . Note: You can also control trace by using the com.ibm.jvm.Trace API or by using JVMTI from an external agent.","title":"-Xtrace"},{"location":"xtrace/#xtrace-option-builder","text":"Use the Xtrace Option Builder tool to help you specify the correct options and avoid incompatibilities.","title":"Xtrace Option Builder"},{"location":"xtrace/#syntax","text":"-Xtrace:<parameter> You can get help with -Xtrace by using the folowing options: -Xtrace:help Displays general trace help -Xtrace:what Shows the current trace settings","title":"Syntax"},{"location":"xtrace/#configuring-trace","text":"The following parameters can be used to configure trace. (Follow links for more information about individual options.) Command Result -Xtrace:properties[=<filename>] Configures trace options based on a file -Xtrace:buffers=<size>[dynamic\\|nodynamic] Modifies the size of buffers that are used to store trace data -Xtrace:exception.output=<filename>[,<size>] Redirects exceptions trace data to a file. -Xtrace:methods=<method_specification> Traces methods -Xtrace:output=<filename>[,<size>[,<generations>]] Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:resume Resumes tracing globally. -Xtrace:resumecount=<count> Enables tracing at a thread level after a specified count. -Xtrace:sleeptime=<time> Pauses trace operations for a specified length of time. -Xtrace:stackdepth=<n> Limits the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:suspend Suspends tracing globally. -Xtrace:suspendcount=<count> Suspends tracing at a thread level after a specified count. -Xtrace:trigger=<clause> Determines when various triggered trace actions occur, including turning trace on or off. Note: If an option value contains commas, it must be enclosed in braces. For example: methods={java/lang/*,com/ibm/*}","title":"Configuring trace"},{"location":"xtrace/#controlling-tracepoint-activation","text":"The following parameters can be used to control tracepoint activation. (Follow links for more information about individual options.) Command Result -Xtrace:maximal=<tracepoint_specification> Records all associated data. -Xtrace:minimal=<tracepoint_specification> Records only the time stamp and tracepoint identifier. -Xtrace:count=<tracepoint_specification> Counts the tracepoints that are used in a trace configuration. -Xtrace:print=<tracepoint_specification> Prints the specified tracepoints to stderr in real time. -Xtrace:iprint=<tracepoint_specification> Prints the specified tracepoints to stderr in real time with indentation. -Xtrace:exception=<tracepoint_specification> Enables exception tracing. -Xtrace:external<tracepoint_specification> Routes trace data to trace listeners, which are registered by using the JVMTI APIs. -Xtrace:none[=<tracepoint_specification>] Prevents the trace engine from loading if it is the only trace option specified. Note: These options control which individual tracepoints are activated at run time and the implicit destination of the trace data. All these properties are independent of each other and can be mixed and matched in any way that you choose. For more information, see Tracepoint activation .","title":"Controlling tracepoint activation"},{"location":"xtrace/#about-trace","text":"With the OpenJ9 trace feature, you can trace VM internal operations, Java applications, and Java methods, or any combination of these. VM internal operations The OpenJ9 virtual machine (VM) is extensively instrumented with tracepoints for tracing operations. Interpreting this trace data requires detailed knowledge of the VM, and is intended to diagnose VM problems. No guarantee is given that tracepoints will not vary from release to release and from platform to platform. Applications VM trace contains an application trace facility that allows tracepoints to be placed in Java code, enabling you to combine trace data with the other forms of trace. This capability is supported by the com.ibm.jvm.Trace API. Note that an instrumented Java application runs only on an OpenJ9 VM. For more information, see Application trace . Java methods Use method trace to debug and trace application code and the system classes provided with the VM. You can trace entry to and exit from Java methods run by the VM. You can select method trace by classname, method name, or both. You can also use wildcards to create complex method selections. For more information about command syntax, see methods . Trace can produce large amounts of data in a very short time. Before running trace, think carefully about what information you need in order to solve the problem. Here are some considerations: If you need only the trace information that is produced shortly before the problem occurs, consider wrapping the file by using the output option. In many cases, just use internal trace with an increased buffer size and snap the trace when the problem occurs. If the problem results in a thread stack dump or operating system signal or exception, trace buffers are snapped automatically to a file that is in the current directory. The file is called: Snapnnnn. yyyymmdd.hhmmssth.process.trc . You must also think carefully about which components need to be traced and what level of tracing is required. For example, if you are tracing a suspected shared classes problem, it might be enough to trace all components at level 1, and j9shr at level 9, while maximal can be used to show parameters and other information for the failing component. Tracepoint components and trace levels are described in the following sections: Tracepoint specification and Trace levels . There are two types of tracepoints inside the VM: Regular tracepoints include method tracepoints, application tracepoints, data tracepoints inside the VM and data tracepoints inside class libraries. You can display regular tracepoint data on the screen or save the data to a file. You can also use command line options to trigger specific actions when regular tracepoints fire. Auxiliary tracepoints are a special type of tracepoint that can be fired only when another tracepoint is being processed. For example, the stack frame information produced by the jstacktrace -Xtrace:trigger command. You cannot control where auxiliary tracepoint data is sent and you cannot set triggers on auxiliary tracepoints. Auxiliary tracepoint data is sent to the same destination as the tracepoint that caused them to be generated. Trace data can be written to one of the following locations: Memory buffers that can be dumped or snapped when a problem occurs. Use the -Xtrace:buffers=<size> option to control the size of the buffer allocated to each thread. Buffers allocated to a thread are discarded when that thread terminates. To examine the trace data captured in these memory buffers, you must snap or dump the data, then format the buffers. One or more files that are using buffered I/O. Use the -Xtrace:output option. An external agent in real time, using the -Xtrace:external option. stderr in real time. Any combination of the other items in this list.","title":"About trace"},{"location":"xtrace/#default-tracing","text":"By default, the equivalent of the following trace command line is always available in the VM: -Xtrace:maximal=all{level1},exception=j9mm{gclogger} When startup is complete, the equivalent of the following command line is added to enable level 2 trace points: -Xtrace:maximal=all{level2} Level 2 is used for default tracing that would produce too much data during the startup of the VM. If you set other trace options on the command line, or before the VM finishes startup (through use of JVMTI or the com.ibm.jvm.Trace API), the level 2 trace points are enabled just before your trace options are processed. This behavior ensures that the default level 2 trace points do not override any changes that you specify. The data generated by the tracepoints is continuously captured in wrapping memory buffers for each thread. You can find tracepoint information in the following diagnostics data: System memory dumps, extracted by using jdmpview. Snap traces, generated when the VM encounters a problem or an output file is specified. Using dump agents describes more ways to create a snap trace. For exception trace only, in Javadumps.","title":"Default tracing"},{"location":"xtrace/#default-memory-management-tracing","text":"The default trace options are designed to ensure that Javadumps always contain a record of the most recent memory management history, regardless of how much work the VM has performed since the garbage collection cycle was last called. The exception=j9mm{gclogger} clause of the default trace set specifies that a history of garbage collection cycles that have occurred in the VM is continuously recorded. The gclogger group of tracepoints in the j9mm component constitutes a set of tracepoints that record a snapshot of each garbage collection cycle. These tracepoints are recorded in their own separate buffer, called the exception buffer. The effect is that the tracepoints are not overwritten by the higher frequency tracepoints of the VM. The GC History section of the Javadump is based on the information in the exception buffer. If a garbage collection cycle has occurred in a traced VM, the Java dump probably contains a GC History section.","title":"Default memory management tracing"},{"location":"xtrace/#default-assertion-tracing","text":"The VM includes assertions, implemented as special trace points. By default, internal assertions are detected and diagnostics logs are produced to help assess the error. Assertion failures often indicate a serious problem, and the VM usually stops immediately. In these circumstances, raise an issue, including the standard error output and any diagnostic files that are produced. When an assertion trace point is reached, a message like the following output is produced on the standard error stream: 16:43:48.671 0x10a4800 j9vm.209 * ** ASSERTION FAILED ** at jniinv.c:251: ((javaVM == ((void *)0))) This error stream is followed with information about the diagnostic logs produced: JVMDUMP007I JVM Requesting System Dump using 'core.20060426.124348.976.dmp' JVMDUMP010I System Dump written to core.20060426.124348.976.dmp JVMDUMP007I JVM Requesting Snap Dump using 'Snap0001.20060426.124648.976.trc' JVMDUMP010I Snap Dump written to Snap0001.20060426.124648.976.trc Assertions are special trace points. They can be enabled or disabled by using the standard trace command-line options. Assertion failures might occur early during VM startup, before trace is enabled. In this case, the assert message has a different format, and is not prefixed by a timestamp or thread ID. For example: ** ASSERTION FAILED ** j9vmutil.15 at thrinfo.c:371 Assert_VMUtil_true(( publicFlags & 0x200)) Assertion failures that occur early during startup cannot be disabled. These failures do not produce diagnostic dumps, and do not cause the VM to stop.","title":"Default assertion tracing"},{"location":"xtrace/#tracepoint-activation","text":"The options that control which individual tracepoints are activated at run time and the implicit destination of the trace data are listed under Syntax: Controlling tracepoint activation In some cases, you must use them with other options. For example, if you specify maximal or minimal tracepoints, the trace data is put into memory buffers. If you are going to send the data to a file, you must use an output option to specify the destination file name. With the exception of none , all options require at least one <tracepoint_specification> , which is described in the following section. Multiple statements of each type of trace are allowed and their effect is cumulative. If you want to use multiple trace options of the same name, use a properties file. (See properties .)","title":"Tracepoint activation"},{"location":"xtrace/#tracepoint-specification","text":"Tracepoints are enabled by specifying component and tracepoint . If no qualifier parameters are entered, all tracepoints are enabled, except for <exception.output> trace, where the default is all {exception}. The <tracepoint_specification> syntax can be further broken down as follows: [!]<component>[{<group>}] or [!]<component>[{<type>}] or [!]<tracepoint_id>[,<tracepoint_id>] Where: The ! symbol is a logical not . That is, the tracepoints that are in a specification starting with ! are turned off. <component> is a Java component. <group> is a tracepoint group, which is a set of tracepoints that are defined within a component. <type> is the tracepoint type: entry , exit , event , exception , and eem . <tracepoint_id> is the tracepoint identifier. The tracepoint identifier constitutes the component name of the tracepoint, followed by its integer number inside that component. For example, j9mm.49 , j9shr.20-29 , j9vm.15 . To understand these numbers, see Determining the tracepoint ID of a tracepoint. Some tracepoints can be both an exit and an exception ; that is, the function ended with an error. If you specify either exit or exception , these tracepoints are included. Lists of Java components and tracepoint groups can be found in the tables that follow. The following table lists the possible Java components ( <component> ). To include all Java components, specify all . Component name Description avl VM AVL tree support io Class library java.io native code j9bcu VM byte code utilities j9bcverify VM byte code verification j9codertvm VM byte code run time j9dmp VM dump j9jcl VM class libraries j9jit VM JIT interface j9jni VM JNI support j9jvmti VM JVMTI support j9mm VM memory management j9prt VM port library j9scar VM class library interface j9shr VM shared classes j9trc VM trace j9util VM utilities j9vm VM general j9vmutil VM utilities j9vrb VM verbose stack walker map VM mapped memory support mt Java methods (see Note ) net Class library TCP/IP networking native code pool VM storage pool support rpc VM RPC support simplepool VM storage pool support sunvmi VM class library interface Note: When specifying the mt component you must also specify the methods option. The following table lists all the tracepoint groups ( <group> ). Each group is associated with one or more Java components: Component name or names Group name Description j9mm gclogger A set of tracepoints that record each garbage collection cycle. Equivalent to -verbose:gc output j9prt nlsmessage A set of tracepoints that record each NLS message that is issued by the VM. j9jcl , j9vm verboseclass A set of tracepoints that record each class as it is loaded. Equivalent to -verbose:class output. j9jni , j9vm checkjni A set of tracepoints that record JNI function checks. Equivalent to -Xcheck:jni output. j9vm checkmemory A set of tracepoints that record memory checks. Equivalent to -Xcheck:memory output. j9vm checkvm A set of tracepoints that record VM checks. Equivalent to -Xcheck:vm output. j9jit verbose A set of tracepoints that record JIT compiler configuration and method compilation. Equivalent to -Xjit:verbose output. mt compiledMethods A set of tracepoints that record compiled Java methods. mt nativeMethods A set of tracepoints that record Java native methods. mt staticMethods A set of tracepoints that record Java static methods. Here are some examples: To trace all tracepoints, specify the following command: -Xtrace:maximal=all To trace all tracepoints except **j9vrb** and **j9trc**, specify the following command: -Xtrace:minimal={all},minimal={!j9vrb,j9trc} To trace all entry and exit tracepoints in j9bcu , specify the following command: -Xtrace:maximal={j9bcu{entry},j9bcu{exit}} To trace all tracepoints in **j9mm** except tracepoints 20-30, specify the following command: -Xtrace:maximal=j9mm,maximal=!j9mm.20-30 To trace tracepoints j9prt.5 through j9prt.15 , specify the following command: -Xtrace:print=j9prt.5-15 To trace all **j9trc** tracepoints, specify the following command: -Xtrace:count=j9trc To trace all entry and exit tracepoints, specify the following command: -Xtrace:external={all{entry},all{exit}}","title":"Tracepoint specification"},{"location":"xtrace/#trace-levels","text":"Tracepoints have been assigned levels 0 through 9 that are based on the importance of the tracepoint. A level 0 tracepoint is the most important. It is reserved for extraordinary events and errors. A level 9 tracepoint is in-depth component detail. To specify a given level of tracing, the level0 through level9 keywords are used. You can abbreviate these keywords to l0 through l9. For example, if level5 is selected, all tracepoints that have levels 0 through 5 are included. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. The level is provided as a modifier to a component specification, for example: -Xtrace:maximal={all{level5}} or -Xtrace:maximal={j9mm{L2},j9trc,j9bcu{level9},all{level1}} In the first example, tracepoints that have a level of 5 or less are enabled for all components. In the second example, all level 1 tracepoints are enabled. All level 2 tracepoints in j9mm are enabled. All tracepoints up to level 9 are enabled in j9bcu . Note: The level applies only to the current component. If multiple trace selection components are found in a trace properties file, the level is reset to the default for each new component. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. When the not operator is specified, the level is inverted; that is, !j9mm{level5} disables all tracepoints of level 6 or greater for the j9mm component. The following example enables trace for all components at level 9 (the default), but disables level 6 and higher for the locking component, and level 7 and higher for the storage component: -Xtrace:print={all},print={!j9trc{l5},j9mm{l6}} Here are some examples: To count the level zero and level one tracepoints matched, specify the following command: -Xtrace:count=all{L1} To produce maximal trace of all components at level 5 and j9mm at level 9, specify the following command: -Xtrace:maximal={all{level5},j9mm{L9}} To trace all components at level 6, but do not trace j9vrb at all, and do not trace the entry and exit tracepoints in the j9trc component, specify the following command: -Xtrace:minimal={all{l6}},minimal={!j9vrb,j9trc{entry},j9trc{exit}}","title":"Trace levels"},{"location":"xtrace/#parameters","text":"Parameters to use with the -Xtrace option:","title":"Parameters"},{"location":"xtrace/#buffers","text":"You can modify the size of the buffers to change how much diagnostic output is provided in a snap dump. This buffer is allocated for each thread that makes trace entries. The following table shows how this parameter can be set: Command Effect -Xtrace:buffers=<size> Creates buffers of the specified <size> in k (KB) or m (MB), allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>dynamic Creates buffers of the specified <size> , allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>nodynamic Creates buffers of the specified <size> , with a maximum allocation of two buffers per thread. If external trace is enabled, the number of buffers is doubled; that is, each thread allocates two or more buffers. The same buffer size is used for state and exception tracing, but, in this case, buffers are allocated globally. The default is 8 KB per thread. The dynamic and nodynamic suboptions have meaning only when tracing to an output file. Note: If nodynamic is specified, you might lose trace data if the volume of trace data exceeds the bandwidth of the trace output file. Message UTE115 is issued when the first trace entry is lost, and message UTE018 is issued when the VM ends. Here are some command line examples: To set a buffer size of 2 MB per thread, with dynamic buffering, use: -Xtrace:buffers=2m To limit each thread to 2 trace buffers, each of 128 KB: -Xtrace:buffers={128k,nodynamic}","title":"buffers"},{"location":"xtrace/#count-tracepoint","text":"-Xtrace:count=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The count option requests that only a count of the selected tracepoints is kept. When the VM ends, all nonzero totals of tracepoints (sorted by tracepoint id) are written to a file, called utTrcCounters , in the current directory. This information is useful if you want to determine the overhead of particular tracepoints, but do not want to produce a large amount (GB) of trace data. For example, to count the tracepoints that are used in the default trace configuration, use the following command: -Xtrace:count=all{level1},count=j9mm{gclogger}","title":"count (tracepoint)"},{"location":"xtrace/#exception-tracepoint","text":"-Xtrace:exception=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When exception trace is enabled, the trace data is collected in internal buffers that are separate from the normal buffers. These internal buffers can then be written to a snap file or written to the file that is specified in an exception.output option. The exception option allows low-volume tracing in buffers and files that are distinct from the higher-volume information that minimal and maximal tracing have provided. In most cases, this information is exception-type data, but you can use this option to capture any trace data that you want. This form of tracing is channeled through a single set of buffers, as opposed to the buffer-per-thread approach for normal trace. Buffer contention might occur if high volumes of trace data are collected. A difference exists in the <tracepoint_specification> defaults for exception tracing; see Tracepoint specification . Notes: The exception trace buffers are intended for low-volume tracing. By default, the exception trace buffers log garbage collection (GC) event tracepoints, see Default tracing. You can send additional tracepoints to the exception buffers or turn off the GC tracepoints. Changing the exception trace buffers alters the contents of the GC History section in any Javadumps. When exception trace is entered for an active tracepoint, the current thread ID is checked against the previous caller's thread ID. If it is a different thread, or this is the first call to exception trace, a context tracepoint is put into the trace buffer first. This context tracepoint consists only of the current thread ID, which is necessary because of the single set of buffers for exception trace. (The formatter identifies all trace entries as coming from the Exception trace pseudo thread when it formats exception trace files.)","title":"exception (tracepoint)"},{"location":"xtrace/#exceptionoutput","text":"Use exception output to redirect exceptions trace data to a file. -Xtrace:exception.output=<filename>[,<size>] Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps nondestructively to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Here are some examples: Exception trace output goes to file /u/traces/exception.trc with no size limit: -Xtrace:exception.output=/u/traces/exception.trc,maximal Exception trace output goes to file except and wraps at 2 MB: -Xtrace:exception.output={except,2m},maximal Exception trace output goes to a file whose filename contains today's date in yyyymmdd format (for example, traceout.20181025.trc ): -Xtrace:exception.output=traceout.%d.trc,maximal Exception trace output goes to a file whose filename contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:exception.output=tracefrompid%p.trc,maximal Exception trace output goes to a file whose filename contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:exception.output=traceout.%t.trc,maximal","title":"exception.output"},{"location":"xtrace/#external-tracepoint","text":"-Xtrace:external<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The external option routes trace data to trace listeners, which are registered by using the JVMTI RegisterTracePointSubscriber() and DeregisterTracePointSubscriber() APIs.","title":"external (tracepoint)"},{"location":"xtrace/#help","text":"-Xtrace:help Displays general trace help","title":"help"},{"location":"xtrace/#iprint-tracepoint","text":"-Xtrace:iprint=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The iprint option is the same as the print option, but uses indenting to format the trace.","title":"iprint (tracepoint)"},{"location":"xtrace/#maximal-tracepoint","text":"-Xtrace:maximal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. All associated data is traced. minimal and maximal traces are independent from any types that follow them. For example, if the maximal option is specified, it does not affect a later option such as print .","title":"maximal (tracepoint)"},{"location":"xtrace/#methods","text":"Using method trace provides a complete and potentially large diagnosis of code paths inside your application and the system classes. Use wild cards and filtering to control method trace so that you can focus on the sections of code that interest you. To specify one or more method specifications, use the following syntax: -Xtrace:methods=<method_specification>[,<method_specification>] The syntax for <method_specification> can be further broken down to the following suboptions: -Xtrace:methods={[!][*][<package>/]<class>[*],[[*]<method>[*]|[()]]} Where: The delimiter between parts of the package name is a forward slash, \"/\". The ! in the methods parameter is a NOT operator that allows you to tell the VM not to trace the specified method or methods. The parentheses, (), define whether or not to include method parameters in the trace. If a method specification includes any commas, the whole specification must be enclosed in braces, for example: -Xtrace:methods={java/lang/*,java/util/*},print=mt It might be necessary to enclose your command line in quotation marks to prevent the shell intercepting and fragmenting comma-separated command lines, for example: \"-Xtrace:methods={java/lang/*,java/util/*},print=mt\" To output all method trace information to stderr, use either the print or iprint suboptions: -Xtrace:print=mt,methods=*.* -Xtrace:iprint=mt,methods=*.* The iprint suboption prints to stderr with indentation. To output method trace information in binary format, see the output option. Here are some examples: Tracing entry and exit of all methods in a given class: To trace all method entry and exit of the ReaderMain class in the default package and the java.lang.String class, specify the following command: -Xtrace:methods={ReaderMain.*,java/lang/String.*},print=mt Tracing entry, exit and input parameters of all methods in a class: To trace all method entry, exit, and input of the ReaderMain class in the default package, specify the following command: -Xtrace:methods=ReaderMain.*(),print=mt Tracing all methods in a given package: To trace all method entry, exit, and input of all classes in the package com.ibm.socket , specify the following command: -Xtrace:methods=com/ibm/socket/*.*(),print=mt Multiple method trace: To trace all method entry, exit, and input in the Widget class in the default package and all method entry and exit in the common package, specify the following command: -Xtrace:methods={Widget.*(),common/*},print=mt Using the ! operator: To trace all methods in the ArticleUI class in the default package except those beginning with \"get\", specify the following command: -Xtrace:methods={ArticleUI.*,!ArticleUI.get*},print=mt Tracing a specific method in a class: This example traces entry and exit of the substring method of the java.lang.String class . If there is more than one method with the same name, they are all traced. You cannot filter method trace by the signature of the method. -Xtrace:print=mt,methods={java/lang/String.substring} Tracing the constructor of a class: This example traces entry and exit of the constructors of the java.lang.String class. -Xtrace:print=mt,methods={java/lang/String.<init>} Here is some example output: java \"-Xtrace:methods={java/lang*.*},iprint=mt\" HW 10:02:42.281*0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/String.<clinit>()V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method The output lines comprise of: 0x9e900 , the current execenv (execution environment). Because every VM thread has its own execenv , you can regard execenv as a thread-id . All trace with the same execenv relates to a single thread. The individual tracepoint ID in the mt component that collects and emits the data. The remaining fields show whether a method is being entered (>) or exited (<), followed by details of the method.","title":"methods"},{"location":"xtrace/#minimal-tracepoint","text":"-Xtrace:minimal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. Only the time stamp and tracepoint identifier are recorded. When the trace is formatted, missing trace data is replaced with the characters \"???\" in the output file. minimal and maximal traces are independent from any types that follow them. For example, if the minimal option is specified, it does not affect a later option such as print .","title":"minimal (tracepoint)"},{"location":"xtrace/#none-tracepoint","text":"-Xtrace:none[=<tracepoint_specification>] For further information about <tracepoint_specification> syntax, see Tracepoint specification . -Xtrace:none prevents the trace engine from loading if it is the only trace option specified. However, if other -Xtrace options are on the command line, it is treated as the equivalent of -Xtrace:none=all and the trace engine still loads. If you specify other tracepoints without specifying -Xtrace:none , the tracepoints are added to the default set.","title":"none (tracepoint)"},{"location":"xtrace/#output","text":"Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:output=<filename>[,<size>[,<generations>]]` Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p% (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Optionally, <generations> is a value 2 through 36. These values cause up to 36 files to be used sequentially as each file reaches its <size> threshold. When a file needs to be reused, it is overwritten. If <generations> is specified, the filename must contain a # (hash, pound symbol), which will be substituted with its generation identifier, the sequence of which is 0 through 9 followed by A through Z. Note: When tracing to a file, buffers for each thread are written when the buffer is full or when the VM ends. If a thread has been inactive for a period of time before the VM ends, what seems to be 'old' trace data is written to the file. When formatted, it then seems that trace data is missing from the other threads, but this is an unavoidable side-effect of the buffer-per-thread design. This effect becomes especially noticeable when you use the generation facility, and format individual earlier generations. Here are some examples: Trace output goes to file /u/traces/gc.problem with no size limit: -Xtrace:output=/u/traces/gc.problem,maximal=j9gc Trace output goes to file trace , which will wrap at 2 MB: -Xtrace:output={trace,2m},maximal=j9gc Trace output goes to files gc0.trc , gc1.trc , and gc2.trc , each 10 MB in size: -Xtrace:output={gc#.trc,10m,3},maximal=j9gc Trace output goes to a file, where the filename contains today's date in yyyymmdd format (for example, traceout.20181025.trc ): -Xtrace:output=traceout.%d.trc,maximal=j9gc Trace output goes to a file whose name contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:output=tracefrompid%p.trc,maximal=j9gc Trace output goes to a file whose name contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:output=traceout.%t.trc,maximal=j9gc","title":"output"},{"location":"xtrace/#print-tracepoint","text":"-Xtrace:print=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The print option causes the specified tracepoints to be routed to stderr in real time. The VM tracepoints are formatted by using J9TraceFormat.dat . The class library tracepoints are formatted by J9TraceFormat.dat and TraceFormat.dat .","title":"print (tracepoint)"},{"location":"xtrace/#properties","text":"You can use properties files to control trace. A properties file saves typing and allows you to create a library of files that are tailored to solving problems in a particular area. -Xtrace:properties[=<filename>] If <filename> is not specified, the VM searches for a default name of IBMTRACE.properties in the current directory. All the options that are in the file are processed in the sequence in which they are stored in the file, before the next option that is obtained through the normal mechanism is processed. Therefore, a command-line property always overrides a property that is in the file. Here is an example of a properties file: minimal=all // maximal=j9mm maximal=j9shr buffers=128k,nodynamic output=c:\\traces\\classloader.trc print=tpnid(j9vm.23-25) The following restrictions apply to the file: The file must be a flat ASCII file. Nesting is not supported; that is, the file cannot contain a properties option. You cannot leave properties that have the form <name>=<value> to default if they are specified in the property file; that is, you must specify a value, for example maximal=all . Do not add white space before, after, or within the trace options. If any error is found when the file is accessed, VM initialization fails with an explanatory error message and return code. To use a file trace.props stored in the c:\\trc\\gc directory, specify the following command: -Xtrace:properties=c:\\trc\\gc\\trace.props","title":"properties"},{"location":"xtrace/#resume","text":"The resume option resumes tracing globally. -Xtrace:resume The suspend and resume options are not recursive. That is, two suspends that are followed by a single resume cause trace to be resumed.","title":"resume"},{"location":"xtrace/#resumecount","text":"This trace option determines whether tracing is enabled for each thread. -Xtrace:resumecount=<count> If <count> is greater than zero, each thread initially has its tracing disabled and must receive <count> resumethis actions before it starts tracing. This option is used with the trigger option. Note: You cannot use resumecount and suspendcount together because they use the same internal counter. The following example starts with all tracing turned off. Each thread starts tracing when it has had three resumethis actions performed on it: -Xtrace:resumecount=3","title":"resumecount"},{"location":"xtrace/#sleeptime","text":"You can specify how long the sleep lasts when using the sleep trigger action. -Xtrace:sleeptime=nnn|aaams|bbbs Where: nnn sleeps for nnn milliseconds. aaams sleeps for aaa milliseconds. bbbs sleeps for bbb seconds. The default length of time is 30 seconds. If no units are specified, the default time unit is milliseconds.","title":"sleeptime"},{"location":"xtrace/#stackdepth","text":"Use this option to limit the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:stackdepth=<n> Where <n> is the maximum number of stack frames reported.","title":"stackdepth"},{"location":"xtrace/#suspend","text":"-Xtrace:suspend Suspends tracing globally for all threads and all forms of tracing but leaves tracepoints activated.","title":"suspend"},{"location":"xtrace/#suspendcount","text":"This trace option determines whether tracing is enabled for each thread. -Xtrace:suspendcount=<count> If <count> is greater than zero, each thread initially has its tracing enabled and must receive <count> suspendthis actions before it stops tracing. You cannot use resumecount and suspendcount together because they both set the same internal counter. This trace option is for use with the trigger option. The following example starts with tracing turned on. Each thread stops tracing when it has had three suspendthis actions performed on it: -Xtrace:suspendcount=3","title":"suspendcount"},{"location":"xtrace/#trigger","text":"The trigger parameter determines when various triggered trace actions occur. Supported actions include turning tracing on and off for all threads, turning tracing on or off for the current thread, or producing various dumps. -Xtrace:trigger=<clause>[,<clause>] This trace option does not control what is traced. It controls only whether the information that has been selected by the other trace options is produced as normal or is blocked.","title":"trigger"},{"location":"xtrace/#types","text":"Each clause of the trigger parameter can be one of the following types: a method ( -Xtrace:trigger=method{...} ) a tracepoint ID ( -Xtrace:trigger=tpnid{...} ) a group ( -Xtrace:trigger=group{...} ) You can specify multiple clauses of the same type if required, but you do not need to specify all types. method -Xtrace:trigger=method{<methodspec>[,<entryAction>[,<exitAction>[,<delayCount>[,<matchcount>]]]]} On entering a method that matches <methodspec> , the specified <entryAction> is run. On leaving a method that matches <methodspec> , the specified <exitAction> is run. If you specify a <delayCount> , the actions are performed only after a matching <methodspec> has been entered that many times. If you specify a <matchCount> , <entryAction> and <exitAction> are performed at most that many times. <methodspec> is the specification of a Java method, consisting of a class and a method name separated by a dot. For example, specify HelloWorld.main . If the class is in a package, the package name must be included, separated by slashes. For example, specify java/lang/String.getBytes . A wildcard \"*\" can be used at the start or end of the class and method names, or both. For example, you can specify */String.get* . To specify a constructor method, use <init> as the method name. Method signatures cannot be specified, so a method specification applies to all overloaded methods. tracepoint ID -Xtrace:trigger=tpnid{<tpnid>|<tpnidRange>,<action>[,<delayCount>[,<matchcount>]]} On finding the specified active tracepoint ID ( <tpnid> ) or a tracepoint ID) that falls inside the specified <tpnidRange> , the specified action is run . If you specify a <delayCount> , the action is performed only after the VM finds such an active <tpnid> that many times. If you specify a <matchCount> , <action> is performed at most that many times. group -Xtrace:trigger=group{<groupname>,<action>[,<delayCount>[,<matchcount>]]} On finding any active tracepoint that is defined as being in trace group <groupname> , for example Entry or Exit , the specified action is run . If you specify a <delayCount> , the action is performed only after that many active tracepoints from group <groupname> have been found. If you specify a <matchCount> , <action> is performed at most that many times.","title":"Types"},{"location":"xtrace/#actions","text":"Wherever an action ( <action> , <entryAction> , or <exitAction> ) must be specified in one of the trigger parameter clauses, you must select from these options: <action> Effect abort Halt the VM. ceedump This action is applicable to z/OS\u00ae only. For more information, see z/OS LE CEEDUMPs. coredump See sysdump . heapdump Produce a Heapdump. See Using Heapdump . javadump Produce a Javadump. See Using Javadump . jstacktrace Examine the Java stack of the current thread and generate auxiliary tracepoints for each stack frame. The auxiliary tracepoints are written to the same destination as the tracepoint or method trace that triggered the action. You can control the number of stack frames examined with the stackdepth=n option. See the stackdepth option. resume Resume all tracing (except for threads that are suspended by the action of the resumecount property and Trace.suspendThis() calls). resumethis Decrement the suspend count for this thread. If the suspend count is zero or less, resume tracing for this thread. sigsev Cause a segmentation violation. (Intended for use in debugging.) sleep Delay the current thread for a length of time controlled by the sleeptime option. The default is 30 seconds. See sleeptime option. snap Snap all active trace buffers to a file in the current working directory. The file name has the format: Snapnnnn.yyyymmdd.hhmmssth.ppppp.trc , where nnnn is the sequence number of the snap file since VM startup, yyyymmdd is the date, hhmmssth is the time, and ppppp is the process ID in decimal with leading zeros removed. suspend Suspend all tracing (except for special trace points). suspendthis Increment the suspend count for this thread. If the suspend-count is greater than zero, prevent all tracing for this thread. sysdump (or coredump ) Produce a system dump. See Dump agents( -Xdump:system ) . Here are some examples of using the trigger option: To produce a Java dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump} To produce a system dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,sysdump} To produce a Java dump when a class constructor is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<init>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a class static initializer is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<clinit>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a method is entered 1000 times and 1001 times, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump,,1000,2} To start tracing this thread when it enters any method in java/lang/String , and to stop tracing the thread after exiting the method, specify the following command: -Xtrace:resumecount=1 -Xtrace:trigger=method{java/lang/String.*,resumethis,suspendthis} To resume all tracing when any thread enters a method in any class that starts with error , specify the following command: -Xtrace:trigger=method{*.error*,resume} To trace (all threads) while the application is active; that is, not starting or shut down. (The application name is HelloWorld ), specify the following command: -Xtrace:suspend,trigger=method{HelloWorld.main,resume,suspend} To print a Java stack trace to the console when the mycomponent.1 tracepoint is reached, specify the following command: -Xtrace:print=mycomponent.1,trigger=tpnid{mycomponent.1,jstacktrace} To write a Java stack trace to the trace output file when the Sample.code() method is called, specify the following command: -Xtrace:maximal=mt,output=trc.out,methods={mycompany/mypackage/Sample.code},trigger=method{mycompany/mypackage/Sample.code,jstacktrace}","title":"Actions"},{"location":"xtrace/#what","text":"-Xtrace:what Shows the current trace settings","title":"what"},{"location":"xtrace/#see-also","text":"Application trace Using Heapdump Using Javadump Dump viewer","title":"See also"},{"location":"xtunevirtualized/","text":"-Xtune:virtualized Optimizes OpenJ9 VM function for virtualized environments, such as a cloud, by reducing OpenJ9 VM CPU consumption when idle. Note: Performance is optimized if there is a large shared class cache (SCC) and AOT space in the SCC is not capped. Syntax -Xtune:virtualized This option is recommended for CPU-constrained environments, such as those found in cloud deployments that use containers. Internally, the option makes the JIT compiler more conservative with inlining and recompilation decisions, which saves CPU resources. The Garbage Collector also reduces the rate of heap expansion, which reduces the memory footprint. These changes to reduce the amount of CPU that is consumed are at the expense of a small loss in throughput. When -Xtune:virtualized is used in conjunction with the -Xshareclasses option, the JIT compiler is more aggressive with its use of AOT-compiled code compared to setting only -Xshareclasses . This action provides additional CPU savings during application start-up and ramp-up, but comes at the expense of an additional small loss in throughput. See also For an example of the effect of using this option, see: Measuring the strengths of OpenJDK with Eclipse OpenJ9","title":"-Xtune:virtualized"},{"location":"xtunevirtualized/#-xtunevirtualized","text":"Optimizes OpenJ9 VM function for virtualized environments, such as a cloud, by reducing OpenJ9 VM CPU consumption when idle. Note: Performance is optimized if there is a large shared class cache (SCC) and AOT space in the SCC is not capped.","title":"-Xtune:virtualized"},{"location":"xtunevirtualized/#syntax","text":"-Xtune:virtualized This option is recommended for CPU-constrained environments, such as those found in cloud deployments that use containers. Internally, the option makes the JIT compiler more conservative with inlining and recompilation decisions, which saves CPU resources. The Garbage Collector also reduces the rate of heap expansion, which reduces the memory footprint. These changes to reduce the amount of CPU that is consumed are at the expense of a small loss in throughput. When -Xtune:virtualized is used in conjunction with the -Xshareclasses option, the JIT compiler is more aggressive with its use of AOT-compiled code compared to setting only -Xshareclasses . This action provides additional CPU savings during application start-up and ramp-up, but comes at the expense of an additional small loss in throughput.","title":"Syntax"},{"location":"xtunevirtualized/#see-also","text":"For an example of the effect of using this option, see: Measuring the strengths of OpenJDK with Eclipse OpenJ9","title":"See also"},{"location":"xverbosegclog/","text":"-Xverbosegclog Causes garbage collection (GC) output from the -verbose:gc option to be written to a specified file. Syntax -Xverbosegclog[:<filename>[,<x>,<y>]] where <filename> is the name of the file to which output is written. Dump agent tokens can be used in the filename. If the file cannot be found, the file is created, and output is written to the new file. If the file cannot be created (for example, if an invalid filename is specified), output is redirected to stderr . If you do not specify a file name, verbosegc.%Y%m%d.%H%M%S.%pid.txt is used (for example, verbosegc.20180124.093210.1234.txt ). If you specify <x> and <y> , output is redirected to x files, each containing y GC cycles. Default behavior By default, no verbose GC logging occurs. See also Dump agent tokens for more information.","title":"-Xverbosegclog"},{"location":"xverbosegclog/#-xverbosegclog","text":"Causes garbage collection (GC) output from the -verbose:gc option to be written to a specified file.","title":"-Xverbosegclog"},{"location":"xverbosegclog/#syntax","text":"-Xverbosegclog[:<filename>[,<x>,<y>]] where <filename> is the name of the file to which output is written. Dump agent tokens can be used in the filename. If the file cannot be found, the file is created, and output is written to the new file. If the file cannot be created (for example, if an invalid filename is specified), output is redirected to stderr . If you do not specify a file name, verbosegc.%Y%m%d.%H%M%S.%pid.txt is used (for example, verbosegc.20180124.093210.1234.txt ). If you specify <x> and <y> , output is redirected to x files, each containing y GC cycles.","title":"Syntax"},{"location":"xverbosegclog/#default-behavior","text":"By default, no verbose GC logging occurs.","title":"Default behavior"},{"location":"xverbosegclog/#see-also","text":"Dump agent tokens for more information.","title":"See also"},{"location":"xverify/","text":"-Xverify As described in the Oracle documentation , this Hotspot option enables or disables the verifier. For compatibility, this option is also supported by the OpenJ9 VM. Syntax Setting Effect Default -Xverify Enables verification for all non-bootstrap classes. -Xfuture verification is not enabled. yes -Xverify:all Enables verification for all classes and enables -Xfuture verification. You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier . Note: This setting might have an impact on performance. -Xverify:remote For compatibility, this parameter is accepted, but is equivalent to the default -Xverify . -Xverify:none Disables the verifier. Note: This is not a supported configuration and, as noted, is deprecated in Java 13 and later versions. If you encounter problems with the verifier turned off, remove this option and try to reproduce the problem. Note: The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions.","title":"-Xverify"},{"location":"xverify/#-xverify","text":"As described in the Oracle documentation , this Hotspot option enables or disables the verifier. For compatibility, this option is also supported by the OpenJ9 VM.","title":"-Xverify"},{"location":"xverify/#syntax","text":"Setting Effect Default -Xverify Enables verification for all non-bootstrap classes. -Xfuture verification is not enabled. yes -Xverify:all Enables verification for all classes and enables -Xfuture verification. You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier . Note: This setting might have an impact on performance. -Xverify:remote For compatibility, this parameter is accepted, but is equivalent to the default -Xverify . -Xverify:none Disables the verifier. Note: This is not a supported configuration and, as noted, is deprecated in Java 13 and later versions. If you encounter problems with the verifier turned off, remove this option and try to reproduce the problem. Note: The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions.","title":"Syntax"},{"location":"xx_jvm_commands/","text":"Using -XX command-line options Java\u2122 VM command-line options that are specified with -XX: are not checked for validity. If the VM does not recognize the option, the option is ignored. These options can therefore be used across different VM versions without ensuring a particular level of the VM. If you want to turn off this behavior to test whether your -XX options are valid, use the -XX:-IgnoreUnrecognizedXXColonOptions option. For options that take a <size> parameter, add a suffix to the size value: \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , or Xmx16384k on the command line.","title":"Using -XX options"},{"location":"xx_jvm_commands/#using-xx-command-line-options","text":"Java\u2122 VM command-line options that are specified with -XX: are not checked for validity. If the VM does not recognize the option, the option is ignored. These options can therefore be used across different VM versions without ensuring a particular level of the VM. If you want to turn off this behavior to test whether your -XX options are valid, use the -XX:-IgnoreUnrecognizedXXColonOptions option. For options that take a <size> parameter, add a suffix to the size value: \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , or Xmx16384k on the command line.","title":"Using -XX command-line options"},{"location":"xxactiveprocessorcount/","text":"-XX:ActiveProcessorCount This Hotspot option is recognized by OpenJ9 for compatibility. Use this option to override the number of CPUs that the VM automatically detects and uses when creating threads for various subsystems. Syntax -XX:ActiveProcessorCount=<n> Where <n> is the number of CPUs. Setting Value Default <n> 1 or greater There is no default value. This option is not enabled by default. If set to 0 , there is no effect. When you set this option the following line in a Java dump file is updated to indicate the number of CPUs specified: 2CIACTIVECPU Active CPUs If this option is not set, the value for this line is 0 Active CPUs.","title":"-XXActiveProcessorCount"},{"location":"xxactiveprocessorcount/#-xxactiveprocessorcount","text":"This Hotspot option is recognized by OpenJ9 for compatibility. Use this option to override the number of CPUs that the VM automatically detects and uses when creating threads for various subsystems.","title":"-XX:ActiveProcessorCount"},{"location":"xxactiveprocessorcount/#syntax","text":"-XX:ActiveProcessorCount=<n> Where <n> is the number of CPUs. Setting Value Default <n> 1 or greater There is no default value. This option is not enabled by default. If set to 0 , there is no effect. When you set this option the following line in a Java dump file is updated to indicate the number of CPUs specified: 2CIACTIVECPU Active CPUs If this option is not set, the value for this line is 0 Active CPUs.","title":"Syntax"},{"location":"xxallowvmshutdown/","text":"-XXallowvmshutdown This option is provided as a workaround for applications that cannot shut down cleanly, as described in APAR IZ59734 . Syntax -XX:allowvmshutdown:[false|true] Setting Effect Default false Disable true Enable yes","title":"-XXallowvmshutdown"},{"location":"xxallowvmshutdown/#-xxallowvmshutdown","text":"This option is provided as a workaround for applications that cannot shut down cleanly, as described in APAR IZ59734 .","title":"-XXallowvmshutdown"},{"location":"xxallowvmshutdown/#syntax","text":"-XX:allowvmshutdown:[false|true] Setting Effect Default false Disable true Enable yes","title":"Syntax"},{"location":"xxclassrelationshipverifier/","text":"-XX:[+|-]ClassRelationshipVerifier This option enables and disables the recording of class relationships in the verifier to delay validation until triggered by class loading. Note: You cannot use this setting in conjunction with -Xfuture or -Xverify:all , which itself enables -Xfuture . Syntax -XX:[+|-]ClassRelationshipVerifier Setting Effect Default -XX:+ClassRelationshipVerifier Enable -XX:-ClassRelationshipVerifier Disable yes Explanation When enabled, this option delays validating the relationships between classes until the classes are required to be loaded during program execution. In this way, classes that are not required, are never loaded thus reducing VM startup time. A verify error is thrown if validation fails.","title":"-XX:[+|-]ClassRelationshipVerifier"},{"location":"xxclassrelationshipverifier/#-xx-classrelationshipverifier","text":"This option enables and disables the recording of class relationships in the verifier to delay validation until triggered by class loading. Note: You cannot use this setting in conjunction with -Xfuture or -Xverify:all , which itself enables -Xfuture .","title":"-XX:[+|-]ClassRelationshipVerifier"},{"location":"xxclassrelationshipverifier/#syntax","text":"-XX:[+|-]ClassRelationshipVerifier Setting Effect Default -XX:+ClassRelationshipVerifier Enable -XX:-ClassRelationshipVerifier Disable yes","title":"Syntax"},{"location":"xxclassrelationshipverifier/#explanation","text":"When enabled, this option delays validating the relationships between classes until the classes are required to be loaded during program execution. In this way, classes that are not required, are never loaded thus reducing VM startup time. A verify error is thrown if validation fails.","title":"Explanation"},{"location":"xxcodecachetotal/","text":"-XX:codecachetotal This option is an alias for the -Xcodecachetotal option. Syntax -XX:codecachetotal=<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"-XX:codecachetotal"},{"location":"xxcodecachetotal/#-xxcodecachetotal","text":"This option is an alias for the -Xcodecachetotal option.","title":"-XX:codecachetotal"},{"location":"xxcodecachetotal/#syntax","text":"-XX:codecachetotal=<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xxcompactstrings/","text":"-XX:[+|-]CompactStrings This Hotspot option is reimplemented by OpenJ9 and when enabled causes an ISO8859-1 (also known as Latin-1) character representation to be used internally for String objects, while preserving full API compatibility. This feature provides heap space savings by using an 8-bit character set internally. Most benefit is gained when the majority of the String objects that your application uses can be encoded using the ISO8859-1 character encoding. If the option is not enabled, the JIT compiler is nevertheless optimized so that although there is no saving in heap space, there is also no performance penalty. Further details are available at JEP 254: Compact Strings . Note: With OpenJ9, this option is supported on OpenJDK version 8 and later versions, whereas HotSpot only supports it from Java version 9. Syntax Setting Effect Default -XX:+CompactStrings Enable String compression -XX:-CompactStrings Disable String compression yes","title":"-XX:[+|-]CompactStrings"},{"location":"xxcompactstrings/#-xx-compactstrings","text":"This Hotspot option is reimplemented by OpenJ9 and when enabled causes an ISO8859-1 (also known as Latin-1) character representation to be used internally for String objects, while preserving full API compatibility. This feature provides heap space savings by using an 8-bit character set internally. Most benefit is gained when the majority of the String objects that your application uses can be encoded using the ISO8859-1 character encoding. If the option is not enabled, the JIT compiler is nevertheless optimized so that although there is no saving in heap space, there is also no performance penalty. Further details are available at JEP 254: Compact Strings . Note: With OpenJ9, this option is supported on OpenJDK version 8 and later versions, whereas HotSpot only supports it from Java version 9.","title":"-XX:[+|-]CompactStrings"},{"location":"xxcompactstrings/#syntax","text":"Setting Effect Default -XX:+CompactStrings Enable String compression -XX:-CompactStrings Disable String compression yes","title":"Syntax"},{"location":"xxdisableexplicitgc/","text":"-XX:[+|-]DisableExplicitGC This Hotspot option is recognized by OpenJ9 for compatibility. See \u2011Xenableexplicitgc.md / \u2011Xdisableexplicitgc for details. Syntax Setting Effect Default -XX:+DisableExplicitGC Enable GC yes -XX:-DisableExplicitGC Disable GC","title":"-XX:[+|-]DisableExplicitGC"},{"location":"xxdisableexplicitgc/#-xx-disableexplicitgc","text":"This Hotspot option is recognized by OpenJ9 for compatibility. See \u2011Xenableexplicitgc.md / \u2011Xdisableexplicitgc for details.","title":"-XX:[+|-]DisableExplicitGC"},{"location":"xxdisableexplicitgc/#syntax","text":"Setting Effect Default -XX:+DisableExplicitGC Enable GC yes -XX:-DisableExplicitGC Disable GC","title":"Syntax"},{"location":"xxdisclaimjitscratch/","text":"-XX:[+|-]DisclaimJitScratch Restriction: This option is deprecated; the option is accepted but ignored. (Linux\u00ae only) The -XX:+DisclaimJitScratch option signals to the operating system to discard temporary physical memory that is consumed by the JIT compilation threads. Syntax -XX:[+|-]DisclaimJitScratch Setting Effect Default -XX:+DisclaimJitScratch Enable -XX:-DisclaimJitScratch Disable yes Explanation Discarding temporary physical memory can reduce the physical memory reported in use by the Java\u2122 application. The physical memory that is released is available to other processes without the operating system needing to search for the least recently used frames. The -XX:-DisclaimJitScratch option turns off a previously enabled -XX:+DisclaimJitScratch option.","title":"-XX:[+|-]DisclaimJitScratch"},{"location":"xxdisclaimjitscratch/#-xx91-93disclaimjitscratch","text":"Restriction: This option is deprecated; the option is accepted but ignored. (Linux\u00ae only) The -XX:+DisclaimJitScratch option signals to the operating system to discard temporary physical memory that is consumed by the JIT compilation threads.","title":"-XX:[+|-]DisclaimJitScratch"},{"location":"xxdisclaimjitscratch/#syntax","text":"-XX:[+|-]DisclaimJitScratch Setting Effect Default -XX:+DisclaimJitScratch Enable -XX:-DisclaimJitScratch Disable yes","title":"Syntax"},{"location":"xxdisclaimjitscratch/#explanation","text":"Discarding temporary physical memory can reduce the physical memory reported in use by the Java\u2122 application. The physical memory that is released is available to other processes without the operating system needing to search for the least recently used frames. The -XX:-DisclaimJitScratch option turns off a previously enabled -XX:+DisclaimJitScratch option.","title":"Explanation"},{"location":"xxenablecpumonitor/","text":"-XX:[+|-]EnableCPUMonitor This option relates to the information about the CPU usage of thread categories that is available with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. Restriction: This option might not be supported in subsequent releases. Syntax -XX:[+|-]EnableCPUMonitor Setting Effect Default -XX:+EnableCPUMonitor Enable yes -XX:-EnableCPUMonitor Disable Explanation The -XX:+EnableCPUMonitor option enables CPU monitoring, which allows a JMX bean to track CPU usage on a per thread basis and attributes the usage against different categories. For more information, see the JvmCpuMonitorMXBean interface in the com.ibm.lang.management API documentation. To turn off CPU monitoring, set the -XX:-EnableCPUMonitor option on the command line. See also -XX:[+|-]ReduceCPUMonitorOverhead","title":"-XX:[+|-]EnableCPUMonitor"},{"location":"xxenablecpumonitor/#-xx91-93enablecpumonitor","text":"This option relates to the information about the CPU usage of thread categories that is available with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. Restriction: This option might not be supported in subsequent releases.","title":"-XX:[+|-]EnableCPUMonitor"},{"location":"xxenablecpumonitor/#syntax","text":"-XX:[+|-]EnableCPUMonitor Setting Effect Default -XX:+EnableCPUMonitor Enable yes -XX:-EnableCPUMonitor Disable","title":"Syntax"},{"location":"xxenablecpumonitor/#explanation","text":"The -XX:+EnableCPUMonitor option enables CPU monitoring, which allows a JMX bean to track CPU usage on a per thread basis and attributes the usage against different categories. For more information, see the JvmCpuMonitorMXBean interface in the com.ibm.lang.management API documentation. To turn off CPU monitoring, set the -XX:-EnableCPUMonitor option on the command line.","title":"Explanation"},{"location":"xxenablecpumonitor/#see-also","text":"-XX:[+|-]ReduceCPUMonitorOverhead","title":"See also"},{"location":"xxhandlesigxfsz/","text":"-XX:[+|-]HandleSIGXFSZ (AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae only) This option affects the handling of the operating system signal SIGXFSZ . This signal is generated when a process attempts to write to a file that causes the maximum file size ulimit to be exceeded. Syntax -XX:[+|-]HandleSIGXFSZ Setting Effect Default -XX:+HandleSIGXFSZ Enable yes -XX:-HandleSIGXFSZ Disable Explanation When enabled, the VM handles the signal SIGXFSZ and continues, without ending. When a file is written from a Java\u2122 API class that exceeds the maximum file size ulimit , an exception is raised. Log files that are created by the VM are silently truncated when they reach the maximum file size ulimit . When the option is disabled, the VM does not handle the signal SIGXFSZ . In this situation, if the maximum file size ulimit for any file is reached, the operating system ends the process with a core dump.","title":"-XX:[+|-]handleSIGXFSZ"},{"location":"xxhandlesigxfsz/#-xx91-93handlesigxfsz","text":"(AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae only) This option affects the handling of the operating system signal SIGXFSZ . This signal is generated when a process attempts to write to a file that causes the maximum file size ulimit to be exceeded.","title":"-XX:[+|-]HandleSIGXFSZ"},{"location":"xxhandlesigxfsz/#syntax","text":"-XX:[+|-]HandleSIGXFSZ Setting Effect Default -XX:+HandleSIGXFSZ Enable yes -XX:-HandleSIGXFSZ Disable","title":"Syntax"},{"location":"xxhandlesigxfsz/#explanation","text":"When enabled, the VM handles the signal SIGXFSZ and continues, without ending. When a file is written from a Java\u2122 API class that exceeds the maximum file size ulimit , an exception is raised. Log files that are created by the VM are silently truncated when they reach the maximum file size ulimit . When the option is disabled, the VM does not handle the signal SIGXFSZ . In this situation, if the maximum file size ulimit for any file is reached, the operating system ends the process with a core dump.","title":"Explanation"},{"location":"xxheapdumponoutofmemory/","text":"-XX:[+|-]HeapDumpOnOutOfMemory This Hotspot option is recognized by OpenJ9. You can use the option to to disable Java\u2122, heap, snap, and system dumps on out-of-memory conditions, which are enabled by default. Syntax -XX:[+|-]HeapDumpOnOutOfMemory Setting Effect Default -XX:+HeapDumpOnOutOfMemory Enable yes -XX:-HeapDumpOnOutOfMemory Disable","title":"-XX:[+|-]HeapDumpOnOutOfMemory"},{"location":"xxheapdumponoutofmemory/#-xx91-93heapdumponoutofmemory","text":"This Hotspot option is recognized by OpenJ9. You can use the option to to disable Java\u2122, heap, snap, and system dumps on out-of-memory conditions, which are enabled by default.","title":"-XX:[+|-]HeapDumpOnOutOfMemory"},{"location":"xxheapdumponoutofmemory/#syntax","text":"-XX:[+|-]HeapDumpOnOutOfMemory Setting Effect Default -XX:+HeapDumpOnOutOfMemory Enable yes -XX:-HeapDumpOnOutOfMemory Disable","title":"Syntax"},{"location":"xxheapdumppath/","text":"-XX:HeapDumpPath This Hotspot option is recognized by OpenJ9 for compatibility, and you can use it as an alias for -Xdump:directory=<path> . This option sets the directory for all VM dumps including heap dumps, Java\u2122 dumps, and system dumps. Syntax -XX:HeapDumpPath=<path> where <path> is the directory to which all dump types are written. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents.","title":"-XX:HeapDumpPath"},{"location":"xxheapdumppath/#-xxheapdumppath","text":"This Hotspot option is recognized by OpenJ9 for compatibility, and you can use it as an alias for -Xdump:directory=<path> . This option sets the directory for all VM dumps including heap dumps, Java\u2122 dumps, and system dumps.","title":"-XX:HeapDumpPath"},{"location":"xxheapdumppath/#syntax","text":"-XX:HeapDumpPath=<path> where <path> is the directory to which all dump types are written. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents.","title":"Syntax"},{"location":"xxheapmanagementmxbeancompatibility/","text":"-XX:[+|-]HeapManagementMXBeanCompatibility The MXBean interface now reports more detailed information about memory pools and garbage collectors for a garbage collection policy. In addition, the names of memory pools and garbage collectors are changed to match the naming convention that is used for verbose garbage collection logging. This option provides compatibility with earlier versions of the VM. Syntax -XX:[+|-]HeapManagementMXBeanCompatibility Setting Effect Default -XX:+HeapManagementMXBeanCompatibility Enable -XX:-HeapManagementMXBeanCompatibility Disable yes Setting -XX:+HeapManagementMXBeanCompatibility on the command line turns on compatibility with earlier versions of the VM. Information about memory pools and garbage collectors are reported in the older format. When compatibility is turned off, the VM reports more detailed information and matches the naming of memory pools and garbage collectors to the naming convention that is used for verbose garbage collection logging. Explanation The additional information that is available from the MXBean interface for later versions is shown in the following table: Garbage collection policy MemoryPool names GarbageCollector names gencon nursery-allocate, nursery-survivor, tenured-LOA, tenured-SOA, tenured scavenge, global optthruput or optavgpause tenured-LOA, tenured-SOA, tenured global balanced balanced-reserved, balanced-eden, balanced-survivor, balanced-old partial gc, global garbage collect metronome JavaHeap global The MemoryPoolMXBean API reports values for 4 detailed memory pools instead of a single value for the overall Java\u2122 heap. In some cases the total sum of the 4 pools is more than the maximum heap size. This irregularity can be caused if data for each pool is collected between garbage collection cycles, where objects have been moved or reclaimed. If you want to collect memory usage data that is synchronized across the memory pools, use the GarbageCollectionNotificationInfo or GarbageCollectorMXBean.getLastGcInfo extensions. Earlier releases included only the following names: MemoryPool pool name: Java heap GarbageCollector name: Copy and MarkSweepCompact . See also Verbose garbage collection logging . For more information about IBM\u00ae MXBeans, see the com.ibm.lang.management API documentation.","title":"-XX:[+|-]HeapManagementMXBeanCompatibility"},{"location":"xxheapmanagementmxbeancompatibility/#-xx91-93heapmanagementmxbeancompatibility","text":"The MXBean interface now reports more detailed information about memory pools and garbage collectors for a garbage collection policy. In addition, the names of memory pools and garbage collectors are changed to match the naming convention that is used for verbose garbage collection logging. This option provides compatibility with earlier versions of the VM.","title":"-XX:[+|-]HeapManagementMXBeanCompatibility"},{"location":"xxheapmanagementmxbeancompatibility/#syntax","text":"-XX:[+|-]HeapManagementMXBeanCompatibility Setting Effect Default -XX:+HeapManagementMXBeanCompatibility Enable -XX:-HeapManagementMXBeanCompatibility Disable yes Setting -XX:+HeapManagementMXBeanCompatibility on the command line turns on compatibility with earlier versions of the VM. Information about memory pools and garbage collectors are reported in the older format. When compatibility is turned off, the VM reports more detailed information and matches the naming of memory pools and garbage collectors to the naming convention that is used for verbose garbage collection logging.","title":"Syntax"},{"location":"xxheapmanagementmxbeancompatibility/#explanation","text":"The additional information that is available from the MXBean interface for later versions is shown in the following table: Garbage collection policy MemoryPool names GarbageCollector names gencon nursery-allocate, nursery-survivor, tenured-LOA, tenured-SOA, tenured scavenge, global optthruput or optavgpause tenured-LOA, tenured-SOA, tenured global balanced balanced-reserved, balanced-eden, balanced-survivor, balanced-old partial gc, global garbage collect metronome JavaHeap global The MemoryPoolMXBean API reports values for 4 detailed memory pools instead of a single value for the overall Java\u2122 heap. In some cases the total sum of the 4 pools is more than the maximum heap size. This irregularity can be caused if data for each pool is collected between garbage collection cycles, where objects have been moved or reclaimed. If you want to collect memory usage data that is synchronized across the memory pools, use the GarbageCollectionNotificationInfo or GarbageCollectorMXBean.getLastGcInfo extensions. Earlier releases included only the following names: MemoryPool pool name: Java heap GarbageCollector name: Copy and MarkSweepCompact .","title":"Explanation"},{"location":"xxheapmanagementmxbeancompatibility/#see-also","text":"Verbose garbage collection logging . For more information about IBM\u00ae MXBeans, see the com.ibm.lang.management API documentation.","title":"See also"},{"location":"xxidletuningcompactonidle/","text":"-XX:[+|-]IdleTuningCompactOnIdle (Linux\u00ae only) This option controls garbage collection processing with compaction when the state of the OpenJ9 VM is set to idle. Restrictions: This option was deprecated in release 0.15.0 and will be removed in the future. This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. This option is not effective if XX:+IdleTuningGcOnIdle is not specified. Syntax -XX:[+|-]IdleTuningCompactOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningCompactOnIdle Enable yes -XX:-IdleTuningCompactOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a container. As indicated in the table, when the VM is running in a container and the state is set to idle, the VM attempts to compact the object heap following a garbage collection cycle. The garbage collection cycle is controlled by the -XX:+IdleTuningGcOnIdle option, which is also enabled by default when the OpenJ9 VM is running inside a container. If your application is not running in a container and you want compaction to be attempted every time idle GC happens as part of the idle-tuning process, set the -XX:+IdleTuningCompactOnIdle option on the command line when you start your application. The -XX:+IdleTuningCompactOnIdle option can be used with the -XX:+IdleTuningMinIdleWaitTime , which controls the amount of time that the VM must be idle before an idle state is set. If a value for the -XX:+IdleTuningMinIdleWaitTime option is not explicitly specified, the VM sets a default value of 180 seconds. See also -XX:IdleTuningMinFreeHeapOnIdle -XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle","title":"-XX:[+|-]IdleTuningCompactOnIdle"},{"location":"xxidletuningcompactonidle/#-xx91-93idletuningcompactonidle","text":"(Linux\u00ae only) This option controls garbage collection processing with compaction when the state of the OpenJ9 VM is set to idle. Restrictions: This option was deprecated in release 0.15.0 and will be removed in the future. This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. This option is not effective if XX:+IdleTuningGcOnIdle is not specified.","title":"-XX:[+|-]IdleTuningCompactOnIdle"},{"location":"xxidletuningcompactonidle/#syntax","text":"-XX:[+|-]IdleTuningCompactOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningCompactOnIdle Enable yes -XX:-IdleTuningCompactOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a container. As indicated in the table, when the VM is running in a container and the state is set to idle, the VM attempts to compact the object heap following a garbage collection cycle. The garbage collection cycle is controlled by the -XX:+IdleTuningGcOnIdle option, which is also enabled by default when the OpenJ9 VM is running inside a container. If your application is not running in a container and you want compaction to be attempted every time idle GC happens as part of the idle-tuning process, set the -XX:+IdleTuningCompactOnIdle option on the command line when you start your application. The -XX:+IdleTuningCompactOnIdle option can be used with the -XX:+IdleTuningMinIdleWaitTime , which controls the amount of time that the VM must be idle before an idle state is set. If a value for the -XX:+IdleTuningMinIdleWaitTime option is not explicitly specified, the VM sets a default value of 180 seconds.","title":"Syntax"},{"location":"xxidletuningcompactonidle/#see-also","text":"-XX:IdleTuningMinFreeHeapOnIdle -XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle","title":"See also"},{"location":"xxidletuninggconidle/","text":"-XX:[+|-]IdleTuningGcOnIdle (Linux\u00ae only) This option controls whether a garbage collection cycle takes place when the state of the OpenJ9 VM is set to idle. Compaction of the heap is also attempted during the idle GC when certain triggers are met. Restrictions: This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. Syntax -XX:[+|-]IdleTuningGcOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningGcOnIdle Enable yes -XX:-IdleTuningGcOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a docker container. As indicated in the table, when the VM is running in a container and the state is set to idle, this option causes the VM to release free memory pages in the object heap without resizing the Java\u2122 heap and attempts to compact the heap after the garbage collection cycle if certain heuristics are triggered. The pages are reclaimed by the operating system, which reduces the physical memory footprint of the VM. If your application is not running in a container and you want to enable idle-tuning, set the -XX:+IdleTuningGcOnIdle option on the command line when you start your application. When enabled, the -XX:+IdleTuningGcOnIdle option is used with the -XX:IdleTuningMinIdleWaitTime and -XX:IdleTuningMinFreeHeapOnIdle options. If values for these options are not explicitly specified, the VM sets the following defaults: -XX:IdleTuningMinIdleWaitTime =180 -XX:IdleTuningMinFreeHeapOnIdle =0 See also -XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"-XX:[+|-]IdleTuningGcOnIdle"},{"location":"xxidletuninggconidle/#-xx91-93idletuninggconidle","text":"(Linux\u00ae only) This option controls whether a garbage collection cycle takes place when the state of the OpenJ9 VM is set to idle. Compaction of the heap is also attempted during the idle GC when certain triggers are met. Restrictions: This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages.","title":"-XX:[+|-]IdleTuningGcOnIdle"},{"location":"xxidletuninggconidle/#syntax","text":"-XX:[+|-]IdleTuningGcOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningGcOnIdle Enable yes -XX:-IdleTuningGcOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a docker container. As indicated in the table, when the VM is running in a container and the state is set to idle, this option causes the VM to release free memory pages in the object heap without resizing the Java\u2122 heap and attempts to compact the heap after the garbage collection cycle if certain heuristics are triggered. The pages are reclaimed by the operating system, which reduces the physical memory footprint of the VM. If your application is not running in a container and you want to enable idle-tuning, set the -XX:+IdleTuningGcOnIdle option on the command line when you start your application. When enabled, the -XX:+IdleTuningGcOnIdle option is used with the -XX:IdleTuningMinIdleWaitTime and -XX:IdleTuningMinFreeHeapOnIdle options. If values for these options are not explicitly specified, the VM sets the following defaults: -XX:IdleTuningMinIdleWaitTime =180 -XX:IdleTuningMinFreeHeapOnIdle =0","title":"Syntax"},{"location":"xxidletuninggconidle/#see-also","text":"-XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"See also"},{"location":"xxidletuningminfreeheaponidle/","text":"-XX:IdleTuningMinFreeHeapOnIdle (Linux\u00ae only) This option controls the percentage of free memory pages in the object heap that can be released when the OpenJ9 VM is in an idle state. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. Syntax -XX:IdleTuningMinFreeHeapOnIdle=<percentage> Setting Value Default <percentage> [0 - 100] 0 When used with -XX:+IdleTuningGcOnIdle , this option can be used to place an upper bound on the percentage of free memory pages in the object heap that can be released when the VM is in an idle state. If -XX:IdleTuningMinFreeHeapOnIdle is not specified, the VM uses a default value of 0. Example If you set -XX:IdleTuningMinFreeHeapOnIdle=10 , no more than 90% of the free memory pages in the object heap can be released by the VM when it is in an idle state. See also -XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"-XX:IdleTuningMinFreeHeapOnIdle"},{"location":"xxidletuningminfreeheaponidle/#-xxidletuningminfreeheaponidle","text":"(Linux\u00ae only) This option controls the percentage of free memory pages in the object heap that can be released when the OpenJ9 VM is in an idle state. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages.","title":"-XX:IdleTuningMinFreeHeapOnIdle"},{"location":"xxidletuningminfreeheaponidle/#syntax","text":"-XX:IdleTuningMinFreeHeapOnIdle=<percentage> Setting Value Default <percentage> [0 - 100] 0 When used with -XX:+IdleTuningGcOnIdle , this option can be used to place an upper bound on the percentage of free memory pages in the object heap that can be released when the VM is in an idle state. If -XX:IdleTuningMinFreeHeapOnIdle is not specified, the VM uses a default value of 0.","title":"Syntax"},{"location":"xxidletuningminfreeheaponidle/#example","text":"If you set -XX:IdleTuningMinFreeHeapOnIdle=10 , no more than 90% of the free memory pages in the object heap can be released by the VM when it is in an idle state.","title":"Example"},{"location":"xxidletuningminfreeheaponidle/#see-also","text":"-XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"See also"},{"location":"xxidletuningminidlewaittime/","text":"-XX:IdleTuningMinIdleWaitTime (Linux\u00ae only) When the OpenJ9 VM is idle, this option controls the minimum length of time that the VM must be idle before the state of the VM is set to idle. When the state changes to idle, a garbage collection cycle runs, the object heap is compacted, and free memory pages are released back to the operating system, which reduces the footprint of the VM. Garbage collection and compaction are controlled by the -XX:+IdleTuningGcOnIdle and -XX:+IdleTuningCompactOnIdle options, which are enabled by default when the OpenJ9 VM is running inside a docker container. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. Syntax -XX:IdleTuningMinIdleWaitTime=<secs> Setting Value Default Default when running in a docker container <secs> [0 or greater] 0 180 The value used for <secs> specifies the minimum length of time in seconds that the VM is idle before the state is set to idle. Idle tuning is enabled by default when the OpenJ9 VM is running in a docker container and the VM is detected as idle for 180 seconds. Setting the value to 0 disables this feature, which causes the following idle tuning options to have no effect: -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle See also -XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"-XX:IdleTuningMinIdleWaitTime"},{"location":"xxidletuningminidlewaittime/#-xxidletuningminidlewaittime","text":"(Linux\u00ae only) When the OpenJ9 VM is idle, this option controls the minimum length of time that the VM must be idle before the state of the VM is set to idle. When the state changes to idle, a garbage collection cycle runs, the object heap is compacted, and free memory pages are released back to the operating system, which reduces the footprint of the VM. Garbage collection and compaction are controlled by the -XX:+IdleTuningGcOnIdle and -XX:+IdleTuningCompactOnIdle options, which are enabled by default when the OpenJ9 VM is running inside a docker container. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages.","title":"-XX:IdleTuningMinIdleWaitTime"},{"location":"xxidletuningminidlewaittime/#syntax","text":"-XX:IdleTuningMinIdleWaitTime=<secs> Setting Value Default Default when running in a docker container <secs> [0 or greater] 0 180 The value used for <secs> specifies the minimum length of time in seconds that the VM is idle before the state is set to idle. Idle tuning is enabled by default when the OpenJ9 VM is running in a docker container and the VM is detected as idle for 180 seconds. Setting the value to 0 disables this feature, which causes the following idle tuning options to have no effect: -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle","title":"Syntax"},{"location":"xxidletuningminidlewaittime/#see-also","text":"-XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"See also"},{"location":"xxignoreunrecognizedvmoptions/","text":"-XX:[+|-]IgnoreUnrecognizedVMOptions This Oracle option affects the behavior of the Hotspot JVM when it finds an unrecognized top-level option at startup. This option is implemented in the OpenJ9 VM for compatibility. Syntax -XX:[+|-]IgnoreUnrecognizedVMOptions Setting Effect Default -XX:+IgnoreUnrecognizedVMOptions Enable -XX:-IgnoreUnrecognizedVMOptions Disable yes","title":"-XX:[+|-]IgnoreUnrecognizedVMOptions"},{"location":"xxignoreunrecognizedvmoptions/#-xx91-93ignoreunrecognizedvmoptions","text":"This Oracle option affects the behavior of the Hotspot JVM when it finds an unrecognized top-level option at startup. This option is implemented in the OpenJ9 VM for compatibility.","title":"-XX:[+|-]IgnoreUnrecognizedVMOptions"},{"location":"xxignoreunrecognizedvmoptions/#syntax","text":"-XX:[+|-]IgnoreUnrecognizedVMOptions Setting Effect Default -XX:+IgnoreUnrecognizedVMOptions Enable -XX:-IgnoreUnrecognizedVMOptions Disable yes","title":"Syntax"},{"location":"xxignoreunrecognizedxxcolonoptions/","text":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions By default, any -XX: options that you specify on the command line are ignored if they are not recognized, which prevents an application failing to start. However, if you want to determine whether any of your -XX: options are unrecognized, you can turn off the behavior with this option. You might want to do this, for example, if you are switching to OpenJ9 from an alternative VM implementation where you are using -XX: options to tune the runtime environment. Syntax -XX:[+|-]IgnoreUnrecognizedXXColonOptions Setting Effect Default -XX:+IgnoreUnrecognizedXXColonOptions Enable yes -XX:-IgnoreUnrecognizedXXColonOptions Disable When you specify -XX:-IgnoreUnrecognizedXXColonOptions , if you also specify a -XX: option that is not recognized, that option is reported and the VM does not start. For example: JVMJ9VM007E Command-line option unrecognised: -XX:InvalidOption Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.","title":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions"},{"location":"xxignoreunrecognizedxxcolonoptions/#-xx91-93ignoreunrecognizedxxcolonoptions","text":"By default, any -XX: options that you specify on the command line are ignored if they are not recognized, which prevents an application failing to start. However, if you want to determine whether any of your -XX: options are unrecognized, you can turn off the behavior with this option. You might want to do this, for example, if you are switching to OpenJ9 from an alternative VM implementation where you are using -XX: options to tune the runtime environment.","title":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions"},{"location":"xxignoreunrecognizedxxcolonoptions/#syntax","text":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions Setting Effect Default -XX:+IgnoreUnrecognizedXXColonOptions Enable yes -XX:-IgnoreUnrecognizedXXColonOptions Disable When you specify -XX:-IgnoreUnrecognizedXXColonOptions , if you also specify a -XX: option that is not recognized, that option is reported and the VM does not start. For example: JVMJ9VM007E Command-line option unrecognised: -XX:InvalidOption Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.","title":"Syntax"},{"location":"xxinitialheapsize/","text":"-XX:InitialHeapSize / -XX:MaxHeapSize These Hotspot options for specifying heap size are recognized by OpenJ9 for compatibility. See -Xms / -Xmx for details. Syntax Setting Effect -XX:InitialHeapSize<size> Set initial heap size -XX:MaxHeapSize<size> Set maximum heap size","title":"-XX:MaxHeapSize"},{"location":"xxinitialheapsize/#-xxinitialheapsize-xxmaxheapsize","text":"These Hotspot options for specifying heap size are recognized by OpenJ9 for compatibility. See -Xms / -Xmx for details.","title":"-XX:InitialHeapSize / -XX:MaxHeapSize"},{"location":"xxinitialheapsize/#syntax","text":"Setting Effect -XX:InitialHeapSize<size> Set initial heap size -XX:MaxHeapSize<size> Set maximum heap size","title":"Syntax"},{"location":"xxinitialrampercentage/","text":"-XX:InitialRAMPercentage / -XX:MaxRAMPercentage These Oracle Hotspot options can be used to specify the initial and maximum size of the Java heap as a percentage of the total memory available to the VM. The options are recognized by OpenJ9 and provided for compatibility. Syntax Setting Effect -XX:InitialRAMPercentage=N Set initial heap size as a percentage of total memory -XX:MaxRAMPercentage=N Set maximum heap size as a percentage of total memory Where N is a value between 0 and 100, which can be of type \"double\". For example, 12.3456. Note: If you set a value for -Xms , these options are ignored. If your application is running in a container and you have specified -XX:+UseContainerSupport , both the default heap size for containers, the -XX:InitialRAMPercentage option, and the -XX:MaxRAMPercentage option are based on the available container memory.","title":"-XX:MaxRAMPercentage"},{"location":"xxinitialrampercentage/#-xxinitialrampercentage-xxmaxrampercentage","text":"These Oracle Hotspot options can be used to specify the initial and maximum size of the Java heap as a percentage of the total memory available to the VM. The options are recognized by OpenJ9 and provided for compatibility.","title":"-XX:InitialRAMPercentage / -XX:MaxRAMPercentage"},{"location":"xxinitialrampercentage/#syntax","text":"Setting Effect -XX:InitialRAMPercentage=N Set initial heap size as a percentage of total memory -XX:MaxRAMPercentage=N Set maximum heap size as a percentage of total memory Where N is a value between 0 and 100, which can be of type \"double\". For example, 12.3456. Note: If you set a value for -Xms , these options are ignored. If your application is running in a container and you have specified -XX:+UseContainerSupport , both the default heap size for containers, the -XX:InitialRAMPercentage option, and the -XX:MaxRAMPercentage option are based on the available container memory.","title":"Syntax"},{"location":"xxinterleavememory/","text":"-XX:[+|-]InterleaveMemory (AIX\u00ae, Linux\u00ae, and Windows\u2122 only, but not Linux on IBM Z\u00ae) Use the -XX:+InterleaveMemory option to enable the interleaving of allocated memory across NUMA nodes. Syntax -XX:[+|-]InterleaveMemory Setting Effect Default -XX:+InterleaveMemory Enable -XX:-InterleaveMemory Disable yes","title":"-XX:[+|-]InterleaveMemory"},{"location":"xxinterleavememory/#-xx91-93interleavememory","text":"(AIX\u00ae, Linux\u00ae, and Windows\u2122 only, but not Linux on IBM Z\u00ae) Use the -XX:+InterleaveMemory option to enable the interleaving of allocated memory across NUMA nodes.","title":"-XX:[+|-]InterleaveMemory"},{"location":"xxinterleavememory/#syntax","text":"-XX:[+|-]InterleaveMemory Setting Effect Default -XX:+InterleaveMemory Enable -XX:-InterleaveMemory Disable yes","title":"Syntax"},{"location":"xxjitinlinewatches/","text":"-XX:[+|-]JITInlineWatches This option controls JIT operations that relate to JVMTI watched fields. Syntax -XX:[+|-]JITInlineWatches Setting Effect Default -XX:+JITInlineWatches Enable yes -XX:-JITInlineWatches Disable This option enables performance improvements relating to JVMTI watched fields.","title":"-XX:[+|-]JITInlineWatches"},{"location":"xxjitinlinewatches/#-xx91-93jitinlinewatches","text":"This option controls JIT operations that relate to JVMTI watched fields.","title":"-XX:[+|-]JITInlineWatches"},{"location":"xxjitinlinewatches/#syntax","text":"-XX:[+|-]JITInlineWatches Setting Effect Default -XX:+JITInlineWatches Enable yes -XX:-JITInlineWatches Disable This option enables performance improvements relating to JVMTI watched fields.","title":"Syntax"},{"location":"xxlazysymbolresolution/","text":"-XX:[+|-]LazySymbolResolution (Linux\u00ae and macOS\u00ae only) This option affects the timing of symbol resolution for functions in user native libraries. Syntax -XX:[+|-]LazySymbolResolution Setting Effect Default -XX:+LazySymbolResolution Enable yes -XX:-LazySymbolResolution Disable Explanation Enabling this option forces the VM to delay symbol resolution for each function in a user native library, until the function is called. The -XX:-LazySymbolResolution option forces the VM to immediately resolve symbols for all functions in a user native library when the library is loaded. These options apply only to functions; variable symbols are always resolved immediately when loaded. If you attempt to use these options on an operating system other than Linux or macOS, the options are accepted, but ignored.","title":"-XX:[+|-]LazySymbolResolution"},{"location":"xxlazysymbolresolution/#-xx91-93lazysymbolresolution","text":"(Linux\u00ae and macOS\u00ae only) This option affects the timing of symbol resolution for functions in user native libraries.","title":"-XX:[+|-]LazySymbolResolution"},{"location":"xxlazysymbolresolution/#syntax","text":"-XX:[+|-]LazySymbolResolution Setting Effect Default -XX:+LazySymbolResolution Enable yes -XX:-LazySymbolResolution Disable","title":"Syntax"},{"location":"xxlazysymbolresolution/#explanation","text":"Enabling this option forces the VM to delay symbol resolution for each function in a user native library, until the function is called. The -XX:-LazySymbolResolution option forces the VM to immediately resolve symbols for all functions in a user native library when the library is loaded. These options apply only to functions; variable symbols are always resolved immediately when loaded. If you attempt to use these options on an operating system other than Linux or macOS, the options are accepted, but ignored.","title":"Explanation"},{"location":"xxmaxdirectmemorysize/","text":"-XX:MaxDirectMemorySize This Oracle Hotspot option sets a limit on the amount of memory that can be reserved for all Direct Byte Buffers. Syntax -XX:MaxDirectMemorySize=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] Depends on maximum heap size The value you choose is the limit on memory that can be reserved for all Direct Byte Buffers. If a value is set for this option, the sum of all Direct Byte Buffer sizes cannot exceed the limit. After the limit is reached, a new Direct Byte Buffer can be allocated only when enough old buffers are freed to provide enough space to allocate the new buffer. By default, the VM limits the amount of heap memory used for Direct Byte Buffers to approximately 85% of the maximum heap size.","title":"-XX:MaxDirectMemorySize"},{"location":"xxmaxdirectmemorysize/#-xxmaxdirectmemorysize","text":"This Oracle Hotspot option sets a limit on the amount of memory that can be reserved for all Direct Byte Buffers.","title":"-XX:MaxDirectMemorySize"},{"location":"xxmaxdirectmemorysize/#syntax","text":"-XX:MaxDirectMemorySize=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] Depends on maximum heap size The value you choose is the limit on memory that can be reserved for all Direct Byte Buffers. If a value is set for this option, the sum of all Direct Byte Buffer sizes cannot exceed the limit. After the limit is reached, a new Direct Byte Buffer can be allocated only when enough old buffers are freed to provide enough space to allocate the new buffer. By default, the VM limits the amount of heap memory used for Direct Byte Buffers to approximately 85% of the maximum heap size.","title":"Syntax"},{"location":"xxnosuballoc32bitmem/","text":"-XXnosuballoc32bitmem (z/OS\u00ae only) When compressed references are used with a 64-bit OpenJ9 VM on z/OS\u00ae, this option forces the VM to use 31-bit memory allocation functions provided by z/OS. Syntax -XXnosuballoc32bitmem Setting Effect Default -XXnosuballoc32bitmem Enable No setting Disable yes Explanation This option is provided as a workaround for customers who need to use fewer pages of 31-bit virtual storage per VM invocation. Using this option might result in a small increase in the number of frames of central storage used by the VM. However, the option frees 31-bit pages for use by native code or other applications in the same address space. If this option is not specified, the VM uses an allocation strategy for 31-bit memory that reserves a region of 31-bit virtual memory.","title":"-XXnosuballoc32bitmem"},{"location":"xxnosuballoc32bitmem/#-xxnosuballoc32bitmem","text":"(z/OS\u00ae only) When compressed references are used with a 64-bit OpenJ9 VM on z/OS\u00ae, this option forces the VM to use 31-bit memory allocation functions provided by z/OS.","title":"-XXnosuballoc32bitmem"},{"location":"xxnosuballoc32bitmem/#syntax","text":"-XXnosuballoc32bitmem Setting Effect Default -XXnosuballoc32bitmem Enable No setting Disable yes","title":"Syntax"},{"location":"xxnosuballoc32bitmem/#explanation","text":"This option is provided as a workaround for customers who need to use fewer pages of 31-bit virtual storage per VM invocation. Using this option might result in a small increase in the number of frames of central storage used by the VM. However, the option frees 31-bit pages for use by native code or other applications in the same address space. If this option is not specified, the VM uses an allocation strategy for 31-bit memory that reserves a region of 31-bit virtual memory.","title":"Explanation"},{"location":"xxonoutofmemoryerror/","text":"-XX:OnOutOfMemoryError You can use this Oracle Hotspot option to run commands when a java.lang.OutOfMemoryError is thrown. This option is recognized by OpenJ9 and provided for compatibility. Syntax -XX:OnOutOfMemoryError=\"<command_string>\" where <command_string> is a command or list of commands to run when a java.lang.OutOfMemoryError occurs. For example, the following command specifies that the java -version command is run if the Test application throws a java.lang.OutOfMemoryError exception: java -XX:OnOutOfMemoryError=\"java -version\" Test If you want to run multiple commands, use semicolons to separate them within <command_string> . For example: -XX:OnOutOfMemoryError=\"<java_path> <java_program>; cat file.txt\" The -XX:OnOutOfMemoryError option is equivalent to the following -Xdump option: -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec=<command_string> For more information, see -Xdump .","title":"-XX:OnOutOfMemoryError"},{"location":"xxonoutofmemoryerror/#-xxonoutofmemoryerror","text":"You can use this Oracle Hotspot option to run commands when a java.lang.OutOfMemoryError is thrown. This option is recognized by OpenJ9 and provided for compatibility.","title":"-XX:OnOutOfMemoryError"},{"location":"xxonoutofmemoryerror/#syntax","text":"-XX:OnOutOfMemoryError=\"<command_string>\" where <command_string> is a command or list of commands to run when a java.lang.OutOfMemoryError occurs. For example, the following command specifies that the java -version command is run if the Test application throws a java.lang.OutOfMemoryError exception: java -XX:OnOutOfMemoryError=\"java -version\" Test If you want to run multiple commands, use semicolons to separate them within <command_string> . For example: -XX:OnOutOfMemoryError=\"<java_path> <java_program>; cat file.txt\" The -XX:OnOutOfMemoryError option is equivalent to the following -Xdump option: -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec=<command_string> For more information, see -Xdump .","title":"Syntax"},{"location":"xxpagealigndirectmemory/","text":"-XX:[+|-]PageAlignDirectMemory This Oracle Hotspot option affects the alignment of direct byte buffer allocation and is implemented by the OpenJ9 VM for compatibility. Syntax -XX:[+|-]PageAlignDirectMemory Setting Effect Default -XX:+PageAlignDirectMemory Enable -XX:-PageAlignDirectMemory Disable yes As discussed in the Oracle documentation, before Java\u2122 SE 7, direct buffers that were allocated using java.nio.ByteBuffer.allocateDirect(int) were aligned on a page boundary. This behavior changed in Java SE 7 and the -XX:+PageAlignDirectMemory option is provided to revert to the previous behavior. For more information about the changes, see RFE 4837564 , which was introduced in the Java SE 7 release notes .","title":"-XX:[+|-]PageAlignDirectMemory"},{"location":"xxpagealigndirectmemory/#-xx91-93pagealigndirectmemory","text":"This Oracle Hotspot option affects the alignment of direct byte buffer allocation and is implemented by the OpenJ9 VM for compatibility.","title":"-XX:[+|-]PageAlignDirectMemory"},{"location":"xxpagealigndirectmemory/#syntax","text":"-XX:[+|-]PageAlignDirectMemory Setting Effect Default -XX:+PageAlignDirectMemory Enable -XX:-PageAlignDirectMemory Disable yes As discussed in the Oracle documentation, before Java\u2122 SE 7, direct buffers that were allocated using java.nio.ByteBuffer.allocateDirect(int) were aligned on a page boundary. This behavior changed in Java SE 7 and the -XX:+PageAlignDirectMemory option is provided to revert to the previous behavior. For more information about the changes, see RFE 4837564 , which was introduced in the Java SE 7 release notes .","title":"Syntax"},{"location":"xxpositiveidentityhash/","text":"-XX:[+|-]PositiveIdentityHash OpenJ9 allows both positive and negative identity hashcodes ( System.identityHashCode / Object.hashCode ). This is problematic for programs that incorrectly assume hashcodes can only be positive. When enabled, this option limits identity hash codes to non-negative values. Because limiting identity hash codes to non-negative values can have an impact on the performance of hash-intensive operations, this option is not enabled by default. Syntax -XX:[+|-]PositiveIdentityHash Setting Effect Default -XX:+PositiveIdentityHash Enable -XX:-PositiveIdentityHash Disable yes","title":"-XX:[+|-]PositiveIdentityHash"},{"location":"xxpositiveidentityhash/#-xx91-93positiveidentityhash","text":"OpenJ9 allows both positive and negative identity hashcodes ( System.identityHashCode / Object.hashCode ). This is problematic for programs that incorrectly assume hashcodes can only be positive. When enabled, this option limits identity hash codes to non-negative values. Because limiting identity hash codes to non-negative values can have an impact on the performance of hash-intensive operations, this option is not enabled by default.","title":"-XX:[+|-]PositiveIdentityHash"},{"location":"xxpositiveidentityhash/#syntax","text":"-XX:[+|-]PositiveIdentityHash Setting Effect Default -XX:+PositiveIdentityHash Enable -XX:-PositiveIdentityHash Disable yes","title":"Syntax"},{"location":"xxreadipinfoforras/","text":"-XX:[+|-]ReadIPInfoForRAS Use this command-line option to enable and disable network queries from being used to determine the host name and IP address for RAS (reliability, availability, and serviceability) troubleshooting purposes. Syntax -XX:[+|-]ReadIPInfoForRAS Setting Effect Default -XX:+ReadIPInfoForRAS Enable yes -XX:-ReadIPInfoForRAS Disable OpenJ9 captures the host name and IP address by default, for use in diagnosing problems. But if a nameserver cannot be contacted when a network query is made, the program will wait until the resolver times out. You can avoid this situation by using the -XX:-ReadIPInfoForRAS command-line option to prevent the query from being performed.","title":"-XX:[+|-]ReadIPInfoForRAS"},{"location":"xxreadipinfoforras/#-xx91-93readipinfoforras","text":"Use this command-line option to enable and disable network queries from being used to determine the host name and IP address for RAS (reliability, availability, and serviceability) troubleshooting purposes.","title":"-XX:[+|-]ReadIPInfoForRAS"},{"location":"xxreadipinfoforras/#syntax","text":"-XX:[+|-]ReadIPInfoForRAS Setting Effect Default -XX:+ReadIPInfoForRAS Enable yes -XX:-ReadIPInfoForRAS Disable OpenJ9 captures the host name and IP address by default, for use in diagnosing problems. But if a nameserver cannot be contacted when a network query is made, the program will wait until the resolver times out. You can avoid this situation by using the -XX:-ReadIPInfoForRAS command-line option to prevent the query from being performed.","title":"Syntax"},{"location":"xxreducecpumonitoroverhead/","text":"-XX:[+|-]ReduceCPUMonitorOverhead (AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) This option relates to the CPU usage of thread categories that can be obtained with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. This option affects the way that the VM records the amount of CPU usage of non-Garbage Collection (GC) threads that do work on behalf of GC. Most GC policies require non-GC threads to do some GC housekeeping work in proportion to the amount of memory allocation that they do. Ideally the exact amount of CPU time that the thread spends doing this housekeeping work should be accounted for in the GC thread category. However there is an overhead that is associated with maintaining the CPU usage data in the correct thread category. Restriction: This option is not supported on z/OS\u00ae. If you attempt to use this option, the following message is generated: JVMJ9VM145E -XX:-ReduceCPUMonitorOverhead is unsupported on z/OS. Error: Could not create the Java Virtual Machine. Syntax -XX:[+|-]ReduceCPUMonitorOverhead Setting Effect Default -XX:+ReduceCPUMonitorOverhead Enable yes -XX:-ReduceCPUMonitorOverhead Disable When you enable this option, the VM does not maintain information on the amount of CPU usage that non-GC threads spend in doing work on behalf of GC. If you set -XX:-ReduceCPUMonitorOverhead , the OpenJ9 VM monitors the amount of GC work that a non-GC thread does and accounts for it in the GC category. This information is made available in the com.ibm.lang.management.JvmCpuMonitorMXBean . Setting this option results in a small increase in application startup time, which varies according to platform. See also -XX:[+|-]EnableCPUMonitor","title":"-XX:[+|-]ReduceCPUMonitorOverhead"},{"location":"xxreducecpumonitoroverhead/#-xx91-93reducecpumonitoroverhead","text":"(AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) This option relates to the CPU usage of thread categories that can be obtained with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. This option affects the way that the VM records the amount of CPU usage of non-Garbage Collection (GC) threads that do work on behalf of GC. Most GC policies require non-GC threads to do some GC housekeeping work in proportion to the amount of memory allocation that they do. Ideally the exact amount of CPU time that the thread spends doing this housekeeping work should be accounted for in the GC thread category. However there is an overhead that is associated with maintaining the CPU usage data in the correct thread category. Restriction: This option is not supported on z/OS\u00ae. If you attempt to use this option, the following message is generated: JVMJ9VM145E -XX:-ReduceCPUMonitorOverhead is unsupported on z/OS. Error: Could not create the Java Virtual Machine.","title":"-XX:[+|-]ReduceCPUMonitorOverhead"},{"location":"xxreducecpumonitoroverhead/#syntax","text":"-XX:[+|-]ReduceCPUMonitorOverhead Setting Effect Default -XX:+ReduceCPUMonitorOverhead Enable yes -XX:-ReduceCPUMonitorOverhead Disable When you enable this option, the VM does not maintain information on the amount of CPU usage that non-GC threads spend in doing work on behalf of GC. If you set -XX:-ReduceCPUMonitorOverhead , the OpenJ9 VM monitors the amount of GC work that a non-GC thread does and accounts for it in the GC category. This information is made available in the com.ibm.lang.management.JvmCpuMonitorMXBean . Setting this option results in a small increase in application startup time, which varies according to platform.","title":"Syntax"},{"location":"xxreducecpumonitoroverhead/#see-also","text":"-XX:[+|-]EnableCPUMonitor","title":"See also"},{"location":"xxruntimeinstrumentation/","text":"-XX:[+|-]RuntimeInstrumentation (AIX\u00ae, Linux\u00ae, and z/OS\u00ae only) This option controls the use of the Runtime Instrumentation (RI) facility in the virtual machines that support it. The RI facility is a feature that is available in POWER8\u00ae, zEC12, and later processors that offers hardware support for collecting profiling information at run time. The process uses minimal resources. The use of the RI facility is not enabled by default. Syntax -XX:[+|-]RuntimeInstrumentation Setting Effect Default -XX:+RuntimeInstrumentation Enable -XX:-RuntimeInstrumentation Disable yes Note: On Linux, the RI facility on Power 8 and later processors uses the Performance Monitoring Unit (PMU) inside the processor. However, the PMU is also used by system profilers like oprofile or perf . Due to the current Linux kernel implementation, a user cannot reliably profile a Java\u2122 application when RI is enabled. Although this limitation might be addressed in future Linux kernels, for reliable profiling on Power systems that use Linux, the -XX:-RuntimeInstrumentation option must be used.","title":"-XX:[+|-]RuntimeInstrumentation"},{"location":"xxruntimeinstrumentation/#-xx91-93runtimeinstrumentation","text":"(AIX\u00ae, Linux\u00ae, and z/OS\u00ae only) This option controls the use of the Runtime Instrumentation (RI) facility in the virtual machines that support it. The RI facility is a feature that is available in POWER8\u00ae, zEC12, and later processors that offers hardware support for collecting profiling information at run time. The process uses minimal resources. The use of the RI facility is not enabled by default.","title":"-XX:[+|-]RuntimeInstrumentation"},{"location":"xxruntimeinstrumentation/#syntax","text":"-XX:[+|-]RuntimeInstrumentation Setting Effect Default -XX:+RuntimeInstrumentation Enable -XX:-RuntimeInstrumentation Disable yes Note: On Linux, the RI facility on Power 8 and later processors uses the Performance Monitoring Unit (PMU) inside the processor. However, the PMU is also used by system profilers like oprofile or perf . Due to the current Linux kernel implementation, a user cannot reliably profile a Java\u2122 application when RI is enabled. Although this limitation might be addressed in future Linux kernels, for reliable profiling on Power systems that use Linux, the -XX:-RuntimeInstrumentation option must be used.","title":"Syntax"},{"location":"xxsethwprefetch/","text":"-XXsetHWPrefetch (AIX\u00ae only) This option enables or disables hardware prefetch. Hardware prefetch can improve the performance of applications by prefetching memory. However, because of the workload characteristics of many Java\u2122 applications, prefetching often has an adverse effect on performance. Syntax -XXsetHWPrefetch=[none|os-default] Setting Effect Default none Disable yes os-default Enable The -XXsetHWPrefetch:none option disables hardware prefetch. Although you can disable hardware prefetch on AIX by issuing the command dscrctl -n -s 1 , this command disables hardware prefetch for all processes, and for all future processes, which might not be desirable in a mixed workload environment. The -XXsetHWPrefetch:none option allows hardware prefetch to be disabled for individual VMs. To enable hardware prefetch with the default value for the operating system, specify -XXsetHWPrefetch:os-default . Use this option only for applications that can obtain a performance gain from hardware prefetch.","title":"-XXsetHWPrefetch"},{"location":"xxsethwprefetch/#-xxsethwprefetch","text":"(AIX\u00ae only) This option enables or disables hardware prefetch. Hardware prefetch can improve the performance of applications by prefetching memory. However, because of the workload characteristics of many Java\u2122 applications, prefetching often has an adverse effect on performance.","title":"-XXsetHWPrefetch"},{"location":"xxsethwprefetch/#syntax","text":"-XXsetHWPrefetch=[none|os-default] Setting Effect Default none Disable yes os-default Enable The -XXsetHWPrefetch:none option disables hardware prefetch. Although you can disable hardware prefetch on AIX by issuing the command dscrctl -n -s 1 , this command disables hardware prefetch for all processes, and for all future processes, which might not be desirable in a mixed workload environment. The -XXsetHWPrefetch:none option allows hardware prefetch to be disabled for individual VMs. To enable hardware prefetch with the default value for the operating system, specify -XXsetHWPrefetch:os-default . Use this option only for applications that can obtain a performance gain from hardware prefetch.","title":"Syntax"},{"location":"xxshareanonymousclasses/","text":"-XX:[+|-]ShareAnonymousClasses This option enables and disables the storage of VM anonymous classes, those created by Unsafe.defineAnonymousClass , in the shared classes cache. The option is enabled by default, which means that anonymous classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance. Syntax -XX:[+|-]ShareAnonymousClasses Setting Effect Default -XX:+ShareAnonymousClasses Enable yes -XX:-ShareAnonymousClasses Disable See also AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareUnsafeClasses","title":"-XX:[+|-]ShareAnonymousClasses"},{"location":"xxshareanonymousclasses/#-xx-shareanonymousclasses","text":"This option enables and disables the storage of VM anonymous classes, those created by Unsafe.defineAnonymousClass , in the shared classes cache. The option is enabled by default, which means that anonymous classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance.","title":"-XX:[+|-]ShareAnonymousClasses"},{"location":"xxshareanonymousclasses/#syntax","text":"-XX:[+|-]ShareAnonymousClasses Setting Effect Default -XX:+ShareAnonymousClasses Enable yes -XX:-ShareAnonymousClasses Disable","title":"Syntax"},{"location":"xxshareanonymousclasses/#see-also","text":"AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareUnsafeClasses","title":"See also"},{"location":"xxshareclassesenablebci/","text":"-XX:ShareClassesDisableBCI / -XX:ShareClassesEnableBCI The option -Xshareclasses:enableBCI improves startup performance without using a modification context, when using JVMTI class modification. This suboption allows classes loaded from the shared cache to be modified using a JVMTI ClassFileLoadHook , or a java.lang.instrument agent, and prevents modified classes being stored in the shared classes cache. You can turn off this option by specifying -XX:ShareClassesDisableBCI when you start your Java\u2122 application. Syntax -XX:ShareClassesDisableBCI|ShareClassesEnableBCI Setting Effect Default -XX:ShareClassesDisableBCI Disable -XX:ShareClassesEnableBCI Enable yes These options are equivalent to -Xshareclasses:disableBCI and -Xshareclasses:enableBCI . For more information, see -Xshareclasses . See also Runtime bytecode modification","title":"-XX:ShareClassesEnableBCI"},{"location":"xxshareclassesenablebci/#-xxshareclassesdisablebci-xxshareclassesenablebci","text":"The option -Xshareclasses:enableBCI improves startup performance without using a modification context, when using JVMTI class modification. This suboption allows classes loaded from the shared cache to be modified using a JVMTI ClassFileLoadHook , or a java.lang.instrument agent, and prevents modified classes being stored in the shared classes cache. You can turn off this option by specifying -XX:ShareClassesDisableBCI when you start your Java\u2122 application.","title":"-XX:ShareClassesDisableBCI /  -XX:ShareClassesEnableBCI"},{"location":"xxshareclassesenablebci/#syntax","text":"-XX:ShareClassesDisableBCI|ShareClassesEnableBCI Setting Effect Default -XX:ShareClassesDisableBCI Disable -XX:ShareClassesEnableBCI Enable yes These options are equivalent to -Xshareclasses:disableBCI and -Xshareclasses:enableBCI . For more information, see -Xshareclasses .","title":"Syntax"},{"location":"xxshareclassesenablebci/#see-also","text":"Runtime bytecode modification","title":"See also"},{"location":"xxsharedcachehardlimit/","text":"-XX:SharedCacheHardLimit Specifies the size for a new shared class cache. Use this option together with the -Xscmx option to set actual and soft maximum size limits respectively. Syntax -XX:SharedCacheHardLimit=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] See Using -X command-line options for more information about the <size> parameter. When you use this option with the -Xscmx option, the -Xscmx option sets the soft maximum size, and the -XX:SharedCacheHardLimit option sets the actual size, of a new shared class cache. For more information, see -Xscmx . If you use this option without the -Xscmx option, the behavior is the same as using the -Xscmx option by itself; both options set the actual size of the shared class cache. For more information about cache sizes, see Cache size limits . Example The following settings, when used together, set the soft maximum size of the shared classes cache to 16 MB and the actual maximum cache size to 64 MB. -XX:SharedCacheHardLimit=64m -Xscmx16m See also -Xscmx","title":"-XX:SharedCacheHardLimit"},{"location":"xxsharedcachehardlimit/#-xxsharedcachehardlimit","text":"Specifies the size for a new shared class cache. Use this option together with the -Xscmx option to set actual and soft maximum size limits respectively.","title":"-XX:SharedCacheHardLimit"},{"location":"xxsharedcachehardlimit/#syntax","text":"-XX:SharedCacheHardLimit=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] See Using -X command-line options for more information about the <size> parameter. When you use this option with the -Xscmx option, the -Xscmx option sets the soft maximum size, and the -XX:SharedCacheHardLimit option sets the actual size, of a new shared class cache. For more information, see -Xscmx . If you use this option without the -Xscmx option, the behavior is the same as using the -Xscmx option by itself; both options set the actual size of the shared class cache. For more information about cache sizes, see Cache size limits .","title":"Syntax"},{"location":"xxsharedcachehardlimit/#example","text":"The following settings, when used together, set the soft maximum size of the shared classes cache to 16 MB and the actual maximum cache size to 64 MB. -XX:SharedCacheHardLimit=64m -Xscmx16m","title":"Example"},{"location":"xxsharedcachehardlimit/#see-also","text":"-Xscmx","title":"See also"},{"location":"xxshareunsafeclasses/","text":"-XX:[+|-]ShareUnsafeClasses This option enables and disables the storage of VM classes created through Unsafe.defineClass in the shared classes cache. The option is enabled by default, which means that unsafe classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance. Syntax -XX:[+|-]ShareUnsafeClasses Setting Effect Default -XX:[+]ShareUnsafeClasses Enable yes -XX:[-]ShareUnsafeClasses Disable See also AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareAnonymousClasses","title":"-XX:[+|-]ShareUnsafeClasses"},{"location":"xxshareunsafeclasses/#-xx-shareunsafeclasses","text":"This option enables and disables the storage of VM classes created through Unsafe.defineClass in the shared classes cache. The option is enabled by default, which means that unsafe classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance.","title":"-XX:[+|-]ShareUnsafeClasses"},{"location":"xxshareunsafeclasses/#syntax","text":"-XX:[+|-]ShareUnsafeClasses Setting Effect Default -XX:[+]ShareUnsafeClasses Enable yes -XX:[-]ShareUnsafeClasses Disable","title":"Syntax"},{"location":"xxshareunsafeclasses/#see-also","text":"AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareAnonymousClasses","title":"See also"},{"location":"xxstacktraceinthrowable/","text":"-XX:-StackTraceInThrowable This option removes stack traces from exceptions. Syntax -XX:-StackTraceInThrowable Setting Effect Default -XX:-StackTraceInThrowable Disable No While stack traces are included in exceptions by default, recording them can have a negative impact on performance. Use this option if you want to remove stack traces, although this might cause difficulties with problem determination. When this option is enabled, Throwable.getStackTrace() returns an empty array and the stack trace is displayed when an uncaught exception occurs. Thread.getStackTrace() and Thread.getAllStackTraces() are not affected by this option.","title":"-XX:-StackTraceInThrowable"},{"location":"xxstacktraceinthrowable/#-xx-stacktraceinthrowable","text":"This option removes stack traces from exceptions.","title":"-XX:-StackTraceInThrowable"},{"location":"xxstacktraceinthrowable/#syntax","text":"-XX:-StackTraceInThrowable Setting Effect Default -XX:-StackTraceInThrowable Disable No While stack traces are included in exceptions by default, recording them can have a negative impact on performance. Use this option if you want to remove stack traces, although this might cause difficulties with problem determination. When this option is enabled, Throwable.getStackTrace() returns an empty array and the stack trace is displayed when an uncaught exception occurs. Thread.getStackTrace() and Thread.getAllStackTraces() are not affected by this option.","title":"Syntax"},{"location":"xxtransparenthugepage/","text":"-XX:[+|-]TransparentHugePage (Linux\u00ae systems only (x86, POWER\u00ae, and IBM Z\u00ae) If Transparent Huge Pages (THP) is set to madvise on your system, this option, when enabled, promotes all memory allocated to huge pages. On systems without THP, or if THP is set to always or never on your system, this option is ignored. Syntax Setting Effect Default -XX:+TransparentHugePage Enable yes (x86 systems) -XX:-TransparentHugePage Disable yes (POWER and IBM Z systems)","title":"-XX:[+|-]TransparentHugePage"},{"location":"xxtransparenthugepage/#-xx-transparenthugepage","text":"(Linux\u00ae systems only (x86, POWER\u00ae, and IBM Z\u00ae) If Transparent Huge Pages (THP) is set to madvise on your system, this option, when enabled, promotes all memory allocated to huge pages. On systems without THP, or if THP is set to always or never on your system, this option is ignored.","title":"-XX:[+|-]TransparentHugePage"},{"location":"xxtransparenthugepage/#syntax","text":"Setting Effect Default -XX:+TransparentHugePage Enable yes (x86 systems) -XX:-TransparentHugePage Disable yes (POWER and IBM Z systems)","title":"Syntax"},{"location":"xxusecompressedoops/","text":"-XX:[+|-]UseCompressedOops (64-bit only) This Oracle Hotspot option enables or disables compressed references in 64-bit JVMs. The option is recognized by the OpenJ9 VM and is provided to help when porting applications from the Hotspot JVM to the OpenJ9 VM. This option might not be supported in subsequent releases. Syntax -XX:[+|-]UseCompressedOops Setting Effect Default -XX:+UseCompressedOops Enable -XX:-UseCompressedOops Disable The -XX:+UseCompressedOops option is similar to specifying -Xcompressedrefs . Compressed references are used by default when the maximum memory size for an application is set above a platform-specific value. For more information, see -Xcompressedrefs .","title":"-XX:[+|-]UseCompressedOops"},{"location":"xxusecompressedoops/#-xx91-93usecompressedoops","text":"(64-bit only) This Oracle Hotspot option enables or disables compressed references in 64-bit JVMs. The option is recognized by the OpenJ9 VM and is provided to help when porting applications from the Hotspot JVM to the OpenJ9 VM. This option might not be supported in subsequent releases.","title":"-XX:[+|-]UseCompressedOops"},{"location":"xxusecompressedoops/#syntax","text":"-XX:[+|-]UseCompressedOops Setting Effect Default -XX:+UseCompressedOops Enable -XX:-UseCompressedOops Disable The -XX:+UseCompressedOops option is similar to specifying -Xcompressedrefs . Compressed references are used by default when the maximum memory size for an application is set above a platform-specific value. For more information, see -Xcompressedrefs .","title":"Syntax"},{"location":"xxusecontainersupport/","text":"-XX:[+|-]UseContainerSupport (Linux\u00ae only) If your application is running in a container that imposes a memory limit, the VM allocates a larger fraction of memory to the Java heap. To turn off this behavior, set the -XX:-UseContainerSupport option on the command line. Syntax -XX:[+|-]UseContainerSupport Setting Effect Default -XX:-UseContainerSupport Disable -XX:+UseContainerSupport Enable yes When using container technology, applications are typically run on their own and do not need to compete for memory. The OpenJ9 VM detects when it is running inside a container that imposes a memory limit, and adjusts the maximum Java heap size appropriately. The following table shows the values that are used when -XX:+UseContainerSupport is set: Container memory limit <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512 MB Greater than 2 GB 75% <size> The default heap size for containers takes affect only when the following conditions are met: The application is running in a container environment. The memory limit for the container is set. The -XX:+UseContainerSupport option is set, which is the default behavior. To prevent the VM adjusting the maximum heap size when running in a container, set -XX:-UseContainerSupport . When -XX:MaxRAMPercentage / -XX:InitialRAMPercentage are used with -XX:+UseContainerSupport , the corresponding heap setting is determined based on the memory limit of the container. For example, to set the maximum heap size to 80% of the container memory, specify the following options: -XX:+UseContainerSupport -XX:MaxRAMPercentage=80","title":"-XX:[+|-]UseContainerSupport"},{"location":"xxusecontainersupport/#-xx-usecontainersupport","text":"(Linux\u00ae only) If your application is running in a container that imposes a memory limit, the VM allocates a larger fraction of memory to the Java heap. To turn off this behavior, set the -XX:-UseContainerSupport option on the command line.","title":"-XX:[+|-]UseContainerSupport"},{"location":"xxusecontainersupport/#syntax","text":"-XX:[+|-]UseContainerSupport Setting Effect Default -XX:-UseContainerSupport Disable -XX:+UseContainerSupport Enable yes When using container technology, applications are typically run on their own and do not need to compete for memory. The OpenJ9 VM detects when it is running inside a container that imposes a memory limit, and adjusts the maximum Java heap size appropriately. The following table shows the values that are used when -XX:+UseContainerSupport is set: Container memory limit <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512 MB Greater than 2 GB 75% <size> The default heap size for containers takes affect only when the following conditions are met: The application is running in a container environment. The memory limit for the container is set. The -XX:+UseContainerSupport option is set, which is the default behavior. To prevent the VM adjusting the maximum heap size when running in a container, set -XX:-UseContainerSupport . When -XX:MaxRAMPercentage / -XX:InitialRAMPercentage are used with -XX:+UseContainerSupport , the corresponding heap setting is determined based on the memory limit of the container. For example, to set the maximum heap size to 80% of the container memory, specify the following options: -XX:+UseContainerSupport -XX:MaxRAMPercentage=80","title":"Syntax"},{"location":"xxusegcstartuphints/","text":"-XX:[+|-]UseGCStartupHints When this option is enabled, the VM calculates, over several application restarts, an appropriate startup heap size for your application. You can therefore use this option instead of calculating and setting an -Xms value yourself. Setting an initial size for the heap that is larger than the default helps to avoid frequent garbage collections during the startup phase of an application. Syntax -XX:[+|-]UseGCStartupHints Setting Effect Default -XX:+UseGCStartupHints Enable yes -XX:-UseGCStartupHints Disable When enabled, the VM records the heap size when a startup complete event occurs, storing the value into the shared classes cache. On subsequent restarts, the garbage collector (GC) reads this value early in startup processing and expands the heap to an appropriate value. For accuracy and stability, averages are taken over a few restarts to stabilize the value used. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. You can check the value used by the garbage collector for heap expansion by inspecting verbose GC output. The following example shows heap expansion based on hints from the previous run when using the gencon policy: <heap-resize id=\"2\" type=\"expand\" space=\"nursery\" amount=\"205258752\" count=\"1\" timems=\"0.328\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.021\" /> <heap-resize id=\"3\" type=\"expand\" space=\"tenure\" amount=\"692649984\" count=\"1\" timems=\"0.326\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.022\" /> The final value stored to the shared cache is not recorded in the verbose GC output. Notes: When enabled, this option overrides any initial heap size that is specified on the command line, for example by using the -Xms option. Because the shared classes cache is used to store heap size information, this option does not work if shared classes are disabled. Restriction: This feature is not currently available with the Balanced GC policy.","title":"-XX:[+|-]UseGCStartupHints"},{"location":"xxusegcstartuphints/#-xx91-93usegcstartuphints","text":"When this option is enabled, the VM calculates, over several application restarts, an appropriate startup heap size for your application. You can therefore use this option instead of calculating and setting an -Xms value yourself. Setting an initial size for the heap that is larger than the default helps to avoid frequent garbage collections during the startup phase of an application.","title":"-XX:[+|-]UseGCStartupHints"},{"location":"xxusegcstartuphints/#syntax","text":"-XX:[+|-]UseGCStartupHints Setting Effect Default -XX:+UseGCStartupHints Enable yes -XX:-UseGCStartupHints Disable When enabled, the VM records the heap size when a startup complete event occurs, storing the value into the shared classes cache. On subsequent restarts, the garbage collector (GC) reads this value early in startup processing and expands the heap to an appropriate value. For accuracy and stability, averages are taken over a few restarts to stabilize the value used. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. You can check the value used by the garbage collector for heap expansion by inspecting verbose GC output. The following example shows heap expansion based on hints from the previous run when using the gencon policy: <heap-resize id=\"2\" type=\"expand\" space=\"nursery\" amount=\"205258752\" count=\"1\" timems=\"0.328\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.021\" /> <heap-resize id=\"3\" type=\"expand\" space=\"tenure\" amount=\"692649984\" count=\"1\" timems=\"0.326\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.022\" /> The final value stored to the shared cache is not recorded in the verbose GC output. Notes: When enabled, this option overrides any initial heap size that is specified on the command line, for example by using the -Xms option. Because the shared classes cache is used to store heap size information, this option does not work if shared classes are disabled. Restriction: This feature is not currently available with the Balanced GC policy.","title":"Syntax"},{"location":"xxusenogc/","text":"-XX:[+|-]UseNoGC The -XX:+UseNoGC option enables a garbage collection policy that expands the Java object heap in the normal way until the limit is reached, but memory is not reclaimed through garbage collection. Syntax -XX:[+|-]UseNoGC Setting Effect Default -XX:+UseNoGC Enable -XX:-UseNoGC Disable yes Explanation This policy can be useful for test purposes and for short-lived applications. When the limit is reached an OutOfMemory error is generated and the VM shuts down. The -XX:-UseNoGC option turns off a previously enabled -XX:+UseNoGC option. This policy can also be enabled with the -Xgcpolicy:nogc option. See -Xgcpolicy:nogc for more details about this policy and when it is appropriate to use it.","title":"-XX:[+|-]UseNoGC"},{"location":"xxusenogc/#-xx91-93usenogc","text":"The -XX:+UseNoGC option enables a garbage collection policy that expands the Java object heap in the normal way until the limit is reached, but memory is not reclaimed through garbage collection.","title":"-XX:[+|-]UseNoGC"},{"location":"xxusenogc/#syntax","text":"-XX:[+|-]UseNoGC Setting Effect Default -XX:+UseNoGC Enable -XX:-UseNoGC Disable yes","title":"Syntax"},{"location":"xxusenogc/#explanation","text":"This policy can be useful for test purposes and for short-lived applications. When the limit is reached an OutOfMemory error is generated and the VM shuts down. The -XX:-UseNoGC option turns off a previously enabled -XX:+UseNoGC option. This policy can also be enabled with the -Xgcpolicy:nogc option. See -Xgcpolicy:nogc for more details about this policy and when it is appropriate to use it.","title":"Explanation"},{"location":"xxverboseverification/","text":"-XX:[+|-]VerboseVerification You can use this option to control the output of verbose diagnostic data that relates to verification. The Oracle documentation to support this option is no longer available, because it is no longer used by the Hotspot VM. An explanation is provided here. Syntax -XX:[+|-]VerboseVerification Setting Effect Default -XX:-VerboseVerification Disable yes -XX:+VerboseVerification Enable Use -XX:-VerboseVerification to enable the output of verbose diagnostic data to stderr that is generated during verification from the class file StackMapTable attribute. The data provides extra contextual information about bytecode verification, which helps diagnose bytecode or stackmap deficiencies in the field. Class files that have StackMapTable attributes (that is, class files that conform to version 50.0 or later of the class file format specification), are introduced in Java\u2122 V6. Class files with StackMapTable attributes are marked as new format in the verbose output, as shown in the example. Class files without the StackMapTable attributes are marked as old format . The StackMapTable diagnostic information is available only to classes verified with the new format. Here is an example of StackMapTable diagnostic output: Verifying class java.example.ibm.com with new format Verifying method java.example.ibm.com.foo(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;Ljava/io/PrintStream;)I StackMapTable: frame_count = 3 table = { bci: @37 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/ThreadDeath' } bci: @42 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/Throwable' } bci: @79 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class', 'java/lang/Throwable' } stack: { } } End class verification for: java.example.ibm.com","title":"-XX:[+|-]VerboseVerification"},{"location":"xxverboseverification/#-xx91-93verboseverification","text":"You can use this option to control the output of verbose diagnostic data that relates to verification. The Oracle documentation to support this option is no longer available, because it is no longer used by the Hotspot VM. An explanation is provided here.","title":"-XX:[+|-]VerboseVerification"},{"location":"xxverboseverification/#syntax","text":"-XX:[+|-]VerboseVerification Setting Effect Default -XX:-VerboseVerification Disable yes -XX:+VerboseVerification Enable Use -XX:-VerboseVerification to enable the output of verbose diagnostic data to stderr that is generated during verification from the class file StackMapTable attribute. The data provides extra contextual information about bytecode verification, which helps diagnose bytecode or stackmap deficiencies in the field. Class files that have StackMapTable attributes (that is, class files that conform to version 50.0 or later of the class file format specification), are introduced in Java\u2122 V6. Class files with StackMapTable attributes are marked as new format in the verbose output, as shown in the example. Class files without the StackMapTable attributes are marked as old format . The StackMapTable diagnostic information is available only to classes verified with the new format. Here is an example of StackMapTable diagnostic output: Verifying class java.example.ibm.com with new format Verifying method java.example.ibm.com.foo(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;Ljava/io/PrintStream;)I StackMapTable: frame_count = 3 table = { bci: @37 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/ThreadDeath' } bci: @42 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/Throwable' } bci: @79 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class', 'java/lang/Throwable' } stack: { } } End class verification for: java.example.ibm.com","title":"Syntax"},{"location":"xxvmlockclassloader/","text":"-XX:[+|-]VMLockClassLoader This option affects synchronization on class loaders that are not parallel-capable class loaders, during class loading. Syntax -XX:[+|-]VMLockClassLoader Setting Effect Default -XX:+VMLockClassLoader Enable yes -XX:-VMLockClassLoader Disable The option, -XX:+VMLockClassLoader , causes the VM to force synchronization on a class loader that is not a parallel capable class loader during class loading. This action occurs even if the loadClass() method for that class loader is not synchronized. For information about parallel capable class loaders, see java.lang.ClassLoader.registerAsParallelCapable() . Note that this option might cause a deadlock if class loaders use non-hierarchical delegation. For example, setting the system property osgi.classloader.lock=classname with Equinox is known to cause a deadlock. This is the default option. When specifying the -XX:-VMLockClassLoader option, the VM does not force synchronization on a class loader during class loading. The class loader still conforms to class library synchronization, such as a synchronized loadClass() method.","title":"-XX:[+|-]VMLockClassLoader"},{"location":"xxvmlockclassloader/#-xx91-93vmlockclassloader","text":"This option affects synchronization on class loaders that are not parallel-capable class loaders, during class loading.","title":"-XX:[+|-]VMLockClassLoader"},{"location":"xxvmlockclassloader/#syntax","text":"-XX:[+|-]VMLockClassLoader Setting Effect Default -XX:+VMLockClassLoader Enable yes -XX:-VMLockClassLoader Disable The option, -XX:+VMLockClassLoader , causes the VM to force synchronization on a class loader that is not a parallel capable class loader during class loading. This action occurs even if the loadClass() method for that class loader is not synchronized. For information about parallel capable class loaders, see java.lang.ClassLoader.registerAsParallelCapable() . Note that this option might cause a deadlock if class loaders use non-hierarchical delegation. For example, setting the system property osgi.classloader.lock=classname with Equinox is known to cause a deadlock. This is the default option. When specifying the -XX:-VMLockClassLoader option, the VM does not force synchronization on a class loader during class loading. The class loader still conforms to class library synchronization, such as a synchronized loadClass() method.","title":"Syntax"},{"location":"xzero/","text":"-Xzero Enables reduction of the memory footprint of the Java\u2122 runtime environment when concurrently running multiple Java invocations. This option is deprecated and will be removed in a future release. This option can be used only with Java SE version 8 runtime environments. -Xzero might not be appropriate for all types of applications because it changes the implementation of java.util.ZipFile , which might cause extra memory usage. Syntax Setting Effect -Xzero:none Disable all sub options -Xzero:describe Prints the sub options in effect -Xzero:sharebootzip Enables the sharebootzip sub option -Xzero:nosharebootzip Disables the sharebootzip sub option The following parameters are no longer supported. The options are parsed but do nothing: Setting Effect -Xzero:j9zip Enables the j9zip sub option -Xzero:noj9zip Disables the j9zip sub option -Xzero:sharezip Enables the sharezip sub option -Xzero:nosharezip Disables the sharezip sub option","title":"-Xzero"},{"location":"xzero/#-xzero","text":"Enables reduction of the memory footprint of the Java\u2122 runtime environment when concurrently running multiple Java invocations. This option is deprecated and will be removed in a future release. This option can be used only with Java SE version 8 runtime environments. -Xzero might not be appropriate for all types of applications because it changes the implementation of java.util.ZipFile , which might cause extra memory usage.","title":"-Xzero"},{"location":"xzero/#syntax","text":"Setting Effect -Xzero:none Disable all sub options -Xzero:describe Prints the sub options in effect -Xzero:sharebootzip Enables the sharebootzip sub option -Xzero:nosharebootzip Disables the sharebootzip sub option The following parameters are no longer supported. The options are parsed but do nothing: Setting Effect -Xzero:j9zip Enables the j9zip sub option -Xzero:noj9zip Disables the j9zip sub option -Xzero:sharezip Enables the sharezip sub option -Xzero:nosharezip Disables the sharezip sub option","title":"Syntax"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Eclipse OpenJ9 Welcome to the user documentation for the Eclipse OpenJ9 virtual machine (VM). This user documentation supports the configuration, tuning, and diagnosis of the OpenJ9 VM in an OpenJDK runtime. However, due to differences between the Java SE class libraries, specific options might apply only to one Java SE version. Icons are used to indicate where differences apply. For example: This sentence applies only to Java 8 binaries that include the OpenJ9 VM. Icons for LTS releases are this colour. This sentence applies only to Java 13 or later binaries that include the OpenJ9 VM. Icons for feature releases are this colour. To see which Java releases are LTS releases and which are feature releases, and for information about release cadence, supported platforms, and build environments, see Supported environments . Note: Documentation to support OpenJ9 is still under construction. The current content covers some high level information about OpenJ9 components together with the command-line options and environment variables that you can use to configure the VM when you start your application. We expect further content to be contributed over time. Because OpenJ9 was contributed to the Eclipse Foundation by IBM, this content contains some links to additional information that forms part of the IBM\u00ae SDK, Java\u2122 Technology Edition product documentation in IBM Knowledge Center. That content supplements the documentation here until a more complete set of user documentation is available. We welcome contributions to the user documentation. If you would like to get involved, please read our Contribution guidelines . If you spot any errors in the documentation, please raise an issue at our GitHub repository. Supported environments OpenJDK binaries that contain the OpenJ9 VM are supported on a range of hardware and operating systems. This range is expanding as work progresses at the Eclipse foundation. See the current list of supported environments for details. Note: This user guide contains information about configuring, tuning, and debugging OpenJ9 on the z/OS\u00ae platform. This content was contributed by IBM so that it is available when the work to create OpenJDK binaries for the z/OS platform is complete. Documentation for specific releases Several versions of the documentation are available, covering all releases of OpenJ9: Online documentation for the last release Online, in-progress documentation for the forthcoming release Downloads of earlier releases : to download a zip file, click the filename, then click Download . After downloading a .zip file, extract it, then open the index.html file in your browser. Useful links Eclipse OpenJ9 website home page Eclipse OpenJ9 GitHub repository Eclipse Foundation OpenJ9 project page Pre-built binaries from the AdoptOpenJDK project","title":"About"},{"location":"#eclipse-openj9","text":"Welcome to the user documentation for the Eclipse OpenJ9 virtual machine (VM). This user documentation supports the configuration, tuning, and diagnosis of the OpenJ9 VM in an OpenJDK runtime. However, due to differences between the Java SE class libraries, specific options might apply only to one Java SE version. Icons are used to indicate where differences apply. For example: This sentence applies only to Java 8 binaries that include the OpenJ9 VM. Icons for LTS releases are this colour. This sentence applies only to Java 13 or later binaries that include the OpenJ9 VM. Icons for feature releases are this colour. To see which Java releases are LTS releases and which are feature releases, and for information about release cadence, supported platforms, and build environments, see Supported environments . Note: Documentation to support OpenJ9 is still under construction. The current content covers some high level information about OpenJ9 components together with the command-line options and environment variables that you can use to configure the VM when you start your application. We expect further content to be contributed over time. Because OpenJ9 was contributed to the Eclipse Foundation by IBM, this content contains some links to additional information that forms part of the IBM\u00ae SDK, Java\u2122 Technology Edition product documentation in IBM Knowledge Center. That content supplements the documentation here until a more complete set of user documentation is available. We welcome contributions to the user documentation. If you would like to get involved, please read our Contribution guidelines . If you spot any errors in the documentation, please raise an issue at our GitHub repository.","title":"Eclipse OpenJ9"},{"location":"#supported-environments","text":"OpenJDK binaries that contain the OpenJ9 VM are supported on a range of hardware and operating systems. This range is expanding as work progresses at the Eclipse foundation. See the current list of supported environments for details. Note: This user guide contains information about configuring, tuning, and debugging OpenJ9 on the z/OS\u00ae platform. This content was contributed by IBM so that it is available when the work to create OpenJDK binaries for the z/OS platform is complete.","title":"Supported environments"},{"location":"#documentation-for-specific-releases","text":"Several versions of the documentation are available, covering all releases of OpenJ9: Online documentation for the last release Online, in-progress documentation for the forthcoming release Downloads of earlier releases : to download a zip file, click the filename, then click Download . After downloading a .zip file, extract it, then open the index.html file in your browser.","title":"Documentation for specific releases"},{"location":"#useful-links","text":"Eclipse OpenJ9 website home page Eclipse OpenJ9 GitHub repository Eclipse Foundation OpenJ9 project page Pre-built binaries from the AdoptOpenJDK project","title":"Useful links"},{"location":"adoptopenjdk/","text":"AdoptOpenJDK builds The AdoptOpenJDK community project provide pre-built binaries of OpenJDK with OpenJ9, which have been rigorously tested to meet expected quality standards. Binaries for the latest release of Eclipse OpenJ9 can be obtained from the following links: OpenJDK8 with OpenJ9 OpenJDK11 with OpenJ9 OpenJDK13 with OpenJ9 Nightly builds of OpenJDK with OpenJ9 are also available from the project. Supported platforms The community develop and maintain a build and test infrastructure for the OpenJDK source across a broad range of platforms. For information about the platforms and minimum operating system levels supported for the builds, see the AdoptOpenJDK Platform support matrix . Installation pre-requisites If you obtain binaries from the AdoptOpenJDK community, the following pre-requisites are required: From Eclipse OpenJ9 release 0.13.0, OpenJDK binaries for Linux and AIX platforms from the AdoptOpenJDK community no longer bundle the OpenSSL cryptographic library. The library is expected to be found on the system path. If you want to use OpenSSL cryptographic acceleration, you must install OpenSSL 1.0.2 or 1.1.X on your system. If the library is not found on the system path, the in-built Java crytographic implementation is used instead, which performs less well. On Linux systems, the fontconfig.x86_64 package should be installed to avoid a NullPointerException error when the AWT font subsystem is initialized. Work is ongoing at the AdoptOpenJDK project to fix this issue for their OpenJDK binaries. From Eclipse OpenJ9 release 0.16.0 (OpenJDK 13) and release 0.17.0 (OpenJDK 8 and 11), CUDA is now enabled on Windows (x86-64) and Linux (x86-64 and IBM POWER LE) platforms, which allows you to offload certain Java application processing tasks to a general purpose graphics processing unit (GPU). To take advantage of this feature, your system must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0.","title":"AdoptOpenJDK builds"},{"location":"adoptopenjdk/#adoptopenjdk-builds","text":"The AdoptOpenJDK community project provide pre-built binaries of OpenJDK with OpenJ9, which have been rigorously tested to meet expected quality standards. Binaries for the latest release of Eclipse OpenJ9 can be obtained from the following links: OpenJDK8 with OpenJ9 OpenJDK11 with OpenJ9 OpenJDK13 with OpenJ9 Nightly builds of OpenJDK with OpenJ9 are also available from the project.","title":"AdoptOpenJDK builds"},{"location":"adoptopenjdk/#supported-platforms","text":"The community develop and maintain a build and test infrastructure for the OpenJDK source across a broad range of platforms. For information about the platforms and minimum operating system levels supported for the builds, see the AdoptOpenJDK Platform support matrix .","title":"Supported platforms"},{"location":"adoptopenjdk/#installation-pre-requisites","text":"If you obtain binaries from the AdoptOpenJDK community, the following pre-requisites are required: From Eclipse OpenJ9 release 0.13.0, OpenJDK binaries for Linux and AIX platforms from the AdoptOpenJDK community no longer bundle the OpenSSL cryptographic library. The library is expected to be found on the system path. If you want to use OpenSSL cryptographic acceleration, you must install OpenSSL 1.0.2 or 1.1.X on your system. If the library is not found on the system path, the in-built Java crytographic implementation is used instead, which performs less well. On Linux systems, the fontconfig.x86_64 package should be installed to avoid a NullPointerException error when the AWT font subsystem is initialized. Work is ongoing at the AdoptOpenJDK project to fix this issue for their OpenJDK binaries. From Eclipse OpenJ9 release 0.16.0 (OpenJDK 13) and release 0.17.0 (OpenJDK 8 and 11), CUDA is now enabled on Windows (x86-64) and Linux (x86-64 and IBM POWER LE) platforms, which allows you to offload certain Java application processing tasks to a general purpose graphics processing unit (GPU). To take advantage of this feature, your system must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0.","title":"Installation pre-requisites"},{"location":"aot/","text":"Ahead-Of-Time (AOT) compiler The AOT compiler dynamically compiles Java methods into native AOT code at runtime and stores them in the shared classes cache. This activity enables the VM to start an application faster the next time it runs because it doesn't need to spend time interpreting Java methods. The VM automatically chooses which methods should be AOT-compiled based on heuristics that identify the start-up phase of large applications. AOT code is always used in combination with class data sharing and is enabled automatically when -Xshareclasses is set on the command line. When a cached AOT method is run it might also be optimized further by the Just-In-Time (JIT) compiler. If you want to turn off AOT compilation and disable the use of AOT-compiled code, set the -Xnoaot suboption. When the AOT compiler is disabled, the JIT compiles frequently used methods into native code. However, because the JIT compiler operates while the application is running, the startup time for an application will increase. See also Diagnosing a JIT or AOT problem JIT compiler Class data sharing","title":"AOT Compiler"},{"location":"aot/#ahead-of-time-aot-compiler","text":"The AOT compiler dynamically compiles Java methods into native AOT code at runtime and stores them in the shared classes cache. This activity enables the VM to start an application faster the next time it runs because it doesn't need to spend time interpreting Java methods. The VM automatically chooses which methods should be AOT-compiled based on heuristics that identify the start-up phase of large applications. AOT code is always used in combination with class data sharing and is enabled automatically when -Xshareclasses is set on the command line. When a cached AOT method is run it might also be optimized further by the Just-In-Time (JIT) compiler. If you want to turn off AOT compilation and disable the use of AOT-compiled code, set the -Xnoaot suboption. When the AOT compiler is disabled, the JIT compiles frequently used methods into native code. However, because the JIT compiler operates while the application is running, the startup time for an application will increase.","title":"Ahead-Of-Time (AOT) compiler"},{"location":"aot/#see-also","text":"Diagnosing a JIT or AOT problem JIT compiler Class data sharing","title":"See also"},{"location":"cmdline_general/","text":"Standard command-line options The OpenJ9 virtual machine supports the standard Java\u2122 options that are common to all Java virtual machine implementations, including Oracle's Hotspot VM. Some of the common options supported are summarised in the following table: Standard option name Purpose -classpath:<resource_name>[:<resource_name>] Sets the search path for application classes and resources (directories and compressed or .jar files). cp can be used instead of classpath . -help , -? Prints a usage message. -fullversion Prints the build and version information for a VM -showversion Prints product version and continues. -verbose:<option>[,<option>] Enables verbose output. Options include class , dynload , gc , init , jni , sizes and stack . (See Notes ) -version Prints the full build and version information a VM Notes: -verbose:class : Writes an entry to stderr for each class that is loaded. -verbose:dynload : Writes detailed class information to stderr as each bootstrap class is loaded by the VM: -verbose:gc : Provides verbose garbage collection information. -verbose:init : Writes information to stderr describing VM initialization and termination. -verbose:jni : Writes information to stderr describing the JNI services called by the application and VM. -verbose:sizes : Writes information to stderr describing the active memory usage settings. -verbose:stack : Writes information to stderr describing the Java and C stack usage for each thread. For more information about standard options, see Oracle Java SE Standard Options","title":"Standard options"},{"location":"cmdline_general/#standard-command-line-options","text":"The OpenJ9 virtual machine supports the standard Java\u2122 options that are common to all Java virtual machine implementations, including Oracle's Hotspot VM. Some of the common options supported are summarised in the following table: Standard option name Purpose -classpath:<resource_name>[:<resource_name>] Sets the search path for application classes and resources (directories and compressed or .jar files). cp can be used instead of classpath . -help , -? Prints a usage message. -fullversion Prints the build and version information for a VM -showversion Prints product version and continues. -verbose:<option>[,<option>] Enables verbose output. Options include class , dynload , gc , init , jni , sizes and stack . (See Notes ) -version Prints the full build and version information a VM Notes: -verbose:class : Writes an entry to stderr for each class that is loaded. -verbose:dynload : Writes detailed class information to stderr as each bootstrap class is loaded by the VM: -verbose:gc : Provides verbose garbage collection information. -verbose:init : Writes information to stderr describing VM initialization and termination. -verbose:jni : Writes information to stderr describing the JNI services called by the application and VM. -verbose:sizes : Writes information to stderr describing the active memory usage settings. -verbose:stack : Writes information to stderr describing the Java and C stack usage for each thread. For more information about standard options, see Oracle Java SE Standard Options","title":"Standard command-line options"},{"location":"cmdline_migration/","text":"Switching to OpenJ9 If you are already familiar with HotSpot command-line options but want the advantages of OpenJ9, the following information will prove helpful. In all cases, check individual topics for minor discrepancies in the way these options might work. Note: For information about HotSpot equivalences and differences for items other than command-line options, see New to OpenJ9? Compatible options You can use the following command-line options in OpenJ9, just as you did in Hotspot; you can continue to use the HotSpot option in OpenJ9 without having to change your code: Option Usage -X Displays help on nonstandard options. -Xbootclasspath Specifies the search path for bootstrap classes and resources. -Xcheck:jni Runs additional checks for JNI functions during VM startup. -Xfuture Turns on strict class-file format checks. -Xint Runs an application in interpreted-only mode. -Xmn Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon. -Xms Sets the initial size of the heap. (Equivalent to -XX:InitialHeapSize ) -Xmx Specifies the maximum size of the object memory allocation pool. (Equivalent to -XX:MaxHeapSize ) -Xnoclassgc Disables class garbage collection (GC). -Xrs Prevents the OpenJ9 run time environment from handling signals. -Xss Sets the Java\u2122 thread stack size. (Equivalent to -XX:ThreadStackSize ). Note: Unlike HotSpot, this option applies only to the Java stack. OpenJ9 has a separate native stack for operating system threads (see -Xmso ) -Xverify:mode Enables or disables the verifier. -XX:[+|-]CompactStrings Enables/disables String compression -XX:[+|-]DisableExplicitGC Enables/disables System.gc() calls. (Alias for -Xdisableexplicitgc / -Xenableexplicitgc ) -XX:[+|-]HeapDumpOnOutOfMemory Enables/disables dumps on out-of-memory conditions. -XX:HeapDumpPath Specifies a directory for all VM dumps including heap dumps, javacores, and system dumps. (Alias for -Xdump:directory ) -XX:[+|-]IgnoreUnrecognizedVMOptions Specifies whether to ignore unrecognized top-level VM options -XX:InitialHeapSize Sets the initial size of the heap. (Alias for -Xms ) -XX:InitialRAMPercentage Sets the initial size of the Java heap as a percentage of total memory. -XX:OnOutOfMemoryError Runs specified commands when a java.lang.OutOfMemoryError is thrown. (Equivalent to -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec= ) -XX:MaxDirectMemorySize Sets a limit on the amount of memory that can be reserved for all direct byte buffers. -XX:MaxHeapSize Specifies the maximum size of the object memory allocation pool. (Alias for -Xmx ) -XX:MaxRAMPercentage Sets the maximum size of the Java heap as a percentage of total memory. -XX:[+|-]UseCompressedOops Disables compressed references in 64-bit JVMs. (See also -Xcompressedrefs ) -XX:[+|-]UseContainerSupport Sets a larger fraction of memory to the Java heap when the VM detects that it is running in a container. -XX:[+|-]CompactStrings Equivalent options These Hotspot command-line options have equivalents in OpenJ9 that are not specified in the same way, but perform a related function: HotSpot Option OpenJ9 Option Usage -Xcomp -Xjit:count=0 1 -Xcomp disables interpreted method invocations. -Xgc -Xgcpolicy 2 Configuring your garbage collection policy. -XX:ParallelGCThreads -Xgcthreads Configure number of GC threads. -XX:+UseNUMA -Xnuma:none 3 Controls non-uniform memory architecture (NUMA) awareness. Notes: Hotspot uses -Xcomp to force compilation of methods on first invocation. However, this option is deprecated. Whilst it can be used for compatibility, using -Xjit:count=0 is preferred. Hotspot uses -Xgc to both select policies and configure them; OpenJ9 uses -Xgcpolicy to select policies, reserving -Xgc for configuration. In Hotspot, NUMA awareness is turned off by default and is turned on by using the -XX:+UseNUMA option. Conversely, the OpenJ9 VM automatically enables NUMA awareness and uses -Xnuma:none to turn it off . If you were previously using Hotspot in its default mode, you must now explicitly turn off NUMA awareness in OpenJ9. If you are used to using -XX:+UseNUMA in Hotspot, you no longer need to explicitly turn on NUMA awareness; it's on by default.","title":"Switching to OpenJ9"},{"location":"cmdline_migration/#switching-to-openj9","text":"If you are already familiar with HotSpot command-line options but want the advantages of OpenJ9, the following information will prove helpful. In all cases, check individual topics for minor discrepancies in the way these options might work. Note: For information about HotSpot equivalences and differences for items other than command-line options, see New to OpenJ9?","title":"Switching to OpenJ9"},{"location":"cmdline_migration/#compatible-options","text":"You can use the following command-line options in OpenJ9, just as you did in Hotspot; you can continue to use the HotSpot option in OpenJ9 without having to change your code: Option Usage -X Displays help on nonstandard options. -Xbootclasspath Specifies the search path for bootstrap classes and resources. -Xcheck:jni Runs additional checks for JNI functions during VM startup. -Xfuture Turns on strict class-file format checks. -Xint Runs an application in interpreted-only mode. -Xmn Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon. -Xms Sets the initial size of the heap. (Equivalent to -XX:InitialHeapSize ) -Xmx Specifies the maximum size of the object memory allocation pool. (Equivalent to -XX:MaxHeapSize ) -Xnoclassgc Disables class garbage collection (GC). -Xrs Prevents the OpenJ9 run time environment from handling signals. -Xss Sets the Java\u2122 thread stack size. (Equivalent to -XX:ThreadStackSize ). Note: Unlike HotSpot, this option applies only to the Java stack. OpenJ9 has a separate native stack for operating system threads (see -Xmso ) -Xverify:mode Enables or disables the verifier. -XX:[+|-]CompactStrings Enables/disables String compression -XX:[+|-]DisableExplicitGC Enables/disables System.gc() calls. (Alias for -Xdisableexplicitgc / -Xenableexplicitgc ) -XX:[+|-]HeapDumpOnOutOfMemory Enables/disables dumps on out-of-memory conditions. -XX:HeapDumpPath Specifies a directory for all VM dumps including heap dumps, javacores, and system dumps. (Alias for -Xdump:directory ) -XX:[+|-]IgnoreUnrecognizedVMOptions Specifies whether to ignore unrecognized top-level VM options -XX:InitialHeapSize Sets the initial size of the heap. (Alias for -Xms ) -XX:InitialRAMPercentage Sets the initial size of the Java heap as a percentage of total memory. -XX:OnOutOfMemoryError Runs specified commands when a java.lang.OutOfMemoryError is thrown. (Equivalent to -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec= ) -XX:MaxDirectMemorySize Sets a limit on the amount of memory that can be reserved for all direct byte buffers. -XX:MaxHeapSize Specifies the maximum size of the object memory allocation pool. (Alias for -Xmx ) -XX:MaxRAMPercentage Sets the maximum size of the Java heap as a percentage of total memory. -XX:[+|-]UseCompressedOops Disables compressed references in 64-bit JVMs. (See also -Xcompressedrefs ) -XX:[+|-]UseContainerSupport Sets a larger fraction of memory to the Java heap when the VM detects that it is running in a container. -XX:[+|-]CompactStrings","title":"Compatible options"},{"location":"cmdline_migration/#equivalent-options","text":"These Hotspot command-line options have equivalents in OpenJ9 that are not specified in the same way, but perform a related function: HotSpot Option OpenJ9 Option Usage -Xcomp -Xjit:count=0 1 -Xcomp disables interpreted method invocations. -Xgc -Xgcpolicy 2 Configuring your garbage collection policy. -XX:ParallelGCThreads -Xgcthreads Configure number of GC threads. -XX:+UseNUMA -Xnuma:none 3 Controls non-uniform memory architecture (NUMA) awareness. Notes: Hotspot uses -Xcomp to force compilation of methods on first invocation. However, this option is deprecated. Whilst it can be used for compatibility, using -Xjit:count=0 is preferred. Hotspot uses -Xgc to both select policies and configure them; OpenJ9 uses -Xgcpolicy to select policies, reserving -Xgc for configuration. In Hotspot, NUMA awareness is turned off by default and is turned on by using the -XX:+UseNUMA option. Conversely, the OpenJ9 VM automatically enables NUMA awareness and uses -Xnuma:none to turn it off . If you were previously using Hotspot in its default mode, you must now explicitly turn off NUMA awareness in OpenJ9. If you are used to using -XX:+UseNUMA in Hotspot, you no longer need to explicitly turn on NUMA awareness; it's on by default.","title":"Equivalent options"},{"location":"cmdline_specifying/","text":"OpenJ9 command-line options When you start a Java\u2122 application you can specify various options on the command line to configure the runtime environment. These options include: System properties Standard options Nonstandard (or -X) options -XX options Although the command line is the traditional way to specify command-line options, you can also pass options to the OpenJ9 virtual machine (VM) by using a manifest file, options files, and environment variables. Options specified on the command line override the equivalent environment variables. For example, specifying java -cp <dir1> completely overrides setting the environment variable CLASSPATH=<dir2> . Quotation marks Use single or double quotation marks for command-line options only when explicitly directed to do so. Single and double quotation marks have different meanings on different platforms, operating systems, and shells. Do not use '-X<option>' or \"-X<option>\" . Instead, you must use -X<option> . For example, do not use '-Xmx500m' and \"-Xmx500m\" . Write this option as -Xmx500m . Precedence The sequence of the Java options on the command line defines which options take precedence during startup. Rightmost options have precedence over leftmost options. In the following example, the -Xjit option takes precedence: java -Xint -Xjit myClass At startup, the list of VM arguments is constructed in the following order, with the lowest precedence first: Certain options are created automatically by the VM, which specify arguments such as search paths and version information. The VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. You can modify the options.default file to include any options that you want to specify for your application instead of entering these options on the command line. For more information about the path and construction of the file, see -Xoptionsfile . Options can be specified in an executable JAR file by using the META-INF/MANIFEST.MF file. Options are placed in the main section in a header named IBM-Java-Options . Only one IBM-Java-Options header is permitted, but the header can contain multiple options, separated by spaces. A long sequence of options can be split using a header continuation but are treated as a single line. Example manifest file: Manifest-Version: 1.0 Class-Path: . Main-Class: HelloWorld IBM-Java-Options: -Xshareclasses:name=mycache,nonfa tal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.pro perty=\"this is a long system property value to demonstrate long VM arguments in the manifest file\" This example manifest file is parsed as the following string: -Xshareclasses:name=mycache,nonfatal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.property=this is a long system property value to demonstrate long VM arguments in the manifest file Options specified in the manifest file are subject to the same restrictions as options files. For more information, see the -Xoptionsfile topic in the user guide. Environment variables that are described in OpenJ9 environment variables are translated into command-line options. For example, the following environment variable adds the parameter -Xrs to the list of arguments: On Windows\u2122 systems: set IBM_NOSIGHANDLER=<non_null_string> On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: export IBM_NOSIGHANDLER=<non_null_string> The OPENJ9_JAVA_OPTIONS environment variable. You can set command-line options using this environment variable. The options that you specify with this environment variable are added to the command line when a VM starts in that environment. The environment variable can contain multiple blank-delimited argument strings, but must not contain comments. For example: On Windows systems: set OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" On AIX, Linux, macOS, and z/OS systems: export OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" Note: The environment variable JAVA_TOOLS_OPTIONS is equivalent to OPENJ9_JAVA_OPTIONS and is available for compatibility with JVMTI. The equivalent IBM_JAVA_OPTIONS environment variable is deprecated and will be removed in a future release. Options that are specified on the command line. For example: java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MyJavaClass The Java launcher adds some automatically generated arguments to this list, such as the names of the main class. You can also use the -Xoptionsfile parameter to specify VM options. This parameter can be used on the command line, or as part of the OPENJ9_JAVA_OPTIONS environment variable. The contents of an option file are expanded in place during startup. For more information about the structure and contents of this type of file, see -Xoptionsfile . To troubleshoot startup problems, you can check which options are used by the OpenJ9 VM. Append the following command-line option, and inspect the Java core file that is generated: -Xdump:java:events=vmstart Here is an extract from a Java core file that shows the options that are used: 2CIUSERARG -Xdump:java:file=/home/test_javacore.txt,events=vmstop 2CIUSERARG -Dtest.cmdlineOption=1 2CIUSERARG -XXallowvmshutdown:true 2CIUSERARG -Xoptionsfile=test1.test_options_file","title":"Specifying options"},{"location":"cmdline_specifying/#openj9-command-line-options","text":"When you start a Java\u2122 application you can specify various options on the command line to configure the runtime environment. These options include: System properties Standard options Nonstandard (or -X) options -XX options Although the command line is the traditional way to specify command-line options, you can also pass options to the OpenJ9 virtual machine (VM) by using a manifest file, options files, and environment variables. Options specified on the command line override the equivalent environment variables. For example, specifying java -cp <dir1> completely overrides setting the environment variable CLASSPATH=<dir2> .","title":"OpenJ9 command-line options"},{"location":"cmdline_specifying/#quotation-marks","text":"Use single or double quotation marks for command-line options only when explicitly directed to do so. Single and double quotation marks have different meanings on different platforms, operating systems, and shells. Do not use '-X<option>' or \"-X<option>\" . Instead, you must use -X<option> . For example, do not use '-Xmx500m' and \"-Xmx500m\" . Write this option as -Xmx500m .","title":"Quotation marks"},{"location":"cmdline_specifying/#precedence","text":"The sequence of the Java options on the command line defines which options take precedence during startup. Rightmost options have precedence over leftmost options. In the following example, the -Xjit option takes precedence: java -Xint -Xjit myClass At startup, the list of VM arguments is constructed in the following order, with the lowest precedence first: Certain options are created automatically by the VM, which specify arguments such as search paths and version information. The VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. You can modify the options.default file to include any options that you want to specify for your application instead of entering these options on the command line. For more information about the path and construction of the file, see -Xoptionsfile . Options can be specified in an executable JAR file by using the META-INF/MANIFEST.MF file. Options are placed in the main section in a header named IBM-Java-Options . Only one IBM-Java-Options header is permitted, but the header can contain multiple options, separated by spaces. A long sequence of options can be split using a header continuation but are treated as a single line. Example manifest file: Manifest-Version: 1.0 Class-Path: . Main-Class: HelloWorld IBM-Java-Options: -Xshareclasses:name=mycache,nonfa tal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.pro perty=\"this is a long system property value to demonstrate long VM arguments in the manifest file\" This example manifest file is parsed as the following string: -Xshareclasses:name=mycache,nonfatal,cacheDirPerm=1000 -Dproperty=example -Da.long.system.property=this is a long system property value to demonstrate long VM arguments in the manifest file Options specified in the manifest file are subject to the same restrictions as options files. For more information, see the -Xoptionsfile topic in the user guide. Environment variables that are described in OpenJ9 environment variables are translated into command-line options. For example, the following environment variable adds the parameter -Xrs to the list of arguments: On Windows\u2122 systems: set IBM_NOSIGHANDLER=<non_null_string> On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: export IBM_NOSIGHANDLER=<non_null_string> The OPENJ9_JAVA_OPTIONS environment variable. You can set command-line options using this environment variable. The options that you specify with this environment variable are added to the command line when a VM starts in that environment. The environment variable can contain multiple blank-delimited argument strings, but must not contain comments. For example: On Windows systems: set OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" On AIX, Linux, macOS, and z/OS systems: export OPENJ9_JAVA_OPTIONS=\"-Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump\" Note: The environment variable JAVA_TOOLS_OPTIONS is equivalent to OPENJ9_JAVA_OPTIONS and is available for compatibility with JVMTI. The equivalent IBM_JAVA_OPTIONS environment variable is deprecated and will be removed in a future release. Options that are specified on the command line. For example: java -Dmysysprop1=tcpip -Dmysysprop2=wait -Xdisablejavadump MyJavaClass The Java launcher adds some automatically generated arguments to this list, such as the names of the main class. You can also use the -Xoptionsfile parameter to specify VM options. This parameter can be used on the command line, or as part of the OPENJ9_JAVA_OPTIONS environment variable. The contents of an option file are expanded in place during startup. For more information about the structure and contents of this type of file, see -Xoptionsfile . To troubleshoot startup problems, you can check which options are used by the OpenJ9 VM. Append the following command-line option, and inspect the Java core file that is generated: -Xdump:java:events=vmstart Here is an extract from a Java core file that shows the options that are used: 2CIUSERARG -Xdump:java:file=/home/test_javacore.txt,events=vmstop 2CIUSERARG -Dtest.cmdlineOption=1 2CIUSERARG -XXallowvmshutdown:true 2CIUSERARG -Xoptionsfile=test1.test_options_file","title":"Precedence"},{"location":"d_jvm_commands/","text":"Using system property command-line options Java\u2122 system properties determine the environment in which a Java program runs by starting a Java virtual machine with a set of values. You can choose to use the default values for Java system properties or you can specify values for them by adding parameters to the command line when you start your application. To set a system property from the command line, use: java -D<property_name>=<value> <program_name> For example, to specify the UTF-8 file encoding for your application MyProgram , use: java -Dfile.encoding=UTF-8 MyProgram","title":"Using System properties"},{"location":"d_jvm_commands/#using-system-property-command-line-options","text":"Java\u2122 system properties determine the environment in which a Java program runs by starting a Java virtual machine with a set of values. You can choose to use the default values for Java system properties or you can specify values for them by adding parameters to the command line when you start your application. To set a system property from the command line, use: java -D<property_name>=<value> <program_name> For example, to specify the UTF-8 file encoding for your application MyProgram , use: java -Dfile.encoding=UTF-8 MyProgram","title":"Using system property command-line options"},{"location":"dcomibmenableclasscaching/","text":"-Dcom.ibm.enableClassCaching Setting this property to true enables caching of the Latest User Defined Class Loader (LUDCL). Syntax -Dcom.ibm.enableClassCaching=[true|false] Setting Effect Default true Enable false Disable yes Explanation By reducing repeated lookups, Java\u2122 applications that use deserialization extensively can see a performance improvement. See also Java Object Serialization Specification","title":"-Dcom.ibm.enableClassCaching"},{"location":"dcomibmenableclasscaching/#-dcomibmenableclasscaching","text":"Setting this property to true enables caching of the Latest User Defined Class Loader (LUDCL).","title":"-Dcom.ibm.enableClassCaching"},{"location":"dcomibmenableclasscaching/#syntax","text":"-Dcom.ibm.enableClassCaching=[true|false] Setting Effect Default true Enable false Disable yes","title":"Syntax"},{"location":"dcomibmenableclasscaching/#explanation","text":"By reducing repeated lookups, Java\u2122 applications that use deserialization extensively can see a performance improvement.","title":"Explanation"},{"location":"dcomibmenableclasscaching/#see-also","text":"Java Object Serialization Specification","title":"See also"},{"location":"dcomibmenablelegacydumpsecurity/","text":"-Dcom.ibm.enableLegacyDumpSecurity To improve security, the security checks in the certain com.ibm.jvm.Dump APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs. Syntax -Dcom.ibm.enableLegacyDumpSecurity=[true|false] Setting Effect Default true Enable yes false Disable Explanation Security checking is enabled in the following APIs: com.ibm.jvm.Dump.JavaDump() com.ibm.jvm.Dump.HeapDump() com.ibm.jvm.Dump.SnapDump() See also -Dcom.ibm.enableLegacyLogSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"-Dcom.ibm.enableLegacyDumpSecurity"},{"location":"dcomibmenablelegacydumpsecurity/#-dcomibmenablelegacydumpsecurity","text":"To improve security, the security checks in the certain com.ibm.jvm.Dump APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs.","title":"-Dcom.ibm.enableLegacyDumpSecurity"},{"location":"dcomibmenablelegacydumpsecurity/#syntax","text":"-Dcom.ibm.enableLegacyDumpSecurity=[true|false] Setting Effect Default true Enable yes false Disable","title":"Syntax"},{"location":"dcomibmenablelegacydumpsecurity/#explanation","text":"Security checking is enabled in the following APIs: com.ibm.jvm.Dump.JavaDump() com.ibm.jvm.Dump.HeapDump() com.ibm.jvm.Dump.SnapDump()","title":"Explanation"},{"location":"dcomibmenablelegacydumpsecurity/#see-also","text":"-Dcom.ibm.enableLegacyLogSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"See also"},{"location":"dcomibmenablelegacylogsecurity/","text":"-Dcom.ibm.enableLegacyLogSecurity To improve security, the security checks in the certain com.ibm.jvm.Log APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs. Syntax -Dcom.ibm.enableLegacyLogSecurity=[true|false] Setting Effect Default true Enable yes false Disable Explanation Security checking is enabled in the following APIs: com.ibm.jvm.Log.QueryOptions() com.ibm.jvm.Log.SetOptions(String) See also -Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"-Dcom.ibm.enableLegacyLogSecurity"},{"location":"dcomibmenablelegacylogsecurity/#-dcomibmenablelegacylogsecurity","text":"To improve security, the security checks in the certain com.ibm.jvm.Log APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs.","title":"-Dcom.ibm.enableLegacyLogSecurity"},{"location":"dcomibmenablelegacylogsecurity/#syntax","text":"-Dcom.ibm.enableLegacyLogSecurity=[true|false] Setting Effect Default true Enable yes false Disable","title":"Syntax"},{"location":"dcomibmenablelegacylogsecurity/#explanation","text":"Security checking is enabled in the following APIs: com.ibm.jvm.Log.QueryOptions() com.ibm.jvm.Log.SetOptions(String)","title":"Explanation"},{"location":"dcomibmenablelegacylogsecurity/#see-also","text":"-Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyTraceSecurity","title":"See also"},{"location":"dcomibmenablelegacytracesecurity/","text":"-Dcom.ibm.enableLegacyTraceSecurity To improve security, the security checks in certain com.ibm.jvm.Trace APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs. Syntax -Dcom.ibm.enableLegacyTraceSecurity=[true|false] Setting Effect Default true Enable yes false Disable Explanation Security checking is enabled in the following APIs: com.ibm.jvm.Trace.set(String) com.ibm.jvm.Trace.snap() com.ibm.jvm.Trace.suspend() com.ibm.jvm.Trace.suspendThis() com.ibm.jvm.Trace.resume() com.ibm.jvm.Trace.resumeThis() com.ibm.jvm.Trace.registerApplication(String, String[]) See also -Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyLogSecurity","title":"-Dcom.ibm.enableLegacyTraceSecurity"},{"location":"dcomibmenablelegacytracesecurity/#-dcomibmenablelegacytracesecurity","text":"To improve security, the security checks in certain com.ibm.jvm.Trace APIs are now enabled by default, when the SecurityManger is enabled. Use this system property to turn off security checking for these APIs.","title":"-Dcom.ibm.enableLegacyTraceSecurity"},{"location":"dcomibmenablelegacytracesecurity/#syntax","text":"-Dcom.ibm.enableLegacyTraceSecurity=[true|false] Setting Effect Default true Enable yes false Disable","title":"Syntax"},{"location":"dcomibmenablelegacytracesecurity/#explanation","text":"Security checking is enabled in the following APIs: com.ibm.jvm.Trace.set(String) com.ibm.jvm.Trace.snap() com.ibm.jvm.Trace.suspend() com.ibm.jvm.Trace.suspendThis() com.ibm.jvm.Trace.resume() com.ibm.jvm.Trace.resumeThis() com.ibm.jvm.Trace.registerApplication(String, String[])","title":"Explanation"},{"location":"dcomibmenablelegacytracesecurity/#see-also","text":"-Dcom.ibm.enableLegacyDumpSecurity -Dcom.ibm.enableLegacyLogSecurity","title":"See also"},{"location":"dcomibmgpudisable/","text":"-Dcom.ibm.gpu.disable Restriction: This system property is supported only on Java\u2122 11 and later If you have enabled GPU processing with -Dcom.ibm.gpu.enable , use this system property to turn off processing that can be offloaded to a graphics processing unit (GPU). Syntax -Dcom.ibm.gpu.disable Explanation Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. GPU processing is therefore disabled by default. However, if you have enabled GPU processing with -Dcom.ibm.gpu.enable , this property turns GPU processing off. See also Exploiting GPUs -Dcom.ibm.gpu.enable -Dcom.ibm.gpu.verbose","title":"-Dcom.ibm.gpu.disable"},{"location":"dcomibmgpudisable/#-dcomibmgpudisable","text":"Restriction: This system property is supported only on Java\u2122 11 and later If you have enabled GPU processing with -Dcom.ibm.gpu.enable , use this system property to turn off processing that can be offloaded to a graphics processing unit (GPU).","title":"-Dcom.ibm.gpu.disable"},{"location":"dcomibmgpudisable/#syntax","text":"-Dcom.ibm.gpu.disable","title":"Syntax"},{"location":"dcomibmgpudisable/#explanation","text":"Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. GPU processing is therefore disabled by default. However, if you have enabled GPU processing with -Dcom.ibm.gpu.enable , this property turns GPU processing off.","title":"Explanation"},{"location":"dcomibmgpudisable/#see-also","text":"Exploiting GPUs -Dcom.ibm.gpu.enable -Dcom.ibm.gpu.verbose","title":"See also"},{"location":"dcomibmgpuenable/","text":"-Dcom.ibm.gpu.enable Restriction: This system property is supported only on Java\u2122 11 and later Use this system property to control the type of processing that can be offloaded to a graphics processing unit (GPU) when processing requirements meet a specific threshold. This feature can improve the performance of certain Java functions. Syntax -Dcom.ibm.gpu.enable=[all|sort] Setting Effect all Turns on GPU processing for all possible Java functions. sort Turns on GPU processing only for the Java sort() function. By default, this property is not set. Explanation Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. When set, this property enables GPU processing for any array that meets a minimum size. See also Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.verbose","title":"-Dcom.ibm.gpu.enable"},{"location":"dcomibmgpuenable/#-dcomibmgpuenable","text":"Restriction: This system property is supported only on Java\u2122 11 and later Use this system property to control the type of processing that can be offloaded to a graphics processing unit (GPU) when processing requirements meet a specific threshold. This feature can improve the performance of certain Java functions.","title":"-Dcom.ibm.gpu.enable"},{"location":"dcomibmgpuenable/#syntax","text":"-Dcom.ibm.gpu.enable=[all|sort] Setting Effect all Turns on GPU processing for all possible Java functions. sort Turns on GPU processing only for the Java sort() function. By default, this property is not set.","title":"Syntax"},{"location":"dcomibmgpuenable/#explanation","text":"Because establishing and completing communication with a GPU incurs an additional overhead, not all processing requirements benefit from being offloaded to the GPU. When set, this property enables GPU processing for any array that meets a minimum size.","title":"Explanation"},{"location":"dcomibmgpuenable/#see-also","text":"Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.verbose","title":"See also"},{"location":"dcomibmgpuverbose/","text":"-Dcom.ibm.gpu.verbose Restriction: This system property is supported only on Java\u2122 11 and later This system property can be used to help identify problems with graphics processing unit (GPU) processing. Syntax -Dcom.ibm.gpu.verbose This property is not set by default. Explanation When specified, this option generates verbose output to STDOUT, which can be piped to a file. See also Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.enable","title":"-Dcom.ibm.gpu.verbose"},{"location":"dcomibmgpuverbose/#-dcomibmgpuverbose","text":"Restriction: This system property is supported only on Java\u2122 11 and later This system property can be used to help identify problems with graphics processing unit (GPU) processing.","title":"-Dcom.ibm.gpu.verbose"},{"location":"dcomibmgpuverbose/#syntax","text":"-Dcom.ibm.gpu.verbose This property is not set by default.","title":"Syntax"},{"location":"dcomibmgpuverbose/#explanation","text":"When specified, this option generates verbose output to STDOUT, which can be piped to a file.","title":"Explanation"},{"location":"dcomibmgpuverbose/#see-also","text":"Exploiting GPUs -Dcom.ibm.gpu.disable -Dcom.ibm.gpu.enable","title":"See also"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/","text":"-Dcom.ibm.lang.management. OperatingSystemMXBean.isCpuTime100ns Changes the unit of the return value of the OperatingSystemMXBean.getProcessCpuTime() method. Syntax -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns=[true|false] Setting Effect Default true Enable false Disable yes Explanation The Oracle java.lang.management package includes MBean categories such as Memory , OperatingSystem , and GarbageCollector . The OpenJ9 VM provides additional MXBeans to extend the monitoring and management capabilities. For example, the OperatingSystemMXBean , which monitors operating system settings such as physical and virtual memory size, processor capacity, and processor utilization. The OperatingSystemMXBean.getProcessCpuTime() method returns a value in nanoseconds (10 -9 s), for compatibility with the com.sun.management.OperatingSystemMXBean and UnixOperatingSystemMXBean interfaces. In earlier VM releases, the return value was in hundreds of nanoseconds. If you want to revert to this behavior, set the -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns property to true . The default value for this property is false . See also com.ibm.lang.management API documentation","title":"-Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#-dcomibmlangmanagementoperatingsystemmxbeaniscputime100ns","text":"Changes the unit of the return value of the OperatingSystemMXBean.getProcessCpuTime() method.","title":"-Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#syntax","text":"-Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns=[true|false] Setting Effect Default true Enable false Disable yes","title":"Syntax"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#explanation","text":"The Oracle java.lang.management package includes MBean categories such as Memory , OperatingSystem , and GarbageCollector . The OpenJ9 VM provides additional MXBeans to extend the monitoring and management capabilities. For example, the OperatingSystemMXBean , which monitors operating system settings such as physical and virtual memory size, processor capacity, and processor utilization. The OperatingSystemMXBean.getProcessCpuTime() method returns a value in nanoseconds (10 -9 s), for compatibility with the com.sun.management.OperatingSystemMXBean and UnixOperatingSystemMXBean interfaces. In earlier VM releases, the return value was in hundreds of nanoseconds. If you want to revert to this behavior, set the -Dcom.ibm.lang.management.OperatingSystemMXBean.isCpuTime100ns property to true . The default value for this property is false .","title":"Explanation"},{"location":"dcomibmlangmanagementosmxbeaniscputime100ns/#see-also","text":"com.ibm.lang.management API documentation","title":"See also"},{"location":"dcomibmlangmanagementverbose/","text":"-Dcom.ibm.lang.management.verbose Enables verbose information from java.lang.management operations to be written to the output channel during VM operations. Syntax -Dcom.ibm.lang.management.verbose There are no options for this system property.","title":"-Dcom.ibm.lang.management.verbose"},{"location":"dcomibmlangmanagementverbose/#-dcomibmlangmanagementverbose","text":"Enables verbose information from java.lang.management operations to be written to the output channel during VM operations.","title":"-Dcom.ibm.lang.management.verbose"},{"location":"dcomibmlangmanagementverbose/#syntax","text":"-Dcom.ibm.lang.management.verbose There are no options for this system property.","title":"Syntax"},{"location":"dcomibmtoolsattachdirectory/","text":"-Dcom.ibm.tools.attach.directory Specify a different common directory for Attach API working files. Syntax -Dcom.ibm.tools.attach.directory=<directory_name> Setting Value Default <directory_name> [string] .com_ibm_tools_attach To change the value for directory_name , specify a different directory name. If the directory does not exist, it is created. However, if a parent directory is specified, it must exist. See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.directory"},{"location":"dcomibmtoolsattachdirectory/#-dcomibmtoolsattachdirectory","text":"Specify a different common directory for Attach API working files.","title":"-Dcom.ibm.tools.attach.directory"},{"location":"dcomibmtoolsattachdirectory/#syntax","text":"-Dcom.ibm.tools.attach.directory=<directory_name> Setting Value Default <directory_name> [string] .com_ibm_tools_attach To change the value for directory_name , specify a different directory name. If the directory does not exist, it is created. However, if a parent directory is specified, it must exist.","title":"Syntax"},{"location":"dcomibmtoolsattachdirectory/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachdisplayname/","text":"-Dcom.ibm.tools.attach.displayName Change the default display name for the target virtual machine. Syntax -Dcom.ibm.tools.attach.displayName=<display_name> Setting Value Default <display_name> [string] The command line invocation used to start the application To change the value for <display_name> , enter a character string of your choice. See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.displayName"},{"location":"dcomibmtoolsattachdisplayname/#-dcomibmtoolsattachdisplayname","text":"Change the default display name for the target virtual machine.","title":"-Dcom.ibm.tools.attach.displayName"},{"location":"dcomibmtoolsattachdisplayname/#syntax","text":"-Dcom.ibm.tools.attach.displayName=<display_name> Setting Value Default <display_name> [string] The command line invocation used to start the application To change the value for <display_name> , enter a character string of your choice.","title":"Syntax"},{"location":"dcomibmtoolsattachdisplayname/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachenable/","text":"-Dcom.ibm.tools.attach.enable Enable the Attach API for this application. Syntax -Dcom.ibm.tools.attach.enable=[yes|no] On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 systems, the following default applies: Value Effect Default yes Enable yes no Disable On z/OS\u00ae systems, the following default applies: Value Effect Default yes Enable no Disable yes Explanation A useful reference for information about the Java\u2122 Attach API can be found at http://docs.oracle.com/javase/8/docs/technotes/guides/attach/index.html . The following extract is taken from the Oracle documentation: The Attach API is an extension that provides a mechanism to attach to a Java virtual machine. A tool written in the Java Language, uses this API to attach to a target virtual machine and load its tool agent into that virtual machine. For example, to late attach the IBM\u00ae Health Center agent to a virtual machine (VM) that is already running. The OpenJ9 implementation of the Attach API is equivalent to the Oracle implementation. However, the OpenJ9 implementation cannot be used to attach to, or accept attach requests from, other VM implementations. See also Support for the Java Attach API -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.enable"},{"location":"dcomibmtoolsattachenable/#-dcomibmtoolsattachenable","text":"Enable the Attach API for this application.","title":"-Dcom.ibm.tools.attach.enable"},{"location":"dcomibmtoolsattachenable/#syntax","text":"-Dcom.ibm.tools.attach.enable=[yes|no] On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 systems, the following default applies: Value Effect Default yes Enable yes no Disable On z/OS\u00ae systems, the following default applies: Value Effect Default yes Enable no Disable yes","title":"Syntax"},{"location":"dcomibmtoolsattachenable/#explanation","text":"A useful reference for information about the Java\u2122 Attach API can be found at http://docs.oracle.com/javase/8/docs/technotes/guides/attach/index.html . The following extract is taken from the Oracle documentation: The Attach API is an extension that provides a mechanism to attach to a Java virtual machine. A tool written in the Java Language, uses this API to attach to a target virtual machine and load its tool agent into that virtual machine. For example, to late attach the IBM\u00ae Health Center agent to a virtual machine (VM) that is already running. The OpenJ9 implementation of the Attach API is equivalent to the Oracle implementation. However, the OpenJ9 implementation cannot be used to attach to, or accept attach requests from, other VM implementations.","title":"Explanation"},{"location":"dcomibmtoolsattachenable/#see-also","text":"Support for the Java Attach API -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachid/","text":"-Dcom.ibm.tools.attach.id Specify a different target virtual machine (VM) to attach to. Syntax -Dcom.ibm.tools.attach.id=<process_ID> Setting Value Default <process_ID> [string] Target VM process ID To use a different target, change the value for <process_ID> . See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.timeout","title":"-Dcom.ibm.tools.attach.id"},{"location":"dcomibmtoolsattachid/#-dcomibmtoolsattachid","text":"Specify a different target virtual machine (VM) to attach to.","title":"-Dcom.ibm.tools.attach.id"},{"location":"dcomibmtoolsattachid/#syntax","text":"-Dcom.ibm.tools.attach.id=<process_ID> Setting Value Default <process_ID> [string] Target VM process ID To use a different target, change the value for <process_ID> .","title":"Syntax"},{"location":"dcomibmtoolsattachid/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.timeout","title":"See also"},{"location":"dcomibmtoolsattachtimeout/","text":"-Dcom.ibm.tools.attach.timeout Specify a time that an application should wait when attempting to connect to a target virtual machine (VM) before ending. Syntax -Dcom.ibm.tools.attach.timeout=<ms> Setting Value Default <ms> [1 millisecond or greater] 120000 milliseconds (120 seconds) Example To timeout after 60 seconds, specify: -Dcom.ibm.tools.attach.timeout=60000 See also Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id","title":"-Dcom.ibm.tools.attach.timeout"},{"location":"dcomibmtoolsattachtimeout/#-dcomibmtoolsattachtimeout","text":"Specify a time that an application should wait when attempting to connect to a target virtual machine (VM) before ending.","title":"-Dcom.ibm.tools.attach.timeout"},{"location":"dcomibmtoolsattachtimeout/#syntax","text":"-Dcom.ibm.tools.attach.timeout=<ms> Setting Value Default <ms> [1 millisecond or greater] 120000 milliseconds (120 seconds)","title":"Syntax"},{"location":"dcomibmtoolsattachtimeout/#example","text":"To timeout after 60 seconds, specify: -Dcom.ibm.tools.attach.timeout=60000","title":"Example"},{"location":"dcomibmtoolsattachtimeout/#see-also","text":"Support for the Java\u2122 Attach API -Dcom.ibm.tools.attach.enable -Dcom.ibm.tools.attach.directory -Dcom.ibm.tools.attach.displayName -Dcom.ibm.tools.attach.id","title":"See also"},{"location":"dfileencoding/","text":"-Dfile.encoding Use this OpenJDK property to define the file encoding that is required. Syntax -Dfile.encoding=<value> Setting Value Default <value> [string] Unicode 3.0 standards where <value> defines the file encoding that is required. Explanation By default the GBK converter follows Unicode 3.0 standards. To force the GBK converter to follow Unicode 2.0 standards, use a value of bestfit936 .","title":"-Dfile.encoding"},{"location":"dfileencoding/#-dfileencoding","text":"Use this OpenJDK property to define the file encoding that is required.","title":"-Dfile.encoding"},{"location":"dfileencoding/#syntax","text":"-Dfile.encoding=<value> Setting Value Default <value> [string] Unicode 3.0 standards where <value> defines the file encoding that is required.","title":"Syntax"},{"location":"dfileencoding/#explanation","text":"By default the GBK converter follows Unicode 3.0 standards. To force the GBK converter to follow Unicode 2.0 standards, use a value of bestfit936 .","title":"Explanation"},{"location":"diag_overview/","text":"Diagnostic data and tooling OpenJ9 contains a broad range of diagnostic capabilities to help identify, isolate, and solve run time problems. These capabilities include dump files, verbose logs, and trace files, which are supported by a variety of diagnostic tools and interfaces. Dumps Various types of dumps are produced by default in response to certain events, such as a GPF fault or an OutOfMemoryError exception. You can also trigger the production of dumps by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. All dumps are produced by dump agents, which are initialized when the OpenJ9 VM starts. Different dumps target different areas of the runtime environment. If you want to generate a dump to diagnose a particular type of problem, you need to understand what data the dump will provide. The following dumps are typically used for problem diagnosis: Java dumps ( -Xdump:java ) contain information that relates to the OpenJ9 VM and the Java\u2122 application, such as the operating environment, locks, threads, hooks, shared classes, and class loaders. Heap dumps ( -Xdump:heap ) show the content of the Java heap. System dumps ( -Xdump:system ) contain a raw process image or address space of an application. Other types of dump include binary JIT dumps, stack dumps, and snap dumps. For a complete list of dump agents and the diagnostic data they produce, see Dump agents . Verbose log files Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination. Class data sharing provides a number of -Xshareclasses suboptions to provide detailed data about the content of a shared classes cache, cache I/O activity, and information about the Java Helper API (where used). For example, the -Xshareclasses:printAllStats suboption lists every class in chronological order with a reference to the location from which it was loaded. For more information, see -Xshareclasses . Garbage collection operations can be analyzed by producing verbose output from the -verbose:gc standard option. This output can be redirected to a file by specifying the -Xverbosegclog option. Information can be obtained about GC initialization, stop-the-world processing, finalization, reference processing, and allocation failures. Even more granular information can be obtained with the -Xtgc option. The JIT compiler provides verbose logging, which records all compiler operations. To find out how to enable logging, read the JIT troubleshooting content. Class loader operations can be analyzed by producing verbose output from the -verbose:dynload standard option, which shows detailed information as each class is loaded by the VM. Trace files The OpenJ9 trace facility can be used to trace applications, Java methods, or internal JVM operations with minimal impact on performance. Trace is configured by using the -Xtrace command line option, which allows you to control what is traced and when. Trace data is produced in binary format and must be processed by the OpenJ9 trace formatter to convert it to a readable form. For more information, see Trace formatter . Diagnostic tools A number of diagnostic tools are available with OpenJ9 to assist with the analysis of dump and trace files. Dump extractor The dump extractor ( jextract ) supports a full analysis of core files on specific platforms by collecting key files from a system and packaging them into an archive along with a core dump. This archive file is extremely useful when reporting issues to the OpenJ9 community, helping to ensure a faster analysis and turnaround. For more information, see Dump extractor . Dump viewer Because system dumps are binary files, OpenJ9 provides a dump viewer tool ( jdmpview ) to analyze the contents. This tool can work with dumps from any platforms independently of a system debugger. For more information, see Dump viewer . Trace formatter The trace formatter tool converts binary trace point data in a trace file into a readable format for analysis. For more information, see Trace formatter . Option builder OpenJ9 contains an extensive set of command-line options to assist with problem diagnosis. Certain options are complex, containing many sub-options with numerous parameters. Whilst these offer a great degree of flexibility, the syntax can be difficult to construct. Option builder tools are available that provide a simple graphical user interface to help you construct your command-line argument. For more information, see Option builder . HotSpot-compatible tools A number of tools are available for compatibility with the reference implementation. These tools are independently implemented by OpenJ9 but have similar functions, allowing users to migrate more easily. The available tools are listed in the Tools section. Note: If you are already familiar with tools that are provided with HotSpot, see Switching to OpenJ9 , which explains some of the differences you might encounter when using OpenJ9. Eclipse marketplace tools OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center. Interfaces JVM tool interface (JVMTI) OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information, see Java Virtual Machine Tool Interface . DTFJ Interface OpenJ9 includes the Diagnostic Tool Framework for Java (DTFJ) API. Custom applications can be written that use this API to access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information, see Diagnostic Tool Framework for Java . java.lang.management API OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center. JPDA tools OpenJ9 is compliant with the Java Platform Debugging Architecture (JPDA), which means you can use any JPDA tool for diagnosis, including Eclipse JDT Debug .","title":"Overview"},{"location":"diag_overview/#diagnostic-data-and-tooling","text":"OpenJ9 contains a broad range of diagnostic capabilities to help identify, isolate, and solve run time problems. These capabilities include dump files, verbose logs, and trace files, which are supported by a variety of diagnostic tools and interfaces.","title":"Diagnostic data and tooling"},{"location":"diag_overview/#dumps","text":"Various types of dumps are produced by default in response to certain events, such as a GPF fault or an OutOfMemoryError exception. You can also trigger the production of dumps by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. All dumps are produced by dump agents, which are initialized when the OpenJ9 VM starts. Different dumps target different areas of the runtime environment. If you want to generate a dump to diagnose a particular type of problem, you need to understand what data the dump will provide. The following dumps are typically used for problem diagnosis: Java dumps ( -Xdump:java ) contain information that relates to the OpenJ9 VM and the Java\u2122 application, such as the operating environment, locks, threads, hooks, shared classes, and class loaders. Heap dumps ( -Xdump:heap ) show the content of the Java heap. System dumps ( -Xdump:system ) contain a raw process image or address space of an application. Other types of dump include binary JIT dumps, stack dumps, and snap dumps. For a complete list of dump agents and the diagnostic data they produce, see Dump agents .","title":"Dumps"},{"location":"diag_overview/#verbose-log-files","text":"Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination. Class data sharing provides a number of -Xshareclasses suboptions to provide detailed data about the content of a shared classes cache, cache I/O activity, and information about the Java Helper API (where used). For example, the -Xshareclasses:printAllStats suboption lists every class in chronological order with a reference to the location from which it was loaded. For more information, see -Xshareclasses . Garbage collection operations can be analyzed by producing verbose output from the -verbose:gc standard option. This output can be redirected to a file by specifying the -Xverbosegclog option. Information can be obtained about GC initialization, stop-the-world processing, finalization, reference processing, and allocation failures. Even more granular information can be obtained with the -Xtgc option. The JIT compiler provides verbose logging, which records all compiler operations. To find out how to enable logging, read the JIT troubleshooting content. Class loader operations can be analyzed by producing verbose output from the -verbose:dynload standard option, which shows detailed information as each class is loaded by the VM.","title":"Verbose log files"},{"location":"diag_overview/#trace-files","text":"The OpenJ9 trace facility can be used to trace applications, Java methods, or internal JVM operations with minimal impact on performance. Trace is configured by using the -Xtrace command line option, which allows you to control what is traced and when. Trace data is produced in binary format and must be processed by the OpenJ9 trace formatter to convert it to a readable form. For more information, see Trace formatter .","title":"Trace files"},{"location":"diag_overview/#diagnostic-tools","text":"A number of diagnostic tools are available with OpenJ9 to assist with the analysis of dump and trace files.","title":"Diagnostic tools"},{"location":"diag_overview/#dump-extractor","text":"The dump extractor ( jextract ) supports a full analysis of core files on specific platforms by collecting key files from a system and packaging them into an archive along with a core dump. This archive file is extremely useful when reporting issues to the OpenJ9 community, helping to ensure a faster analysis and turnaround. For more information, see Dump extractor .","title":"Dump extractor"},{"location":"diag_overview/#dump-viewer","text":"Because system dumps are binary files, OpenJ9 provides a dump viewer tool ( jdmpview ) to analyze the contents. This tool can work with dumps from any platforms independently of a system debugger. For more information, see Dump viewer .","title":"Dump viewer"},{"location":"diag_overview/#trace-formatter","text":"The trace formatter tool converts binary trace point data in a trace file into a readable format for analysis. For more information, see Trace formatter .","title":"Trace formatter"},{"location":"diag_overview/#option-builder","text":"OpenJ9 contains an extensive set of command-line options to assist with problem diagnosis. Certain options are complex, containing many sub-options with numerous parameters. Whilst these offer a great degree of flexibility, the syntax can be difficult to construct. Option builder tools are available that provide a simple graphical user interface to help you construct your command-line argument. For more information, see Option builder .","title":"Option builder"},{"location":"diag_overview/#hotspot-compatible-tools","text":"A number of tools are available for compatibility with the reference implementation. These tools are independently implemented by OpenJ9 but have similar functions, allowing users to migrate more easily. The available tools are listed in the Tools section. Note: If you are already familiar with tools that are provided with HotSpot, see Switching to OpenJ9 , which explains some of the differences you might encounter when using OpenJ9.","title":"HotSpot-compatible tools"},{"location":"diag_overview/#eclipse-marketplace-tools","text":"OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center.","title":"Eclipse marketplace tools"},{"location":"diag_overview/#interfaces","text":"","title":"Interfaces"},{"location":"diag_overview/#jvm-tool-interface-jvmti","text":"OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information, see Java Virtual Machine Tool Interface .","title":"JVM tool interface (JVMTI)"},{"location":"diag_overview/#dtfj-interface","text":"OpenJ9 includes the Diagnostic Tool Framework for Java (DTFJ) API. Custom applications can be written that use this API to access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information, see Diagnostic Tool Framework for Java .","title":"DTFJ Interface"},{"location":"diag_overview/#javalangmanagement-api","text":"OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center.","title":"java.lang.management API"},{"location":"diag_overview/#jpda-tools","text":"OpenJ9 is compliant with the Java Platform Debugging Architecture (JPDA), which means you can use any JPDA tool for diagnosis, including Eclipse JDT Debug .","title":"JPDA tools"},{"location":"djavacompiler/","text":"-Djava.compiler This Oracle Hotspot property is used for loading a JIT compiler from a named, native library. This option can be used on the command line to specify the JIT compiler for the OpenJ9 VM. Syntax -Djava.compiler=j9jit29","title":"-Djava.compiler"},{"location":"djavacompiler/#-djavacompiler","text":"This Oracle Hotspot property is used for loading a JIT compiler from a named, native library. This option can be used on the command line to specify the JIT compiler for the OpenJ9 VM.","title":"-Djava.compiler"},{"location":"djavacompiler/#syntax","text":"-Djava.compiler=j9jit29","title":"Syntax"},{"location":"djdknativecbc/","text":"-Djdk.nativeCBC This option enables or disables OpenSSL native cryptographic support for the CBC algorithm. Syntax -Djdk.nativeCBC=[true|false] Setting value Default -Djdk.nativeCBC true yes -Djdk.nativeCBC false Explanation OpenSSL support is enabled by default for the CBC algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeCBC"},{"location":"djdknativecbc/#-djdknativecbc","text":"This option enables or disables OpenSSL native cryptographic support for the CBC algorithm.","title":"-Djdk.nativeCBC"},{"location":"djdknativecbc/#syntax","text":"-Djdk.nativeCBC=[true|false] Setting value Default -Djdk.nativeCBC true yes -Djdk.nativeCBC false","title":"Syntax"},{"location":"djdknativecbc/#explanation","text":"OpenSSL support is enabled by default for the CBC algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativechacha20/","text":"-Djdk.nativeChaCha20 This option enables or disables OpenSSL native cryptographic support for the ChaCha20 and ChaCha20-Poly1305 algorithms. Restrictions: These algorithms are not supported on Java 8. These algorithms are not supported on OpenSSL 1.0.x. Syntax -Djdk.nativeChaCha20=[true|false] Setting value Default -Djdk.nativeChaCha20 true yes -Djdk.nativeChaCha20 false Explanation OpenSSL support is enabled by default for the ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off support for these algorithms only, set this option to false . To turn off support for these and other algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeChaCha20"},{"location":"djdknativechacha20/#-djdknativechacha20","text":"This option enables or disables OpenSSL native cryptographic support for the ChaCha20 and ChaCha20-Poly1305 algorithms. Restrictions: These algorithms are not supported on Java 8. These algorithms are not supported on OpenSSL 1.0.x.","title":"-Djdk.nativeChaCha20"},{"location":"djdknativechacha20/#syntax","text":"-Djdk.nativeChaCha20=[true|false] Setting value Default -Djdk.nativeChaCha20 true yes -Djdk.nativeChaCha20 false","title":"Syntax"},{"location":"djdknativechacha20/#explanation","text":"OpenSSL support is enabled by default for the ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off support for these algorithms only, set this option to false . To turn off support for these and other algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativecrypto/","text":"-Djdk.nativeCrypto This option controls the use of OpenSSL native cryptographic support. Syntax -Djdk.nativeCrypto=[true|false] Setting value Default -Djdk.nativeCrypto true yes -Djdk.nativeCrypto false Explanation OpenSSL support is enabled by default for the Digest, CBC, GCM, RSA, and ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off the OpenSSL implementation, set this option to false . Restriction: The ChaCha20 and ChaCha20-Poly1305 algorithms are not supported on Java 8. If you want to turn off the algorithms individually, use the following system properties: -Djdk.nativeCBC -Djdk.nativeChaCha20 ( Not supported on Java 8. ) -Djdk.nativeGCM -Djdk.nativeRSA -Djdk.nativeDigest","title":"-Djdk.nativeCrypto"},{"location":"djdknativecrypto/#-djdknativecrypto","text":"This option controls the use of OpenSSL native cryptographic support.","title":"-Djdk.nativeCrypto"},{"location":"djdknativecrypto/#syntax","text":"-Djdk.nativeCrypto=[true|false] Setting value Default -Djdk.nativeCrypto true yes -Djdk.nativeCrypto false","title":"Syntax"},{"location":"djdknativecrypto/#explanation","text":"OpenSSL support is enabled by default for the Digest, CBC, GCM, RSA, and ChaCha20 and ChaCha20-Poly1305 algorithms. If you want to turn off the OpenSSL implementation, set this option to false . Restriction: The ChaCha20 and ChaCha20-Poly1305 algorithms are not supported on Java 8. If you want to turn off the algorithms individually, use the following system properties: -Djdk.nativeCBC -Djdk.nativeChaCha20 ( Not supported on Java 8. ) -Djdk.nativeGCM -Djdk.nativeRSA -Djdk.nativeDigest","title":"Explanation"},{"location":"djdknativedigest/","text":"-Djdk.nativeDigest This option enables or disables OpenSSL native cryptographic support for the Digest algorithm. Syntax -Djdk.nativeDigest=[true|false] Setting value Default -Djdk.nativeDigest true yes -Djdk.nativeDigest false Explanation To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeDigest"},{"location":"djdknativedigest/#-djdknativedigest","text":"This option enables or disables OpenSSL native cryptographic support for the Digest algorithm.","title":"-Djdk.nativeDigest"},{"location":"djdknativedigest/#syntax","text":"-Djdk.nativeDigest=[true|false] Setting value Default -Djdk.nativeDigest true yes -Djdk.nativeDigest false","title":"Syntax"},{"location":"djdknativedigest/#explanation","text":"To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativegcm/","text":"-Djdk.nativeGCM This option enables or disables OpenSSL native cryptographic support for the GCM algorithm. Syntax -Djdk.nativeGCM=[true|false] Setting value Default -Djdk.nativeGCM true yes -Djdk.nativeGCM false Explanation OpenSSL support is enabled by default for the GCM algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeGCM"},{"location":"djdknativegcm/#-djdknativegcm","text":"This option enables or disables OpenSSL native cryptographic support for the GCM algorithm.","title":"-Djdk.nativeGCM"},{"location":"djdknativegcm/#syntax","text":"-Djdk.nativeGCM=[true|false] Setting value Default -Djdk.nativeGCM true yes -Djdk.nativeGCM false","title":"Syntax"},{"location":"djdknativegcm/#explanation","text":"OpenSSL support is enabled by default for the GCM algorithm. If you want to turn off this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"djdknativersa/","text":"-Djdk.nativeRSA This option enables or disables OpenSSL native cryptographic support for the RSA algorithm. Syntax -Djdk.nativeRSA=[true|false] Setting value Default -Djdk.nativeRSA true yes -Djdk.nativeRSA false Explanation OpenSSL support is enabled by default for the RSA algorithm. If you want to turn off support for this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"-Djdk.nativeRSA"},{"location":"djdknativersa/#-djdknativersa","text":"This option enables or disables OpenSSL native cryptographic support for the RSA algorithm.","title":"-Djdk.nativeRSA"},{"location":"djdknativersa/#syntax","text":"-Djdk.nativeRSA=[true|false] Setting value Default -Djdk.nativeRSA true yes -Djdk.nativeRSA false","title":"Syntax"},{"location":"djdknativersa/#explanation","text":"OpenSSL support is enabled by default for the RSA algorithm. If you want to turn off support for this algorithm only, set this option to false . To turn off all the algorithms, see the -Djdk.nativeCrypto system property command line option.","title":"Explanation"},{"location":"dump_heapdump/","text":"Heap dump Heap dumps contain a snapshot of all the live objects that are being used by a running Java application on the Java heap. There are two formats for heap dumps; the classic format, which is ascii text and the PHD format, which is compressed and not readable. A heap dump contains a list of all object instances. For each object instance you can find the following additional data: The object address The type or class name The size Any references to other objects For a visual analysis of a heap dump as an aid to problem determination, use the Eclipse Memory Analyzer tool (MAT) or the IBM Memory Analyzer tool . Both tools require the Diagnostic Tool Framework for Java (DTFJ) plugin. To install the DTFJ plugin in the Eclipse IDE, select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java For more information about using the Heapdump feature, see Using Heapdump . See also Using DTFJ","title":"Heap dump"},{"location":"dump_heapdump/#heap-dump","text":"Heap dumps contain a snapshot of all the live objects that are being used by a running Java application on the Java heap. There are two formats for heap dumps; the classic format, which is ascii text and the PHD format, which is compressed and not readable. A heap dump contains a list of all object instances. For each object instance you can find the following additional data: The object address The type or class name The size Any references to other objects For a visual analysis of a heap dump as an aid to problem determination, use the Eclipse Memory Analyzer tool (MAT) or the IBM Memory Analyzer tool . Both tools require the Diagnostic Tool Framework for Java (DTFJ) plugin. To install the DTFJ plugin in the Eclipse IDE, select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java For more information about using the Heapdump feature, see Using Heapdump .","title":"Heap dump"},{"location":"dump_heapdump/#see-also","text":"Using DTFJ","title":"See also"},{"location":"dump_javadump/","text":"Java dump Java dumps, sometimes referred to as Java cores , are produced when the VM ends unexpectedly because of an operating system signal, OutOfMemoryError , or a user-initiated keystroke combination. You can also generate a Java dump by calling the Dump API programmatically from your application or specifying the -Xdump:java option on the command line. If your Java application crashes or hangs, Java dumps can provide useful information to help you diagnose the root cause. If your application crashes, Java dumps are generated automatically for the following types of failure: the VM receives an unexpected signal or an assertion failure the VM runs out of memory If your application hangs, you can trigger the generation of a Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. Note: On Windows, if you started the VM in a console window you can force the VM to produce a Java dump in response to a SIGBREAK signal (Ctrl-Break keyboard combination). If you didn't start in a console window there is no equivalent to a Linux kill command on Windows for sending signals. The only option here is to trigger a full system dump by finding the VM process in the Processes tab of the Windows Task Manager and clicking Create dump file . To help you understand how a Java dump can help you with problem diagnosis, this topic includes a few scenarios to help you interpret the data: A crash caused by a general protection fault (gpf) A Java heap OutOfMemoryError (OOM) A native OutOfMemoryError (OOM) A deadlock situation A hang Java dump contents Java dumps summarize the state of the VM when the event occurs, with most of the information relating to components of the VM. The file is made up of a number of sections that provide different types of information. TITLE The first section of the Java dump file provides information about the event that triggered the production of the dump. In the following example you can see that a vmstop event triggered the dump at a specified date and time. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"vmstop\" (00000002) Detail \"#0000000000000000\" received 1TIDATETIME Date: 2018/08/30 at 21:55:47:607 1TINANOTIME System nanotime: 22012355276134 1TIFILENAME Javacore filename: /home/doc-javacore/javacore.20180830.215547.30285.0001.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x106 (vm_access+exclusive_vm_access+trace_disabled) GPINFO The GPINFO section provides general information about the system that the VM is running on. The following example is taken from a Java dump that was generated on a Linux system. NULL ------------------------------------------------------------------------ 0SECTION GPINFO subcomponent dump routine NULL ================================ 2XHOSLEVEL OS Level : Linux 3.10.0-862.11.6.el7.x86_64 2XHCPUS Processors - 3XHCPUARCH Architecture : amd64 3XHNUMCPUS How Many : 4 3XHNUMASUP NUMA is either not supported or has been disabled by user NULL 1XHERROR2 Register dump section only produced for SIGSEGV, SIGILL or SIGFPE. NULL The content of this section can vary, depending on the cause of the dump. For example, if the dump was caused by a general protection fault (gpf), the library in which the crash occurred is also recorded, together with a value shown as VM flags . This value can provide some clues about which component of the VM might have been involved. Look for the following line in the output: 1XHFLAGS VM flags:0000000000000000 The hexadecimal number recorded for VM flags ends in MSSSS, where M is the VM component and SSSS is component-specific code as shown in the following table: Component Code value INTERPRETER 0x10000 GC 0x20000 GROW_STACK 0x30000 JNI 0x40000 JIT_CODEGEN 0x50000 BCVERIFY 0x60000 RTVERIFY 0x70000 SHAREDCLASSES 0x80000 A value of 0000000000000000 (0x00000) indicates that a crash occurred outside of the VM. ENVINFO This section contains useful information about the environment in which the crash took place, including the following data: Java version ( 1CIJAVAVERSION ) OpenJ9 VM and subcomponent version information ( 1CIVMVERSION , 1CIJ9VMVERSION , 1CIJITVERSION , 1CIOMRVERSION , 1CIJCLVERSION ) VM start time ( 1CISTARTTIME ) and process information ( 1CIPROCESSID ) Java home ( 1CIJAVAHOMEDIR ) and DLL ( 1CIJAVADLLDIR ) directories User arguments passed on the command line ( 1CIUSERARG ) User limits imposed by the system ( 1CIUSERLIMITS ) Environment variables in place ( 1CIENVVARS ) System information ( 1CISYSINFO ) CPU information ( 1CICPUINFO ) Control group (Cgroup) information ( 1CICGRPINFO ) For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION ENVINFO subcomponent dump routine NULL ================================= 1CIJAVAVERSION JRE 9 Linux amd64-64 (build 9.0.4-internal+0-adhoc..openj9-openjdk-jdk9) 1CIVMVERSION 20180830_000000 1CIJ9VMVERSION 8e7c6ec 1CIJITVERSION 8e7c6ec 1CIOMRVERSION 553811b_CMPRSS 1CIJCLVERSION ec1d223 based on jdk-9.0.4+12 1CIJITMODES JIT enabled, AOT enabled, FSD disabled, HCR enabled 1CIRUNNINGAS Running as a standalone JVM 1CIVMIDLESTATE VM Idle State: ACTIVE 1CICONTINFO Running in container : FALSE 1CICGRPINFO JVM support for cgroups enabled : TRUE 1CISTARTTIME JVM start time: 2018/08/30 at 21:55:47:387 1CISTARTNANO JVM start nanotime: 22012135233549 1CIPROCESSID Process ID: 30285 (0x764D) 1CICMDLINE [not available] 1CIJAVAHOMEDIR Java Home Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk 1CIJAVADLLDIR Java DLL Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/bin 1CISYSCP Sys Classpath: 1CIUSERARGS UserArgs: 2CIUSERARG -Xoptionsfile=/home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/options.default ... NULL 1CIUSERLIMITS User Limits (in bytes except for NOFILE and NPROC) NULL ------------------------------------------------------------------------ NULL type soft limit hard limit 2CIUSERLIMIT RLIMIT_AS unlimited unlimited 2CIUSERLIMIT RLIMIT_CORE 0 unlimited 2CIUSERLIMIT RLIMIT_CPU unlimited unlimited 2CIUSERLIMIT RLIMIT_DATA unlimited unlimited 2CIUSERLIMIT RLIMIT_FSIZE unlimited unlimited 2CIUSERLIMIT RLIMIT_LOCKS unlimited unlimited 2CIUSERLIMIT RLIMIT_MEMLOCK 65536 65536 2CIUSERLIMIT RLIMIT_NOFILE 4096 4096 2CIUSERLIMIT RLIMIT_NPROC 4096 30592 2CIUSERLIMIT RLIMIT_RSS unlimited unlimited 2CIUSERLIMIT RLIMIT_STACK 8388608 unlimited 2CIUSERLIMIT RLIMIT_MSGQUEUE 819200 819200 2CIUSERLIMIT RLIMIT_NICE 0 0 2CIUSERLIMIT RLIMIT_RTPRIO 0 0 2CIUSERLIMIT RLIMIT_SIGPENDING 30592 30592 NULL 1CIENVVARS Environment Variables NULL ------------------------------------------------------------------------ 2CIENVVAR XDG_VTNR=1 2CIENVVAR SSH_AGENT_PID=2653 ... NULL 1CISYSINFO System Information NULL ------------------------------------------------------------------------ 2CISYSINFO /proc/sys/kernel/core_pattern = core 2CISYSINFO /proc/sys/kernel/core_uses_pid = 1 NULL 1CICPUINFO CPU Information NULL ------------------------------------------------------------------------ 2CIPHYSCPU Physical CPUs: 4 2CIONLNCPU Online CPUs: 4 2CIBOUNDCPU Bound CPUs: 4 2CIACTIVECPU Active CPUs: 0 2CITARGETCPU Target CPUs: 4 NULL 1CICGRPINFO Cgroup Information NULL ------------------------------------------------------------------------ 2CICGRPINFO subsystem : cpu 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU Period : 100000 microseconds 3CICGRPINFO CPU Quota : Not Set 3CICGRPINFO CPU Shares : 1024 3CICGRPINFO Period intervals elapsed count : 0 3CICGRPINFO Throttled count : 0 3CICGRPINFO Total throttle time : 0 nanoseconds 2CICGRPINFO subsystem : cpuset 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU exclusive : 1 3CICGRPINFO Mem exclusive : 1 3CICGRPINFO CPUs : 0-3 3CICGRPINFO Mems : 0 2CICGRPINFO subsystem : memory 2CICGRPINFO cgroup name : / 3CICGRPINFO Memory Limit : Not Set 3CICGRPINFO Memory + Swap Limit : Not Set 3CICGRPINFO Memory Usage : 5363396608 bytes 3CICGRPINFO Memory + Swap Usage : 5363396608 bytes 3CICGRPINFO Memory Max Usage : 0 bytes 3CICGRPINFO Memory + Swap Max Usage : 0 bytes 3CICGRPINFO Memory limit exceeded count : 0 3CICGRPINFO Memory + Swap limit exceeded count : 0 3CICGRPINFO OOM Killer Disabled : 0 3CICGRPINFO Under OOM : 0 NULL NATIVEMEMINFO This section records information about native memory that is requested by using library functions such as malloc() and mmap() . Values are provided as a breakdown, per component, indicating the total number of bytes allocated and the number of native memory allocations. In the following example, 4,682,840 bytes of native memory are allocated (but not yet freed) to VM Classes, which corresponds to 141 allocations. NULL ------------------------------------------------------------------------ 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 2,569,088,312 bytes / 4653 allocations 1MEMUSER | 2MEMUSER +--VM: 2,280,088,336 bytes / 2423 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 4,682,840 bytes / 141 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 2,054,966,784 bytes / 433 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 2,014,113,792 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 40,852,992 bytes / 432 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,970,016 bytes / 156 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 197,760 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 155,424 bytes / 123 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 180,056 bytes / 263 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,776 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 36,184 bytes / 52 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 208,179,632 bytes / 72 allocations 3MEMUSER | | | 4MEMUSER | | +--Unused <32bit allocation regions: 208,168,752 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,880 bytes / 71 allocations 2MEMUSER | | 3MEMUSER | +--Other: 1,055,048 bytes / 1293 allocations 1MEMUSER | 2MEMUSER +--JIT: 288,472,816 bytes / 140 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 268,435,456 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 2,097,216 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 17,940,144 bytes / 138 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 13,432 bytes / 25 allocations 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 13,432 bytes / 25 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 3,184 bytes / 13 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 1,056 bytes / 12 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Other: 2,128 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,248 bytes / 12 allocations 1MEMUSER | 2MEMUSER +--Unknown: 513,728 bytes / 2065 allocations NULL This section does not record memory that is allocated by application or JNI code and is typically a little less than the value recorded by operating system tools. MEMINFO This section relates to memory management, providing a breakdown of memory usage in the VM for the object heap, internal memory, memory used for classes, the JIT code cache, and JIT data cache in decimal and hexadecimal format. You can also find out which garbage collection policy is in use when the dump is produced. The object memory area ( 1STHEAPTYPE ) records each memory region in use, its start and end address, and region size. Further information is recorded about the memory segments used for internal memory, class memory, the JIT code cache and JIT data cache ( 1STSEGMENT ). This information includes the address of the segment control data structure, the start and end address of the native memory segment, as well as the segment size. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0x00007FF4F00744A0 -- -- -- Generational 1STHEAPREGION 0x00007FF4F0074CE0 0x0000000087F40000 0x0000000088540000 0x0000000000600000 Generational/Tenured Region 1STHEAPREGION 0x00007FF4F0074930 0x00000000FFE00000 0x00000000FFF00000 0x0000000000100000 Generational/Nursery Region 1STHEAPREGION 0x00007FF4F0074580 0x00000000FFF00000 0x0000000100000000 0x0000000000100000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 8388608 (0x0000000000800000) 1STHEAPINUSE Total memory in use: 2030408 (0x00000000001EFB48) 1STHEAPFREE Total memory free: 6358200 (0x00000000006104B8) NULL 1STSEGTYPE Internal Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F004CBC8 0x00007FF4CD33C000 0x00007FF4CD33C000 0x00007FF4CE33C000 0x01000440 0x0000000001000000 1STSEGMENT 0x00007FF4F004CB08 0x00007FF4DE43D030 0x00007FF4DE517770 0x00007FF4DE53D030 0x00800040 0x0000000000100000 NULL 1STSEGTOTAL Total memory: 17825792 (0x0000000001100000) 1STSEGINUSE Total memory in use: 894784 (0x00000000000DA740) 1STSEGFREE Total memory free: 16931008 (0x00000000010258C0) NULL 1STSEGTYPE Class Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F03B5638 0x0000000001053D98 0x000000000105BD98 0x000000000105BD98 0x00010040 0x0000000000008000 1STSEGMENT 0x00007FF4F03B5578 0x0000000001048188 0x0000000001050188 0x0000000001050188 0x00010040 0x0000000000008000 ... NULL 1STSEGTOTAL Total memory: 3512520 (0x00000000003598C8) 1STSEGINUSE Total memory in use: 3433944 (0x00000000003465D8) 1STSEGFREE Total memory free: 78576 (0x00000000000132F0) NULL 1STSEGTYPE JIT Code Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F00961F8 0x00007FF4CE43D000 0x00007FF4CE445790 0x00007FF4DE43D000 0x00000068 0x0000000010000000 NULL 1STSEGTOTAL Total memory: 268435456 (0x0000000010000000) 1STSEGINUSE Total memory in use: 34704 (0x0000000000008790) 1STSEGFREE Total memory free: 268400752 (0x000000000FFF7870) 1STSEGLIMIT Allocation limit: 268435456 (0x0000000010000000) NULL 1STSEGTYPE JIT Data Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F0096668 0x00007FF4CC553030 0x00007FF4CC753030 0x00007FF4CC753030 0x00000048 0x0000000000200000 NULL 1STSEGTOTAL Total memory: 2097152 (0x0000000000200000) 1STSEGINUSE Total memory in use: 2097152 (0x0000000000200000) 1STSEGFREE Total memory free: 0 (0x0000000000000000) 1STSEGLIMIT Allocation limit: 402653184 (0x0000000018000000) NULL 1STGCHTYPE GC History NULL In the example, the GC History ( 1STGCHTYPE ) section is blank. This section is populated if a garbage collection cycle occurred in a VM that is being diagnosed with the trace facility. LOCKS This section of the Java dump provides information about locks, which protect shared resources from being accessed by more than one entity at a time. The information is essential in a deadlock situation, where two threads attempt to synchronize on an object and lock an instance of a class. Precise information is recorded about the threads that are causing the problem, which enables you to identify the root cause. The following example shows a typical LOCKS section, where no deadlocks existed at the time the dump was triggered. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 3 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x00007FF4B0001D78 infl_mon_t: 0x00007FF4B0001DF8: 3LKMONOBJECT java/lang/ref/ReferenceQueue@0x00000000FFE26A10: <unowned> 3LKNOTIFYQ Waiting to be notified: 3LKWAITNOTIFY \"Common-Cleaner\" (J9VMThread:0x0000000000FD0100) NULL 1LKREGMONDUMP JVM System Monitor Dump (registered monitors): 2LKREGMON Thread global lock (0x00007FF4F0004FE8): <unowned> 2LKREGMON &(PPG_mem_mem32_subAllocHeapMem32.monitor) lock (0x00007FF4F0005098): <unowned> 2LKREGMON NLS hash table lock (0x00007FF4F0005148): <unowned> ... NULL THREADS The THREADS section of a Java dump file provides summary information about the VM thread pool and detailed information about Java threads, native threads, and stack traces. Understanding the content of this section can help you diagnose problems that are caused by blocked or waiting threads. A Java thread runs on a native thread. Several lines are recorded for each Java thread in the Thread Details subsection, which include the following key pieces of information: 3XMTHREADINFO : The thread name, address information for the VM thread structures and Java thread object, the thread state, and thread priority. 3XMJAVALTHREAD : The Java thread ID and daemon status from the thread object. 3XMTHREADINFO1 : The native operating system thread ID, priority, scheduling policy, internal VM thread state, and VM thread flags. 3XMTHREADINFO2 : The native stack address range. 3XMTHREADINFO3 : Java callstack information ( 4XESTACKTRACE ) or Native call stack information ( 4XENATIVESTACK ). 5XESTACKTRACE : This line indicates whether locks were taken by a specific method. Java thread priorities are mapped to operating system priority values. Thread states are shown in the following table: Thread state value Status Description R Runnable The thread is able to run CW Condition Wait The thread is waiting S Suspended The thread is suspended by another thread Z Zombie The thread is destroyed P Parked The thread is parked by java.util.concurrent B Blocked The thread is waiting to obtain a lock For threads that are parked (P), blocked (B), or waiting (CW), an additional line ( 3XMTHREADBLOCK ) is included in the output that shows what the thread is parked on, blocked on, or waiting for. For clarity, the following example shows a shortened version of a typical THREADS section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 18 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMTHDINFO Thread Details NULL 3XMTHREADINFO \"JIT Diagnostic Compilation Thread-7 Suspended\" J9VMThread:0x0000000000EFC500, omrthread_t:0x00007FF4F00A77E8, java/lang/Thread:0x00000000FFE97480, state:R, prio=10 3XMJAVALTHREAD (java/lang/Thread getId:0xA, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7657, native priority:0xB, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CCC36000, to:0x00007FF4CCD36000, size:0x100000) 3XMCPUTIME CPU usage total: 0.000037663 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 3XMTHREADINFO \"Common-Cleaner\" J9VMThread:0x0000000000FD0100, omrthread_t:0x00007FF4F022A520, java/lang/Thread:0x00000000FFE26F40, state:CW, prio=8 3XMJAVALTHREAD (java/lang/Thread getId:0x2, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x765A, native priority:0x8, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00080181) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CC0B8000, to:0x00007FF4CC0F8000, size:0x40000) 3XMCPUTIME CPU usage total: 0.000150926 secs, current category=\"Application\" 3XMTHREADBLOCK Waiting on: java/lang/ref/ReferenceQueue@0x00000000FFE26A10 Owned by: <unowned> 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Object.wait(Native Method) 4XESTACKTRACE at java/lang/Object.wait(Object.java:221) 4XESTACKTRACE at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:138) 5XESTACKTRACE (entered lock: java/lang/ref/ReferenceQueue@0x00000000FFE26A10, entry count: 1) 4XESTACKTRACE at jdk/internal/ref/CleanerImpl.run(CleanerImpl.java:148) 4XESTACKTRACE at java/lang/Thread.run(Thread.java:835) 4XESTACKTRACE at jdk/internal/misc/InnocuousThread.run(InnocuousThread.java:122) 3XMTHREADINFO3 No native callstack available for this thread NULL NULL 3XMTHREADINFO \"IProfiler\" J9VMThread:0x0000000000F03D00, omrthread_t:0x00007FF4F00B06F8, java/lang/Thread:0x00000000FFE97B60, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0xC, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7659, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4F8940000, to:0x00007FF4F8960000, size:0x20000) 3XMCPUTIME CPU usage total: 0.004753103 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 1XMWLKTHDERR The following was reported while collecting native stacks: 2XMWLKTHDERR unable to count threads(3, -2) NULL 1XMTHDSUMMARY Threads CPU Usage Summary NULL ========================= NULL 1XMTHDCATINFO Warning: to get more accurate CPU times for the GC, the option -XX:-ReduceCPUMonitorOverhead can be used. See the user guide for more information. NULL 1XMTHDCATEGORY All JVM attached threads: 0.280083000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--System-JVM: 0.270814000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--GC: 0.000599000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--JIT: 0.071904000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--Application: 0.009269000 secs NULL HOOKS This section shows internal VM event callbacks, which are used for diagnosing performance problems in the VM. Multiple hook interfaces are listed, which include their individual hook events. The following example shows data for the J9VMHookInterface , including the total time for all previous events, the call site location (<source file>:<line number>), start time, and duration of the last callback and the longest callback (all times measured in microseconds). The hook data is reset after each Java dump. NULL ------------------------------------------------------------------------ SECTION HOOK subcomponent dump routine NULL ========================= 1NOTE These data are reset every time a javacore is taken 1HKINTERFACE MM_OMRHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_PrivateHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_HookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9VMHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 1 3HKCALLCOUNT 1239 3HKTOTALTIME 219564us 3HKLAST Last Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T00:15:14.664 4HKDURATION Duration : 16us 3HKLONGST Longest Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T21:28:34.895 4HKDURATION Duration : 5012us NULL ... 1HKINTERFACE J9VMZipCachePoolHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9JITHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 3 3HKCALLCOUNT 3113 3HKTOTALTIME 4904us 3HKLAST Last Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:04:15.320 4HKDURATION Duration : 3us 3HKLONGST Longest Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:37:17.633 4HKDURATION Duration : 27us NULL ... SHARED CLASSES If the shared classes cache is enabled at run time, the information provided in a Java dump file describes settings that were used when creating the cache, together with summary information about the size and content of the cache. In the following example, the shared classes cache was created with a Class Debug Area ( -Xnolinenumbers=false ). Byte code instrumentation (BCI) is enabled, which is the default, and VMs sharing the cache are allowed to store classpaths, which is also the default. The Cache Summary shows a cache size ( 2SCLTEXTCSZ ) of 16776608 bytes, with a soft maximum size ( 2SCLTEXTSMB ) also of 16776608 bytes, which leaves 12691668 bytes of free space ( 2SCLTEXTFRB ). The size of the Class Debug Area ( 2SCLTEXTDAS ) is 1331200 bytes and only 11% of this space is used. In the Cache Memory Status subsection, the line 2SCLTEXTCMDT indicates the name and location of the shared cache and cr indicates that the cache is a 64-bit compressed references cache. NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = true NULL 2SCLTEXTRCS ROMClass start address = 0x00007F423061C000 2SCLTEXTRCE ROMClass end address = 0x00007F42307B9A28 2SCLTEXTMSA Metadata start address = 0x00007F42313D42FC 2SCLTEXTCEA Cache end address = 0x00007F4231600000 2SCLTEXTRTF Runtime flags = 0x00102001ECA6028B 2SCLTEXTCGN Cache generation = 35 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 12691668 2SCLTEXTRCB ROMClass bytes = 1694248 2SCLTEXTAOB AOT code bytes = 0 2SCLTEXTADB AOT data bytes = 0 2SCLTEXTAHB AOT class hierarchy bytes = 32 2SCLTEXTATB AOT thunk bytes = 0 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJHB JIT hint bytes = 308 2SCLTEXTJPB JIT profile bytes = 2296 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 919328 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 2SCLTEXTMDA Metadata bytes = 23448 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 11% 2SCLTEXTDAN Class LineNumberTable bytes = 156240 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 595 2SCLTEXTNAM Number AOT Methods = 0 2SCLTEXTNAD Number AOT Data Entries = 0 2SCLTEXTNAH Number AOT Class Hierarchy = 1 2SCLTEXTNAT Number AOT Thunks = 0 2SCLTEXTNJH Number JIT Hints = 14 2SCLTEXTNJP Number JIT Profiles = 20 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 5 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0% NULL 2SCLTEXTCPF Cache is 24% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT sharedcc_doc-javacore CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_sharedcc_doc-javacore_G35 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL The following example shows information for a layered cache: NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCSTL Cache Statistics for Top Layer NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = false NULL 2SCLTEXTRCS ROMClass start address = 0x00007F0EDB567000 2SCLTEXTRCE ROMClass end address = 0x00007F0EDB567000 2SCLTEXTMSA Metadata start address = 0x00007F0EDC40241C 2SCLTEXTCEA Cache end address = 0x00007F0EDC54B000 2SCLTEXTRTF Runtime flags = 0x80102001ECA602BB 2SCLTEXTCGN Cache generation = 41 2SCLTEXTCLY Cache layer = 1 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 15315996 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 0% 2SCLTEXTDAN Class LineNumberTable bytes = 0 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTCPF Cache is 8% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT Cache1 CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_Cache1_G41L01 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL 1SCLTEXTCSAL Cache Statistics for All Layers NULL 2SCLTEXTRCB ROMClass bytes = 1459040 2SCLTEXTAOB AOT code bytes = 57624 2SCLTEXTADB AOT data bytes = 272 2SCLTEXTAHB AOT class hierarchy bytes = 1840 2SCLTEXTATB AOT thunk bytes = 632 2SCLTEXTJHB JIT hint bytes = 484 2SCLTEXTJPB JIT profile bytes = 0 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 1134016 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 503 2SCLTEXTNAM Number AOT Methods = 16 2SCLTEXTNAD Number AOT Data Entries = 1 2SCLTEXTNAH Number AOT Class Hierarchy = 28 2SCLTEXTNAT Number AOT Thunks = 11 2SCLTEXTNJH Number JIT Hints = 15 2SCLTEXTNJP Number JIT Profiles = 0 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 21 2SCLTEXTNSH Number Startup Hint Entries = 0 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0% CLASSES The classes section shows information about class loaders. The first part is a summary that records each available class loader ( 2CLTEXTCLLOADER ) followed by the number of libraries and classes that it loaded. This information is followed by a more detailed list of libraries ( 1CLTEXTCLLIB ) and classes ( 1CLTEXTCLLO ) that are loaded. In the example you can see that the java/lang/InternalAnonymousClassLoader loaded 2 classes, jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) and jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) . NULL ------------------------------------------------------------------------ 0SECTION CLASSES subcomponent dump routine NULL ================================= 1CLTEXTCLLOS Classloader summaries 1CLTEXTCLLSS 12345678: 1=primordial,2=extension,3=shareable,4=middleware,5=system,6=trusted,7=application,8=delegating 2CLTEXTCLLOADER p---st-- Loader *System*(0x00000000FFE1D258) 3CLNMBRLOADEDLIB Number of loaded libraries 5 3CLNMBRLOADEDCL Number of loaded classes 638 2CLTEXTCLLOADER -x--st-- Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 2CLTEXTCLLOADER ----st-- Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 2 2CLTEXTCLLOADER -----ta- Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0), Parent jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 1CLTEXTCLLIB ClassLoader loaded libraries 2CLTEXTCLLIB Loader *System*(0x00000000FFE1D258) 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/jclse9_29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/java 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/j9jit29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/zip 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/nio 1CLTEXTCLLOD ClassLoader loaded classes 2CLTEXTCLLOAD Loader *System*(0x00000000FFE1D258) 3CLTEXTCLASS [Ljava/lang/Thread$State;(0x0000000001056400) ... 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 2CLTEXTCLLOAD Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0) Scenarios General Protection Fault In this scenario, a Java application has crashed due to a General Protection Fault (GPF), automatically generating a Java dump file. The first section of the file (TITLE) tells you that the GPF triggered the Java dump. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"gpf\" (00002000) received 1TIDATETIME Date: 2018/09/24 at 15:18:03:115 1TINANOTIME System nanotime: 4498949283020796 1TIFILENAME Javacore filename: /home/test/JNICrasher/javacore.20180924.151801.29399.0002.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x100 (trace_disabled) 1TIPREPINFO Exclusive VM access not taken: data may not be consistent across javacore sections To troubleshoot this problem, you need to know which thread caused the GPF to occur. The thread that was running at the time of the crash is reported as the current thread in the THREADS section of the Java dump. Here is an extract from the THREADS section: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 15 2XMPOOLDAEMON Current total number of live daemon threads: 14 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60E00, omrthread_t:0xB6B049D8, java/lang/Thread:0xB55444D0, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x72D8, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00000000) 3XMTHREADINFO2 (native stack address range from:0xB6CE3000, to:0xB74E4000, size:0x801000) 3XMCPUTIME CPU usage total: 0.319865924 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=778008 (0xBDF18) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at JNICrasher.doSomethingThatCrashes(Native Method) 4XESTACKTRACE at JNICrasher.main(JNICrasher.java:7) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C6F663 [libj9prt29.so+0x3b663]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6F1CE [libj9prt29.so+0x3b1ce]) 4XENATIVESTACK (0xB6C6F2C6 [libj9prt29.so+0x3b2c6]) 4XENATIVESTACK (0xB6C6ED93 [libj9prt29.so+0x3ad93]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6ED07 [libj9prt29.so+0x3ad07]) 4XENATIVESTACK (0xB6C6AA3D [libj9prt29.so+0x36a3d]) 4XENATIVESTACK (0xB6C6C3A4 [libj9prt29.so+0x383a4]) 4XENATIVESTACK (0xB667FA19 [libj9dmp29.so+0xfa19]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66878CF [libj9dmp29.so+0x178cf]) 4XENATIVESTACK (0xB6688083 [libj9dmp29.so+0x18083]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6680C0D [libj9dmp29.so+0x10c0d]) 4XENATIVESTACK (0xB667F9D7 [libj9dmp29.so+0xf9d7]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB668B02F [libj9dmp29.so+0x1b02f]) 4XENATIVESTACK (0xB668B4D3 [libj9dmp29.so+0x1b4d3]) 4XENATIVESTACK (0xB66740F1 [libj9dmp29.so+0x40f1]) 4XENATIVESTACK (0xB66726FA [libj9dmp29.so+0x26fa]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66726A9 [libj9dmp29.so+0x26a9]) 4XENATIVESTACK (0xB6676AE4 [libj9dmp29.so+0x6ae4]) 4XENATIVESTACK (0xB668D75A [libj9dmp29.so+0x1d75a]) 4XENATIVESTACK (0xB6A28DD4 [libj9vm29.so+0x81dd4]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A289EE [libj9vm29.so+0x819ee]) 4XENATIVESTACK (0xB6A29A40 [libj9vm29.so+0x82a40]) 4XENATIVESTACK (0xB6C52B6A [libj9prt29.so+0x1eb6a]) 4XENATIVESTACK __kernel_rt_sigreturn+0x0 (0xB7747410) 4XENATIVESTACK (0xB75330B6 [libffi29.so+0x50b6]) 4XENATIVESTACK ffi_raw_call+0xad (0xB7531C53 [libffi29.so+0x3c53]) 4XENATIVESTACK (0xB69BE4AB [libj9vm29.so+0x174ab]) 4XENATIVESTACK (0xB6A665BC [libj9vm29.so+0xbf5bc]) 4XENATIVESTACK (0xB6A15552 [libj9vm29.so+0x6e552]) 4XENATIVESTACK (0xB6A30894 [libj9vm29.so+0x89894]) 4XENATIVESTACK (0xB6A6F169 [libj9vm29.so+0xc8169]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A6F1FA [libj9vm29.so+0xc81fa]) 4XENATIVESTACK (0xB6A30994 [libj9vm29.so+0x89994]) 4XENATIVESTACK (0xB6A2CE4C [libj9vm29.so+0x85e4c]) 4XENATIVESTACK (0xB770487D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7719F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB763543E [libc.so.6+0xee43e]) The extract tells you that the current thread was java/lang/Thread , and information is provided about the Java callstack and native callstack ( 3XMTHREADINFO3 ) at the point at which the crash occurred. To simulate a crash caused by a bug in an application, this example calls a JNI method whose native implementation causes a crash. The Java callstack shows the call to the JNI native method ( JNIcrasher ), and the native callstack shows the point of failure. In this example, the native call stack does not include any function names to help you isolate the error in the native code. You can get this information from a system dump, which is usually produced alongside the Java dump. Open the system dump with the Dump viewer and use the info thread command to print the Java and native stack for the current thread. Java OutOfMemoryError In this scenario, the Java heap runs out of memory, causing an OutOfMemoryError , which automatically generates a Java dump file. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for Java heap space. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"Java heap space\" received 1TIDATETIME Date: 2018/09/14 at 15:29:42:709 1TINANOTIME System nanotime: 3635648876608448 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.152929.18885.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) The MEMINFO section records how much memory is allocated to the Java heap ( 1STHEAPTYPE Object Memory ), how much is in use, and how much is free. Solving your problem might be as simple as setting a larger heap size when you start your application. If you don't know what size the Java heap was set to, you might find that information in the ENVINFO section, which records the command line options that were used when the application started. Look or search for the 1CIUSERARGS UserArgs: string and review the entries recorded for all lines that start 2CIUSERARG . The Java heap size is set by the -Xmx option. If the size has not been set on the command line by -Xmx , the default value applies, which you can find in Default Settings . In this scenario the solution to the problem is not an adjustment to the Java heap size. Here is the MEMINFO section: 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0xB6B49D20 -- -- -- Generational 1STHEAPREGION 0xB6B4A078 0x95750000 0xB5470000 0x1FD20000 Generational/Tenured Region 1STHEAPREGION 0xB6B49F10 0xB5470000 0xB54C0000 0x00050000 Generational/Nursery Region 1STHEAPREGION 0xB6B49DA8 0xB54C0000 0xB5750000 0x00290000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 536870912 (0x20000000) 1STHEAPINUSE Total memory in use: 302603160 (0x12095B98) 1STHEAPFREE Total memory free: 234267752 (0x0DF6A468) The output shows that only 56% of the Java heap is in use, so this suggests that the application is trying to do something sub-optimal. To investigate further you need to work out which thread was the current thread when the OOM occurred to see what it was trying to do. As in the previous scenario, you can find the current thread in the THREADS section. Here is an extract from the output: 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60C00, omrthread_t:0xB6B049D8, java/lang/Thread:0x95764520, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x49C6, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6CB5000, to:0xB74B6000, size:0x801000) 3XMCPUTIME CPU usage total: 8.537823831 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/StringBuffer.ensureCapacityImpl(StringBuffer.java:696) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:486(Compiled Code)) 5XESTACKTRACE (entered lock: java/lang/StringBuffer@0x957645B8, entry count: 1) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:428(Compiled Code)) 4XESTACKTRACE at HeapBreaker.main(HeapBreaker.java:34(Compiled Code)) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C535B3 [libj9prt29.so+0x3b5b3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C5311E [libj9prt29.so+0x3b11e]) 4XENATIVESTACK (0xB6C53216 [libj9prt29.so+0x3b216]) 4XENATIVESTACK (0xB6C52CE3 [libj9prt29.so+0x3ace3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C52C57 [libj9prt29.so+0x3ac57]) 4XENATIVESTACK (0xB6C4E9CD [libj9prt29.so+0x369cd]) 4XENATIVESTACK (0xB6C502FA [libj9prt29.so+0x382fa]) To simulate a Java OutOfMemoryError , this example application repeatedly appends characters to a StringBuffer object in an infinite loop. The Java callstack shows the HeapBreaker.main method appending characters ( java/lang/StringGuffer.append ) until the method java/lang/StringBuffer.ensureCapacityImpl() throws the OutOfMemoryError . StringBuffer objects are wrappers for character arrays ( char[] ) and when the capacity of the underlying array is reached, the contents are automatically copied into a new, larger array. The new array is created in the StringBuffer.ensureCapacity() method, which more or less doubles the size of the old array. In this scenario, the array takes up all the remaining space in the Java heap. The MEMINFO section of the Java dump file can also tell you when an unexpectedly large allocation request causes an OOM. Look for the GC History ( 1STGCHTYPE ) section, which details allocation requests that trigger GC activity. In the sample output you can see that a large allocation request ( requestedbytes=603979784 ) triggered a global GC. When the GC could not free up sufficient space in the heap to satisfy the request, the allocation failure generated the OOM. 1STGCHTYPE GC History 3STHSTTYPE 14:29:29:580239000 GMT j9mm.101 - J9AllocateIndexableObject() returning NULL! 0 bytes requested for object of class B6BBC300 from memory space 'Generational' id=B6B49D20 3STHSTTYPE 14:29:29:579916000 GMT j9mm.134 - Allocation failure end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579905000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579859000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:579807000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:579776000 GMT j9mm.137 - Compact end: bytesmoved=301989896 3STHSTTYPE 14:29:29:313899000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:313555000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:310772000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:310765000 GMT j9mm.94 - Class unloading end: classloadersunloaded=0 classesunloaded=0 3STHSTTYPE 14:29:29:310753000 GMT j9mm.60 - Class unloading start 3STHSTTYPE 14:29:29:310750000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:306013000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:305957000 GMT j9mm.474 - GlobalGC start: globalcount=9 3STHSTTYPE 14:29:29:305888000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:305837000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:305808000 GMT j9mm.137 - Compact end: bytesmoved=189784 3STHSTTYPE 14:29:29:298042000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:297695000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:291696000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:291692000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:284994000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:284941000 GMT j9mm.474 - GlobalGC start: globalcount=8 3STHSTTYPE 14:29:29:284916000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:284914000 GMT j9mm.469 - Allocation failure cycle start: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:284893000 GMT j9mm.470 - Allocation failure cycle end: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:284858000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=2 flipbytes=64 newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:284140000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:283160000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=335 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:283123000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:283120000 GMT j9mm.469 - Allocation failure cycle start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:283117000 GMT j9mm.133 - Allocation failure start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:269762000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269751000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269718000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:268981000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:268007000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=334 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:267969000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:267966000 GMT j9mm.469 - Allocation failure cycle start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:267963000 GMT j9mm.133 - Allocation failure start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:249015000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:249003000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:248971000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 Although the Java code that was used in this scenario deliberately triggered an OutOfMemoryError in a pronounced way, similar allocation issues can and do occur when dealing with large data sets such as XML files. The next step in diagnosing the problem is to open the system dump that gets generated automatically when an OutOfMemoryError occurs. Open the dump with the Eclipse Memory Analyzer tool (MAT) and search for the StringBuffer object, which should provide further clues about what went wrong. A common example is seeing the same String duplicated over and over again, which might indicate that code is stuck in a loop. Note: If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > If, unlike the previous scenario, you receive an OutOfMemoryError and the MEMINFO section shows that there is very little space left on the Java heap, the current thread information is typically not important. The current thread is simply the thread that happened to be current when the space ran out. In this situation you might want to increase your Java heap size. For help with this task, see How to do heap sizing . Native OutOfMemoryError In this scenario, the VM runs out of native memory. Native memory is memory that is used by the VM for storing all virtualized resources and data that it needs for VM operations. Native memory that is available to the VM process is limited by the operating system. The native memory available to the VM might also be subject to additional limits imposed by the operating system, for example Unix ulimits . When a NativeOutOfMemoryError occurs, a Java dump is generated by default. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for native memory. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"native memory exhausted\" received 1TIDATETIME Date: 2018/09/14 at 15:49:55:887 1TINANOTIME System nanotime: 3636862054495675 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.154814.19708.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) Sometimes, the current thread is responsible for causing the NativeOutOfMemoryError . Information about the current thread can be found in the THREADS section, as shown in the following output. 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6C60C00, omrthread_t:0xB6C049D8, java/lang/Thread:0xB55E3C10, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x4CFD, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6D4E000, to:0xB754F000, size:0x801000) 3XMCPUTIME CPU usage total: 3.654896026 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at sun/misc/Unsafe.allocateDBBMemory(Native Method) 4XESTACKTRACE at java/nio/DirectByteBuffer.<init>(DirectByteBuffer.java:127(Compiled Code)) 4XESTACKTRACE at java/nio/ByteBuffer.allocateDirect(ByteBuffer.java:311) 4XESTACKTRACE at NativeHeapBreaker.main(NativeHeapBreaker.java:9) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6A9F5B3 [libj9prt29.so+0x3b5b3]) ... 4XENATIVESTACK (0xB582CC9C [libjclse7b_29.so+0x40c9c]) 4XENATIVESTACK Java_sun_misc_Unsafe_allocateDBBMemory+0x88 (0xB5827F6B [libjclse7b_29.so+0x3bf6b]) 4XENATIVESTACK (0x94A2084A [<unknown>+0x0]) 4XENATIVESTACK (0xB6B2538B [libj9vm29.so+0x6c38b]) 4XENATIVESTACK (0xB6B4074C [libj9vm29.so+0x8774c]) 4XENATIVESTACK (0xB6B7F299 [libj9vm29.so+0xc6299]) 4XENATIVESTACK (0xB6A82F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6B7F32A [libj9vm29.so+0xc632a]) 4XENATIVESTACK (0xB6B4084C [libj9vm29.so+0x8784c]) 4XENATIVESTACK (0xB6B3CD0C [libj9vm29.so+0x83d0c]) 4XENATIVESTACK (0xB776F87D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7784F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB76A043E [libc.so.6+0xee43e]) For clarity in the Native callstack output, ... indicates that some lines are removed. The Java callstack shows the transition from Java to native code ( sun/misc/Unsafe.allocateDBBMemory(Native Method) ), indicating a request for Direct Byte Buffer (DBB) storage. DBB storage is backed by native memory, with the Java heap containing only a reference to the native heap buffer. In this scenario, DBB storage is the likely culprit for this NativeOutOfMemoryError . The next step is to investigate the NATIVEMEMINFO section of the Java dump file, which reports the amount of memory used by the JRE process, broken down into component areas. 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 3,166,386,688 bytes / 4388 allocations 1MEMUSER | 2MEMUSER +--VM: 563,176,824 bytes / 1518 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 3,104,416 bytes / 120 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 548,181,888 bytes / 398 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 536,932,352 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 11,249,536 bytes / 397 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,817,120 bytes / 147 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 115,584 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 84,704 bytes / 114 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 163,688 bytes / 268 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,320 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 23,296 bytes / 55 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 8,576 bytes / 74 allocations 2MEMUSER | | 3MEMUSER | +--Other: 860,520 bytes / 443 allocations 1MEMUSER | 2MEMUSER +--JIT: 3,744,728 bytes / 122 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 2,097,152 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 524,336 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 1,123,240 bytes / 120 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 2,599,463,024 bytes / 2732 allocations 2MEMUSER | | 3MEMUSER | +--Harmony Class Libraries: 1,024 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 2,599,462,000 bytes / 2731 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 2,598,510,480 bytes / 2484 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 2,598,510,480 bytes / 2484 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 951,520 bytes / 247 allocations 1MEMUSER | 2MEMUSER +--Unknown: 2,112 bytes / 16 allocations NULL In the VM Class Libraries section, the amount of memory allocated for Direct Byte Buffers is shown. Because the NativeOutOfMemoryError was received on a small 32-bit system, a value of 2,598,510,480 bytes indicates that the operating system has run out of memory. On a larger UNIX system, the process might have run out of memory because of the ulimit setting. Increasing the value for ulimit might avoid the error, which you can do temporarily by setting ulimit -f unlimited in your current session. The theoretical maximum size for a 32-bit process is the size of the 32-bit address space, which is 4 GB. On most operating systems a portion of the address space for each process is used by the kernel, such that the real limit for 32-bit processes is actually significantly less than 4GB. As a result, running out of native memory with a 32-bit VM is quite common. The same 4 GB limit is also important if you are using a 64-bit VM with compressed references. In compressed references mode, all references to objects, classes, threads, and monitors are represented by 32-bit values for performance reasons, so these structures can be allocated only at 32-bit addresses. However, the operating system might place other allocations within this 4 GB of address space, and if this area becomes sufficiently full or fragmented, the VM throws a native NativeOutOfMemoryError error. These errors typically occur when the VM tries to create a new thread or load a class. The Current Thread History section should contain more information about what the thread was doing at the VM level when the NativeOutOfMemoryError error occurred. You can usually avoid this type of problem by using the -Xmcrs option to reserve a contiguous area of memory within the lowest 4GB of memory at VM startup. Another common cause of a NativeOutOfMemoryError is when an application loads duplicate classes. Classes are allocated outside of the Java heap in native memory. If the value reported for Classes in the NATIVEMEMINFO section is very large, duplicate classes might be the cause of your problem. The Eclipse Memory Analyzer Tool (MAT) can tell you if you have duplicate classes by using the Class Loader Explorer feature. Because a system dump is automatically generated as well as a Java dump in response to a NativeOutOfMemoryError , simply open the system dump in MAT to continue your diagnosis. Deadlock Deadlocks occur when two threads attempt to synchronize on an object and lock an instance of a class. When this happens, your application stops responding and hangs. Generating a Java dump file will quickly tell you whether you have a deadlock situation. Trigger the Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. The VM can detect the most common types of deadlock scenario involving Java monitors. If this type of deadlock is detected, information is provided in the LOCKS section. More complex deadlocks, including those that involve a mixture of native mutexes and Java monitors, are not detected. Here is the output from the code that was used to cause a common deadlock scenario: NULL 1LKDEADLOCK Deadlock detected !!! NULL --------------------- NULL 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) 3LKDEADLOCKWTR is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B344 infl_mon_t: 0x08C2B384: 4LKDEADLOCKOBJ java/lang/Object@0xB5666698 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 3\" (0x94507500) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B3A0 infl_mon_t: 0x08C2B3E0: 4LKDEADLOCKOBJ java/lang/Object@0xB5666678 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 1\" (0x92A3EC00) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B2E8 infl_mon_t: 0x08C2B328: 4LKDEADLOCKOBJ java/lang/Object@0xB5666688 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) This output tells you that Worker Thread 2 is waiting for Worker Thread 3 , which is waiting for Worker Thread 1 . Because Worker Thread 1 is also waiting for Worker Thread 2 , there is a deadlock. The next place to look is the output for Java and native stacks, in the THREADS section. By looking at the stack for each of these worker threads you can trace the problem back to specific lines in your application code. In this example, you can see from the following output that for all worker threads, the stack traces ( 4XESTACKTRACE / 5XESTACKTRACE ) indicate a problem in line 35 of the application DeadLockTest.java : 3XMTHREADINFO \"Worker Thread 1\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C2B0, java/lang/Thread:0xB5666778, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52CF, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004365543 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666688 Owned by: \"Worker Thread 2\" (J9VMThread:0x94501D00, java/lang/Thread:0xB56668D0) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666678, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 2\" J9VMThread:0x94501D00, omrthread_t:0x92A3C8F0, java/lang/Thread:0xB56668D0, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x14, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D0, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x946BF000, to:0x94700000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004555580 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666698 Owned by: \"Worker Thread 3\" (J9VMThread:0x94507500, java/lang/Thread:0xB5666A18) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666688, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 3\" J9VMThread:0x94507500, omrthread_t:0x92A3CC10, java/lang/Thread:0xB5666A18, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x15, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D1, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9467E000, to:0x946BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.003657010 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666678 Owned by: \"Worker Thread 1\" (J9VMThread:0x92A3EC00, java/lang/Thread:0xB5666778) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666698, entry count: 1) Hang An application can hang for a number of reasons but the most common cause is excessive global garbage collection (GC) activity, where your application is repeatedly paused because your Java heap has almost run out of memory. You can identify this problem by looking at verbose GC output. Collect this output by specifying the -verbose:gc option. Deadlock situations can also manifest themselves as hangs. For more information on diagnosing this type of problem from a Java dump, see the deadlock scenario. If you have eliminated verbose GC activity and deadlocks, another common hang scenario involves threads that compete and wait for Java object locks. This type of problem can usually be diagnosed by examining a Java dump. The simplest hang scenario involving Java object locks is where a thread acquires a lock that other threads are waiting for, but it doesn't release the lock for some reason. The first place to look in the Java dump output is the LOCKS section. This section lists all the monitors and shows which threads have acquired a lock and which threads are waiting. If the hang is caused by a thread not releasing a lock that other threads need, you can see a list of waiting threads in the output. In this example scenario, the Java dump LOCKS section shows that Worker Thread 0 ( 3LKMONOBJECT ) has acquired a lock and there are 19 other worker threads waiting to obtain the lock. NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 1 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x92711200 infl_mon_t: 0x92711240: 3LKMONOBJECT java/lang/Object@0xB56658D8: Flat locked by \"Worker Thread 0\" (J9VMThread:0x92A3EC00), entry count 1 3LKWAITERQ Waiting to enter: 3LKWAITER \"Worker Thread 1\" (J9VMThread:0x92703F00) 3LKWAITER \"Worker Thread 2\" (J9VMThread:0x92709C00) 3LKWAITER \"Worker Thread 3\" (J9VMThread:0x92710A00) 3LKWAITER \"Worker Thread 4\" (J9VMThread:0x92717F00) 3LKWAITER \"Worker Thread 5\" (J9VMThread:0x9271DC00) 3LKWAITER \"Worker Thread 6\" (J9VMThread:0x92723A00) 3LKWAITER \"Worker Thread 7\" (J9VMThread:0x92729800) 3LKWAITER \"Worker Thread 8\" (J9VMThread:0x92733700) 3LKWAITER \"Worker Thread 9\" (J9VMThread:0x92739400) 3LKWAITER \"Worker Thread 10\" (J9VMThread:0x92740200) 3LKWAITER \"Worker Thread 11\" (J9VMThread:0x92748100) 3LKWAITER \"Worker Thread 12\" (J9VMThread:0x9274DF00) 3LKWAITER \"Worker Thread 13\" (J9VMThread:0x92754D00) 3LKWAITER \"Worker Thread 14\" (J9VMThread:0x9275AA00) 3LKWAITER \"Worker Thread 15\" (J9VMThread:0x92760800) 3LKWAITER \"Worker Thread 16\" (J9VMThread:0x92766600) 3LKWAITER \"Worker Thread 17\" (J9VMThread:0x9276C300) 3LKWAITER \"Worker Thread 18\" (J9VMThread:0x92773100) 3LKWAITER \"Worker Thread 19\" (J9VMThread:0x92778F00) NULL The next step is to determine why Worker Thread 0 is not releasing the lock. The best place to start is the stack trace for this thread, which you can find by searching on the thread name or J9VMThread ID in the THREADS section. The following extract shows the details for \"Worker Thread 0\" (J9VMThread:0x92A3EC00) : NULL 3XMTHREADINFO \"Worker Thread 0\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C280, java/lang/Thread:0xB56668B8, state:CW, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x511F, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000401) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.000211878 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Thread.sleep(Native Method) 4XESTACKTRACE at java/lang/Thread.sleep(Thread.java:941) 4XESTACKTRACE at WorkerThread.doWork(HangTest.java:37) 4XESTACKTRACE at WorkerThread.run(HangTest.java:31) 5XESTACKTRACE (entered lock: java/lang/Object@0xB56658D8, entry count: 1) In the last line of this output you can see where the thread acquired the lock. Working up from this line, you can see that WorkerThread.run was called, which in turn called WorkerThread.doWork . The stack shows that the thread then entered a call to java/lang/Thread.sleep in HangTest.java on line 37, which is preventing the thread from completing its work and releasing the lock. In this example the sleep call was added to induce a hang, but in real-world scenarios the cause could be any blocking operation, such as reading from an input stream or socket. Another possibility is that the thread is waiting for another lock owned by yet another thread. It is important to remember that each Java dump represents a single snapshot in time. You should generate at least three Java dumps separated by a short pause, for example 30 seconds, and compare the output. This comparison tells you whether the threads involved are stuck in a fixed state or whether they are moving. In this example, the threads do not move and the investigation needs to focus on the logic in WorkerThread.doWork to understand why Worker Thread 0 entered the java/lang/Thread.sleep call. Another common scenario is where each Java dump shows a number of threads waiting for a lock owned by another thread, but the list of waiting threads and the lock-owning thread change over time. In this case the cause is likely to be a bottleneck caused by thread contention, where the threads are continually competing for the same lock. In severe cases, the lock is held only for a small amount of time but there are lots of threads trying to obtain it. Because more time is spent handling the lock and scheduling the thread than executing application code, the degradation in performance is manifested as a hang. Thread contention is usually caused by an application design problem. You can use a similar approach to the one used in this scenario to determime which lines of code are responsible for the contention.","title":"Java dump"},{"location":"dump_javadump/#java-dump","text":"Java dumps, sometimes referred to as Java cores , are produced when the VM ends unexpectedly because of an operating system signal, OutOfMemoryError , or a user-initiated keystroke combination. You can also generate a Java dump by calling the Dump API programmatically from your application or specifying the -Xdump:java option on the command line. If your Java application crashes or hangs, Java dumps can provide useful information to help you diagnose the root cause. If your application crashes, Java dumps are generated automatically for the following types of failure: the VM receives an unexpected signal or an assertion failure the VM runs out of memory If your application hangs, you can trigger the generation of a Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. Note: On Windows, if you started the VM in a console window you can force the VM to produce a Java dump in response to a SIGBREAK signal (Ctrl-Break keyboard combination). If you didn't start in a console window there is no equivalent to a Linux kill command on Windows for sending signals. The only option here is to trigger a full system dump by finding the VM process in the Processes tab of the Windows Task Manager and clicking Create dump file . To help you understand how a Java dump can help you with problem diagnosis, this topic includes a few scenarios to help you interpret the data: A crash caused by a general protection fault (gpf) A Java heap OutOfMemoryError (OOM) A native OutOfMemoryError (OOM) A deadlock situation A hang","title":"Java dump"},{"location":"dump_javadump/#java-dump-contents","text":"Java dumps summarize the state of the VM when the event occurs, with most of the information relating to components of the VM. The file is made up of a number of sections that provide different types of information.","title":"Java dump contents"},{"location":"dump_javadump/#title","text":"The first section of the Java dump file provides information about the event that triggered the production of the dump. In the following example you can see that a vmstop event triggered the dump at a specified date and time. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"vmstop\" (00000002) Detail \"#0000000000000000\" received 1TIDATETIME Date: 2018/08/30 at 21:55:47:607 1TINANOTIME System nanotime: 22012355276134 1TIFILENAME Javacore filename: /home/doc-javacore/javacore.20180830.215547.30285.0001.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x106 (vm_access+exclusive_vm_access+trace_disabled)","title":"TITLE"},{"location":"dump_javadump/#gpinfo","text":"The GPINFO section provides general information about the system that the VM is running on. The following example is taken from a Java dump that was generated on a Linux system. NULL ------------------------------------------------------------------------ 0SECTION GPINFO subcomponent dump routine NULL ================================ 2XHOSLEVEL OS Level : Linux 3.10.0-862.11.6.el7.x86_64 2XHCPUS Processors - 3XHCPUARCH Architecture : amd64 3XHNUMCPUS How Many : 4 3XHNUMASUP NUMA is either not supported or has been disabled by user NULL 1XHERROR2 Register dump section only produced for SIGSEGV, SIGILL or SIGFPE. NULL The content of this section can vary, depending on the cause of the dump. For example, if the dump was caused by a general protection fault (gpf), the library in which the crash occurred is also recorded, together with a value shown as VM flags . This value can provide some clues about which component of the VM might have been involved. Look for the following line in the output: 1XHFLAGS VM flags:0000000000000000 The hexadecimal number recorded for VM flags ends in MSSSS, where M is the VM component and SSSS is component-specific code as shown in the following table: Component Code value INTERPRETER 0x10000 GC 0x20000 GROW_STACK 0x30000 JNI 0x40000 JIT_CODEGEN 0x50000 BCVERIFY 0x60000 RTVERIFY 0x70000 SHAREDCLASSES 0x80000 A value of 0000000000000000 (0x00000) indicates that a crash occurred outside of the VM.","title":"GPINFO"},{"location":"dump_javadump/#envinfo","text":"This section contains useful information about the environment in which the crash took place, including the following data: Java version ( 1CIJAVAVERSION ) OpenJ9 VM and subcomponent version information ( 1CIVMVERSION , 1CIJ9VMVERSION , 1CIJITVERSION , 1CIOMRVERSION , 1CIJCLVERSION ) VM start time ( 1CISTARTTIME ) and process information ( 1CIPROCESSID ) Java home ( 1CIJAVAHOMEDIR ) and DLL ( 1CIJAVADLLDIR ) directories User arguments passed on the command line ( 1CIUSERARG ) User limits imposed by the system ( 1CIUSERLIMITS ) Environment variables in place ( 1CIENVVARS ) System information ( 1CISYSINFO ) CPU information ( 1CICPUINFO ) Control group (Cgroup) information ( 1CICGRPINFO ) For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION ENVINFO subcomponent dump routine NULL ================================= 1CIJAVAVERSION JRE 9 Linux amd64-64 (build 9.0.4-internal+0-adhoc..openj9-openjdk-jdk9) 1CIVMVERSION 20180830_000000 1CIJ9VMVERSION 8e7c6ec 1CIJITVERSION 8e7c6ec 1CIOMRVERSION 553811b_CMPRSS 1CIJCLVERSION ec1d223 based on jdk-9.0.4+12 1CIJITMODES JIT enabled, AOT enabled, FSD disabled, HCR enabled 1CIRUNNINGAS Running as a standalone JVM 1CIVMIDLESTATE VM Idle State: ACTIVE 1CICONTINFO Running in container : FALSE 1CICGRPINFO JVM support for cgroups enabled : TRUE 1CISTARTTIME JVM start time: 2018/08/30 at 21:55:47:387 1CISTARTNANO JVM start nanotime: 22012135233549 1CIPROCESSID Process ID: 30285 (0x764D) 1CICMDLINE [not available] 1CIJAVAHOMEDIR Java Home Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk 1CIJAVADLLDIR Java DLL Dir: /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/bin 1CISYSCP Sys Classpath: 1CIUSERARGS UserArgs: 2CIUSERARG -Xoptionsfile=/home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/options.default ... NULL 1CIUSERLIMITS User Limits (in bytes except for NOFILE and NPROC) NULL ------------------------------------------------------------------------ NULL type soft limit hard limit 2CIUSERLIMIT RLIMIT_AS unlimited unlimited 2CIUSERLIMIT RLIMIT_CORE 0 unlimited 2CIUSERLIMIT RLIMIT_CPU unlimited unlimited 2CIUSERLIMIT RLIMIT_DATA unlimited unlimited 2CIUSERLIMIT RLIMIT_FSIZE unlimited unlimited 2CIUSERLIMIT RLIMIT_LOCKS unlimited unlimited 2CIUSERLIMIT RLIMIT_MEMLOCK 65536 65536 2CIUSERLIMIT RLIMIT_NOFILE 4096 4096 2CIUSERLIMIT RLIMIT_NPROC 4096 30592 2CIUSERLIMIT RLIMIT_RSS unlimited unlimited 2CIUSERLIMIT RLIMIT_STACK 8388608 unlimited 2CIUSERLIMIT RLIMIT_MSGQUEUE 819200 819200 2CIUSERLIMIT RLIMIT_NICE 0 0 2CIUSERLIMIT RLIMIT_RTPRIO 0 0 2CIUSERLIMIT RLIMIT_SIGPENDING 30592 30592 NULL 1CIENVVARS Environment Variables NULL ------------------------------------------------------------------------ 2CIENVVAR XDG_VTNR=1 2CIENVVAR SSH_AGENT_PID=2653 ... NULL 1CISYSINFO System Information NULL ------------------------------------------------------------------------ 2CISYSINFO /proc/sys/kernel/core_pattern = core 2CISYSINFO /proc/sys/kernel/core_uses_pid = 1 NULL 1CICPUINFO CPU Information NULL ------------------------------------------------------------------------ 2CIPHYSCPU Physical CPUs: 4 2CIONLNCPU Online CPUs: 4 2CIBOUNDCPU Bound CPUs: 4 2CIACTIVECPU Active CPUs: 0 2CITARGETCPU Target CPUs: 4 NULL 1CICGRPINFO Cgroup Information NULL ------------------------------------------------------------------------ 2CICGRPINFO subsystem : cpu 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU Period : 100000 microseconds 3CICGRPINFO CPU Quota : Not Set 3CICGRPINFO CPU Shares : 1024 3CICGRPINFO Period intervals elapsed count : 0 3CICGRPINFO Throttled count : 0 3CICGRPINFO Total throttle time : 0 nanoseconds 2CICGRPINFO subsystem : cpuset 2CICGRPINFO cgroup name : / 3CICGRPINFO CPU exclusive : 1 3CICGRPINFO Mem exclusive : 1 3CICGRPINFO CPUs : 0-3 3CICGRPINFO Mems : 0 2CICGRPINFO subsystem : memory 2CICGRPINFO cgroup name : / 3CICGRPINFO Memory Limit : Not Set 3CICGRPINFO Memory + Swap Limit : Not Set 3CICGRPINFO Memory Usage : 5363396608 bytes 3CICGRPINFO Memory + Swap Usage : 5363396608 bytes 3CICGRPINFO Memory Max Usage : 0 bytes 3CICGRPINFO Memory + Swap Max Usage : 0 bytes 3CICGRPINFO Memory limit exceeded count : 0 3CICGRPINFO Memory + Swap limit exceeded count : 0 3CICGRPINFO OOM Killer Disabled : 0 3CICGRPINFO Under OOM : 0 NULL","title":"ENVINFO"},{"location":"dump_javadump/#nativememinfo","text":"This section records information about native memory that is requested by using library functions such as malloc() and mmap() . Values are provided as a breakdown, per component, indicating the total number of bytes allocated and the number of native memory allocations. In the following example, 4,682,840 bytes of native memory are allocated (but not yet freed) to VM Classes, which corresponds to 141 allocations. NULL ------------------------------------------------------------------------ 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 2,569,088,312 bytes / 4653 allocations 1MEMUSER | 2MEMUSER +--VM: 2,280,088,336 bytes / 2423 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 4,682,840 bytes / 141 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 2,054,966,784 bytes / 433 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 2,014,113,792 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 40,852,992 bytes / 432 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,970,016 bytes / 156 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 197,760 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 155,424 bytes / 123 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 180,056 bytes / 263 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,776 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 36,184 bytes / 52 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 208,179,632 bytes / 72 allocations 3MEMUSER | | | 4MEMUSER | | +--Unused <32bit allocation regions: 208,168,752 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,880 bytes / 71 allocations 2MEMUSER | | 3MEMUSER | +--Other: 1,055,048 bytes / 1293 allocations 1MEMUSER | 2MEMUSER +--JIT: 288,472,816 bytes / 140 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 268,435,456 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 2,097,216 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 17,940,144 bytes / 138 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 13,432 bytes / 25 allocations 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 13,432 bytes / 25 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 3,184 bytes / 13 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 1,056 bytes / 12 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Other: 2,128 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 10,248 bytes / 12 allocations 1MEMUSER | 2MEMUSER +--Unknown: 513,728 bytes / 2065 allocations NULL This section does not record memory that is allocated by application or JNI code and is typically a little less than the value recorded by operating system tools.","title":"NATIVEMEMINFO"},{"location":"dump_javadump/#meminfo","text":"This section relates to memory management, providing a breakdown of memory usage in the VM for the object heap, internal memory, memory used for classes, the JIT code cache, and JIT data cache in decimal and hexadecimal format. You can also find out which garbage collection policy is in use when the dump is produced. The object memory area ( 1STHEAPTYPE ) records each memory region in use, its start and end address, and region size. Further information is recorded about the memory segments used for internal memory, class memory, the JIT code cache and JIT data cache ( 1STSEGMENT ). This information includes the address of the segment control data structure, the start and end address of the native memory segment, as well as the segment size. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0x00007FF4F00744A0 -- -- -- Generational 1STHEAPREGION 0x00007FF4F0074CE0 0x0000000087F40000 0x0000000088540000 0x0000000000600000 Generational/Tenured Region 1STHEAPREGION 0x00007FF4F0074930 0x00000000FFE00000 0x00000000FFF00000 0x0000000000100000 Generational/Nursery Region 1STHEAPREGION 0x00007FF4F0074580 0x00000000FFF00000 0x0000000100000000 0x0000000000100000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 8388608 (0x0000000000800000) 1STHEAPINUSE Total memory in use: 2030408 (0x00000000001EFB48) 1STHEAPFREE Total memory free: 6358200 (0x00000000006104B8) NULL 1STSEGTYPE Internal Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F004CBC8 0x00007FF4CD33C000 0x00007FF4CD33C000 0x00007FF4CE33C000 0x01000440 0x0000000001000000 1STSEGMENT 0x00007FF4F004CB08 0x00007FF4DE43D030 0x00007FF4DE517770 0x00007FF4DE53D030 0x00800040 0x0000000000100000 NULL 1STSEGTOTAL Total memory: 17825792 (0x0000000001100000) 1STSEGINUSE Total memory in use: 894784 (0x00000000000DA740) 1STSEGFREE Total memory free: 16931008 (0x00000000010258C0) NULL 1STSEGTYPE Class Memory NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F03B5638 0x0000000001053D98 0x000000000105BD98 0x000000000105BD98 0x00010040 0x0000000000008000 1STSEGMENT 0x00007FF4F03B5578 0x0000000001048188 0x0000000001050188 0x0000000001050188 0x00010040 0x0000000000008000 ... NULL 1STSEGTOTAL Total memory: 3512520 (0x00000000003598C8) 1STSEGINUSE Total memory in use: 3433944 (0x00000000003465D8) 1STSEGFREE Total memory free: 78576 (0x00000000000132F0) NULL 1STSEGTYPE JIT Code Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F00961F8 0x00007FF4CE43D000 0x00007FF4CE445790 0x00007FF4DE43D000 0x00000068 0x0000000010000000 NULL 1STSEGTOTAL Total memory: 268435456 (0x0000000010000000) 1STSEGINUSE Total memory in use: 34704 (0x0000000000008790) 1STSEGFREE Total memory free: 268400752 (0x000000000FFF7870) 1STSEGLIMIT Allocation limit: 268435456 (0x0000000010000000) NULL 1STSEGTYPE JIT Data Cache NULL segment start alloc end type size 1STSEGMENT 0x00007FF4F0096668 0x00007FF4CC553030 0x00007FF4CC753030 0x00007FF4CC753030 0x00000048 0x0000000000200000 NULL 1STSEGTOTAL Total memory: 2097152 (0x0000000000200000) 1STSEGINUSE Total memory in use: 2097152 (0x0000000000200000) 1STSEGFREE Total memory free: 0 (0x0000000000000000) 1STSEGLIMIT Allocation limit: 402653184 (0x0000000018000000) NULL 1STGCHTYPE GC History NULL In the example, the GC History ( 1STGCHTYPE ) section is blank. This section is populated if a garbage collection cycle occurred in a VM that is being diagnosed with the trace facility.","title":"MEMINFO"},{"location":"dump_javadump/#locks","text":"This section of the Java dump provides information about locks, which protect shared resources from being accessed by more than one entity at a time. The information is essential in a deadlock situation, where two threads attempt to synchronize on an object and lock an instance of a class. Precise information is recorded about the threads that are causing the problem, which enables you to identify the root cause. The following example shows a typical LOCKS section, where no deadlocks existed at the time the dump was triggered. For clarity, the following example shows a shortened version of this section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 3 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x00007FF4B0001D78 infl_mon_t: 0x00007FF4B0001DF8: 3LKMONOBJECT java/lang/ref/ReferenceQueue@0x00000000FFE26A10: <unowned> 3LKNOTIFYQ Waiting to be notified: 3LKWAITNOTIFY \"Common-Cleaner\" (J9VMThread:0x0000000000FD0100) NULL 1LKREGMONDUMP JVM System Monitor Dump (registered monitors): 2LKREGMON Thread global lock (0x00007FF4F0004FE8): <unowned> 2LKREGMON &(PPG_mem_mem32_subAllocHeapMem32.monitor) lock (0x00007FF4F0005098): <unowned> 2LKREGMON NLS hash table lock (0x00007FF4F0005148): <unowned> ... NULL","title":"LOCKS"},{"location":"dump_javadump/#threads","text":"The THREADS section of a Java dump file provides summary information about the VM thread pool and detailed information about Java threads, native threads, and stack traces. Understanding the content of this section can help you diagnose problems that are caused by blocked or waiting threads. A Java thread runs on a native thread. Several lines are recorded for each Java thread in the Thread Details subsection, which include the following key pieces of information: 3XMTHREADINFO : The thread name, address information for the VM thread structures and Java thread object, the thread state, and thread priority. 3XMJAVALTHREAD : The Java thread ID and daemon status from the thread object. 3XMTHREADINFO1 : The native operating system thread ID, priority, scheduling policy, internal VM thread state, and VM thread flags. 3XMTHREADINFO2 : The native stack address range. 3XMTHREADINFO3 : Java callstack information ( 4XESTACKTRACE ) or Native call stack information ( 4XENATIVESTACK ). 5XESTACKTRACE : This line indicates whether locks were taken by a specific method. Java thread priorities are mapped to operating system priority values. Thread states are shown in the following table: Thread state value Status Description R Runnable The thread is able to run CW Condition Wait The thread is waiting S Suspended The thread is suspended by another thread Z Zombie The thread is destroyed P Parked The thread is parked by java.util.concurrent B Blocked The thread is waiting to obtain a lock For threads that are parked (P), blocked (B), or waiting (CW), an additional line ( 3XMTHREADBLOCK ) is included in the output that shows what the thread is parked on, blocked on, or waiting for. For clarity, the following example shows a shortened version of a typical THREADS section, where ... indicates that lines are removed: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 18 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMTHDINFO Thread Details NULL 3XMTHREADINFO \"JIT Diagnostic Compilation Thread-7 Suspended\" J9VMThread:0x0000000000EFC500, omrthread_t:0x00007FF4F00A77E8, java/lang/Thread:0x00000000FFE97480, state:R, prio=10 3XMJAVALTHREAD (java/lang/Thread getId:0xA, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7657, native priority:0xB, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CCC36000, to:0x00007FF4CCD36000, size:0x100000) 3XMCPUTIME CPU usage total: 0.000037663 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 3XMTHREADINFO \"Common-Cleaner\" J9VMThread:0x0000000000FD0100, omrthread_t:0x00007FF4F022A520, java/lang/Thread:0x00000000FFE26F40, state:CW, prio=8 3XMJAVALTHREAD (java/lang/Thread getId:0x2, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x765A, native priority:0x8, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00080181) 3XMTHREADINFO2 (native stack address range from:0x00007FF4CC0B8000, to:0x00007FF4CC0F8000, size:0x40000) 3XMCPUTIME CPU usage total: 0.000150926 secs, current category=\"Application\" 3XMTHREADBLOCK Waiting on: java/lang/ref/ReferenceQueue@0x00000000FFE26A10 Owned by: <unowned> 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Object.wait(Native Method) 4XESTACKTRACE at java/lang/Object.wait(Object.java:221) 4XESTACKTRACE at java/lang/ref/ReferenceQueue.remove(ReferenceQueue.java:138) 5XESTACKTRACE (entered lock: java/lang/ref/ReferenceQueue@0x00000000FFE26A10, entry count: 1) 4XESTACKTRACE at jdk/internal/ref/CleanerImpl.run(CleanerImpl.java:148) 4XESTACKTRACE at java/lang/Thread.run(Thread.java:835) 4XESTACKTRACE at jdk/internal/misc/InnocuousThread.run(InnocuousThread.java:122) 3XMTHREADINFO3 No native callstack available for this thread NULL NULL 3XMTHREADINFO \"IProfiler\" J9VMThread:0x0000000000F03D00, omrthread_t:0x00007FF4F00B06F8, java/lang/Thread:0x00000000FFE97B60, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0xC, isDaemon:true) 3XMTHREADINFO1 (native thread ID:0x7659, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000081) 3XMTHREADINFO2 (native stack address range from:0x00007FF4F8940000, to:0x00007FF4F8960000, size:0x20000) 3XMCPUTIME CPU usage total: 0.004753103 secs, current category=\"JIT\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 No Java callstack associated with this thread 3XMTHREADINFO3 No native callstack available for this thread NULL ... 1XMWLKTHDERR The following was reported while collecting native stacks: 2XMWLKTHDERR unable to count threads(3, -2) NULL 1XMTHDSUMMARY Threads CPU Usage Summary NULL ========================= NULL 1XMTHDCATINFO Warning: to get more accurate CPU times for the GC, the option -XX:-ReduceCPUMonitorOverhead can be used. See the user guide for more information. NULL 1XMTHDCATEGORY All JVM attached threads: 0.280083000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--System-JVM: 0.270814000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--GC: 0.000599000 secs 2XMTHDCATEGORY | | 3XMTHDCATEGORY | +--JIT: 0.071904000 secs 1XMTHDCATEGORY | 2XMTHDCATEGORY +--Application: 0.009269000 secs NULL","title":"THREADS"},{"location":"dump_javadump/#hooks","text":"This section shows internal VM event callbacks, which are used for diagnosing performance problems in the VM. Multiple hook interfaces are listed, which include their individual hook events. The following example shows data for the J9VMHookInterface , including the total time for all previous events, the call site location (<source file>:<line number>), start time, and duration of the last callback and the longest callback (all times measured in microseconds). The hook data is reset after each Java dump. NULL ------------------------------------------------------------------------ SECTION HOOK subcomponent dump routine NULL ========================= 1NOTE These data are reset every time a javacore is taken 1HKINTERFACE MM_OMRHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_PrivateHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE MM_HookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9VMHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 1 3HKCALLCOUNT 1239 3HKTOTALTIME 219564us 3HKLAST Last Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T00:15:14.664 4HKDURATION Duration : 16us 3HKLONGST Longest Callback 4HKCALLSITE trcengine.c:395 4HKSTARTTIME Start Time: 2019-10-18T21:28:34.895 4HKDURATION Duration : 5012us NULL ... 1HKINTERFACE J9VMZipCachePoolHookInterface NULL ------------------------------------------------------------------------ 1HKINTERFACE J9JITHookInterface NULL ------------------------------------------------------------------------ 2HKEVENTID 3 3HKCALLCOUNT 3113 3HKTOTALTIME 4904us 3HKLAST Last Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:04:15.320 4HKDURATION Duration : 3us 3HKLONGST Longest Callback 4HKCALLSITE common/mgmtinit.c:193 4HKSTARTTIME Start Time: 2019-10-18T16:37:17.633 4HKDURATION Duration : 27us NULL ...","title":"HOOKS"},{"location":"dump_javadump/#shared-classes","text":"If the shared classes cache is enabled at run time, the information provided in a Java dump file describes settings that were used when creating the cache, together with summary information about the size and content of the cache. In the following example, the shared classes cache was created with a Class Debug Area ( -Xnolinenumbers=false ). Byte code instrumentation (BCI) is enabled, which is the default, and VMs sharing the cache are allowed to store classpaths, which is also the default. The Cache Summary shows a cache size ( 2SCLTEXTCSZ ) of 16776608 bytes, with a soft maximum size ( 2SCLTEXTSMB ) also of 16776608 bytes, which leaves 12691668 bytes of free space ( 2SCLTEXTFRB ). The size of the Class Debug Area ( 2SCLTEXTDAS ) is 1331200 bytes and only 11% of this space is used. In the Cache Memory Status subsection, the line 2SCLTEXTCMDT indicates the name and location of the shared cache and cr indicates that the cache is a 64-bit compressed references cache. NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = true NULL 2SCLTEXTRCS ROMClass start address = 0x00007F423061C000 2SCLTEXTRCE ROMClass end address = 0x00007F42307B9A28 2SCLTEXTMSA Metadata start address = 0x00007F42313D42FC 2SCLTEXTCEA Cache end address = 0x00007F4231600000 2SCLTEXTRTF Runtime flags = 0x00102001ECA6028B 2SCLTEXTCGN Cache generation = 35 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 12691668 2SCLTEXTRCB ROMClass bytes = 1694248 2SCLTEXTAOB AOT code bytes = 0 2SCLTEXTADB AOT data bytes = 0 2SCLTEXTAHB AOT class hierarchy bytes = 32 2SCLTEXTATB AOT thunk bytes = 0 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJHB JIT hint bytes = 308 2SCLTEXTJPB JIT profile bytes = 2296 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 919328 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 2SCLTEXTMDA Metadata bytes = 23448 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 11% 2SCLTEXTDAN Class LineNumberTable bytes = 156240 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 595 2SCLTEXTNAM Number AOT Methods = 0 2SCLTEXTNAD Number AOT Data Entries = 0 2SCLTEXTNAH Number AOT Class Hierarchy = 1 2SCLTEXTNAT Number AOT Thunks = 0 2SCLTEXTNJH Number JIT Hints = 14 2SCLTEXTNJP Number JIT Profiles = 20 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 5 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0% NULL 2SCLTEXTCPF Cache is 24% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT sharedcc_doc-javacore CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_sharedcc_doc-javacore_G35 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL The following example shows information for a layered cache: NULL ------------------------------------------------------------------------ 0SECTION SHARED CLASSES subcomponent dump routine NULL ======================================== NULL 1SCLTEXTCSTL Cache Statistics for Top Layer NULL 1SCLTEXTCRTW Cache Created With NULL ------------------ NULL 2SCLTEXTXNL -Xnolinenumbers = false 2SCLTEXTBCI BCI Enabled = true 2SCLTEXTBCI Restrict Classpaths = false NULL 1SCLTEXTCSUM Cache Summary NULL ------------------ NULL 2SCLTEXTNLC No line number content = false 2SCLTEXTLNC Line number content = false NULL 2SCLTEXTRCS ROMClass start address = 0x00007F0EDB567000 2SCLTEXTRCE ROMClass end address = 0x00007F0EDB567000 2SCLTEXTMSA Metadata start address = 0x00007F0EDC40241C 2SCLTEXTCEA Cache end address = 0x00007F0EDC54B000 2SCLTEXTRTF Runtime flags = 0x80102001ECA602BB 2SCLTEXTCGN Cache generation = 41 2SCLTEXTCLY Cache layer = 1 NULL 2SCLTEXTCSZ Cache size = 16776608 2SCLTEXTSMB Softmx bytes = 16776608 2SCLTEXTFRB Free bytes = 15315996 2SCLTEXTARB Reserved space for AOT bytes = -1 2SCLTEXTAMB Maximum space for AOT bytes = -1 2SCLTEXTJRB Reserved space for JIT data bytes = -1 2SCLTEXTJMB Maximum space for JIT data bytes = -1 2SCLTEXTRWB ReadWrite bytes = 114080 2SCLTEXTDAS Class debug area size = 1331200 2SCLTEXTDAU Class debug area % used = 0% 2SCLTEXTDAN Class LineNumberTable bytes = 0 2SCLTEXTDAV Class LocalVariableTable bytes = 0 NULL 2SCLTEXTCPF Cache is 8% full NULL 1SCLTEXTCMST Cache Memory Status NULL ------------------ 1SCLTEXTCNTD Cache Name Feature Memory type Cache path NULL 2SCLTEXTCMDT Cache1 CR Memory mapped file /tmp/javasharedresources/C290M4F1A64P_Cache1_G41L01 NULL 1SCLTEXTCMST Cache Lock Status NULL ------------------ 1SCLTEXTCNTD Lock Name Lock type TID owning lock NULL 2SCLTEXTCWRL Cache write lock File lock Unowned 2SCLTEXTCRWL Cache read/write lock File lock Unowned NULL 1SCLTEXTCSAL Cache Statistics for All Layers NULL 2SCLTEXTRCB ROMClass bytes = 1459040 2SCLTEXTAOB AOT code bytes = 57624 2SCLTEXTADB AOT data bytes = 272 2SCLTEXTAHB AOT class hierarchy bytes = 1840 2SCLTEXTATB AOT thunk bytes = 632 2SCLTEXTJHB JIT hint bytes = 484 2SCLTEXTJPB JIT profile bytes = 0 2SCLTEXTNOB Java Object bytes = 0 2SCLTEXTZCB Zip cache bytes = 1134016 2SCLTEXTSHB Startup hint bytes = 0 2SCLTEXTJCB JCL data bytes = 0 2SCLTEXTBDA Byte data bytes = 0 NULL 2SCLTEXTNRC Number ROMClasses = 503 2SCLTEXTNAM Number AOT Methods = 16 2SCLTEXTNAD Number AOT Data Entries = 1 2SCLTEXTNAH Number AOT Class Hierarchy = 28 2SCLTEXTNAT Number AOT Thunks = 11 2SCLTEXTNJH Number JIT Hints = 15 2SCLTEXTNJP Number JIT Profiles = 0 2SCLTEXTNCP Number Classpaths = 1 2SCLTEXTNUR Number URLs = 0 2SCLTEXTNTK Number Tokens = 0 2SCLTEXTNOJ Number Java Objects = 0 2SCLTEXTNZC Number Zip Caches = 21 2SCLTEXTNSH Number Startup Hint Entries = 0 2SCLTEXTNJC Number JCL Entries = 0 2SCLTEXTNST Number Stale classes = 0 2SCLTEXTPST Percent Stale classes = 0%","title":"SHARED CLASSES"},{"location":"dump_javadump/#classes","text":"The classes section shows information about class loaders. The first part is a summary that records each available class loader ( 2CLTEXTCLLOADER ) followed by the number of libraries and classes that it loaded. This information is followed by a more detailed list of libraries ( 1CLTEXTCLLIB ) and classes ( 1CLTEXTCLLO ) that are loaded. In the example you can see that the java/lang/InternalAnonymousClassLoader loaded 2 classes, jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) and jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) . NULL ------------------------------------------------------------------------ 0SECTION CLASSES subcomponent dump routine NULL ================================= 1CLTEXTCLLOS Classloader summaries 1CLTEXTCLLSS 12345678: 1=primordial,2=extension,3=shareable,4=middleware,5=system,6=trusted,7=application,8=delegating 2CLTEXTCLLOADER p---st-- Loader *System*(0x00000000FFE1D258) 3CLNMBRLOADEDLIB Number of loaded libraries 5 3CLNMBRLOADEDCL Number of loaded classes 638 2CLTEXTCLLOADER -x--st-- Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 2CLTEXTCLLOADER ----st-- Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0), Parent *none*(0x0000000000000000) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 2 2CLTEXTCLLOADER -----ta- Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0), Parent jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 3CLNMBRLOADEDLIB Number of loaded libraries 0 3CLNMBRLOADEDCL Number of loaded classes 0 1CLTEXTCLLIB ClassLoader loaded libraries 2CLTEXTCLLIB Loader *System*(0x00000000FFE1D258) 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/jclse9_29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/java 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/compressedrefs/j9jit29 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/zip 3CLTEXTLIB /home/me/openj9-openjdk-jdk9/build/linux-x86_64-normal-server-release/images/jdk/lib/nio 1CLTEXTCLLOD ClassLoader loaded classes 2CLTEXTCLLOAD Loader *System*(0x00000000FFE1D258) 3CLTEXTCLASS [Ljava/lang/Thread$State;(0x0000000001056400) ... 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$PlatformClassLoader(0x00000000FFE1D4F0) 2CLTEXTCLLOAD Loader java/lang/InternalAnonymousClassLoader(0x00000000FFE1DFD0) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$2/00000000F03876A0(0x0000000001030F00) 3CLTEXTCLASS jdk/internal/loader/BuiltinClassLoader$$Lambda$1/00000000F00D2460(0x0000000001018A00) 2CLTEXTCLLOAD Loader jdk/internal/loader/ClassLoaders$AppClassLoader(0x00000000FFE1DAD0)","title":"CLASSES"},{"location":"dump_javadump/#scenarios","text":"","title":"Scenarios"},{"location":"dump_javadump/#general-protection-fault","text":"In this scenario, a Java application has crashed due to a General Protection Fault (GPF), automatically generating a Java dump file. The first section of the file (TITLE) tells you that the GPF triggered the Java dump. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"gpf\" (00002000) received 1TIDATETIME Date: 2018/09/24 at 15:18:03:115 1TINANOTIME System nanotime: 4498949283020796 1TIFILENAME Javacore filename: /home/test/JNICrasher/javacore.20180924.151801.29399.0002.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x100 (trace_disabled) 1TIPREPINFO Exclusive VM access not taken: data may not be consistent across javacore sections To troubleshoot this problem, you need to know which thread caused the GPF to occur. The thread that was running at the time of the crash is reported as the current thread in the THREADS section of the Java dump. Here is an extract from the THREADS section: NULL ------------------------------------------------------------------------ 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 15 2XMPOOLDAEMON Current total number of live daemon threads: 14 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60E00, omrthread_t:0xB6B049D8, java/lang/Thread:0xB55444D0, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x72D8, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00000000) 3XMTHREADINFO2 (native stack address range from:0xB6CE3000, to:0xB74E4000, size:0x801000) 3XMCPUTIME CPU usage total: 0.319865924 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=778008 (0xBDF18) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at JNICrasher.doSomethingThatCrashes(Native Method) 4XESTACKTRACE at JNICrasher.main(JNICrasher.java:7) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C6F663 [libj9prt29.so+0x3b663]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6F1CE [libj9prt29.so+0x3b1ce]) 4XENATIVESTACK (0xB6C6F2C6 [libj9prt29.so+0x3b2c6]) 4XENATIVESTACK (0xB6C6ED93 [libj9prt29.so+0x3ad93]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6C6ED07 [libj9prt29.so+0x3ad07]) 4XENATIVESTACK (0xB6C6AA3D [libj9prt29.so+0x36a3d]) 4XENATIVESTACK (0xB6C6C3A4 [libj9prt29.so+0x383a4]) 4XENATIVESTACK (0xB667FA19 [libj9dmp29.so+0xfa19]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66878CF [libj9dmp29.so+0x178cf]) 4XENATIVESTACK (0xB6688083 [libj9dmp29.so+0x18083]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6680C0D [libj9dmp29.so+0x10c0d]) 4XENATIVESTACK (0xB667F9D7 [libj9dmp29.so+0xf9d7]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB668B02F [libj9dmp29.so+0x1b02f]) 4XENATIVESTACK (0xB668B4D3 [libj9dmp29.so+0x1b4d3]) 4XENATIVESTACK (0xB66740F1 [libj9dmp29.so+0x40f1]) 4XENATIVESTACK (0xB66726FA [libj9dmp29.so+0x26fa]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB66726A9 [libj9dmp29.so+0x26a9]) 4XENATIVESTACK (0xB6676AE4 [libj9dmp29.so+0x6ae4]) 4XENATIVESTACK (0xB668D75A [libj9dmp29.so+0x1d75a]) 4XENATIVESTACK (0xB6A28DD4 [libj9vm29.so+0x81dd4]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A289EE [libj9vm29.so+0x819ee]) 4XENATIVESTACK (0xB6A29A40 [libj9vm29.so+0x82a40]) 4XENATIVESTACK (0xB6C52B6A [libj9prt29.so+0x1eb6a]) 4XENATIVESTACK __kernel_rt_sigreturn+0x0 (0xB7747410) 4XENATIVESTACK (0xB75330B6 [libffi29.so+0x50b6]) 4XENATIVESTACK ffi_raw_call+0xad (0xB7531C53 [libffi29.so+0x3c53]) 4XENATIVESTACK (0xB69BE4AB [libj9vm29.so+0x174ab]) 4XENATIVESTACK (0xB6A665BC [libj9vm29.so+0xbf5bc]) 4XENATIVESTACK (0xB6A15552 [libj9vm29.so+0x6e552]) 4XENATIVESTACK (0xB6A30894 [libj9vm29.so+0x89894]) 4XENATIVESTACK (0xB6A6F169 [libj9vm29.so+0xc8169]) 4XENATIVESTACK (0xB6C52F6E [libj9prt29.so+0x1ef6e]) 4XENATIVESTACK (0xB6A6F1FA [libj9vm29.so+0xc81fa]) 4XENATIVESTACK (0xB6A30994 [libj9vm29.so+0x89994]) 4XENATIVESTACK (0xB6A2CE4C [libj9vm29.so+0x85e4c]) 4XENATIVESTACK (0xB770487D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7719F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB763543E [libc.so.6+0xee43e]) The extract tells you that the current thread was java/lang/Thread , and information is provided about the Java callstack and native callstack ( 3XMTHREADINFO3 ) at the point at which the crash occurred. To simulate a crash caused by a bug in an application, this example calls a JNI method whose native implementation causes a crash. The Java callstack shows the call to the JNI native method ( JNIcrasher ), and the native callstack shows the point of failure. In this example, the native call stack does not include any function names to help you isolate the error in the native code. You can get this information from a system dump, which is usually produced alongside the Java dump. Open the system dump with the Dump viewer and use the info thread command to print the Java and native stack for the current thread.","title":"General Protection Fault"},{"location":"dump_javadump/#java-outofmemoryerror","text":"In this scenario, the Java heap runs out of memory, causing an OutOfMemoryError , which automatically generates a Java dump file. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for Java heap space. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"Java heap space\" received 1TIDATETIME Date: 2018/09/14 at 15:29:42:709 1TINANOTIME System nanotime: 3635648876608448 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.152929.18885.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) The MEMINFO section records how much memory is allocated to the Java heap ( 1STHEAPTYPE Object Memory ), how much is in use, and how much is free. Solving your problem might be as simple as setting a larger heap size when you start your application. If you don't know what size the Java heap was set to, you might find that information in the ENVINFO section, which records the command line options that were used when the application started. Look or search for the 1CIUSERARGS UserArgs: string and review the entries recorded for all lines that start 2CIUSERARG . The Java heap size is set by the -Xmx option. If the size has not been set on the command line by -Xmx , the default value applies, which you can find in Default Settings . In this scenario the solution to the problem is not an adjustment to the Java heap size. Here is the MEMINFO section: 0SECTION MEMINFO subcomponent dump routine NULL ================================= NULL 1STHEAPTYPE Object Memory NULL id start end size space/region 1STHEAPSPACE 0xB6B49D20 -- -- -- Generational 1STHEAPREGION 0xB6B4A078 0x95750000 0xB5470000 0x1FD20000 Generational/Tenured Region 1STHEAPREGION 0xB6B49F10 0xB5470000 0xB54C0000 0x00050000 Generational/Nursery Region 1STHEAPREGION 0xB6B49DA8 0xB54C0000 0xB5750000 0x00290000 Generational/Nursery Region NULL 1STHEAPTOTAL Total memory: 536870912 (0x20000000) 1STHEAPINUSE Total memory in use: 302603160 (0x12095B98) 1STHEAPFREE Total memory free: 234267752 (0x0DF6A468) The output shows that only 56% of the Java heap is in use, so this suggests that the application is trying to do something sub-optimal. To investigate further you need to work out which thread was the current thread when the OOM occurred to see what it was trying to do. As in the previous scenario, you can find the current thread in the THREADS section. Here is an extract from the output: 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6B60C00, omrthread_t:0xB6B049D8, java/lang/Thread:0x95764520, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x49C6, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6CB5000, to:0xB74B6000, size:0x801000) 3XMCPUTIME CPU usage total: 8.537823831 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/StringBuffer.ensureCapacityImpl(StringBuffer.java:696) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:486(Compiled Code)) 5XESTACKTRACE (entered lock: java/lang/StringBuffer@0x957645B8, entry count: 1) 4XESTACKTRACE at java/lang/StringBuffer.append(StringBuffer.java:428(Compiled Code)) 4XESTACKTRACE at HeapBreaker.main(HeapBreaker.java:34(Compiled Code)) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6C535B3 [libj9prt29.so+0x3b5b3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C5311E [libj9prt29.so+0x3b11e]) 4XENATIVESTACK (0xB6C53216 [libj9prt29.so+0x3b216]) 4XENATIVESTACK (0xB6C52CE3 [libj9prt29.so+0x3ace3]) 4XENATIVESTACK (0xB6C36F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6C52C57 [libj9prt29.so+0x3ac57]) 4XENATIVESTACK (0xB6C4E9CD [libj9prt29.so+0x369cd]) 4XENATIVESTACK (0xB6C502FA [libj9prt29.so+0x382fa]) To simulate a Java OutOfMemoryError , this example application repeatedly appends characters to a StringBuffer object in an infinite loop. The Java callstack shows the HeapBreaker.main method appending characters ( java/lang/StringGuffer.append ) until the method java/lang/StringBuffer.ensureCapacityImpl() throws the OutOfMemoryError . StringBuffer objects are wrappers for character arrays ( char[] ) and when the capacity of the underlying array is reached, the contents are automatically copied into a new, larger array. The new array is created in the StringBuffer.ensureCapacity() method, which more or less doubles the size of the old array. In this scenario, the array takes up all the remaining space in the Java heap. The MEMINFO section of the Java dump file can also tell you when an unexpectedly large allocation request causes an OOM. Look for the GC History ( 1STGCHTYPE ) section, which details allocation requests that trigger GC activity. In the sample output you can see that a large allocation request ( requestedbytes=603979784 ) triggered a global GC. When the GC could not free up sufficient space in the heap to satisfy the request, the allocation failure generated the OOM. 1STGCHTYPE GC History 3STHSTTYPE 14:29:29:580239000 GMT j9mm.101 - J9AllocateIndexableObject() returning NULL! 0 bytes requested for object of class B6BBC300 from memory space 'Generational' id=B6B49D20 3STHSTTYPE 14:29:29:579916000 GMT j9mm.134 - Allocation failure end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579905000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686912/3014656 oldspace=231597224/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:579859000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:579807000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:579776000 GMT j9mm.137 - Compact end: bytesmoved=301989896 3STHSTTYPE 14:29:29:313899000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:313555000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:310772000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:310765000 GMT j9mm.94 - Class unloading end: classloadersunloaded=0 classesunloaded=0 3STHSTTYPE 14:29:29:310753000 GMT j9mm.60 - Class unloading start 3STHSTTYPE 14:29:29:310750000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:306013000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:305957000 GMT j9mm.474 - GlobalGC start: globalcount=9 3STHSTTYPE 14:29:29:305888000 GMT j9mm.475 - GlobalGC end: workstackoverflow=0 overflowcount=0 memory=234284136/536870912 3STHSTTYPE 14:29:29:305837000 GMT j9mm.90 - GlobalGC collect complete 3STHSTTYPE 14:29:29:305808000 GMT j9mm.137 - Compact end: bytesmoved=189784 3STHSTTYPE 14:29:29:298042000 GMT j9mm.136 - Compact start: reason=compact to meet allocation 3STHSTTYPE 14:29:29:297695000 GMT j9mm.57 - Sweep end 3STHSTTYPE 14:29:29:291696000 GMT j9mm.56 - Sweep start 3STHSTTYPE 14:29:29:291692000 GMT j9mm.55 - Mark end 3STHSTTYPE 14:29:29:284994000 GMT j9mm.54 - Mark start 3STHSTTYPE 14:29:29:284941000 GMT j9mm.474 - GlobalGC start: globalcount=8 3STHSTTYPE 14:29:29:284916000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:284914000 GMT j9mm.469 - Allocation failure cycle start: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:284893000 GMT j9mm.470 - Allocation failure cycle end: newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:284858000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=2 flipbytes=64 newspace=2678784/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:284140000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:283160000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=335 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:283123000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:283120000 GMT j9mm.469 - Allocation failure cycle start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:283117000 GMT j9mm.133 - Allocation failure start: newspace=753616/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=603979784 3STHSTTYPE 14:29:29:269762000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269751000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:269718000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 3STHSTTYPE 14:29:29:268981000 GMT j9mm.140 - Tilt ratio: 89 3STHSTTYPE 14:29:29:268007000 GMT j9mm.64 - LocalGC start: globalcount=8 scavengecount=334 weakrefs=0 soft=0 phantom=0 finalizers=0 3STHSTTYPE 14:29:29:267969000 GMT j9mm.135 - Exclusive access: exclusiveaccessms=0.016 meanexclusiveaccessms=0.016 threads=0 lastthreadtid=0xB6B61100 beatenbyotherthread=0 3STHSTTYPE 14:29:29:267966000 GMT j9mm.469 - Allocation failure cycle start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:267963000 GMT j9mm.133 - Allocation failure start: newspace=0/3014656 oldspace=80601248/533856256 loa=5338112/5338112 requestedbytes=48 3STHSTTYPE 14:29:29:249015000 GMT j9mm.134 - Allocation failure end: newspace=2686928/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:249003000 GMT j9mm.470 - Allocation failure cycle end: newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 3STHSTTYPE 14:29:29:248971000 GMT j9mm.560 - LocalGC end: rememberedsetoverflow=0 causedrememberedsetoverflow=0 scancacheoverflow=0 failedflipcount=0 failedflipbytes=0 failedtenurecount=0 failedtenurebytes=0 flipcount=0 flipbytes=0 newspace=2686976/3014656 oldspace=80601248/533856256 loa=5338112/5338112 tenureage=0 Although the Java code that was used in this scenario deliberately triggered an OutOfMemoryError in a pronounced way, similar allocation issues can and do occur when dealing with large data sets such as XML files. The next step in diagnosing the problem is to open the system dump that gets generated automatically when an OutOfMemoryError occurs. Open the dump with the Eclipse Memory Analyzer tool (MAT) and search for the StringBuffer object, which should provide further clues about what went wrong. A common example is seeing the same String duplicated over and over again, which might indicate that code is stuck in a loop. Note: If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > If, unlike the previous scenario, you receive an OutOfMemoryError and the MEMINFO section shows that there is very little space left on the Java heap, the current thread information is typically not important. The current thread is simply the thread that happened to be current when the space ran out. In this situation you might want to increase your Java heap size. For help with this task, see How to do heap sizing .","title":"Java OutOfMemoryError"},{"location":"dump_javadump/#native-outofmemoryerror","text":"In this scenario, the VM runs out of native memory. Native memory is memory that is used by the VM for storing all virtualized resources and data that it needs for VM operations. Native memory that is available to the VM process is limited by the operating system. The native memory available to the VM might also be subject to additional limits imposed by the operating system, for example Unix ulimits . When a NativeOutOfMemoryError occurs, a Java dump is generated by default. The first section of the file (TITLE) tells you that a systhrow event triggered the Java dump as a result of an OOM ( java/lang/OutOfMemoryError ) for native memory. 0SECTION TITLE subcomponent dump routine NULL =============================== 1TICHARSET UTF-8 1TISIGINFO Dump Event \"systhrow\" (00040000) Detail \"java/lang/OutOfMemoryError\" \"native memory exhausted\" received 1TIDATETIME Date: 2018/09/14 at 15:49:55:887 1TINANOTIME System nanotime: 3636862054495675 1TIFILENAME Javacore filename: /home/cheesemp/test/javacore.20180914.154814.19708.0003.txt 1TIREQFLAGS Request Flags: 0x81 (exclusive+preempt) 1TIPREPSTATE Prep State: 0x104 (exclusive_vm_access+trace_disabled) Sometimes, the current thread is responsible for causing the NativeOutOfMemoryError . Information about the current thread can be found in the THREADS section, as shown in the following output. 0SECTION THREADS subcomponent dump routine NULL ================================= NULL 1XMPOOLINFO JVM Thread pool info: 2XMPOOLTOTAL Current total number of pooled threads: 16 2XMPOOLLIVE Current total number of live threads: 16 2XMPOOLDAEMON Current total number of live daemon threads: 15 NULL 1XMCURTHDINFO Current thread 3XMTHREADINFO \"main\" J9VMThread:0xB6C60C00, omrthread_t:0xB6C049D8, java/lang/Thread:0xB55E3C10, state:R, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x1, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x4CFD, native priority:0x5, native policy:UNKNOWN, vmstate:R, vm thread flags:0x00001020) 3XMTHREADINFO2 (native stack address range from:0xB6D4E000, to:0xB754F000, size:0x801000) 3XMCPUTIME CPU usage total: 3.654896026 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at sun/misc/Unsafe.allocateDBBMemory(Native Method) 4XESTACKTRACE at java/nio/DirectByteBuffer.<init>(DirectByteBuffer.java:127(Compiled Code)) 4XESTACKTRACE at java/nio/ByteBuffer.allocateDirect(ByteBuffer.java:311) 4XESTACKTRACE at NativeHeapBreaker.main(NativeHeapBreaker.java:9) 3XMTHREADINFO3 Native callstack: 4XENATIVESTACK (0xB6A9F5B3 [libj9prt29.so+0x3b5b3]) ... 4XENATIVESTACK (0xB582CC9C [libjclse7b_29.so+0x40c9c]) 4XENATIVESTACK Java_sun_misc_Unsafe_allocateDBBMemory+0x88 (0xB5827F6B [libjclse7b_29.so+0x3bf6b]) 4XENATIVESTACK (0x94A2084A [<unknown>+0x0]) 4XENATIVESTACK (0xB6B2538B [libj9vm29.so+0x6c38b]) 4XENATIVESTACK (0xB6B4074C [libj9vm29.so+0x8774c]) 4XENATIVESTACK (0xB6B7F299 [libj9vm29.so+0xc6299]) 4XENATIVESTACK (0xB6A82F3E [libj9prt29.so+0x1ef3e]) 4XENATIVESTACK (0xB6B7F32A [libj9vm29.so+0xc632a]) 4XENATIVESTACK (0xB6B4084C [libj9vm29.so+0x8784c]) 4XENATIVESTACK (0xB6B3CD0C [libj9vm29.so+0x83d0c]) 4XENATIVESTACK (0xB776F87D [libjli.so+0x787d]) 4XENATIVESTACK (0xB7784F72 [libpthread.so.0+0x6f72]) 4XENATIVESTACK clone+0x5e (0xB76A043E [libc.so.6+0xee43e]) For clarity in the Native callstack output, ... indicates that some lines are removed. The Java callstack shows the transition from Java to native code ( sun/misc/Unsafe.allocateDBBMemory(Native Method) ), indicating a request for Direct Byte Buffer (DBB) storage. DBB storage is backed by native memory, with the Java heap containing only a reference to the native heap buffer. In this scenario, DBB storage is the likely culprit for this NativeOutOfMemoryError . The next step is to investigate the NATIVEMEMINFO section of the Java dump file, which reports the amount of memory used by the JRE process, broken down into component areas. 0SECTION NATIVEMEMINFO subcomponent dump routine NULL ================================= 0MEMUSER 1MEMUSER JRE: 3,166,386,688 bytes / 4388 allocations 1MEMUSER | 2MEMUSER +--VM: 563,176,824 bytes / 1518 allocations 2MEMUSER | | 3MEMUSER | +--Classes: 3,104,416 bytes / 120 allocations 2MEMUSER | | 3MEMUSER | +--Memory Manager (GC): 548,181,888 bytes / 398 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Heap: 536,932,352 bytes / 1 allocation 3MEMUSER | | | 4MEMUSER | | +--Other: 11,249,536 bytes / 397 allocations 2MEMUSER | | 3MEMUSER | +--Threads: 10,817,120 bytes / 147 allocations 3MEMUSER | | | 4MEMUSER | | +--Java Stack: 115,584 bytes / 16 allocations 3MEMUSER | | | 4MEMUSER | | +--Native Stack: 10,616,832 bytes / 17 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 84,704 bytes / 114 allocations 2MEMUSER | | 3MEMUSER | +--Trace: 163,688 bytes / 268 allocations 2MEMUSER | | 3MEMUSER | +--JVMTI: 17,320 bytes / 13 allocations 2MEMUSER | | 3MEMUSER | +--JNI: 23,296 bytes / 55 allocations 2MEMUSER | | 3MEMUSER | +--Port Library: 8,576 bytes / 74 allocations 2MEMUSER | | 3MEMUSER | +--Other: 860,520 bytes / 443 allocations 1MEMUSER | 2MEMUSER +--JIT: 3,744,728 bytes / 122 allocations 2MEMUSER | | 3MEMUSER | +--JIT Code Cache: 2,097,152 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--JIT Data Cache: 524,336 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--Other: 1,123,240 bytes / 120 allocations 1MEMUSER | 2MEMUSER +--Class Libraries: 2,599,463,024 bytes / 2732 allocations 2MEMUSER | | 3MEMUSER | +--Harmony Class Libraries: 1,024 bytes / 1 allocation 2MEMUSER | | 3MEMUSER | +--VM Class Libraries: 2,599,462,000 bytes / 2731 allocations 3MEMUSER | | | 4MEMUSER | | +--sun.misc.Unsafe: 2,598,510,480 bytes / 2484 allocations 4MEMUSER | | | | 5MEMUSER | | | +--Direct Byte Buffers: 2,598,510,480 bytes / 2484 allocations 3MEMUSER | | | 4MEMUSER | | +--Other: 951,520 bytes / 247 allocations 1MEMUSER | 2MEMUSER +--Unknown: 2,112 bytes / 16 allocations NULL In the VM Class Libraries section, the amount of memory allocated for Direct Byte Buffers is shown. Because the NativeOutOfMemoryError was received on a small 32-bit system, a value of 2,598,510,480 bytes indicates that the operating system has run out of memory. On a larger UNIX system, the process might have run out of memory because of the ulimit setting. Increasing the value for ulimit might avoid the error, which you can do temporarily by setting ulimit -f unlimited in your current session. The theoretical maximum size for a 32-bit process is the size of the 32-bit address space, which is 4 GB. On most operating systems a portion of the address space for each process is used by the kernel, such that the real limit for 32-bit processes is actually significantly less than 4GB. As a result, running out of native memory with a 32-bit VM is quite common. The same 4 GB limit is also important if you are using a 64-bit VM with compressed references. In compressed references mode, all references to objects, classes, threads, and monitors are represented by 32-bit values for performance reasons, so these structures can be allocated only at 32-bit addresses. However, the operating system might place other allocations within this 4 GB of address space, and if this area becomes sufficiently full or fragmented, the VM throws a native NativeOutOfMemoryError error. These errors typically occur when the VM tries to create a new thread or load a class. The Current Thread History section should contain more information about what the thread was doing at the VM level when the NativeOutOfMemoryError error occurred. You can usually avoid this type of problem by using the -Xmcrs option to reserve a contiguous area of memory within the lowest 4GB of memory at VM startup. Another common cause of a NativeOutOfMemoryError is when an application loads duplicate classes. Classes are allocated outside of the Java heap in native memory. If the value reported for Classes in the NATIVEMEMINFO section is very large, duplicate classes might be the cause of your problem. The Eclipse Memory Analyzer Tool (MAT) can tell you if you have duplicate classes by using the Class Loader Explorer feature. Because a system dump is automatically generated as well as a Java dump in response to a NativeOutOfMemoryError , simply open the system dump in MAT to continue your diagnosis.","title":"Native OutOfMemoryError"},{"location":"dump_javadump/#deadlock","text":"Deadlocks occur when two threads attempt to synchronize on an object and lock an instance of a class. When this happens, your application stops responding and hangs. Generating a Java dump file will quickly tell you whether you have a deadlock situation. Trigger the Java dump by sending a SIGQUIT signal ( kill -3 ) to the VM. The VM can detect the most common types of deadlock scenario involving Java monitors. If this type of deadlock is detected, information is provided in the LOCKS section. More complex deadlocks, including those that involve a mixture of native mutexes and Java monitors, are not detected. Here is the output from the code that was used to cause a common deadlock scenario: NULL 1LKDEADLOCK Deadlock detected !!! NULL --------------------- NULL 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) 3LKDEADLOCKWTR is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B344 infl_mon_t: 0x08C2B384: 4LKDEADLOCKOBJ java/lang/Object@0xB5666698 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 3\" (0x94507500) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B3A0 infl_mon_t: 0x08C2B3E0: 4LKDEADLOCKOBJ java/lang/Object@0xB5666678 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 1\" (0x92A3EC00) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKMON sys_mon_t:0x08C2B2E8 infl_mon_t: 0x08C2B328: 4LKDEADLOCKOBJ java/lang/Object@0xB5666688 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread \"Worker Thread 2\" (0x94501D00) This output tells you that Worker Thread 2 is waiting for Worker Thread 3 , which is waiting for Worker Thread 1 . Because Worker Thread 1 is also waiting for Worker Thread 2 , there is a deadlock. The next place to look is the output for Java and native stacks, in the THREADS section. By looking at the stack for each of these worker threads you can trace the problem back to specific lines in your application code. In this example, you can see from the following output that for all worker threads, the stack traces ( 4XESTACKTRACE / 5XESTACKTRACE ) indicate a problem in line 35 of the application DeadLockTest.java : 3XMTHREADINFO \"Worker Thread 1\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C2B0, java/lang/Thread:0xB5666778, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52CF, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004365543 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666688 Owned by: \"Worker Thread 2\" (J9VMThread:0x94501D00, java/lang/Thread:0xB56668D0) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666678, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 2\" J9VMThread:0x94501D00, omrthread_t:0x92A3C8F0, java/lang/Thread:0xB56668D0, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x14, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D0, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x946BF000, to:0x94700000, size:0x41000) 3XMCPUTIME CPU usage total: 0.004555580 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666698 Owned by: \"Worker Thread 3\" (J9VMThread:0x94507500, java/lang/Thread:0xB5666A18) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666688, entry count: 1) ... 3XMTHREADINFO \"Worker Thread 3\" J9VMThread:0x94507500, omrthread_t:0x92A3CC10, java/lang/Thread:0xB5666A18, state:B, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x15, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x52D1, native priority:0x5, native policy:UNKNOWN, vmstate:B, vm thread flags:0x00000201) 3XMTHREADINFO2 (native stack address range from:0x9467E000, to:0x946BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.003657010 secs, current category=\"Application\" 3XMTHREADBLOCK Blocked on: java/lang/Object@0xB5666678 Owned by: \"Worker Thread 1\" (J9VMThread:0x92A3EC00, java/lang/Thread:0xB5666778) 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at WorkerThread.run(DeadLockTest.java:35) 5XESTACKTRACE (entered lock: java/lang/Object@0xB5666698, entry count: 1)","title":"Deadlock"},{"location":"dump_javadump/#hang","text":"An application can hang for a number of reasons but the most common cause is excessive global garbage collection (GC) activity, where your application is repeatedly paused because your Java heap has almost run out of memory. You can identify this problem by looking at verbose GC output. Collect this output by specifying the -verbose:gc option. Deadlock situations can also manifest themselves as hangs. For more information on diagnosing this type of problem from a Java dump, see the deadlock scenario. If you have eliminated verbose GC activity and deadlocks, another common hang scenario involves threads that compete and wait for Java object locks. This type of problem can usually be diagnosed by examining a Java dump. The simplest hang scenario involving Java object locks is where a thread acquires a lock that other threads are waiting for, but it doesn't release the lock for some reason. The first place to look in the Java dump output is the LOCKS section. This section lists all the monitors and shows which threads have acquired a lock and which threads are waiting. If the hang is caused by a thread not releasing a lock that other threads need, you can see a list of waiting threads in the output. In this example scenario, the Java dump LOCKS section shows that Worker Thread 0 ( 3LKMONOBJECT ) has acquired a lock and there are 19 other worker threads waiting to obtain the lock. NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 1 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x92711200 infl_mon_t: 0x92711240: 3LKMONOBJECT java/lang/Object@0xB56658D8: Flat locked by \"Worker Thread 0\" (J9VMThread:0x92A3EC00), entry count 1 3LKWAITERQ Waiting to enter: 3LKWAITER \"Worker Thread 1\" (J9VMThread:0x92703F00) 3LKWAITER \"Worker Thread 2\" (J9VMThread:0x92709C00) 3LKWAITER \"Worker Thread 3\" (J9VMThread:0x92710A00) 3LKWAITER \"Worker Thread 4\" (J9VMThread:0x92717F00) 3LKWAITER \"Worker Thread 5\" (J9VMThread:0x9271DC00) 3LKWAITER \"Worker Thread 6\" (J9VMThread:0x92723A00) 3LKWAITER \"Worker Thread 7\" (J9VMThread:0x92729800) 3LKWAITER \"Worker Thread 8\" (J9VMThread:0x92733700) 3LKWAITER \"Worker Thread 9\" (J9VMThread:0x92739400) 3LKWAITER \"Worker Thread 10\" (J9VMThread:0x92740200) 3LKWAITER \"Worker Thread 11\" (J9VMThread:0x92748100) 3LKWAITER \"Worker Thread 12\" (J9VMThread:0x9274DF00) 3LKWAITER \"Worker Thread 13\" (J9VMThread:0x92754D00) 3LKWAITER \"Worker Thread 14\" (J9VMThread:0x9275AA00) 3LKWAITER \"Worker Thread 15\" (J9VMThread:0x92760800) 3LKWAITER \"Worker Thread 16\" (J9VMThread:0x92766600) 3LKWAITER \"Worker Thread 17\" (J9VMThread:0x9276C300) 3LKWAITER \"Worker Thread 18\" (J9VMThread:0x92773100) 3LKWAITER \"Worker Thread 19\" (J9VMThread:0x92778F00) NULL The next step is to determine why Worker Thread 0 is not releasing the lock. The best place to start is the stack trace for this thread, which you can find by searching on the thread name or J9VMThread ID in the THREADS section. The following extract shows the details for \"Worker Thread 0\" (J9VMThread:0x92A3EC00) : NULL 3XMTHREADINFO \"Worker Thread 0\" J9VMThread:0x92A3EC00, omrthread_t:0x92A3C280, java/lang/Thread:0xB56668B8, state:CW, prio=5 3XMJAVALTHREAD (java/lang/Thread getId:0x13, isDaemon:false) 3XMTHREADINFO1 (native thread ID:0x511F, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000401) 3XMTHREADINFO2 (native stack address range from:0x9297E000, to:0x929BF000, size:0x41000) 3XMCPUTIME CPU usage total: 0.000211878 secs, current category=\"Application\" 3XMHEAPALLOC Heap bytes allocated since last GC cycle=0 (0x0) 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/lang/Thread.sleep(Native Method) 4XESTACKTRACE at java/lang/Thread.sleep(Thread.java:941) 4XESTACKTRACE at WorkerThread.doWork(HangTest.java:37) 4XESTACKTRACE at WorkerThread.run(HangTest.java:31) 5XESTACKTRACE (entered lock: java/lang/Object@0xB56658D8, entry count: 1) In the last line of this output you can see where the thread acquired the lock. Working up from this line, you can see that WorkerThread.run was called, which in turn called WorkerThread.doWork . The stack shows that the thread then entered a call to java/lang/Thread.sleep in HangTest.java on line 37, which is preventing the thread from completing its work and releasing the lock. In this example the sleep call was added to induce a hang, but in real-world scenarios the cause could be any blocking operation, such as reading from an input stream or socket. Another possibility is that the thread is waiting for another lock owned by yet another thread. It is important to remember that each Java dump represents a single snapshot in time. You should generate at least three Java dumps separated by a short pause, for example 30 seconds, and compare the output. This comparison tells you whether the threads involved are stuck in a fixed state or whether they are moving. In this example, the threads do not move and the investigation needs to focus on the logic in WorkerThread.doWork to understand why Worker Thread 0 entered the java/lang/Thread.sleep call. Another common scenario is where each Java dump shows a number of threads waiting for a lock owned by another thread, but the list of waiting threads and the lock-owning thread change over time. In this case the cause is likely to be a bottleneck caused by thread contention, where the threads are continually competing for the same lock. In severe cases, the lock is held only for a small amount of time but there are lots of threads trying to obtain it. Because more time is spent handling the lock and scheduling the thread than executing application code, the degradation in performance is manifested as a hang. Thread contention is usually caused by an application design problem. You can use a similar approach to the one used in this scenario to determime which lines of code are responsible for the contention.","title":"Hang"},{"location":"dump_systemdump/","text":"System dump System dumps, often known as core dumps , are platform-specific and contain a raw binary dump of the process memory. This type of dump has a complete copy of the Java heap, including the contents of all Java objects in the application. To examine a system dump you can use the OpenJ9 dump viewer ( jdmpview ), a platform-specific debugging tool, or the Eclipse Memory Analyzer tool (MAT) . If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java See also Using system dumps and the dump viewer","title":"System dump"},{"location":"dump_systemdump/#system-dump","text":"System dumps, often known as core dumps , are platform-specific and contain a raw binary dump of the process memory. This type of dump has a complete copy of the Java heap, including the contents of all Java objects in the application. To examine a system dump you can use the OpenJ9 dump viewer ( jdmpview ), a platform-specific debugging tool, or the Eclipse Memory Analyzer tool (MAT) . If you want to use MAT to analyze your system dump, you must install the Diagnostic Tool Framework for Java (DTFJ) plugin in the Eclipse IDE. Select the following menu items: Help > Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java","title":"System dump"},{"location":"dump_systemdump/#see-also","text":"Using system dumps and the dump viewer","title":"See also"},{"location":"env_var/","text":"Environment variables Although the OpenJ9 virtual machine (VM) recognizes many environment variables, most are superseded by command-line arguments. Use command-line arguments rather than environment variables, which are retained only for compatibility. Note: Environment variables are overridden by command-line arguments. Finding and setting environment variables To show the current environment, run: set (Windows\u2122) env (AIX\u00ae, Linux\u00ae, and macOS\u00ae) set (z/OS\u00ae) To show a particular environment variable, run: echo %ENVNAME% (Windows) echo $ENVNAME (AIX, Linux, macOS, and z/OS) Use values exactly as shown in the documentation. The names of environment variables are case-sensitive in AIX, Linux, macOS, and z/OS. To set the environment variable LOGIN_NAME to Fred , run: set LOGIN_NAME=Fred (Windows) export LOGIN_NAME=Fred (AIX/Linux/macOS: ksh or bash shells) setenv LOGIN_NAME Fred (csh shells) These variables are set only for the current shell or command-line session. If you are setting multiple values for an environment variable in a list: On AIX, Linux, macOS, and z/OS the separator is typically a colon (:). On Windows the separator is typically a semicolon (;). General options General VM environment variables are shown in the following table: Environment variable Usage information IBM_JAVA_COMMAND_LINE This variable is set by the VM after it starts. Using this variable, you can find the command-line parameters set when the VM started. This setting is not available if the VM is invoked by using JNI. OPENJ9_JAVA_OPTIONS=<option> Set this variable to store default Java options, including -X , -D , or -verbose:gc style options. For example, -Xms256m -Djava.compiler . Any options set are overridden by equivalent options that are specified when Java is started. This variable does not support -fullversion or -version . If you specify the name of a trace output file either directly, or indirectly, by using a properties file, the output file might be accidentally overwritten if you run utilities such as the trace formatter, dump extractor, or dump viewer. To avoid this problem, add %d, %p or %t to the trace file names. See -Xtrace:output . Note: The equivalent IBM_JAVA_OPTIONS is deprecated and will be removed in a future release. JAVA_FONTS=<list of directories> Set this environment variable to specify the font directory. Setting this variable is equivalent to setting the property java.awt.fonts on Windows operating systems, and sun.java2d.fontpath on other operating systems. Dump agent options The preferred mechanism for controlling the production of dumps is by using the -Xdump option. However, these legacy environment variables are preserved and can still be used. The following table describes dump agent options: Environment Variable Usage Information JAVA_DUMP_OPTS Used to control the conditions under which dumps are produced. If you set agents for a condition by using the JAVA_DUMP_OPTS environment variable, default dump agents for that condition are disabled; however, any -Xdump options that are specified on the command line are used. The JAVA_DUMP_OPTS environment variable uses the following syntax: JAVA_DUMP_OPTS=\"ON<condition>(<agent>[<count>],<agent>[<count>]), ON<condition>(<agent>[<count>],...),...)\" Where: <condition> is one of the following values: ANYSIGNAL DUMP ERROR INTERRUPT EXCEPTION OUTOFMEMORY <agent> is one of the following values: ALL NONE JAVADUMP SYSDUMP HEAPDUMP CEEDUMP (z/OS specific) <count> is the number of times to run the specified agent for the specified condition. This value is optional. By default, the agent runs every time that the condition occurs. JAVA_DUMP_OPTS is parsed by taking the leftmost occurrence of each condition, so duplicates are ignored. The following setting produces a system dump for the first error condition only: :::java ONERROR(SYSDUMP[1]),ONERROR(JAVADUMP) Also, the ONANYSIGNAL condition is parsed before all others, so :::java ONINTERRUPT(NONE),ONANYSIGNAL(SYSDUMP) has the same effect as :::java ONANYSIGNAL(SYSDUMP),ONINTERRUPT(NONE) If the JAVA_DUMP_TOOL environment variable is set, that variable is assumed to specify a valid executable name and is parsed for replaceable fields, such as %pid . If %pid is detected in the string, the string is replaced with the VM's own process ID. The tool that is specified by JAVA_DUMP_TOOL is run after any system dump or heap dump is taken, before anything else. The dump settings are applied in the following order. Settings later in the list take precedence: Default VM dump behavior. -Xdump command-line options that specify -Xdump:<type>:defaults , see OpenJ9 default options . DISABLE_JAVADUMP , IBM_HEAPDUMP , and IBM_HEAP_DUMP environment variables. IBM_JAVADUMP_OUTOFMEMORY and IBM_HEAPDUMP_OUTOFMEMORY environment variables. JAVA_DUMP_OPTS environment variable. Remaining -Xdump command-line options. Setting JAVA_DUMP_OPTS affects only those conditions that you specify. Actions on other conditions are unchanged. Signal mapping When setting the JAVA_DUMP_OPTS environment variable, the mapping of operating system signals to the \"condition\" is shown in the following table: Condition z/OS Windows Linux, macOS, and AIX EXCEPTION SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGSYS, SIGXFSV SIGILL, SIGSEGV, SIGFPE SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGXFSV INTERRUPT SIGINT, SIGTERM, SIGHUP SIGINT, SIGTERM SIGINT, SIGTERM, SIGHUP ERROR SIGABRT SIGABRT SIGABRT DUMP SIGQUIT SIGBREAK SIGQUIT Java dump options The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:java option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information DISABLE_JAVADUMP=[TRUE|FALSE] Setting DISABLE_JAVADUMP to TRUE is the equivalent of using -Xdump:java:none and stops the default production of Java dumps. IBM_JAVACOREDIR=<directory> The default location into which the Java dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_JAVADUMP_OUTOFMEMORY=[TRUE|FALSE] By setting this environment variable to FALSE , you disable Java dumps for an out-of-memory exception. When not set, a Java dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable Java dumps for an out-of-memory exception. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and Heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Java dumps are produced. Heap dump options The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:heap option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information IBM_HEAPDUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAP_DUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAPDUMPDIR=<directory> The default location into which the heap dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_HEAPDUMP_OUTOFMEMORY=[TRUE|FALSE] Controls the generation of a heap dump when an out-of-memory exception is thrown. When not set, a heap dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable heap dump for an out-of-memory exception. IBM_JAVA_HEAPDUMP_TEST Use this environment variable to cause the VM to generate both PHD and text versions of heap dumps. Equivalent to opts=PHD+CLASSIC on the -Xdump:heap option. IBM_JAVA_HEAPDUMP_TEXT Use this environment variable to cause the VM to generate a text (human readable) Heap dump. Equivalent to opts=CLASSIC on the -Xdump:heap option. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Heap dumps are produced. Other diagnostic options The following table lists other environment variables that can be set for diagnostic purposes: Environment variable Usage Instructions IBM_COREDIR=<directory> Set this variable to specify an alternative location for system dumps, JIT dumps, and snap trace. On z/OS, _CEE_DMPTARG is used instead for snap trace, and transaction dumps are written to TSO according to JAVA_DUMP_TDUMP_PATTERN . On Linux and macOS, the dump is written to the directory that is specified directory by the operating system before being moved to the specified location. IBM_JAVA_ABEND_ON_FAILURE=Y (z/OS only) This setting tells the Java launcher to mark the Task Control Block (TCB) with an abend code if the OpenJ9 VM fails to load or is terminated by an uncaught exception. By default, the Java launcher does not mark the TCB. JAVA_DUMP_TDUMP_PATTERN=<string> (z/OS only) The specified <string> is passed to IEATDUMP to use as the data/set name for the Transaction Dump. The default <string> is %uid.JVM.TDUMP.%job.D%y%m%d.T%H%M%S (31-bit) or %uid.JVM.%job.D%y%m%d.T%H%M%S.X&amp;DS (64-bit), where %uid is found from the C code fragment shown in Notes . JAVA_THREAD_MODEL=<string> <string> can be defined as one of the following values: NATIVE (all threads are created as _MEDIUM_WEIGHT ), HEAVY (all threads are created as _HEAVY_WEIGHT ), MEDIUM (same as NATIVE ), or NULL . The default is NATIVE . IBM_XE_COE_NAME=<value> Set this variable to generate a system dump when the specified exception occurs. The value that is supplied is the package description of the exception; for example, java/lang/InternalError . A Signal 11 is followed by a JVMXE message and then the VM ends. JAVA_PLUGIN_TRACE=TRUE When this variable is set to TRUE or 1, a Java plug-in trace is produced for the session when an application runs. Traces are produced from both the Java and Native layer. By default, this variable is set to FALSE , so that a Java plug-in trace is not produced. Notes: C code fragment to discover %uid for JAVA_DUMP_TDUMP_PATTERN=<string> : pwd = getpwuid(getuid()); pwd->pw_name; Deprecated JIT options The following table describes deprecated environment variables for the JIT compiler: Environment Variable Usage Information IBM_MIXED_MODE_THRESHOLD Use -Xjit:count=<value> instead of this variable. JAVA_COMPILER Use -Djava.compiler=<value> instead of this variable.","title":"Environment variables"},{"location":"env_var/#environment-variables","text":"Although the OpenJ9 virtual machine (VM) recognizes many environment variables, most are superseded by command-line arguments. Use command-line arguments rather than environment variables, which are retained only for compatibility. Note: Environment variables are overridden by command-line arguments.","title":"Environment variables"},{"location":"env_var/#finding-and-setting-environment-variables","text":"To show the current environment, run: set (Windows\u2122) env (AIX\u00ae, Linux\u00ae, and macOS\u00ae) set (z/OS\u00ae) To show a particular environment variable, run: echo %ENVNAME% (Windows) echo $ENVNAME (AIX, Linux, macOS, and z/OS) Use values exactly as shown in the documentation. The names of environment variables are case-sensitive in AIX, Linux, macOS, and z/OS. To set the environment variable LOGIN_NAME to Fred , run: set LOGIN_NAME=Fred (Windows) export LOGIN_NAME=Fred (AIX/Linux/macOS: ksh or bash shells) setenv LOGIN_NAME Fred (csh shells) These variables are set only for the current shell or command-line session. If you are setting multiple values for an environment variable in a list: On AIX, Linux, macOS, and z/OS the separator is typically a colon (:). On Windows the separator is typically a semicolon (;).","title":"Finding and setting environment variables"},{"location":"env_var/#general-options","text":"General VM environment variables are shown in the following table: Environment variable Usage information IBM_JAVA_COMMAND_LINE This variable is set by the VM after it starts. Using this variable, you can find the command-line parameters set when the VM started. This setting is not available if the VM is invoked by using JNI. OPENJ9_JAVA_OPTIONS=<option> Set this variable to store default Java options, including -X , -D , or -verbose:gc style options. For example, -Xms256m -Djava.compiler . Any options set are overridden by equivalent options that are specified when Java is started. This variable does not support -fullversion or -version . If you specify the name of a trace output file either directly, or indirectly, by using a properties file, the output file might be accidentally overwritten if you run utilities such as the trace formatter, dump extractor, or dump viewer. To avoid this problem, add %d, %p or %t to the trace file names. See -Xtrace:output . Note: The equivalent IBM_JAVA_OPTIONS is deprecated and will be removed in a future release. JAVA_FONTS=<list of directories> Set this environment variable to specify the font directory. Setting this variable is equivalent to setting the property java.awt.fonts on Windows operating systems, and sun.java2d.fontpath on other operating systems.","title":"General options"},{"location":"env_var/#dump-agent-options","text":"The preferred mechanism for controlling the production of dumps is by using the -Xdump option. However, these legacy environment variables are preserved and can still be used. The following table describes dump agent options: Environment Variable Usage Information JAVA_DUMP_OPTS Used to control the conditions under which dumps are produced. If you set agents for a condition by using the JAVA_DUMP_OPTS environment variable, default dump agents for that condition are disabled; however, any -Xdump options that are specified on the command line are used. The JAVA_DUMP_OPTS environment variable uses the following syntax: JAVA_DUMP_OPTS=\"ON<condition>(<agent>[<count>],<agent>[<count>]), ON<condition>(<agent>[<count>],...),...)\" Where: <condition> is one of the following values: ANYSIGNAL DUMP ERROR INTERRUPT EXCEPTION OUTOFMEMORY <agent> is one of the following values: ALL NONE JAVADUMP SYSDUMP HEAPDUMP CEEDUMP (z/OS specific) <count> is the number of times to run the specified agent for the specified condition. This value is optional. By default, the agent runs every time that the condition occurs. JAVA_DUMP_OPTS is parsed by taking the leftmost occurrence of each condition, so duplicates are ignored. The following setting produces a system dump for the first error condition only: :::java ONERROR(SYSDUMP[1]),ONERROR(JAVADUMP) Also, the ONANYSIGNAL condition is parsed before all others, so :::java ONINTERRUPT(NONE),ONANYSIGNAL(SYSDUMP) has the same effect as :::java ONANYSIGNAL(SYSDUMP),ONINTERRUPT(NONE) If the JAVA_DUMP_TOOL environment variable is set, that variable is assumed to specify a valid executable name and is parsed for replaceable fields, such as %pid . If %pid is detected in the string, the string is replaced with the VM's own process ID. The tool that is specified by JAVA_DUMP_TOOL is run after any system dump or heap dump is taken, before anything else. The dump settings are applied in the following order. Settings later in the list take precedence: Default VM dump behavior. -Xdump command-line options that specify -Xdump:<type>:defaults , see OpenJ9 default options . DISABLE_JAVADUMP , IBM_HEAPDUMP , and IBM_HEAP_DUMP environment variables. IBM_JAVADUMP_OUTOFMEMORY and IBM_HEAPDUMP_OUTOFMEMORY environment variables. JAVA_DUMP_OPTS environment variable. Remaining -Xdump command-line options. Setting JAVA_DUMP_OPTS affects only those conditions that you specify. Actions on other conditions are unchanged.","title":"Dump agent options"},{"location":"env_var/#signal-mapping","text":"When setting the JAVA_DUMP_OPTS environment variable, the mapping of operating system signals to the \"condition\" is shown in the following table: Condition z/OS Windows Linux, macOS, and AIX EXCEPTION SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGSYS, SIGXFSV SIGILL, SIGSEGV, SIGFPE SIGTRAP, SIGILL, SIGSEGV, SIGFPE, SIGBUS, SIGXFSV INTERRUPT SIGINT, SIGTERM, SIGHUP SIGINT, SIGTERM SIGINT, SIGTERM, SIGHUP ERROR SIGABRT SIGABRT SIGABRT DUMP SIGQUIT SIGBREAK SIGQUIT","title":"Signal mapping"},{"location":"env_var/#java-dump-options","text":"The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:java option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information DISABLE_JAVADUMP=[TRUE|FALSE] Setting DISABLE_JAVADUMP to TRUE is the equivalent of using -Xdump:java:none and stops the default production of Java dumps. IBM_JAVACOREDIR=<directory> The default location into which the Java dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_JAVADUMP_OUTOFMEMORY=[TRUE|FALSE] By setting this environment variable to FALSE , you disable Java dumps for an out-of-memory exception. When not set, a Java dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable Java dumps for an out-of-memory exception. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and Heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Java dumps are produced.","title":"Java dump options"},{"location":"env_var/#heap-dump-options","text":"The preferred mechanism for controlling the production of Java dumps is by using the -Xdump:heap option. However, these legacy environment variables are preserved and can still be used. Environment Variable Usage Information IBM_HEAPDUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAP_DUMP=[TRUE|FALSE] Setting this option to TRUE enables heap dump production by using signals. IBM_HEAPDUMPDIR=<directory> The default location into which the heap dump is written. On z/OS, the _CEE_DMPTARG environment variable is used instead. IBM_HEAPDUMP_OUTOFMEMORY=[TRUE|FALSE] Controls the generation of a heap dump when an out-of-memory exception is thrown. When not set, a heap dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to TRUE to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to FALSE to disable heap dump for an out-of-memory exception. IBM_JAVA_HEAPDUMP_TEST Use this environment variable to cause the VM to generate both PHD and text versions of heap dumps. Equivalent to opts=PHD+CLASSIC on the -Xdump:heap option. IBM_JAVA_HEAPDUMP_TEXT Use this environment variable to cause the VM to generate a text (human readable) Heap dump. Equivalent to opts=CLASSIC on the -Xdump:heap option. TMPDIR=<directory> This variable specifies an alternative temporary directory. This directory is used only when Java dumps and heap dumps cannot be written to their target directories, or the current working directory. The default is /tmp ( C:\\temp for Windows). Note: You can use the dump agent JAVA_DUMP_OPTS variable to control the conditions under which Heap dumps are produced.","title":"Heap dump options"},{"location":"env_var/#other-diagnostic-options","text":"The following table lists other environment variables that can be set for diagnostic purposes: Environment variable Usage Instructions IBM_COREDIR=<directory> Set this variable to specify an alternative location for system dumps, JIT dumps, and snap trace. On z/OS, _CEE_DMPTARG is used instead for snap trace, and transaction dumps are written to TSO according to JAVA_DUMP_TDUMP_PATTERN . On Linux and macOS, the dump is written to the directory that is specified directory by the operating system before being moved to the specified location. IBM_JAVA_ABEND_ON_FAILURE=Y (z/OS only) This setting tells the Java launcher to mark the Task Control Block (TCB) with an abend code if the OpenJ9 VM fails to load or is terminated by an uncaught exception. By default, the Java launcher does not mark the TCB. JAVA_DUMP_TDUMP_PATTERN=<string> (z/OS only) The specified <string> is passed to IEATDUMP to use as the data/set name for the Transaction Dump. The default <string> is %uid.JVM.TDUMP.%job.D%y%m%d.T%H%M%S (31-bit) or %uid.JVM.%job.D%y%m%d.T%H%M%S.X&amp;DS (64-bit), where %uid is found from the C code fragment shown in Notes . JAVA_THREAD_MODEL=<string> <string> can be defined as one of the following values: NATIVE (all threads are created as _MEDIUM_WEIGHT ), HEAVY (all threads are created as _HEAVY_WEIGHT ), MEDIUM (same as NATIVE ), or NULL . The default is NATIVE . IBM_XE_COE_NAME=<value> Set this variable to generate a system dump when the specified exception occurs. The value that is supplied is the package description of the exception; for example, java/lang/InternalError . A Signal 11 is followed by a JVMXE message and then the VM ends. JAVA_PLUGIN_TRACE=TRUE When this variable is set to TRUE or 1, a Java plug-in trace is produced for the session when an application runs. Traces are produced from both the Java and Native layer. By default, this variable is set to FALSE , so that a Java plug-in trace is not produced. Notes: C code fragment to discover %uid for JAVA_DUMP_TDUMP_PATTERN=<string> : pwd = getpwuid(getuid()); pwd->pw_name;","title":"Other diagnostic options"},{"location":"env_var/#deprecated-jit-options","text":"The following table describes deprecated environment variables for the JIT compiler: Environment Variable Usage Information IBM_MIXED_MODE_THRESHOLD Use -Xjit:count=<value> instead of this variable. JAVA_COMPILER Use -Djava.compiler=<value> instead of this variable.","title":"Deprecated JIT options"},{"location":"gc/","text":"Garbage collection The process of managing memory in the VM is handled by the Allocator and the Garbage Collector (GC). These components operate on an area of memory that is reserved for VM processing called the Java heap. The Allocator assigns areas of the Java heap for Java objects. Objects are considered as live when they have a chain of references to them that start from root references, such as those found in thread stacks. When that reference or pointer no longer exists, the objects are considered as garbage . The role of the Garbage Collector is to manage the storage in the Java heap and reclaim memory by removing garbage. The Allocator The Allocator is a component of memory management that is typically overshadowed by the task of garbage collection. However, it is a critical, if not small part, of the overall process. The Allocator manages pools of free memory and how the free memory is consumed. It is also responsible for allocating areas of storage in the Java heap for objects at the request of applications, class libraries, or the VM. Every allocation requires a heap lock to stop concurrent threads trying to access the same area of memory at the same time. When an object is allocated, the heap lock is released. If there is insufficient space to allocate the object, allocation fails, the heap lock is released, and the GC is called. If the GC manages to recover some space on the heap, the Allocator can resume operations. If the GC does not recover enough space, it returns an OutOfMemoryError exception. Acquiring a heap lock for every allocation would be an intensive operation with a knock on impact to performance. To get around this problem, small objects are allocated to thread local heaps (TLH). Thread local heaps (TLH) To improve performance, allocation caches are reserved in the heap for different threads. These allocation caches are known as thread local heaps (TLH) and allow each thread to allocate memory from its cache without acquiring the heap lock. A TLH is typically used for small objects of less than 512 bytes (768 bytes on 64-bit VMs) although larger objects can be allocated from the cache if there is sufficient space. If a thread allocates a lot of objects, the allocator gives that thread a larger TLH to reduce contention on the heap lock. A TLH is predefined with an initial default size of 2 KB. On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). The requested size can grow up to a predefined maximum (default 128 KB). After every GC cycle, the TLH requested size for each thread is reduced, sometimes by as much as 50%, to take account of threads that reduce their allocation rate and no longer need large TLHs. For very inactive threads, the requested size can even drop below the initial value, down to the predefined minimum (512/768 bytes). For very active threads, the maximum TLH requested size might be reached before the next GC occurs. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. The following options control the requested TLH size: -Xgc:tlhMaximumSize=<bytes> -Xgc:tlhInitialSize=<bytes> -Xgc:tlhIncrementSize=<bytes> Typically, when the maximum TLH size is increased, you should also increase the increment proportionally, so that active threads can reach the maximum requested TLH size more quickly. Garbage collection To prevent applications running out of memory, objects in the Java heap that are no longer required must be reclaimed. This process is known as garbage collection (GC). When garbage is collected, the garbage collector must obtain exclusive access to the heap, which causes an application to pause while the clean up is done. This pause is often referred to as a stop-the-world pause because an application must halt until the process completes. In general, the first step in the GC process is to mark the objects that are reachable, which means they are still in use. The next step is to sweep away the unmarked objects to reclaim memory. The last step, which isn't always required unless the heap has become very fragmented, is to compact the heap. Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. Picking the right policy very much depends on your usage and performance goals. Generational Concurrent policy If you have a transactional application, with many short lived objects, the Generational Concurrent ( -Xgcpolicy:gencon ) GC policy is probably best suited, which aims to minimize GC pause times without compromising throughput. This is the default policy employed by the VM, so if you want to use it you don't need to specify it on the command line when you start your application. With the gencon policy, the Java heap is divided into two main areas, the nursery area, where new objects are created and the tenure area, where objects are moved if they have reached tenure age . The nursery area is subdivided into two further areas, the allocate space and the survivor space. The GC process is illustrated in the following diagram, which shows a sequence of 4 main events: Objects are created in the allocate space. The allocate space is full. A local GC scavenge process runs and reachable objects are either copied into the survivor space or into the tenure area if they have reached tenure age . Any objects that can't be reached are left untouched and subsequently cleared. The allocate and survivor spaces swap roles. The original survivor space becomes the allocate space where new objects are created, and the original allocate space becomes the survivor space ready for the next local GC scavenge process. The relative sizes of the allocate and survivor spaces are dynamically adjusted by a technique called tilting . When the nursery area is first created, it is evenly divided between the allocate and survivor spaces. If, after a GC scavenge process is run, the amount of space required for the survivor area is comparatively small, the boundary between the two spaces is adjusted by tilting . For example, if the survivor space requires only 10% of the nursery area, the tilt ratio is adjusted to give 90% of the nursery area to the allocate space. With more space available for new objects, garbage collection can be delayed. The tenure age of an object is determined by the VM and reflects the number of times that an object has been copied between the allocate space and the survivor space. The age is in the range 1 - 14 and is adjusted dynamically by the VM depending on the overall amount of space that is used in the nursery area . For example, if an object has a tenure age of 5, it has been copied backwards and forwards between allocate and survivor spaces 5 times. If the VM sets a tenure age of 5 based on the percentage of space remaining in the nursery area, the next scavenge moves the object from the nursery to the tenure area. You can set an initial tenure age with the -Xgc:scvTenureAge option. You can also prevent the VM dynamically adjusting the tenure age by setting the Xgc:scvNoAdaptiveTenure option so that the intial age is maintained throughout the run time of the VM. Within the tenure area, new objects are allocated into the small object area (SOA), which is illustrated in the earlier diagram (see 3.). A large object area (LOA) is set aside for objects greater than 64 KB that cannot be allocated into the SOA to minimize fragmentation. The LOA is allocated by default but is reduced and removed after a few GC cycles if it isn't populated. To prevent the creation of an LOA, you can specify the -Xnoloa option on the command line when you start your application. When the tenure area is close to full a global GC is triggered. The local GC scavenge reduces pause times by freqently reclaiming memory in the nursery area which, for a transactional application with many short-lived objects, has the most recyclable space. However, over time the tenure area might become full. So, whilst a local GC scavenge process is operating on the nursery area, a concurrent global GC process also runs alongside normal program execution to mark and remove unreachable objects from the tenure area. These two GC approaches combine to provide a good trade-off between shorter pause times and consistent throughput. A special mode of the gencon policy is known as Concurrent Scavenge ( -Xgc:concurrentScavenge ), which aims to minimize the time spent in stop-the-world pauses by collecting nursery garbage in parallel with running application threads. This mode can be enabled with hardware-based support and software-based support. Hardware-based support: (Linux on IBM Z\u00ae and z/OS\u00ae) This mode works on the IBM z14\u2122 and later mainframe system with the Guarded Storage (GS) Facility. The GS Facility provides hardware-based support to detect when potentially stale references to objects are accessed by an application. This means that the garbage collector can start processing objects in parts of the heap without halting an application because the GS Facility is on hand to spot accesses to an object and send a notification. The object that was ready to be swept away can be moved, and references to it can be reset. You can read more about this mode in the following blog posts: Reducing Garbage Collection pause times with Concurrent Scavenge and the Guarded Storage Facility How Concurrent Scavenge using the Guarded Storage Facility Works Software-based support: (64-bit: Linux on (x86-64, POWER, IBM Z\u00ae), AIX\u00ae, and z/OS\u00ae) With software-based support, Concurrent Scavenge can be enabled without any pre-requisite hardware although the performance throughput is not as good as hardware-based support. For more information about enabling Concurrent Scavenge, see the -Xgc:concurrentScavenge option. Other policies OpenJ9 has the following alternative GC policies: -Xgcpolicy:balanced divides the Java heap into regions, which are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The aim of the policy is to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance, particularly on large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER platforms). -Xgcpolicy:metronome is designed for applications that require precise response times. Garbage collection occurs in small interruptible steps to avoid stop-the-world pauses. This policy is available only on x86 Linux and AIX platforms. -Xgcpolicy:nogc handles only memory allocation and heap expansion, but doesn't reclaim any memory. The GC impact on runtime performance is therefore minimized, but if the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. -Xgcpolicy:optavgpause uses concurrent mark and sweep phases, which means that pause times are reduced when compared to optthruput, but at the expense of some performance throughput. -Xgcpolicy:optthruput is optimized for throughput by disabling the concurrent mark phase, which means that applications will stop for long pauses while garbage collection takes place. You might consider using this policy when high application throughput, rather than short garbage collection pauses, is the main performance goal. For more information about these garbage collection policies and options, see -Xgcpolicy . Troubleshooting You can diagnose problems with garbage collection operations by turning on verbose garbage collection logging. By default, the information is printed to STDERR but can be redirected to a file by specifying the -Xverbosegclog option. The log files contain detailed information about all operations, including initialization, stop-the-world processing, finalization, reference processing, and allocation failures. For more information, see Verbose garbage collection If verbose logs do not provide enough information to help you diagnose GC problems, you can use GC trace to analyze operations at a more granular level. For more information, see -Xtgc .","title":"Garbage Collection"},{"location":"gc/#garbage-collection","text":"The process of managing memory in the VM is handled by the Allocator and the Garbage Collector (GC). These components operate on an area of memory that is reserved for VM processing called the Java heap. The Allocator assigns areas of the Java heap for Java objects. Objects are considered as live when they have a chain of references to them that start from root references, such as those found in thread stacks. When that reference or pointer no longer exists, the objects are considered as garbage . The role of the Garbage Collector is to manage the storage in the Java heap and reclaim memory by removing garbage.","title":"Garbage collection"},{"location":"gc/#the-allocator","text":"The Allocator is a component of memory management that is typically overshadowed by the task of garbage collection. However, it is a critical, if not small part, of the overall process. The Allocator manages pools of free memory and how the free memory is consumed. It is also responsible for allocating areas of storage in the Java heap for objects at the request of applications, class libraries, or the VM. Every allocation requires a heap lock to stop concurrent threads trying to access the same area of memory at the same time. When an object is allocated, the heap lock is released. If there is insufficient space to allocate the object, allocation fails, the heap lock is released, and the GC is called. If the GC manages to recover some space on the heap, the Allocator can resume operations. If the GC does not recover enough space, it returns an OutOfMemoryError exception. Acquiring a heap lock for every allocation would be an intensive operation with a knock on impact to performance. To get around this problem, small objects are allocated to thread local heaps (TLH).","title":"The Allocator"},{"location":"gc/#thread-local-heaps-tlh","text":"To improve performance, allocation caches are reserved in the heap for different threads. These allocation caches are known as thread local heaps (TLH) and allow each thread to allocate memory from its cache without acquiring the heap lock. A TLH is typically used for small objects of less than 512 bytes (768 bytes on 64-bit VMs) although larger objects can be allocated from the cache if there is sufficient space. If a thread allocates a lot of objects, the allocator gives that thread a larger TLH to reduce contention on the heap lock. A TLH is predefined with an initial default size of 2 KB. On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). The requested size can grow up to a predefined maximum (default 128 KB). After every GC cycle, the TLH requested size for each thread is reduced, sometimes by as much as 50%, to take account of threads that reduce their allocation rate and no longer need large TLHs. For very inactive threads, the requested size can even drop below the initial value, down to the predefined minimum (512/768 bytes). For very active threads, the maximum TLH requested size might be reached before the next GC occurs. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. The following options control the requested TLH size: -Xgc:tlhMaximumSize=<bytes> -Xgc:tlhInitialSize=<bytes> -Xgc:tlhIncrementSize=<bytes> Typically, when the maximum TLH size is increased, you should also increase the increment proportionally, so that active threads can reach the maximum requested TLH size more quickly.","title":"Thread local heaps (TLH)"},{"location":"gc/#garbage-collection_1","text":"To prevent applications running out of memory, objects in the Java heap that are no longer required must be reclaimed. This process is known as garbage collection (GC). When garbage is collected, the garbage collector must obtain exclusive access to the heap, which causes an application to pause while the clean up is done. This pause is often referred to as a stop-the-world pause because an application must halt until the process completes. In general, the first step in the GC process is to mark the objects that are reachable, which means they are still in use. The next step is to sweep away the unmarked objects to reclaim memory. The last step, which isn't always required unless the heap has become very fragmented, is to compact the heap. Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. Picking the right policy very much depends on your usage and performance goals.","title":"Garbage collection"},{"location":"gc/#generational-concurrent-policy","text":"If you have a transactional application, with many short lived objects, the Generational Concurrent ( -Xgcpolicy:gencon ) GC policy is probably best suited, which aims to minimize GC pause times without compromising throughput. This is the default policy employed by the VM, so if you want to use it you don't need to specify it on the command line when you start your application. With the gencon policy, the Java heap is divided into two main areas, the nursery area, where new objects are created and the tenure area, where objects are moved if they have reached tenure age . The nursery area is subdivided into two further areas, the allocate space and the survivor space. The GC process is illustrated in the following diagram, which shows a sequence of 4 main events: Objects are created in the allocate space. The allocate space is full. A local GC scavenge process runs and reachable objects are either copied into the survivor space or into the tenure area if they have reached tenure age . Any objects that can't be reached are left untouched and subsequently cleared. The allocate and survivor spaces swap roles. The original survivor space becomes the allocate space where new objects are created, and the original allocate space becomes the survivor space ready for the next local GC scavenge process. The relative sizes of the allocate and survivor spaces are dynamically adjusted by a technique called tilting . When the nursery area is first created, it is evenly divided between the allocate and survivor spaces. If, after a GC scavenge process is run, the amount of space required for the survivor area is comparatively small, the boundary between the two spaces is adjusted by tilting . For example, if the survivor space requires only 10% of the nursery area, the tilt ratio is adjusted to give 90% of the nursery area to the allocate space. With more space available for new objects, garbage collection can be delayed. The tenure age of an object is determined by the VM and reflects the number of times that an object has been copied between the allocate space and the survivor space. The age is in the range 1 - 14 and is adjusted dynamically by the VM depending on the overall amount of space that is used in the nursery area . For example, if an object has a tenure age of 5, it has been copied backwards and forwards between allocate and survivor spaces 5 times. If the VM sets a tenure age of 5 based on the percentage of space remaining in the nursery area, the next scavenge moves the object from the nursery to the tenure area. You can set an initial tenure age with the -Xgc:scvTenureAge option. You can also prevent the VM dynamically adjusting the tenure age by setting the Xgc:scvNoAdaptiveTenure option so that the intial age is maintained throughout the run time of the VM. Within the tenure area, new objects are allocated into the small object area (SOA), which is illustrated in the earlier diagram (see 3.). A large object area (LOA) is set aside for objects greater than 64 KB that cannot be allocated into the SOA to minimize fragmentation. The LOA is allocated by default but is reduced and removed after a few GC cycles if it isn't populated. To prevent the creation of an LOA, you can specify the -Xnoloa option on the command line when you start your application. When the tenure area is close to full a global GC is triggered. The local GC scavenge reduces pause times by freqently reclaiming memory in the nursery area which, for a transactional application with many short-lived objects, has the most recyclable space. However, over time the tenure area might become full. So, whilst a local GC scavenge process is operating on the nursery area, a concurrent global GC process also runs alongside normal program execution to mark and remove unreachable objects from the tenure area. These two GC approaches combine to provide a good trade-off between shorter pause times and consistent throughput. A special mode of the gencon policy is known as Concurrent Scavenge ( -Xgc:concurrentScavenge ), which aims to minimize the time spent in stop-the-world pauses by collecting nursery garbage in parallel with running application threads. This mode can be enabled with hardware-based support and software-based support. Hardware-based support: (Linux on IBM Z\u00ae and z/OS\u00ae) This mode works on the IBM z14\u2122 and later mainframe system with the Guarded Storage (GS) Facility. The GS Facility provides hardware-based support to detect when potentially stale references to objects are accessed by an application. This means that the garbage collector can start processing objects in parts of the heap without halting an application because the GS Facility is on hand to spot accesses to an object and send a notification. The object that was ready to be swept away can be moved, and references to it can be reset. You can read more about this mode in the following blog posts: Reducing Garbage Collection pause times with Concurrent Scavenge and the Guarded Storage Facility How Concurrent Scavenge using the Guarded Storage Facility Works Software-based support: (64-bit: Linux on (x86-64, POWER, IBM Z\u00ae), AIX\u00ae, and z/OS\u00ae) With software-based support, Concurrent Scavenge can be enabled without any pre-requisite hardware although the performance throughput is not as good as hardware-based support. For more information about enabling Concurrent Scavenge, see the -Xgc:concurrentScavenge option.","title":"Generational Concurrent policy"},{"location":"gc/#other-policies","text":"OpenJ9 has the following alternative GC policies: -Xgcpolicy:balanced divides the Java heap into regions, which are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The aim of the policy is to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance, particularly on large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER platforms). -Xgcpolicy:metronome is designed for applications that require precise response times. Garbage collection occurs in small interruptible steps to avoid stop-the-world pauses. This policy is available only on x86 Linux and AIX platforms. -Xgcpolicy:nogc handles only memory allocation and heap expansion, but doesn't reclaim any memory. The GC impact on runtime performance is therefore minimized, but if the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. -Xgcpolicy:optavgpause uses concurrent mark and sweep phases, which means that pause times are reduced when compared to optthruput, but at the expense of some performance throughput. -Xgcpolicy:optthruput is optimized for throughput by disabling the concurrent mark phase, which means that applications will stop for long pauses while garbage collection takes place. You might consider using this policy when high application throughput, rather than short garbage collection pauses, is the main performance goal. For more information about these garbage collection policies and options, see -Xgcpolicy .","title":"Other policies"},{"location":"gc/#troubleshooting","text":"You can diagnose problems with garbage collection operations by turning on verbose garbage collection logging. By default, the information is printed to STDERR but can be redirected to a file by specifying the -Xverbosegclog option. The log files contain detailed information about all operations, including initialization, stop-the-world processing, finalization, reference processing, and allocation failures. For more information, see Verbose garbage collection If verbose logs do not provide enough information to help you diagnose GC problems, you can use GC trace to analyze operations at a more granular level. For more information, see -Xtgc .","title":"Troubleshooting"},{"location":"interface_dtfj/","text":"Diagnostic Tool Framework for Java The Diagnostic Tool Framework for Java\u2122 (DTFJ) is a Java application programming interface (API) that is used to support the building of Java diagnostic tools. DTFJ works with data from a system dump or a Java dump. On Linux and AIX\u00ae operating systems, you can get more information from a system dump if you also have copies of executable files and libraries. You can run the jextract utility provided in the SDK to collect these files into a single archive for use in subsequent problem diagnosis. For more information, see Dump extractor . The DTFJ API helps diagnostic tools access the following information: Memory locations stored in the dump (System dumps only) Relationships between memory locations and Java internals (System dumps only) Java threads running in the VM Native threads held in the dump (System dumps only) Java classes and their class loaders that were present Java objects that were present in the heap (System dumps only) Java monitors and the objects and threads they are associated with Details of the workstation on which the dump was produced (System dumps only) Details of the Java version that was being used The command line that launched the VM If your DTFJ application requests information that is not available in the Java dump, the API will return null or throw a DataUnavailable exception. You might need to adapt DTFJ applications written to process system dumps to make them work with Java dumps. DTFJ is implemented in pure Java and tools written using DTFJ can be cross-platform. Therefore, you can analyze a dump taken from one workstation on another (remote and more convenient) machine. For example, a dump produced on an AIX\u00ae Power\u00ae system can be analyzed on a Windows laptop. API documentation for the DTFJ interface can be found here: Application programming reference: DTFJ Using the DTFJ interface To create applications that use DTFJ, you must use the DTFJ interface. Implementations of this interface have been written that work with system dumps and Java dumps. The diagram that follows illustrates the DTFJ interface. The starting point for working with a dump is to obtain an Image instance by using the ImageFactory class supplied with the concrete implementation of the API. Working with a system dump The following example shows how to work with a system dump. In this example, the only section of code that ties the dump to a particular implementation of DTFJ is the generation of the factory class. Change the factory if you want to use a different implementation. If there is a problem with the file that is passed to the getImage() method, an IOException is thrown and an appropriate message is issued. If a missing file is passed to the example shown, the following output is produced: Could not find/use required file(s) java.io.FileNotFoundException: core_file.xml (The system cannot find the file specified.) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:135) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:47) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:35) at DTFJEX1.main(DTFJEX1.java:23)Copy In this case, the DTFJ implementation is expecting a dump file to exist. Different errors are caught if the file existed but was not recognized as a valid dump file. Example of working with a system dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX1 { public static void main(String[] args) { Image image = null; if (args.length > 0) { File f = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.j9.ImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(f); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } } Working with a Java dump To work with a Java dump, change the factory class to com.ibm.dtfj.image.javacore.JCImageFactory and pass the Java dump file to the getImage() method. Example of working with a Java dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX2 { public static void main(String[] args) { Image image=null; if (args.length > 0) { File javacoreFile = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.javacore.JCImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(javacoreFile); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } } Analyze the dump After you have obtained an Image instance, you can begin analyzing the dump. The Image instance is the second instance in the class hierarchy for DTFJ illustrated by the following diagram: Some things to note from the diagram: The DTFJ interface is separated into two parts: classes with names that start with Image (the dump, a sequence of bytes with different contents on different platforms) and classes with names that start with Java (the Java internal knowledge). Image and Java classes are linked using a ManagedRuntime class (which is extended by JavaRuntime ). An Image object contains one ImageAddressSpace object (or, on z/OS\u00ae, possibly more). An ImageAddressSpace object contains one ImageProcess object (or, on z/OS, possibly more). Conceptually, you can apply the Image model to any program running with the ImageProcess . For the purposes of this document discussion is limited to the OpenJ9 virtual machine implementations. There is a link from a JavaThread object to its corresponding ImageThread object. Use this link to find out about native code associated with a Java thread, for example JNI functions that have been called from Java. If a JavaThread was not running Java code when the dump was taken, the JavaThread object has no JavaStackFrame objects. In these cases, use the link to the corresponding ImageThread object to find out what native code was running in that thread. This situation is typically the case with the JIT compilation thread and Garbage Collection threads. The DTFJ interface enables you to obtain information about native memory. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . When the Java runtime allocates native memory, the memory is associated with a high-level memory category. For more information about native memory detailed in a Java dump, see Java dump: NATIVEMEMINFO DTFJ example application This example is a fully working DTFJ application. Many DTFJ applications will follow a similar model. Sample DTFJ application import java.io.File; import java.util.Iterator; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.CorruptDataException; import com.ibm.dtfj.image.DataUnavailable; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageAddressSpace; import com.ibm.dtfj.image.ImageFactory; import com.ibm.dtfj.image.ImageProcess; import com.ibm.dtfj.java.JavaRuntime; import com.ibm.dtfj.java.JavaThread; import com.ibm.dtfj.image.ImageThread; public class DTFJEX2 { public static void main( String[] args ) { Image image = null; if ( args.length > 0 ) { File f = new File( args[0] ); try { Class factoryClass = Class .forName( \"com.ibm.dtfj.image.j9.ImageFactory\" ); ImageFactory factory = (ImageFactory) factoryClass.newInstance( ); image = factory.getImage( f ); } catch ( Exception ex ) { /* * Should use the error handling as shown in DTFJEX1. */ System.err.println( \"Error in DTFJEX2\" ); ex.printStackTrace( System.err ); } } else { System.err.println( \"No filename specified\" ); } if ( null == image ) { return; } MatchingThreads( image ); } public static void MatchingThreads( Image image ) { ImageThread imgThread = null; Iterator asIt = image.getAddressSpaces( ); while ( asIt.hasNext( ) ) { System.out.println( \"Found ImageAddressSpace...\" ); ImageAddressSpace as = (ImageAddressSpace) asIt.next( ); Iterator prIt = as.getProcesses( ); while ( prIt.hasNext( ) ) { System.out.println( \"Found ImageProcess...\" ); ImageProcess process = (ImageProcess) prIt.next( ); Iterator runTimesIt = process.getRuntimes( ); while ( runTimesIt.hasNext( ) ) { System.out.println( \"Found Runtime...\" ); JavaRuntime javaRT = (JavaRuntime) runTimesIt.next( ); Iterator javaThreadIt = javaRT.getThreads( ); while ( javaThreadIt.hasNext( ) ) { Object tempObj = javaThreadIt.next( ); /* * Should use CorruptData handling for all iterators */ if ( tempObj instanceof CorruptData ) { System.out.println( \"We have some corrupt data\" ); } else { JavaThread javaThread = (JavaThread) tempObj; System.out.println( \"Found JavaThread...\" ); try { imgThread = (ImageThread) javaThread.getImageThread( ); // Now we have a Java thread we can iterator // through the image threads Iterator imgThreadIt = process.getThreads( ); while ( imgThreadIt.hasNext( ) ) { ImageThread imgThread2 = (ImageThread) imgThreadIt .next( ); if ( imgThread.equals( imgThread2 ) ) { System.out.println( \"Found a match:\" ); System.out.println( \"\\tjavaThread \" + javaThread.getName( ) + \" is the same as \" + imgThread2.getID( ) ); } } } catch ( CorruptDataException e ) { System.err.println( \"ImageThread was corrupt: \" + e.getMessage( ) ); } catch ( DataUnavailable e ) { System.out.println( \"DataUnavailable: \" + e.getMessage( ) ); } } } } } } } } For clarity, the example does not perform full error checking when constructing the main Image object and does not perform CorruptData handling in all of the iterators. In a production environment, you use the techniques illustrated in the previous examples under Working with a system dump and Working with a Java dump . In the example, the program iterates through every available Java thread and checks whether it is equal to any of the available image threads. When they are found to be equal, the program displays the following message: \"Found a match\". The example demonstrates: How to iterate down through the class hierarchy. How to handle CorruptData objects from the iterators. The use of the .equals method for testing equality between objects.","title":"DTFJ"},{"location":"interface_dtfj/#diagnostic-tool-framework-for-java","text":"The Diagnostic Tool Framework for Java\u2122 (DTFJ) is a Java application programming interface (API) that is used to support the building of Java diagnostic tools. DTFJ works with data from a system dump or a Java dump. On Linux and AIX\u00ae operating systems, you can get more information from a system dump if you also have copies of executable files and libraries. You can run the jextract utility provided in the SDK to collect these files into a single archive for use in subsequent problem diagnosis. For more information, see Dump extractor . The DTFJ API helps diagnostic tools access the following information: Memory locations stored in the dump (System dumps only) Relationships between memory locations and Java internals (System dumps only) Java threads running in the VM Native threads held in the dump (System dumps only) Java classes and their class loaders that were present Java objects that were present in the heap (System dumps only) Java monitors and the objects and threads they are associated with Details of the workstation on which the dump was produced (System dumps only) Details of the Java version that was being used The command line that launched the VM If your DTFJ application requests information that is not available in the Java dump, the API will return null or throw a DataUnavailable exception. You might need to adapt DTFJ applications written to process system dumps to make them work with Java dumps. DTFJ is implemented in pure Java and tools written using DTFJ can be cross-platform. Therefore, you can analyze a dump taken from one workstation on another (remote and more convenient) machine. For example, a dump produced on an AIX\u00ae Power\u00ae system can be analyzed on a Windows laptop. API documentation for the DTFJ interface can be found here: Application programming reference: DTFJ","title":"Diagnostic Tool Framework for Java"},{"location":"interface_dtfj/#using-the-dtfj-interface","text":"To create applications that use DTFJ, you must use the DTFJ interface. Implementations of this interface have been written that work with system dumps and Java dumps. The diagram that follows illustrates the DTFJ interface. The starting point for working with a dump is to obtain an Image instance by using the ImageFactory class supplied with the concrete implementation of the API.","title":"Using the DTFJ interface"},{"location":"interface_dtfj/#working-with-a-system-dump","text":"The following example shows how to work with a system dump. In this example, the only section of code that ties the dump to a particular implementation of DTFJ is the generation of the factory class. Change the factory if you want to use a different implementation. If there is a problem with the file that is passed to the getImage() method, an IOException is thrown and an appropriate message is issued. If a missing file is passed to the example shown, the following output is produced: Could not find/use required file(s) java.io.FileNotFoundException: core_file.xml (The system cannot find the file specified.) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:135) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:47) at com.ibm.dtfj.image.j9.ImageFactory.getImage(ImageFactory.java:35) at DTFJEX1.main(DTFJEX1.java:23)Copy In this case, the DTFJ implementation is expecting a dump file to exist. Different errors are caught if the file existed but was not recognized as a valid dump file. Example of working with a system dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX1 { public static void main(String[] args) { Image image = null; if (args.length > 0) { File f = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.j9.ImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(f); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } }","title":"Working with a system dump"},{"location":"interface_dtfj/#working-with-a-java-dump","text":"To work with a Java dump, change the factory class to com.ibm.dtfj.image.javacore.JCImageFactory and pass the Java dump file to the getImage() method. Example of working with a Java dump import java.io.File; import java.util.Iterator; import java.io.IOException; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageFactory; public class DTFJEX2 { public static void main(String[] args) { Image image=null; if (args.length > 0) { File javacoreFile = new File(args[0]); try { Class factoryClass = Class.forName(\"com.ibm.dtfj.image.javacore.JCImageFactory\"); ImageFactory factory = (ImageFactory) factoryClass.newInstance(); image = factory.getImage(javacoreFile); } catch (ClassNotFoundException e) { System.err.println(\"Could not find DTFJ factory class\"); e.printStackTrace(System.err); } catch (IllegalAccessException e) { System.err.println(\"IllegalAccessException for DTFJ factory class\"); e.printStackTrace(System.err); } catch (InstantiationException e) { System.err.println(\"Could not instantiate DTFJ factory class\"); e.printStackTrace(System.err); } catch (IOException e) { System.err.println(\"Could not find/use required file(s)\"); e.printStackTrace(System.err); } } else { System.err.println(\"No filename specified\"); } if (image == null) { return; } Iterator asIt = image.getAddressSpaces(); int count = 0; while (asIt.hasNext()) { Object tempObj = asIt.next(); if (tempObj instanceof CorruptData) { System.err.println(\"Address Space object is corrupt: \" + (CorruptData) tempObj); } else { count++; } } System.out.println(\"The number of address spaces is: \" + count); } }","title":"Working with a Java dump"},{"location":"interface_dtfj/#analyze-the-dump","text":"After you have obtained an Image instance, you can begin analyzing the dump. The Image instance is the second instance in the class hierarchy for DTFJ illustrated by the following diagram: Some things to note from the diagram: The DTFJ interface is separated into two parts: classes with names that start with Image (the dump, a sequence of bytes with different contents on different platforms) and classes with names that start with Java (the Java internal knowledge). Image and Java classes are linked using a ManagedRuntime class (which is extended by JavaRuntime ). An Image object contains one ImageAddressSpace object (or, on z/OS\u00ae, possibly more). An ImageAddressSpace object contains one ImageProcess object (or, on z/OS, possibly more). Conceptually, you can apply the Image model to any program running with the ImageProcess . For the purposes of this document discussion is limited to the OpenJ9 virtual machine implementations. There is a link from a JavaThread object to its corresponding ImageThread object. Use this link to find out about native code associated with a Java thread, for example JNI functions that have been called from Java. If a JavaThread was not running Java code when the dump was taken, the JavaThread object has no JavaStackFrame objects. In these cases, use the link to the corresponding ImageThread object to find out what native code was running in that thread. This situation is typically the case with the JIT compilation thread and Garbage Collection threads. The DTFJ interface enables you to obtain information about native memory. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . When the Java runtime allocates native memory, the memory is associated with a high-level memory category. For more information about native memory detailed in a Java dump, see Java dump: NATIVEMEMINFO","title":"Analyze the dump"},{"location":"interface_dtfj/#dtfj-example-application","text":"This example is a fully working DTFJ application. Many DTFJ applications will follow a similar model. Sample DTFJ application import java.io.File; import java.util.Iterator; import com.ibm.dtfj.image.CorruptData; import com.ibm.dtfj.image.CorruptDataException; import com.ibm.dtfj.image.DataUnavailable; import com.ibm.dtfj.image.Image; import com.ibm.dtfj.image.ImageAddressSpace; import com.ibm.dtfj.image.ImageFactory; import com.ibm.dtfj.image.ImageProcess; import com.ibm.dtfj.java.JavaRuntime; import com.ibm.dtfj.java.JavaThread; import com.ibm.dtfj.image.ImageThread; public class DTFJEX2 { public static void main( String[] args ) { Image image = null; if ( args.length > 0 ) { File f = new File( args[0] ); try { Class factoryClass = Class .forName( \"com.ibm.dtfj.image.j9.ImageFactory\" ); ImageFactory factory = (ImageFactory) factoryClass.newInstance( ); image = factory.getImage( f ); } catch ( Exception ex ) { /* * Should use the error handling as shown in DTFJEX1. */ System.err.println( \"Error in DTFJEX2\" ); ex.printStackTrace( System.err ); } } else { System.err.println( \"No filename specified\" ); } if ( null == image ) { return; } MatchingThreads( image ); } public static void MatchingThreads( Image image ) { ImageThread imgThread = null; Iterator asIt = image.getAddressSpaces( ); while ( asIt.hasNext( ) ) { System.out.println( \"Found ImageAddressSpace...\" ); ImageAddressSpace as = (ImageAddressSpace) asIt.next( ); Iterator prIt = as.getProcesses( ); while ( prIt.hasNext( ) ) { System.out.println( \"Found ImageProcess...\" ); ImageProcess process = (ImageProcess) prIt.next( ); Iterator runTimesIt = process.getRuntimes( ); while ( runTimesIt.hasNext( ) ) { System.out.println( \"Found Runtime...\" ); JavaRuntime javaRT = (JavaRuntime) runTimesIt.next( ); Iterator javaThreadIt = javaRT.getThreads( ); while ( javaThreadIt.hasNext( ) ) { Object tempObj = javaThreadIt.next( ); /* * Should use CorruptData handling for all iterators */ if ( tempObj instanceof CorruptData ) { System.out.println( \"We have some corrupt data\" ); } else { JavaThread javaThread = (JavaThread) tempObj; System.out.println( \"Found JavaThread...\" ); try { imgThread = (ImageThread) javaThread.getImageThread( ); // Now we have a Java thread we can iterator // through the image threads Iterator imgThreadIt = process.getThreads( ); while ( imgThreadIt.hasNext( ) ) { ImageThread imgThread2 = (ImageThread) imgThreadIt .next( ); if ( imgThread.equals( imgThread2 ) ) { System.out.println( \"Found a match:\" ); System.out.println( \"\\tjavaThread \" + javaThread.getName( ) + \" is the same as \" + imgThread2.getID( ) ); } } } catch ( CorruptDataException e ) { System.err.println( \"ImageThread was corrupt: \" + e.getMessage( ) ); } catch ( DataUnavailable e ) { System.out.println( \"DataUnavailable: \" + e.getMessage( ) ); } } } } } } } } For clarity, the example does not perform full error checking when constructing the main Image object and does not perform CorruptData handling in all of the iterators. In a production environment, you use the techniques illustrated in the previous examples under Working with a system dump and Working with a Java dump . In the example, the program iterates through every available Java thread and checks whether it is equal to any of the available image threads. When they are found to be equal, the program displays the following message: \"Found a match\". The example demonstrates: How to iterate down through the class hierarchy. How to handle CorruptData objects from the iterators. The use of the .equals method for testing equality between objects.","title":"DTFJ example application"},{"location":"interface_jvmti/","text":"Java Virtual Machine Tool Interface The Java\u2122 Virtual Machine Tool Interface (JVMTI) is a two-way interface that allows communication between the VM and a native agent. It replaces both the Java Virtual Machine Debug Interface (JVMDI) and Java Virtual Machine Profiler Interface (JVMPI). Overview The JVMTI allows third parties to develop debugging, profiling, and monitoring tools for the VM. The interface contains mechanisms for the agent to notify the VM about the kinds of information it requires, and also provides a means of receiving relevant notifications. Several agents can be attached to a VM at any one time. JVMTI agents can be loaded at startup using short or long forms of the command-line option: -agentlib:<agent-lib-name>=<options> or -agentpath:<path-to-agent>=<options> In the example that follows (see Sample JVMTI agent ), the directory containing the jdwp library is assumed to be on the library path. If you require a specific library, such as jdwp , with your JVMTI agent, you can specify the path at startup, for example: -agentlib:jdwp=<options> For more information about JVMTI, see https://docs.oracle.com/javase/8/docs/technotes/guides/management/index.html . For a guide about writing a JVMTI agent, see http://www.oracle.com/technetwork/articles/javase/jvmti-136367.html . OpenJ9 extensions OpenJ9 extensions to the JVMTI allow a JVMTI agent to query or automatically trigger operations in the VM, including the following tasks: Task OpenJ9 extensions Get the OS thread ID GetOSThreadID Query, set, and reset the VM dump options QueryVmDump , SetVmDump , ResetVmDump Trigger a VM dump, and monitor JVMTI event functions when VM dumps start and end TriggerVmDump , VMDumpStart , VMDumpEnd Set VM trace options SetVmTrace Subscribe to and unsubscribe from VM tracepoints RegisterTracePointSubscriber , DeregisterTracePointSubscriber Query runtime environment native memory categories GetMemoryCategories Query and set VM log options QueryVmLogOptions , SetVmLogOptions Search for and remove a shared class cache IterateSharedCaches , DestroySharedCache Subscribe to and unsubscribe from verbose garbage collection (GC) data logging RegisterVerboseGCSubscriber , DeregisterVerboseGCSubscriber The definitions that you need when you write a JVMTI agent are provided in the header files jvmti.h and ibmjvmti.h , in the include directory. Sample JVMTI agent The following sample shows you how to write a simple JVMTI agent that uses OpenJ9 extensions to the JVMTI. Sample JVMTI agent written in C/C++, which uses the OpenJ9 extensions /* * tiSample.c * * Sample JVMTI agent to demonstrate the OpenJ9 JVMTI dump extensions */ #include \"jvmti.h\" #include \"ibmjvmti.h\" /* Forward declarations for JVMTI callback functions */ void JNICALL VMInitCallback(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread); void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...); /* * Agent_Onload() * * JVMTI agent initialisation function, invoked as agent is loaded by the VM */ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { jvmtiEnv *jvmti = NULL; jvmtiError rc; jint extensionEventCount = 0; jvmtiExtensionEventInfo *extensionEvents = NULL; jint extensionFunctionCount = 0; jvmtiExtensionFunctionInfo *extensionFunctions = NULL; int i = 0, j = 0; printf(\"tiSample: Loading JVMTI sample agent\\n\"); /* Get access to JVMTI */ (*jvm)->GetEnv(jvm, (void **)&jvmti, JVMTI_VERSION_1_0); /* Look up all the JVMTI extension events and functions */ (*jvmti)->GetExtensionEvents(jvmti, &extensionEventCount, &extensionEvents); (*jvmti)->GetExtensionFunctions(jvmti, &extensionFunctionCount, &extensionFunctions); printf(\"tiSample: Found %i JVMTI extension events, %i extension functions\\n\", extensionEventCount, extensionFunctionCount); /* Find the JVMTI extension event we want */ while (i++ < extensionEventCount) { if (strcmp(extensionEvents->id, COM_IBM_VM_DUMP_START) == 0) { /* Found the dump start extension event, now set up a callback for it */ rc = (*jvmti)->SetExtensionEventCallback(jvmti, extensionEvents->extension_event_index, &DumpStartCallback); printf(\"tiSample: Setting JVMTI event callback %s, rc=%i\\n\", COM_IBM_VM_DUMP_START, rc); break; } extensionEvents++; /* move on to the next extension event */ } /* Find the JVMTI extension function we want */ while (j++ < extensionFunctionCount) { jvmtiExtensionFunction function = extensionFunctions->func; if (strcmp(extensionFunctions->id, COM_IBM_SET_VM_DUMP) == 0) { /* Found the set dump extension function, now set a dump option to generate javadumps on thread starts */ rc = function(jvmti, \"java:events=thrstart\"); printf(\"tiSample: Calling JVMTI extension %s, rc=%i\\n\", COM_IBM_SET_VM_DUMP, rc); break; } extensionFunctions++; /* move on to the next extension function */ } return JNI_OK; } /* * DumpStartCallback() * JVMTI callback for dump start event (IBM JVMTI extension) */ void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...) { printf(\"tiSample: Received JVMTI event callback, for event %s\\n\", event); } The sample JVMTI agent consists of two functions, Agent_OnLoad() and DumpStartCallback() : Agent_OnLoad() This function is called by the VM when the agent is loaded at VM startup, which allows the JVMTI agent to modify VM behavior before initialization is complete. The sample agent obtains access to the JVMTI interface by using the JNI Invocation API function GetEnv() . The agent calls the APIs GetExtensionEvents() and GetExtensionFunctions() to find the JVMTI extensions that are supported by the VM. These APIs provide access to the list of extensions available in the jvmtiExtensionEventInfo and jvmtiExtensionFunctionInfo structures. The sample uses an extension event and an extension function in the following way: Extension event: The sample JVMTI agent searches for the extension event VmDumpStart in the list of jvmtiExtensionEventInfo structures, by using the identifier COM_IBM_VM_DUMP_START provided in ibmjvmti.h . When the event is found, the JVMTI agent calls the JVMTI interface SetExtensionEventCallback() to enable the event, providing a function DumpStartCallback() that is called when the event is triggered. Extension function: Next, the sample JVMTI agent searches for the extension function SetVMDump in the list of jvmtiExtensionFunctionInfo structures, by using the identifier COM_IBM_SET_VM_DUMP provided in ibmjvmti.h . The JVMTI agent calls the function by using the jvmtiExtensionFunction pointer to set a VM dump option java:events=thrstart . This option requests the VM to trigger a Java dump every time a VM thread is started. DumpStartCallback() This callback function issues a message when the associated extension event is called. In the sample code, DumpStartCallback() is used when the VmDumpStart event is triggered. Using the sample JVMTI agent Build the sample JVMTI agent: Windows: cl /I<jre_path>\\include /MD /FetiSample.dll tiSample.c /link /DLL Linux, AIX\u00ae, and z/OS\u00ae: gcc -I<jre_path>/include -o libtiSample.so -shared tiSample.c where <jre_path> is the path to your Java runtime environment installation. To run the sample JVMTI agent, use the command: java -agentlib:tiSample -version When the sample JVMTI agent loads, messages are generated. When the JVMTI agent initiates a Java dump, the message JVMDUMP010 is issued. API reference The following sections provide reference information for the OpenJ9 extensions to the JVMTI. GetOSThreadID You can get the OS thread ID by using the GetOSThreadID() API: jvmtiError GetOSThreadID(jvmtiEnv* jvmti_env, jthread thread, jlong * threadid_ptr); Parameters jvmti_env : A pointer to the JVMTI environment. thread : The thread for which the ID is required. threadid_ptr : A pointer to a variable, used to return the thread ID that corresponds to the thread specified by the thread parameter. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The threadid_ptr parameter is null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_INVALID_THREAD : The thread is not valid. JVMTI_ERROR_THREAD_NOT_ALIVE : The VM state of the thread is not started or has died. JVMTI_ERROR_UNATTACHED_THREAD : The current thread is not attached to the VM. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI start or live phase. Identifiers JVMTI Extension Function identifier: com.ibm.GetOSThreadID Macro declaration in the ibmjvmti.h file: COM_IBM_GET_OS_THREAD_ID QueryVmDump You can query the VM dump options that are set for a VM by using the QueryVmDump() API: jvmtiError QueryVmDump(jvmtiEnv* jvmti_env, jint buffer_size, void* options_buffer, jint* data_size_ptr) This extension returns a set of dump option specifications as ASCII strings. The syntax of the option string is the same as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . The option strings are separated by newline characters. If the memory buffer is too small to contain the current VM dump option strings, you can expect the following results: The error message JVMTI_ERROR_ILLEGAL_ARGUMENT is returned. The variable for data_size_ptr is set to the required buffer size. Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option strings. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options_buffer or data_size_ptr parameters are null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer in options_buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_DUMP SetVmDump You can set VM dump options by using the SetVmDump() API: jvmtiError SetVmDump(jvmtiEnv* jvmti_env, char* option) The dump option is passed in as an ASCII character string. Use the same syntax as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . When dumps are in progress, the dump configuration is locked, and calls to SetVmDump() fail with a return value of JVMTI_ERROR_NOT_AVAILABLE . Parameters jvmti_env : A pointer to the JVMTI environment. option : The VM dump option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xdump string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_DUMP TriggerVmDump You can trigger a VM dump and specify the type of dump you want by using the TriggerVmDump() API: jvmtiError TriggerVmDump(jvmtiEnv* jvmti_env, char* option) Choose the type of dump required by specifying an ASCII string that contains one of the supported dump agent types. See -Xdump . JVMTI events are provided at the start and end of the dump. Parameters jvmti_env : A pointer to the JVMTI environment. option : A pointer to the dump type string, which can be one of the following types: stack java system console tool heap snap ceedump (z/OS only) Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.TriggerVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_TRIGGER_VM_DUMP ResetVmDump You can reset VM dump options to the values at VM initialization by using the ResetVmDump() API: jvmtiError ResetVmDump(jvmtiEnv* jvmti_env) Parameters jvmti_env : The JVMTI environment pointer. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.ResetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_RESET_VM_DUMP VMDumpStart The following JVMTI event function is called when a VM dump starts: void JNICALL VMDumpStart(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait.\" Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name, such as com.ibm.VmDumpStart . detail : The dump event detail string. The string can be empty. Returns None VMDumpEnd The following JVMTI event function is called when a VM dump ends: void JNICALL VMDumpEnd(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait. Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name com.ibm.VmDumpEnd . detail : The dump event detail string. The string can be empty. Returns None SetVmTrace You can set VM trace options by using the SetVmTrace() API: jvmtiError SetVmTrace(jvmtiEnv* jvmti_env, char* option) The trace option is passed in as an ASCII character string. Use the same syntax as the -Xtrace command-line option, with the initial -Xtrace: omitted. See -Xtrace . Parameters jvmti_env : JVMTI environment pointer. option : Enter the VM trace option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The option parameter contains an invalid -Xtrace string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmTrace Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_TRACE RegisterTracePointSubscriber You can subscribe to VM tracepoints by using the RegisterTracePointSubscriber() API: jvmtiError RegisterTracePointSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiTraceSubscriber subscriber, jvmtiTraceAlarm alarm, void *userData, void **subscriptionID) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiTraceSubscriber . alarm : A function pointer of type jvmtiTraceAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterTracePointSubscriber call if successful. The value must be supplied to a future call to the DeregisterTracePointSubscriber API, which is used to unsubscribe from the VM tracepoint. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : VM trace is not available. JVMTI_ERROR_INTERNAL : An internal error occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_TRACEPOINT_SUBSCRIBER jvmtiTraceSubscriber function The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiTraceSubscriber)(jvmtiEnv *jvmti_env, void *record, jlong length, void *user_data); The subscriber function must be of type jvmtiTraceSubscriber , which is declared in ibmjvmti.h . This function is called with each tracepoint record that is selected through the -Xtrace:external option. The tracepoint record that is supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, the subscription is disconnected, and no further tracepoints are sent to the subscriber. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : A UTF-8 string that contains a tracepoint record. length : The number of UTF-8 characters in the tracepoint record. user_data : User data that is supplied when the subscriber is registered. jvmtiTraceAlarm function The alarm function type is defined as follows: typedef jvmtiError (*jvmtiTraceAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiTraceAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier. user_data : User data that is supplied when the subscriber is registered. DeregisterTracePointSubscriber You can unsubscribe from VM tracepoints by using the DeregisterTracePointSubscriber() API: jvmtiError DeregisterTracePointSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterTracePointSubscriber() API is called, no further calls are made to the subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterTracePointSubscriber API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_TRACEPOINT_SUBSCRIBER GetMemoryCategories You can query runtime environment native memory categories by using the GetMemoryCategories() API: jvmtiError GetMemoryCategories(jvmtiEnv* env, jint version, jint max_categories, jvmtiMemoryCategory * categories_buffer, jint * written_count_ptr, jint * total_categories_ptr); You can query the total native memory consumption of the runtime environment for each memory category by using this API. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . Runtime environment native memory use is grouped under high-level memory categories, as described in the NATIVEMEMINFO section of the Java dump topic. The data returned by the GetMemoryCategories() API is consistent with this format. See Java dump: NATIVEMEMINFO . The extension writes native memory information to a memory buffer specified by the user. Each memory category is recorded as a jvmtiMemoryCategory structure, whose format is defined in ibmjvmti.h . You can use the GetMemoryCategories() API to work out the buffer size you must allocate to hold all memory categories defined inside the VM. To calculate the size, call the API with a null categories_buffer argument and a non-null total_categories_ptr argument. Parameters env : A pointer to the JVMTI environment. version : The version of the jvmtiMemoryCategory structure that you are using. Use COM_IBM_GET_MEMORY_CATEGORIES_VERSION_1 for this argument, unless you must work with an obsolete version of the jvmtiMemoryCategory structure. max_categories : The number of jvmtiMemoryCategory structures that can fit in the categories_buffer memory buffer. categories_buffer : A pointer to the memory buffer for holding the result of the GetMemoryCategories() call. The number of jvmtiMemoryCategory slots available in the categories_buffer memory buffer must be accurately specified with max_categories , otherwise GetMemoryCategories() can overflow the memory buffer. The value can be null. written_count_ptr : A pointer to jint to store the number of jvmtiMemoryCategory structures to be written to the categories_buffer memory buffer. The value can be null. total_categories_ptr : A pointer to jint to store the total number of memory categories declared in the VM. The value can be null. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_UNSUPPORTED_VERSION : Unrecognized value passed for version. JVMTI_ERROR_ILLEGAL_ARGUMENT : Illegal argument; categories_buffer , count_ptr , and total_categories_ptr all have null values. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is invalid. JVMTI_ERROR_OUT_OF_MEMORY : Memory category data is truncated because max_categories is not large enough. Identifiers JVMTI Extension Function identifier: com.ibm.GetMemoryCategories Macro declaration in the ibmjvmti.h file: COM_IBM_GET_MEMORY_CATEGORIES QueryVmLogOptions You can query VM log options by using the QueryVmLogOptions() API: jvmtiError QueryVmLogOptions(jvmtiEnv* jvmti_env, jint buffer_size, void* options, jint* data_size_ptr) This extension returns the current log options as an ASCII string. The syntax of the string is the same as the -Xlog command-line option, with the initial -Xlog: omitted. For example, the string \"error,warn\" indicates that the VM is set to log error and warning messages only. For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. If the memory buffer is too small to contain the current VM log option string, the JVMTI_ERROR_ILLEGAL_ARGUMENT error message is returned. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option string. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options or data_size_ptr parameters are null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_LOG_OPTIONS SetVmLogOptions You can set VM log options by using the SetVmLogOptions() API: jvmtiError SetVmLogOptions(jvmtiEnv* jvmti_env, char* options_buffer) The log option is passed in as an ASCII character string. Use the same syntax as the -Xlog command-line option, with the initial -Xlog: omitted. For example, to set the VM to log error and warning messages, pass in a string containing \"error,warn\". For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. options_buffer : A pointer to memory containing the log option. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xlog string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_LOG_OPTIONS IterateSharedCaches You can search for shared class caches that exist in a specified cache directory by using the IterateSharedCaches() API: jvmtiError IterateSharedCaches(jvmtiEnv* env, jint version, const char *cacheDir, jint flags, jboolean useCommandLineValues, jvmtiIterateSharedCachesCallback callback, void *user_data); Information about the caches is returned in a structure that is populated by a user-specified callback function. You can specify the search directory in two ways: Set the value of useCommandLineValues to true and specify the directory on the command line. If the directory is not specified on the command line, the default location for the platform is used. Set the value of useCommandLineValues to false and use the cacheDir parameter. To accept the default location for the platform, specify cacheDir with a null value. Parameters env : A pointer to the JVMTI environment. version : Version information for IterateSharedCaches , which describes the jvmtiSharedCacheInfo structure passed to the jvmtiIterateSharedCachesCallback function. The values allowed are: COM_IBM_ITERATE_SHARED_CACHES_VERSION_1 COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. flags : Reserved for future use. The only value allowed is COM_IBM_ITERATE_SHARED_CACHES_NO_FLAGS . useCommandLineValues : Set this value to true when you want to specify the cache directory on the command line. Set this value to false when you want to use the cacheDir parameter. callback : A function pointer to a user provided callback routine jvmtiIterateSharedCachesCallback . user_data : User supplied data, passed as an argument to the callback function. jint (JNICALL *jvmtiIterateSharedCachesCallback)(jvmtiEnv *env,jvmtiSharedCacheInfo *cache_info, void *user_data); Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_UNSUPPORTED_VERSION : The version parameter is not valid. JVMTI_ERROR_NULL_POINTER : The callback parameter is null. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The flags parameter is not valid. JVMTI_ERROR_INTERNAL : This error is returned when the jvmtiIterateSharedCachesCallback returns JNI_ERR . Identifiers JVMTI Extension Function identifier: com.ibm.IterateSharedCaches Macro declaration in the ibmjvmti.h file: COM_IBM_ITERATE_SHARED_CACHES jvmtiIterateSharedCachesCallback function Callback function parameters env : A pointer to the JVMTI environment when calling COM_IBM_ITERATE_SHARED_CACHES . cache_info : A jvmtiSharedCacheInfo structure containing information about a shared cache. user_data : User-supplied data, passed as an argument to IterateSharedCaches . Callback function returns JNI_OK : Continue iterating. JNI_ERR : Stop iterating, which causes IterateSharedCaches to return JVMTI_ERROR_INTERNAL jvmtiSharedCacheInfo structure The structure of jvmtiSharedCacheInfo typedef struct jvmtiSharedCacheInfo { const char *name; // the name of the shared cache jboolean isCompatible; // if the shared cache is compatible with this VM jboolean isPersistent; // true if the shared cache is persistent, false if its non-persistent jint os_shmid; // the OS shared memory ID associated with a non-persistent cache, -1 otherwise jint os_semid; // the OS shared semaphore ID associated with a non-persistent cache, -1 otherwise jint modLevel; // one of: // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA5 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA6 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA7 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA8 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA9 // from Java 10: the version number of the Java level on which the shared cache is created jint addrMode; // the address mode of the VM creating the shared cache: includes additional // information on whether it is a 64-bit compressedRefs cache when // COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. jboolean isCorrupt; // if the cache is corrupted jlong cacheSize; // the total usable shared class cache size, or -1 when isCompatible is false jlong freeBytes; // the number of free bytes in the shared class cache, or -1 when isCompatible is false jlong lastDetach; // the last detach time specified in milliseconds since 00:00:00 on 1 January 1970 UTC, // or -1 when the last detach time is not available jint cacheType; // the type of the cache jlong softMaxBytes; // the soft limit for the available space in the cache } jvmtiSharedCacheInfo; Notes: The field cacheType is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 or later is specified. jvmtiSharedCacheInfo.addrMode encodes both address mode and the compressed reference mode when COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. In this case, use the following set of macros to access the address mode and compressed reference mode: To get the address mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_ADDR_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_SHARED_CACHE_ADDRMODE_32 COM_IBM_SHARED_CACHE_ADDRMODE_64 To get the compressed references mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_CMPRSSREF_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_ITERATE_SHARED_CACHES_UNKNOWN_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_NON_COMPRESSED_POINTERS_MODE The field softMaxBytes is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 or later is specified. DestroySharedCache You can remove a shared class cache by using the DestroySharedCache() API: jvmtiError DestroySharedCache(jvmtiEnv *env, const char *cacheDir, const char *name, jint persistence, jboolean useCommandLineValues, jint *internalErrorCode); This extension removes a named shared class cache of a given persistence type, in a given directory. You can specify the cache name, persistence type, and directory in one of these ways: Set useCommandLineValues to true and specify the values on the command line. If a value is not available, the default values for the platform are used. Set useCommandLineValues to false and use the cacheDir , persistence and cacheName parameters to identify the cache to be removed. To accept the default value for cacheDir or cacheName , specify the parameter with a null value. Parameters env : A pointer to the JVMTI environment. cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. cacheName : When the value of useCommandLineValues is false , specify the name of the cache to be removed. If the value is null , the platform-dependent default is used. persistence : When the value of useCommandLineValues is false, specify the type of cache to remove. This parameter must have one of the following values: PERSISTENCE_DEFAULT (The default value for the platform). PERSISTENT NONPERSISTENT useCommandLineValues : Set this value to true when you want to specify the shared class cache name, persistence type, and directory on the command line. Set this value to false when you want to use the cacheDir , persistence , and cacheName parameters instead. internalErrorCode : If not null , this value is set to one of the following constants when JVMTI_ERROR_INTERNAL is returned: COM_IBM_DESTROYED_ALL_CACHE : Set when JVMTI_ERROR_NONE is returned. COM_IBM_DESTROYED_NONE : Set when the function fails to remove any caches. COM_IBM_DESTROY_FAILED_CURRENT_GEN_CACHE : Set when the function fails to remove the existing current generation cache, irrespective of the state of older generation caches. COM_IBM_DESTROY_FAILED_OLDER_GEN_CACHE : Set when the function fails to remove any older generation caches. The current generation cache does not exist or is successfully removed. Returns JVMTI_ERROR_NONE : Success. No cache exists or all existing caches of all generations are removed. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The persistence parameter is not valid. JVMTI_ERROR_INTERNAL : Failed to remove any existing cache with the given name. See the value of the internalErrorCode parameter for more information about the failure. Identifiers JVMTI Extension Function identifier: com.ibm.DestroySharedCache Macro declaration in the ibmjvmti.h file: COM_IBM_DESTROY_SHARED_CACHE RegisterVerboseGCSubscriber You can subscribe to verbose garbage collection (GC) data logging by using the RegisterVerboseGCSubscriber() API: jvmtiError RegisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiVerboseGCSubscriber subscriber, jvmtiVerboseGCAlarm alarm, void *user_data, void **subscription_id) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiVerboseGCSubscriber . alarm : A function pointer of type jvmtiVerboseGCAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterVerboseGCSubscriber call if successful. The value must be supplied to a future call to DeregisterVerboseGCSubscriber API, which is used to unsubscribe from verbose GC data logging. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : GC verbose logging is not available. JVMTI_ERROR_INTERNAL : An internal error has occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_VERBOSEGC_SUBSCRIBER jvmtiVerboseGCSubscriber function The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCSubscriber)(jvmtiEnv *jvmti_env, const char *record, jlong length, void *user_data); The subscriber function must be of type jvmtiVerboseGCSubscriber , which is declared in ibmjvmti.h . This function is called with each record of verbose logging data produced by the VM. The verbose logging record supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, and the subscription is deregistered. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : An ASCII string that contains a verbose log record. length : The number of ASCII characters in the verbose log record. user_data : User data supplied when the subscriber is registered. jvmtiVerboseGCAlarm function The alarm function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiVerboseGCAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. user_data : User data supplied when the subscriber is registered. subscription_id : The subscription identifier. DeregisterVerboseGCSubscriber You can unsubscribe from verbose Garbage Collection (GC) data logging by using the DeregisterVerboseGCSubscriber() API: jvmtiError DeregisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterVerboseGCSubscriber() API is called, no further calls are made to the previously registered subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterVerboseGCSubscriber() API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_VERBOSEGC_SUBSCRIBER","title":"JVMTI"},{"location":"interface_jvmti/#java-virtual-machine-tool-interface","text":"The Java\u2122 Virtual Machine Tool Interface (JVMTI) is a two-way interface that allows communication between the VM and a native agent. It replaces both the Java Virtual Machine Debug Interface (JVMDI) and Java Virtual Machine Profiler Interface (JVMPI).","title":"Java Virtual Machine Tool Interface"},{"location":"interface_jvmti/#overview","text":"The JVMTI allows third parties to develop debugging, profiling, and monitoring tools for the VM. The interface contains mechanisms for the agent to notify the VM about the kinds of information it requires, and also provides a means of receiving relevant notifications. Several agents can be attached to a VM at any one time. JVMTI agents can be loaded at startup using short or long forms of the command-line option: -agentlib:<agent-lib-name>=<options> or -agentpath:<path-to-agent>=<options> In the example that follows (see Sample JVMTI agent ), the directory containing the jdwp library is assumed to be on the library path. If you require a specific library, such as jdwp , with your JVMTI agent, you can specify the path at startup, for example: -agentlib:jdwp=<options> For more information about JVMTI, see https://docs.oracle.com/javase/8/docs/technotes/guides/management/index.html . For a guide about writing a JVMTI agent, see http://www.oracle.com/technetwork/articles/javase/jvmti-136367.html .","title":"Overview"},{"location":"interface_jvmti/#openj9-extensions","text":"OpenJ9 extensions to the JVMTI allow a JVMTI agent to query or automatically trigger operations in the VM, including the following tasks: Task OpenJ9 extensions Get the OS thread ID GetOSThreadID Query, set, and reset the VM dump options QueryVmDump , SetVmDump , ResetVmDump Trigger a VM dump, and monitor JVMTI event functions when VM dumps start and end TriggerVmDump , VMDumpStart , VMDumpEnd Set VM trace options SetVmTrace Subscribe to and unsubscribe from VM tracepoints RegisterTracePointSubscriber , DeregisterTracePointSubscriber Query runtime environment native memory categories GetMemoryCategories Query and set VM log options QueryVmLogOptions , SetVmLogOptions Search for and remove a shared class cache IterateSharedCaches , DestroySharedCache Subscribe to and unsubscribe from verbose garbage collection (GC) data logging RegisterVerboseGCSubscriber , DeregisterVerboseGCSubscriber The definitions that you need when you write a JVMTI agent are provided in the header files jvmti.h and ibmjvmti.h , in the include directory.","title":"OpenJ9 extensions"},{"location":"interface_jvmti/#sample-jvmti-agent","text":"The following sample shows you how to write a simple JVMTI agent that uses OpenJ9 extensions to the JVMTI. Sample JVMTI agent written in C/C++, which uses the OpenJ9 extensions /* * tiSample.c * * Sample JVMTI agent to demonstrate the OpenJ9 JVMTI dump extensions */ #include \"jvmti.h\" #include \"ibmjvmti.h\" /* Forward declarations for JVMTI callback functions */ void JNICALL VMInitCallback(jvmtiEnv *jvmti_env, JNIEnv* jni_env, jthread thread); void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...); /* * Agent_Onload() * * JVMTI agent initialisation function, invoked as agent is loaded by the VM */ JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { jvmtiEnv *jvmti = NULL; jvmtiError rc; jint extensionEventCount = 0; jvmtiExtensionEventInfo *extensionEvents = NULL; jint extensionFunctionCount = 0; jvmtiExtensionFunctionInfo *extensionFunctions = NULL; int i = 0, j = 0; printf(\"tiSample: Loading JVMTI sample agent\\n\"); /* Get access to JVMTI */ (*jvm)->GetEnv(jvm, (void **)&jvmti, JVMTI_VERSION_1_0); /* Look up all the JVMTI extension events and functions */ (*jvmti)->GetExtensionEvents(jvmti, &extensionEventCount, &extensionEvents); (*jvmti)->GetExtensionFunctions(jvmti, &extensionFunctionCount, &extensionFunctions); printf(\"tiSample: Found %i JVMTI extension events, %i extension functions\\n\", extensionEventCount, extensionFunctionCount); /* Find the JVMTI extension event we want */ while (i++ < extensionEventCount) { if (strcmp(extensionEvents->id, COM_IBM_VM_DUMP_START) == 0) { /* Found the dump start extension event, now set up a callback for it */ rc = (*jvmti)->SetExtensionEventCallback(jvmti, extensionEvents->extension_event_index, &DumpStartCallback); printf(\"tiSample: Setting JVMTI event callback %s, rc=%i\\n\", COM_IBM_VM_DUMP_START, rc); break; } extensionEvents++; /* move on to the next extension event */ } /* Find the JVMTI extension function we want */ while (j++ < extensionFunctionCount) { jvmtiExtensionFunction function = extensionFunctions->func; if (strcmp(extensionFunctions->id, COM_IBM_SET_VM_DUMP) == 0) { /* Found the set dump extension function, now set a dump option to generate javadumps on thread starts */ rc = function(jvmti, \"java:events=thrstart\"); printf(\"tiSample: Calling JVMTI extension %s, rc=%i\\n\", COM_IBM_SET_VM_DUMP, rc); break; } extensionFunctions++; /* move on to the next extension function */ } return JNI_OK; } /* * DumpStartCallback() * JVMTI callback for dump start event (IBM JVMTI extension) */ void JNICALL DumpStartCallback(jvmtiEnv *jvmti_env, char* label, char* event, char* detail, ...) { printf(\"tiSample: Received JVMTI event callback, for event %s\\n\", event); } The sample JVMTI agent consists of two functions, Agent_OnLoad() and DumpStartCallback() :","title":"Sample JVMTI agent"},{"location":"interface_jvmti/#agent_onload","text":"This function is called by the VM when the agent is loaded at VM startup, which allows the JVMTI agent to modify VM behavior before initialization is complete. The sample agent obtains access to the JVMTI interface by using the JNI Invocation API function GetEnv() . The agent calls the APIs GetExtensionEvents() and GetExtensionFunctions() to find the JVMTI extensions that are supported by the VM. These APIs provide access to the list of extensions available in the jvmtiExtensionEventInfo and jvmtiExtensionFunctionInfo structures. The sample uses an extension event and an extension function in the following way: Extension event: The sample JVMTI agent searches for the extension event VmDumpStart in the list of jvmtiExtensionEventInfo structures, by using the identifier COM_IBM_VM_DUMP_START provided in ibmjvmti.h . When the event is found, the JVMTI agent calls the JVMTI interface SetExtensionEventCallback() to enable the event, providing a function DumpStartCallback() that is called when the event is triggered. Extension function: Next, the sample JVMTI agent searches for the extension function SetVMDump in the list of jvmtiExtensionFunctionInfo structures, by using the identifier COM_IBM_SET_VM_DUMP provided in ibmjvmti.h . The JVMTI agent calls the function by using the jvmtiExtensionFunction pointer to set a VM dump option java:events=thrstart . This option requests the VM to trigger a Java dump every time a VM thread is started.","title":"Agent_OnLoad()"},{"location":"interface_jvmti/#dumpstartcallback","text":"This callback function issues a message when the associated extension event is called. In the sample code, DumpStartCallback() is used when the VmDumpStart event is triggered.","title":"DumpStartCallback()"},{"location":"interface_jvmti/#using-the-sample-jvmti-agent","text":"Build the sample JVMTI agent: Windows: cl /I<jre_path>\\include /MD /FetiSample.dll tiSample.c /link /DLL Linux, AIX\u00ae, and z/OS\u00ae: gcc -I<jre_path>/include -o libtiSample.so -shared tiSample.c where <jre_path> is the path to your Java runtime environment installation. To run the sample JVMTI agent, use the command: java -agentlib:tiSample -version When the sample JVMTI agent loads, messages are generated. When the JVMTI agent initiates a Java dump, the message JVMDUMP010 is issued.","title":"Using the sample JVMTI agent"},{"location":"interface_jvmti/#api-reference","text":"The following sections provide reference information for the OpenJ9 extensions to the JVMTI.","title":"API reference"},{"location":"interface_jvmti/#getosthreadid","text":"You can get the OS thread ID by using the GetOSThreadID() API: jvmtiError GetOSThreadID(jvmtiEnv* jvmti_env, jthread thread, jlong * threadid_ptr); Parameters jvmti_env : A pointer to the JVMTI environment. thread : The thread for which the ID is required. threadid_ptr : A pointer to a variable, used to return the thread ID that corresponds to the thread specified by the thread parameter. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The threadid_ptr parameter is null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_INVALID_THREAD : The thread is not valid. JVMTI_ERROR_THREAD_NOT_ALIVE : The VM state of the thread is not started or has died. JVMTI_ERROR_UNATTACHED_THREAD : The current thread is not attached to the VM. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI start or live phase. Identifiers JVMTI Extension Function identifier: com.ibm.GetOSThreadID Macro declaration in the ibmjvmti.h file: COM_IBM_GET_OS_THREAD_ID","title":"GetOSThreadID"},{"location":"interface_jvmti/#queryvmdump","text":"You can query the VM dump options that are set for a VM by using the QueryVmDump() API: jvmtiError QueryVmDump(jvmtiEnv* jvmti_env, jint buffer_size, void* options_buffer, jint* data_size_ptr) This extension returns a set of dump option specifications as ASCII strings. The syntax of the option string is the same as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . The option strings are separated by newline characters. If the memory buffer is too small to contain the current VM dump option strings, you can expect the following results: The error message JVMTI_ERROR_ILLEGAL_ARGUMENT is returned. The variable for data_size_ptr is set to the required buffer size. Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option strings. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options_buffer or data_size_ptr parameters are null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer in options_buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_DUMP","title":"QueryVmDump"},{"location":"interface_jvmti/#setvmdump","text":"You can set VM dump options by using the SetVmDump() API: jvmtiError SetVmDump(jvmtiEnv* jvmti_env, char* option) The dump option is passed in as an ASCII character string. Use the same syntax as the -Xdump command-line option, with the initial -Xdump: omitted. See -Xdump . When dumps are in progress, the dump configuration is locked, and calls to SetVmDump() fail with a return value of JVMTI_ERROR_NOT_AVAILABLE . Parameters jvmti_env : A pointer to the JVMTI environment. option : The VM dump option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xdump string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_DUMP","title":"SetVmDump"},{"location":"interface_jvmti/#triggervmdump","text":"You can trigger a VM dump and specify the type of dump you want by using the TriggerVmDump() API: jvmtiError TriggerVmDump(jvmtiEnv* jvmti_env, char* option) Choose the type of dump required by specifying an ASCII string that contains one of the supported dump agent types. See -Xdump . JVMTI events are provided at the start and end of the dump. Parameters jvmti_env : A pointer to the JVMTI environment. option : A pointer to the dump type string, which can be one of the following types: stack java system console tool heap snap ceedump (z/OS only) Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.TriggerVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_TRIGGER_VM_DUMP","title":"TriggerVmDump"},{"location":"interface_jvmti/#resetvmdump","text":"You can reset VM dump options to the values at VM initialization by using the ResetVmDump() API: jvmtiError ResetVmDump(jvmtiEnv* jvmti_env) Parameters jvmti_env : The JVMTI environment pointer. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The dump configuration is locked because a dump is in progress. Identifiers JVMTI Extension Function identifier: com.ibm.ResetVmDump Macro declaration in the ibmjvmti.h file: COM_IBM_RESET_VM_DUMP","title":"ResetVmDump"},{"location":"interface_jvmti/#vmdumpstart","text":"The following JVMTI event function is called when a VM dump starts: void JNICALL VMDumpStart(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait.\" Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name, such as com.ibm.VmDumpStart . detail : The dump event detail string. The string can be empty. Returns None","title":"VMDumpStart"},{"location":"interface_jvmti/#vmdumpend","text":"The following JVMTI event function is called when a VM dump ends: void JNICALL VMDumpEnd(jvmtiEnv *jvmti_env, JNIEnv* jni_env, char* label, char* event, char* detail) The event function provides the dump file name, the name of the JVMTI event, and the detail string from the dump event. The detail string provides additional information about the event that triggered the dump. This information is the same as the information detailed in the JVMDUMP039I message. For example: JVMDUMP039I Processing dump event \"systhrow\", detail \"java/lang/OutOfMemoryError\" at 2014/10/17 13:31:03 - please wait. Parameters jvmti_env : JVMTI environment pointer. jni_env : JNI environment pointer for the thread on which the event occurred. label : The dump file name, including directory path. event : The extension event name com.ibm.VmDumpEnd . detail : The dump event detail string. The string can be empty. Returns None","title":"VMDumpEnd"},{"location":"interface_jvmti/#setvmtrace","text":"You can set VM trace options by using the SetVmTrace() API: jvmtiError SetVmTrace(jvmtiEnv* jvmti_env, char* option) The trace option is passed in as an ASCII character string. Use the same syntax as the -Xtrace command-line option, with the initial -Xtrace: omitted. See -Xtrace . Parameters jvmti_env : JVMTI environment pointer. option : Enter the VM trace option string. Note: On z/OS, you might need to convert the option string from EBCDIC to ASCII before using this JVMTI extension function. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The option parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The option parameter contains an invalid -Xtrace string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmTrace Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_TRACE","title":"SetVmTrace"},{"location":"interface_jvmti/#registertracepointsubscriber","text":"You can subscribe to VM tracepoints by using the RegisterTracePointSubscriber() API: jvmtiError RegisterTracePointSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiTraceSubscriber subscriber, jvmtiTraceAlarm alarm, void *userData, void **subscriptionID) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiTraceSubscriber . alarm : A function pointer of type jvmtiTraceAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterTracePointSubscriber call if successful. The value must be supplied to a future call to the DeregisterTracePointSubscriber API, which is used to unsubscribe from the VM tracepoint. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : VM trace is not available. JVMTI_ERROR_INTERNAL : An internal error occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_TRACEPOINT_SUBSCRIBER","title":"RegisterTracePointSubscriber"},{"location":"interface_jvmti/#jvmtitracesubscriber-function","text":"The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiTraceSubscriber)(jvmtiEnv *jvmti_env, void *record, jlong length, void *user_data); The subscriber function must be of type jvmtiTraceSubscriber , which is declared in ibmjvmti.h . This function is called with each tracepoint record that is selected through the -Xtrace:external option. The tracepoint record that is supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, the subscription is disconnected, and no further tracepoints are sent to the subscriber. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : A UTF-8 string that contains a tracepoint record. length : The number of UTF-8 characters in the tracepoint record. user_data : User data that is supplied when the subscriber is registered.","title":"jvmtiTraceSubscriber function"},{"location":"interface_jvmti/#jvmtitracealarm-function","text":"The alarm function type is defined as follows: typedef jvmtiError (*jvmtiTraceAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiTraceAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier. user_data : User data that is supplied when the subscriber is registered.","title":"jvmtiTraceAlarm function"},{"location":"interface_jvmti/#deregistertracepointsubscriber","text":"You can unsubscribe from VM tracepoints by using the DeregisterTracePointSubscriber() API: jvmtiError DeregisterTracePointSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterTracePointSubscriber() API is called, no further calls are made to the subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterTracePointSubscriber API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterTracePointSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_TRACEPOINT_SUBSCRIBER","title":"DeregisterTracePointSubscriber"},{"location":"interface_jvmti/#getmemorycategories","text":"You can query runtime environment native memory categories by using the GetMemoryCategories() API: jvmtiError GetMemoryCategories(jvmtiEnv* env, jint version, jint max_categories, jvmtiMemoryCategory * categories_buffer, jint * written_count_ptr, jint * total_categories_ptr); You can query the total native memory consumption of the runtime environment for each memory category by using this API. Native memory is memory requested from the operating system using library functions such as malloc() and mmap() . Runtime environment native memory use is grouped under high-level memory categories, as described in the NATIVEMEMINFO section of the Java dump topic. The data returned by the GetMemoryCategories() API is consistent with this format. See Java dump: NATIVEMEMINFO . The extension writes native memory information to a memory buffer specified by the user. Each memory category is recorded as a jvmtiMemoryCategory structure, whose format is defined in ibmjvmti.h . You can use the GetMemoryCategories() API to work out the buffer size you must allocate to hold all memory categories defined inside the VM. To calculate the size, call the API with a null categories_buffer argument and a non-null total_categories_ptr argument. Parameters env : A pointer to the JVMTI environment. version : The version of the jvmtiMemoryCategory structure that you are using. Use COM_IBM_GET_MEMORY_CATEGORIES_VERSION_1 for this argument, unless you must work with an obsolete version of the jvmtiMemoryCategory structure. max_categories : The number of jvmtiMemoryCategory structures that can fit in the categories_buffer memory buffer. categories_buffer : A pointer to the memory buffer for holding the result of the GetMemoryCategories() call. The number of jvmtiMemoryCategory slots available in the categories_buffer memory buffer must be accurately specified with max_categories , otherwise GetMemoryCategories() can overflow the memory buffer. The value can be null. written_count_ptr : A pointer to jint to store the number of jvmtiMemoryCategory structures to be written to the categories_buffer memory buffer. The value can be null. total_categories_ptr : A pointer to jint to store the total number of memory categories declared in the VM. The value can be null. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_UNSUPPORTED_VERSION : Unrecognized value passed for version. JVMTI_ERROR_ILLEGAL_ARGUMENT : Illegal argument; categories_buffer , count_ptr , and total_categories_ptr all have null values. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is invalid. JVMTI_ERROR_OUT_OF_MEMORY : Memory category data is truncated because max_categories is not large enough. Identifiers JVMTI Extension Function identifier: com.ibm.GetMemoryCategories Macro declaration in the ibmjvmti.h file: COM_IBM_GET_MEMORY_CATEGORIES","title":"GetMemoryCategories"},{"location":"interface_jvmti/#queryvmlogoptions","text":"You can query VM log options by using the QueryVmLogOptions() API: jvmtiError QueryVmLogOptions(jvmtiEnv* jvmti_env, jint buffer_size, void* options, jint* data_size_ptr) This extension returns the current log options as an ASCII string. The syntax of the string is the same as the -Xlog command-line option, with the initial -Xlog: omitted. For example, the string \"error,warn\" indicates that the VM is set to log error and warning messages only. For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. buffer_size : The size of the supplied memory buffer in bytes. If the memory buffer is too small to contain the current VM log option string, the JVMTI_ERROR_ILLEGAL_ARGUMENT error message is returned. options_buffer : A pointer to the supplied memory buffer. data_size_ptr : A pointer to a variable, used to return the total size of the option string. Returns JVMTI_ERROR_NONE : Success JVMTI_ERROR_NULL_POINTER : The options or data_size_ptr parameters are null. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The supplied memory buffer is too small. Identifiers JVMTI Extension Function identifier: com.ibm.QueryVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_QUERY_VM_LOG_OPTIONS","title":"QueryVmLogOptions"},{"location":"interface_jvmti/#setvmlogoptions","text":"You can set VM log options by using the SetVmLogOptions() API: jvmtiError SetVmLogOptions(jvmtiEnv* jvmti_env, char* options_buffer) The log option is passed in as an ASCII character string. Use the same syntax as the -Xlog command-line option, with the initial -Xlog: omitted. For example, to set the VM to log error and warning messages, pass in a string containing \"error,warn\". For more information, see -Xlog . Parameters jvmti_env : A pointer to the JVMTI environment. options_buffer : A pointer to memory containing the log option. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The parameter option is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is invalid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_ILLEGAL_ARGUMENT : The parameter option contains an invalid -Xlog string. Identifiers JVMTI Extension Function identifier: com.ibm.SetVmLogOptions Macro declaration in the ibmjvmti.h file: COM_IBM_SET_VM_LOG_OPTIONS","title":"SetVmLogOptions"},{"location":"interface_jvmti/#iteratesharedcaches","text":"You can search for shared class caches that exist in a specified cache directory by using the IterateSharedCaches() API: jvmtiError IterateSharedCaches(jvmtiEnv* env, jint version, const char *cacheDir, jint flags, jboolean useCommandLineValues, jvmtiIterateSharedCachesCallback callback, void *user_data); Information about the caches is returned in a structure that is populated by a user-specified callback function. You can specify the search directory in two ways: Set the value of useCommandLineValues to true and specify the directory on the command line. If the directory is not specified on the command line, the default location for the platform is used. Set the value of useCommandLineValues to false and use the cacheDir parameter. To accept the default location for the platform, specify cacheDir with a null value. Parameters env : A pointer to the JVMTI environment. version : Version information for IterateSharedCaches , which describes the jvmtiSharedCacheInfo structure passed to the jvmtiIterateSharedCachesCallback function. The values allowed are: COM_IBM_ITERATE_SHARED_CACHES_VERSION_1 COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. flags : Reserved for future use. The only value allowed is COM_IBM_ITERATE_SHARED_CACHES_NO_FLAGS . useCommandLineValues : Set this value to true when you want to specify the cache directory on the command line. Set this value to false when you want to use the cacheDir parameter. callback : A function pointer to a user provided callback routine jvmtiIterateSharedCachesCallback . user_data : User supplied data, passed as an argument to the callback function. jint (JNICALL *jvmtiIterateSharedCachesCallback)(jvmtiEnv *env,jvmtiSharedCacheInfo *cache_info, void *user_data); Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_UNSUPPORTED_VERSION : The version parameter is not valid. JVMTI_ERROR_NULL_POINTER : The callback parameter is null. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The flags parameter is not valid. JVMTI_ERROR_INTERNAL : This error is returned when the jvmtiIterateSharedCachesCallback returns JNI_ERR . Identifiers JVMTI Extension Function identifier: com.ibm.IterateSharedCaches Macro declaration in the ibmjvmti.h file: COM_IBM_ITERATE_SHARED_CACHES","title":"IterateSharedCaches"},{"location":"interface_jvmti/#jvmtiiteratesharedcachescallback-function","text":"Callback function parameters env : A pointer to the JVMTI environment when calling COM_IBM_ITERATE_SHARED_CACHES . cache_info : A jvmtiSharedCacheInfo structure containing information about a shared cache. user_data : User-supplied data, passed as an argument to IterateSharedCaches . Callback function returns JNI_OK : Continue iterating. JNI_ERR : Stop iterating, which causes IterateSharedCaches to return JVMTI_ERROR_INTERNAL","title":"jvmtiIterateSharedCachesCallback function"},{"location":"interface_jvmti/#jvmtisharedcacheinfo-structure","text":"The structure of jvmtiSharedCacheInfo typedef struct jvmtiSharedCacheInfo { const char *name; // the name of the shared cache jboolean isCompatible; // if the shared cache is compatible with this VM jboolean isPersistent; // true if the shared cache is persistent, false if its non-persistent jint os_shmid; // the OS shared memory ID associated with a non-persistent cache, -1 otherwise jint os_semid; // the OS shared semaphore ID associated with a non-persistent cache, -1 otherwise jint modLevel; // one of: // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA5 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA6 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA7 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA8 // COM_IBM_SHARED_CACHE_MODLEVEL_JAVA9 // from Java 10: the version number of the Java level on which the shared cache is created jint addrMode; // the address mode of the VM creating the shared cache: includes additional // information on whether it is a 64-bit compressedRefs cache when // COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. jboolean isCorrupt; // if the cache is corrupted jlong cacheSize; // the total usable shared class cache size, or -1 when isCompatible is false jlong freeBytes; // the number of free bytes in the shared class cache, or -1 when isCompatible is false jlong lastDetach; // the last detach time specified in milliseconds since 00:00:00 on 1 January 1970 UTC, // or -1 when the last detach time is not available jint cacheType; // the type of the cache jlong softMaxBytes; // the soft limit for the available space in the cache } jvmtiSharedCacheInfo; Notes: The field cacheType is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_2 or later is specified. jvmtiSharedCacheInfo.addrMode encodes both address mode and the compressed reference mode when COM_IBM_ITERATE_SHARED_CACHES_VERSION_3 or later is specified. In this case, use the following set of macros to access the address mode and compressed reference mode: To get the address mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_ADDR_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_SHARED_CACHE_ADDRMODE_32 COM_IBM_SHARED_CACHE_ADDRMODE_64 To get the compressed references mode, use: COM_IBM_ITERATE_SHARED_CACHES_GET_CMPRSSREF_MODE(jvmtiSharedCacheInfo.addrMode) This macro returns one of the following values: COM_IBM_ITERATE_SHARED_CACHES_UNKNOWN_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_COMPRESSED_POINTERS_MODE COM_IBM_ITERATE_SHARED_CACHES_NON_COMPRESSED_POINTERS_MODE The field softMaxBytes is included when COM_IBM_ITERATE_SHARED_CACHES_VERSION_4 or later is specified.","title":"jvmtiSharedCacheInfo structure"},{"location":"interface_jvmti/#destroysharedcache","text":"You can remove a shared class cache by using the DestroySharedCache() API: jvmtiError DestroySharedCache(jvmtiEnv *env, const char *cacheDir, const char *name, jint persistence, jboolean useCommandLineValues, jint *internalErrorCode); This extension removes a named shared class cache of a given persistence type, in a given directory. You can specify the cache name, persistence type, and directory in one of these ways: Set useCommandLineValues to true and specify the values on the command line. If a value is not available, the default values for the platform are used. Set useCommandLineValues to false and use the cacheDir , persistence and cacheName parameters to identify the cache to be removed. To accept the default value for cacheDir or cacheName , specify the parameter with a null value. Parameters env : A pointer to the JVMTI environment. cacheDir : When the value of useCommandLineValues is false , specify the absolute path of the directory for the shared class cache. If the value is null , the platform-dependent default is used. cacheName : When the value of useCommandLineValues is false , specify the name of the cache to be removed. If the value is null , the platform-dependent default is used. persistence : When the value of useCommandLineValues is false, specify the type of cache to remove. This parameter must have one of the following values: PERSISTENCE_DEFAULT (The default value for the platform). PERSISTENT NONPERSISTENT useCommandLineValues : Set this value to true when you want to specify the shared class cache name, persistence type, and directory on the command line. Set this value to false when you want to use the cacheDir , persistence , and cacheName parameters instead. internalErrorCode : If not null , this value is set to one of the following constants when JVMTI_ERROR_INTERNAL is returned: COM_IBM_DESTROYED_ALL_CACHE : Set when JVMTI_ERROR_NONE is returned. COM_IBM_DESTROYED_NONE : Set when the function fails to remove any caches. COM_IBM_DESTROY_FAILED_CURRENT_GEN_CACHE : Set when the function fails to remove the existing current generation cache, irrespective of the state of older generation caches. COM_IBM_DESTROY_FAILED_OLDER_GEN_CACHE : Set when the function fails to remove any older generation caches. The current generation cache does not exist or is successfully removed. Returns JVMTI_ERROR_NONE : Success. No cache exists or all existing caches of all generations are removed. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : The shared classes feature is not enabled in the VM. JVMTI_ERROR_ILLEGAL_ARGUMENT : The persistence parameter is not valid. JVMTI_ERROR_INTERNAL : Failed to remove any existing cache with the given name. See the value of the internalErrorCode parameter for more information about the failure. Identifiers JVMTI Extension Function identifier: com.ibm.DestroySharedCache Macro declaration in the ibmjvmti.h file: COM_IBM_DESTROY_SHARED_CACHE","title":"DestroySharedCache"},{"location":"interface_jvmti/#registerverbosegcsubscriber","text":"You can subscribe to verbose garbage collection (GC) data logging by using the RegisterVerboseGCSubscriber() API: jvmtiError RegisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, char *description, jvmtiVerboseGCSubscriber subscriber, jvmtiVerboseGCAlarm alarm, void *user_data, void **subscription_id) Parameters jvmti_env : A pointer to the JVMTI environment. description : An ASCII character string that describes the subscriber. subscriber : A function of type jvmtiVerboseGCSubscriber . alarm : A function pointer of type jvmtiVerboseGCAlarm . user_data : A pointer to user data. This pointer is passed to the subscriber and alarm functions each time these functions are called. This pointer can be a null value. subscription_id : A pointer to a subscription identifier. This pointer is returned by the RegisterVerboseGCSubscriber call if successful. The value must be supplied to a future call to DeregisterVerboseGCSubscriber API, which is used to unsubscribe from verbose GC data logging. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : One of the supplied parameters is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. JVMTI_ERROR_NOT_AVAILABLE : GC verbose logging is not available. JVMTI_ERROR_INTERNAL : An internal error has occurred. Identifiers JVMTI Extension Function identifier: com.ibm.RegisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_REGISTER_VERBOSEGC_SUBSCRIBER","title":"RegisterVerboseGCSubscriber"},{"location":"interface_jvmti/#jvmtiverbosegcsubscriber-function","text":"The subscriber function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCSubscriber)(jvmtiEnv *jvmti_env, const char *record, jlong length, void *user_data); The subscriber function must be of type jvmtiVerboseGCSubscriber , which is declared in ibmjvmti.h . This function is called with each record of verbose logging data produced by the VM. The verbose logging record supplied to the subscriber function is valid only for the duration of the function. If the subscriber wants to save the data, the data must be copied elsewhere. If the subscriber function returns an error, the alarm function is called, and the subscription is deregistered. Subscriber function parameters jvmti_env : A pointer to the JVMTI environment. record : An ASCII string that contains a verbose log record. length : The number of ASCII characters in the verbose log record. user_data : User data supplied when the subscriber is registered.","title":"jvmtiVerboseGCSubscriber function"},{"location":"interface_jvmti/#jvmtiverbosegcalarm-function","text":"The alarm function type is defined as follows: typedef jvmtiError (*jvmtiVerboseGCAlarm)(jvmtiEnv *jvmti_env, void *subscription_id, void *user_data); The alarm function must be of type jvmtiVerboseGCAlarm , which is declared in ibmjvmti.h . This function is called if the subscriber function returns an error. Alarm function parameters jvmti_env : A pointer to the JVMTI environment. user_data : User data supplied when the subscriber is registered. subscription_id : The subscription identifier.","title":"jvmtiVerboseGCAlarm function"},{"location":"interface_jvmti/#deregisterverbosegcsubscriber","text":"You can unsubscribe from verbose Garbage Collection (GC) data logging by using the DeregisterVerboseGCSubscriber() API: jvmtiError DeregisterVerboseGCSubscriber(jvmtiEnv* jvmti_env, void *userData, void *subscription_id) After the DeregisterVerboseGCSubscriber() API is called, no further calls are made to the previously registered subscriber function. Parameters jvmti_env : A pointer to the JVMTI environment. subscription_id : The subscription identifier that is returned by the call to the RegisterVerboseGCSubscriber() API. Returns JVMTI_ERROR_NONE : Success. JVMTI_ERROR_NULL_POINTER : The subscription_id parameter is null. JVMTI_ERROR_OUT_OF_MEMORY : There is insufficient system memory to process the request. JVMTI_ERROR_INVALID_ENVIRONMENT : The jvmti_env parameter is not valid. JVMTI_ERROR_WRONG_PHASE : The extension has been called outside the JVMTI live phase. Identifiers JVMTI Extension Function identifier: com.ibm.DeregisterVerboseGCSubscriber Macro declaration in the ibmjvmti.h file: COM_IBM_DEREGISTER_VERBOSEGC_SUBSCRIBER","title":"DeregisterVerboseGCSubscriber"},{"location":"introduction/","text":"Eclipse OpenJ9 OpenJ9 is a high performance, scalable, Java\u2122 virtual machine (VM) implementation that is fully compliant with the Java Virtual Machine Specification . At run time, the VM interprets the Java bytecode that is compiled by the Java compiler. The VM acts as a translator between the language and the underlying operating system and hardware. A Java program requires a specific VM to run on a particular platform, such as Linux\u00ae, z/OS\u00ae, or Windows\u2122. This reference material provides information about the VM configuration and tuning options, together with the default settings. Configuring your system For normal operation, certain environment variables must be set at the operating system level. Depending on your system environment, you might also want to set other configuration options that allow the VM to exploit hardware and operating system features. Read Customizing your system to learn more about the following options: Setting the PATH and CLASSPATH environment variable. Setting the LIBPATH or LD_LIBRARY_PATH environment variable (AIX\u00ae and Linux) to indicate where to find shared libraries. Setting ulimits on AIX and Linux systems to ensure that the operating system allocates sufficient resources for your application. Setting region size, BPXPRM parameters, and Language Environment\u00ae runtime options on z/OS systems. If your application allocates a large amount of memory and frequently accesses that memory, you might want to enable large page support on your system. See Configuring large page memory allocation . Configuring Dynamic LPAR support on AIX systems. Note: On macOS\u00ae systems, you must set the DYLD_LIBRARY_PATH environment variable to indicate where to find shared libraries. In addition, to ensure there are sufficient resources for your application, you might need to increase system limits by using launchctl , ulimit , or kern.<VARIABLES> . For further instructions, refer to the documentation for your macOS release. Performance tuning OpenJ9 is configured to start with a set of default options that provide the optimal runtime environment for Java applications with typical workloads. However, if your application is atypical, you can improve performance by tuning the OpenJ9 VM. You can also improve performance by enabling hardware features or using specific APIs in your application code. Garbage collection policies OpenJ9 includes several garbage collection policies. To learn more about these policies and the types of application workload that can benefit from them, see Garbage Collection . Class data sharing You can share class data between running VMs, which can reduce the startup time for a VM once the cache has been created. For more information, see Class Data Sharing . Native data operations If your Java application manipulates native data, consider writing your application to take advantage of methods in the Data Access Accelerator API. Cloud optimizations To improve the performance of applications that run in containers, try setting the following tuning options: Use a shared classes cache ( -Xshareclasses -XX:SharedCacheHardLimit=200m -Xscmx60m ) with Ahead-Of-Time (AOT) compilation to improve your startup time. For more information, see Class Data Sharing and AOT Compiler . Use the -Xtune:virtualized option, which configures OpenJ9 for typical cloud deployments where VM guests are provisioned with a small number of virtual CPUs to maximize the number of applications that can be run. When enabled, OpenJ9 adapts its internal processes to reduce the amount of CPU consumed and trim down the memory footprint. These changes come at the expense of only a small loss in throughput. The OpenJ9 VM automatically detects when it is running in a docker container and uses a mechanism to detect when the VM is idle. When an idle state is detected, OpenJ9 runs a garbage collection cycle and releases free memory pages back to the operating system. The object heap is also compacted to make best use of the available memory for further application processing. For cloud services that charge based on memory usage, maintaining a small footprint can generate cost savings. For more information about tuning options that control this process, see -XX:IdleTuningMinIdleWaitTime . Cryptographic operations OpenJDK uses the in-built Java cryptographic implementation by default. However, native cryptographic implementations typically provide better performance. OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which is well established and used with many enterprise applications. The OpenSSL V1.0.x and V1.1.x implementations are currently supported for the Digest, CBC, GCM, and RSA algorithms. The OpenSSL V1.1.x implementation is also supported for the ChaCha20 and ChaCha20-Poly1305 algorithms. On Linux and AIX platforms, the OpenSSL 1.0.x or 1.1.x library is expected to be found on the system path. If you use a package manager to install OpenSSL, the system path will be updated automatically. On other platforms, the OpenSSL 1.1.x library is currently bundled with the binaries from AdoptOpenJDK. OpenSSL support is enabled by default for all supported algorithms. If you want to limit support to specific algorithms, a number of system properties are available for tuning the implementation. Each algorithm can be disabled individually by setting the following system properties on the command line: To turn off Digest , set -Djdk.nativeDigest=false To turn off ChaCha20 and ChaCha20-Poly1305 , set -Djdk.nativeChaCha20=false . Note: These algorithms are not supported on Java 8 To turn off CBC , set -Djdk.nativeCBC=false To turn off GCM , set -Djdk.nativeGCM=false To turn off RSA , set -Djdk.nativeRSA=false You can turn off all the algorithms by setting the following system property on the command line: -Djdk.nativeCrypto=false To build a version of OpenJDK with OpenJ9 that includes OpenSSL support, follow the steps in our detailed build instructions: OpenJDK 8 with OpenJ9 . OpenJDK 11 with OpenJ9 . OpenJDK 13 with OpenJ9 . Note: If you obtain an OpenJDK with OpenJ9 build from AdoptOpenJDK that includes OpenSSL or build a version yourself that includes OpenSSL support, the following acknowledgements apply in accordance with the license terms: This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com). Exploiting GPUs OpenJ9 provides the CUDA4J API and the com.ibm.gpu API , which allow you to develop applications that can take advantage of graphics processing unit (GPU) processing for suitable functions, such as code page conversion. You can also enable the JIT compiler to offload certain processing tasks to a GPU by specifying the -Xjit:enableGPU option on the command line. When enabled, the JIT compiler determines when to offload tasks based on performance heuristics. GPU processing is supported only on Windows (x86-64) and Linux (x86-64 and IBM Power LE) systems. For more information about enabling GPU processing, see Exploiting graphics processing units . Runtime options Runtime options are specified on the command line and include system properties, standard options, nonstandard ( -X ) options, and -XX options. For a detailed list of runtime options, see OpenJ9 command-line options Default settings If you do not specify any options on the command line at run time, the OpenJ9 VM starts with default settings that define how it operates. For more information about these settings, see Default settings for the OpenJ9 VM . Using Jlink On Java 11 and later, you can use the jlink utility to create a custom OpenJ9 runtime image, which allows you to optimize image size. If you do not require translations from the English language, the translation files can be removed to further optimize the size. You can achieve this by specifying the --exclude-files=**java_**.properties option when you run jlink . The default English java.properties file is unaffected. Troubleshooting The OpenJ9 diagnostic component contains extensive features to assist with problem determination. Diagnostic data is produced under default conditions, but can also be controlled by starting the VM with the -Xdump option or using the com.ibm.jvm.Dump API. You can also trace Java applications, methods, and VM operations by using the -Xtrace option . To get started, read Diagnostic tools and data .","title":"Getting started"},{"location":"introduction/#eclipse-openj9","text":"OpenJ9 is a high performance, scalable, Java\u2122 virtual machine (VM) implementation that is fully compliant with the Java Virtual Machine Specification . At run time, the VM interprets the Java bytecode that is compiled by the Java compiler. The VM acts as a translator between the language and the underlying operating system and hardware. A Java program requires a specific VM to run on a particular platform, such as Linux\u00ae, z/OS\u00ae, or Windows\u2122. This reference material provides information about the VM configuration and tuning options, together with the default settings.","title":"Eclipse OpenJ9"},{"location":"introduction/#configuring-your-system","text":"For normal operation, certain environment variables must be set at the operating system level. Depending on your system environment, you might also want to set other configuration options that allow the VM to exploit hardware and operating system features. Read Customizing your system to learn more about the following options: Setting the PATH and CLASSPATH environment variable. Setting the LIBPATH or LD_LIBRARY_PATH environment variable (AIX\u00ae and Linux) to indicate where to find shared libraries. Setting ulimits on AIX and Linux systems to ensure that the operating system allocates sufficient resources for your application. Setting region size, BPXPRM parameters, and Language Environment\u00ae runtime options on z/OS systems. If your application allocates a large amount of memory and frequently accesses that memory, you might want to enable large page support on your system. See Configuring large page memory allocation . Configuring Dynamic LPAR support on AIX systems. Note: On macOS\u00ae systems, you must set the DYLD_LIBRARY_PATH environment variable to indicate where to find shared libraries. In addition, to ensure there are sufficient resources for your application, you might need to increase system limits by using launchctl , ulimit , or kern.<VARIABLES> . For further instructions, refer to the documentation for your macOS release.","title":"Configuring your system"},{"location":"introduction/#performance-tuning","text":"OpenJ9 is configured to start with a set of default options that provide the optimal runtime environment for Java applications with typical workloads. However, if your application is atypical, you can improve performance by tuning the OpenJ9 VM. You can also improve performance by enabling hardware features or using specific APIs in your application code.","title":"Performance tuning"},{"location":"introduction/#garbage-collection-policies","text":"OpenJ9 includes several garbage collection policies. To learn more about these policies and the types of application workload that can benefit from them, see Garbage Collection .","title":"Garbage collection policies"},{"location":"introduction/#class-data-sharing","text":"You can share class data between running VMs, which can reduce the startup time for a VM once the cache has been created. For more information, see Class Data Sharing .","title":"Class data sharing"},{"location":"introduction/#native-data-operations","text":"If your Java application manipulates native data, consider writing your application to take advantage of methods in the Data Access Accelerator API.","title":"Native data operations"},{"location":"introduction/#cloud-optimizations","text":"To improve the performance of applications that run in containers, try setting the following tuning options: Use a shared classes cache ( -Xshareclasses -XX:SharedCacheHardLimit=200m -Xscmx60m ) with Ahead-Of-Time (AOT) compilation to improve your startup time. For more information, see Class Data Sharing and AOT Compiler . Use the -Xtune:virtualized option, which configures OpenJ9 for typical cloud deployments where VM guests are provisioned with a small number of virtual CPUs to maximize the number of applications that can be run. When enabled, OpenJ9 adapts its internal processes to reduce the amount of CPU consumed and trim down the memory footprint. These changes come at the expense of only a small loss in throughput. The OpenJ9 VM automatically detects when it is running in a docker container and uses a mechanism to detect when the VM is idle. When an idle state is detected, OpenJ9 runs a garbage collection cycle and releases free memory pages back to the operating system. The object heap is also compacted to make best use of the available memory for further application processing. For cloud services that charge based on memory usage, maintaining a small footprint can generate cost savings. For more information about tuning options that control this process, see -XX:IdleTuningMinIdleWaitTime .","title":"Cloud optimizations"},{"location":"introduction/#cryptographic-operations","text":"OpenJDK uses the in-built Java cryptographic implementation by default. However, native cryptographic implementations typically provide better performance. OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which is well established and used with many enterprise applications. The OpenSSL V1.0.x and V1.1.x implementations are currently supported for the Digest, CBC, GCM, and RSA algorithms. The OpenSSL V1.1.x implementation is also supported for the ChaCha20 and ChaCha20-Poly1305 algorithms. On Linux and AIX platforms, the OpenSSL 1.0.x or 1.1.x library is expected to be found on the system path. If you use a package manager to install OpenSSL, the system path will be updated automatically. On other platforms, the OpenSSL 1.1.x library is currently bundled with the binaries from AdoptOpenJDK. OpenSSL support is enabled by default for all supported algorithms. If you want to limit support to specific algorithms, a number of system properties are available for tuning the implementation. Each algorithm can be disabled individually by setting the following system properties on the command line: To turn off Digest , set -Djdk.nativeDigest=false To turn off ChaCha20 and ChaCha20-Poly1305 , set -Djdk.nativeChaCha20=false . Note: These algorithms are not supported on Java 8 To turn off CBC , set -Djdk.nativeCBC=false To turn off GCM , set -Djdk.nativeGCM=false To turn off RSA , set -Djdk.nativeRSA=false You can turn off all the algorithms by setting the following system property on the command line: -Djdk.nativeCrypto=false To build a version of OpenJDK with OpenJ9 that includes OpenSSL support, follow the steps in our detailed build instructions: OpenJDK 8 with OpenJ9 . OpenJDK 11 with OpenJ9 . OpenJDK 13 with OpenJ9 . Note: If you obtain an OpenJDK with OpenJ9 build from AdoptOpenJDK that includes OpenSSL or build a version yourself that includes OpenSSL support, the following acknowledgements apply in accordance with the license terms: This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/). This product includes cryptographic software written by Eric Young (eay@cryptsoft.com).","title":"Cryptographic operations"},{"location":"introduction/#exploiting-gpus","text":"OpenJ9 provides the CUDA4J API and the com.ibm.gpu API , which allow you to develop applications that can take advantage of graphics processing unit (GPU) processing for suitable functions, such as code page conversion. You can also enable the JIT compiler to offload certain processing tasks to a GPU by specifying the -Xjit:enableGPU option on the command line. When enabled, the JIT compiler determines when to offload tasks based on performance heuristics. GPU processing is supported only on Windows (x86-64) and Linux (x86-64 and IBM Power LE) systems. For more information about enabling GPU processing, see Exploiting graphics processing units .","title":"Exploiting GPUs"},{"location":"introduction/#runtime-options","text":"Runtime options are specified on the command line and include system properties, standard options, nonstandard ( -X ) options, and -XX options. For a detailed list of runtime options, see OpenJ9 command-line options","title":"Runtime options"},{"location":"introduction/#default-settings","text":"If you do not specify any options on the command line at run time, the OpenJ9 VM starts with default settings that define how it operates. For more information about these settings, see Default settings for the OpenJ9 VM .","title":"Default settings"},{"location":"introduction/#using-jlink","text":"On Java 11 and later, you can use the jlink utility to create a custom OpenJ9 runtime image, which allows you to optimize image size. If you do not require translations from the English language, the translation files can be removed to further optimize the size. You can achieve this by specifying the --exclude-files=**java_**.properties option when you run jlink . The default English java.properties file is unaffected.","title":"Using Jlink"},{"location":"introduction/#troubleshooting","text":"The OpenJ9 diagnostic component contains extensive features to assist with problem determination. Diagnostic data is produced under default conditions, but can also be controlled by starting the VM with the -Xdump option or using the com.ibm.jvm.Dump API. You can also trace Java applications, methods, and VM operations by using the -Xtrace option . To get started, read Diagnostic tools and data .","title":"Troubleshooting"},{"location":"jit/","text":"The JIT compiler The Just-In-Time (JIT) compiler is a key component of the OpenJ9 VM that improves the performance of Java applications by compiling platform-neutral Java bytecode into native machine code at run time. Without the JIT, the VM has to interpret the bytecodes itself - a process that requires extra CPU and memory. The JIT compiler doesn't compile every method that gets called because thousands of methods can be called at startup. Instead, OpenJ9 records the number of times a method is called. When the count reaches a pre-defined invocation threshold , JIT compilation is triggered. Once a method has been compiled by the JIT, the VM can call the compiled method rather than interpreting it. Optimization levels The JIT compiler can compile a method at different optimization levels: cold , warm , hot , very hot (with profiling) , or scorching . The hotter the optimization level, the better the expected performance, but the higher the cost in terms of CPU and memory. cold is used during startup processing for large applications where the goal is to achieve the best compiled code speed for as many methods as possible. warm is the workhorse; after start-up, most methods are compiled when they reach the invocation threshold. For higher optimization levels, the VM uses a sampling thread to identify methods that continue to take a lot of time. Methods that consume more than 1% are compiled at hot. Methods that consume more than 12.5% are scheduled for a scorching compilation. However, before that happens the methods are compiled at very hot with profiling to collect detailed profile data that is used by the scorching compilation. The higher optimization levels use special techniques such as escape analysis and partial redundancy elimination, or loop through certain optimization sequences more times. Although these techniques use more CPU and memory, the improved performance that is delivered by the optimizations can make the tradeoff worthwhile. Troubleshooting The JIT compiler is enabled by default to optimize performance. However, if you experience a problem running your application, temporarily turning off the JIT will tell you whether the JIT is at fault. Because JIT starts at the same time as the VM, you can only modify JIT behavior at startup. There are a number of ways to disable the JIT: Specify -Djava.compiler=NONE on the command line. Specify -Xint on the command line, which turns off the JIT and AOT compiler. To eliminate problems with one or the other you can turn these compilers off selectively with the -Xnojit and -Xnoaot options. Call the java.lang.Compiler API programmatically. Note: java.lang.Compiler is deprecated for removal in Java SE 9. If turning off the JIT solves your problem, you can investigate JIT operations in more detail by using a number of options to control behavior. Turning on verbose logging with the verbose suboption causes the JIT to record all compiler operations. However, the log file can be difficult to read because there are so many complex operations occuring in rapid succession. Follow these steps to simplify operations, which helps you pinpoint the root cause: Turn off multiple compilation threads The JIT compiler can use more than one compilation thread, which typically improves startup performance. The number of threads is determined by the VM, depending on the system configuration. You can turn off multiple threads by using the -XcompilationThreads option, which simplifies the output in the verbose log. Lower the invocation threshold When the invocation count is set to 0 , the JIT compiles every method and your application will fail immediately when the method causing the problem is reached. You can alter the threshold with the count suboption. Turn off inlining Inlining is a complex process that generates larger and more complex code. To eliminate errors caused by these operations, use the disableImlining suboption. Decrease the optimization levels Use the optlevel suboption to gradually decrease the compiler optimization levels to see whether you can isolate the level at which your problem occurs. More information about these suboptions and the command line syntax is covered in -Xjit . Understanding JIT verbose logs At first glance, a JIT verbose log can look very complex. To help you understand the log we'll look at JIT compiler operations when you run the java -version command. The following option turns on verbose logging and directs output to a log file called vlogfile : java -Xjit:verbose,vlog=vlogfile -version The first section of the log includes lines that start with #INFO: , which provides information about the environment that the JIT is operating in. You can determine the version of the JIT and VM that you are using, and the type and number of processors that the JIT has access to. #INFO: _______________________________________ #INFO: Version Information: #INFO: JIT Level - e24e8aa9 #INFO: JVM Level - 20180315_120 #INFO: GC Level - e24e8aa9 #INFO: #INFO: Processor Information: #INFO: Platform Info:X86 Intel P6 #INFO: Vendor:GenuineIntel #INFO: numProc=1 #INFO: #INFO: _______________________________________ #INFO: AOT #INFO: options specified: #INFO: samplingFrequency=2 #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: _______________________________________ #INFO: JIT #INFO: options specified: #INFO: verbose,vlog=vlogfile #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: StartTime: Apr 23 09:49:10 2018 #INFO: Free Physical Memory: 996188 KB #INFO: CPU entitlement = 100.00 This section also shows the AOT and JIT options that are in force. The last few lines detail the start time of the compilation activity, how much free physical memory is available to the process, and the CPU entitlement. The information section is followed by a sequence of lines that describe the methods that are being compiled, as well as other events significant to the operation of the JIT compiler. Here is a typical line from the verbose log: + (cold) sun/reflect/Reflection.getCallerClass()Ljava/lang/Class; @ 00007FCACED1303C-00007FCACED13182 OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=00000000011E7EA8 bcsz=2 JNI compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% In this example: The method compiled is sun/reflect/Reflection.getCallerClass()Ljava/lang/Class. The + indicates that this method is successfully compiled. Failed compilations are marked by a !. (cold) tells you the optimization level that was applied. Other examples may be (warm) or (scorching). 00007FCACED1303C-00007FCACED13182 is the code range where the compiled code was generated. Q values provide information about the state of the compilation queues when the compilation occurred. bcsz shows the bytecode size. In this case it is small because this is a native method, so the JIT is simply providing an accelerated JNI transition into the native getCallerClass method. Each line of output represents a method that is compiled. The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the values time and mem into each line, as shown in the following example: + (cold) java/lang/System.getEncoding(I)Ljava/lang/String; @ 00007F29183A921C-00007F29183A936D OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=0000000000F13A70 bcsz=3 JNI time=311us mem=[region=704 system=16384]KB compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% time=311us reflects the amount of time taken to do the compilation. mem=[region=704 system=16384]KB reflects the amount of memory that was allocated during the compilation. The following example can be used to create verbose output that includes lines to show when compilation for a method starts and ends, and any methods that are inlined during the compilation. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version Note: The suboptions count and -XcompilationThreads1 are included only to simplify the output for this example and are not recommended for production. The following section is taken from the output and describes the compilation and inlining of one method java/lang/String.equals : (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB #INL: 7 methods inlined into 4dce72bd java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40 #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The first line is included as a result of setting the compileStart suboption and shows the start of the warm method compilation: (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB Similarly, the last line shows the successful compilation of this method, as denoted by the + : + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The lines inbetween that start with #INL describe the inlining operations that took place. A total of 7 methods were inlined into java/lang/String.equals : The first three methods ( #0 , #1 , #2 ) are inlined into the top level method, denoted as #-1 : #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z The next four methods ( #3 , #4 , #5 , #6 ) are inlined into the method denoted by #2 . #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C Here's how to interpret the line for #INL: #0: : The method is inlined into 4dce72bd , where 4dce72bd is an internal pointer that corresponds to this method (in this case, java/lang/String.equals(Ljava/lang/Object;)Z ). The value @22 at the end of the pointer is a bytecode index, which describes the bytecode index of the call that is being inlined. The call is 81670d20 bcsz=37 java/lang/String.lengthInternal()I , which shows the corresponding internal pointer, bytecode size (bcsz) and the name of the method that got inlined. Going through the #INL output line by line then: java/lang/String.lengthInternal()I got inlined into its caller 4dce72bd at bytecode index @22. java/lang/String.lengthInternal()I also got inlined into its caller 4dce72bd at bytecode index @28. java/lang/String.regionMatchesInternal(...) got inlined at call reference 4dce72bd at bytecode index @104. Then 4 distinct calls to java/lang/String.charAtInternal(I[C)C were also inlined into java/lang/String.regionMatchesInternal(...) : #3 at bytecode index @121 of regionMatchesInternal #4 at bytecode index @131 of regionMatchesInternal #5 at bytecode index @156 of regionMatchesInternal #6 at bytecode index @166 of regionMatchesInternal These were all the calls that the inliner decided to inline into the method being compiled. There is some additional output that describes calls to methods that weren't inlined: #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z While the output does not specifically say why these methods were not inlined, the relatively larger bytecode size ( bcsz=233 ) probably prevented the first method from being inlined. It's possible that, at a higher optimization level than cold, this deduplicateStrings method may get inlined. The coldCalled label on the last two lines, however, indicate that these calls are located in a part of the method that has not ever been executed, so the JIT decided that inlining those last two methods will probably increase compile time without much promise that it will improve performance. By reading the log in this way you can reconstruct the tree of inlines that are taking place as the compilation proceeds. You can see which methods are being inlined and which methods are not being inlined. See also Diagnosing a JIT or AOT problem","title":"JIT Compiler"},{"location":"jit/#the-jit-compiler","text":"The Just-In-Time (JIT) compiler is a key component of the OpenJ9 VM that improves the performance of Java applications by compiling platform-neutral Java bytecode into native machine code at run time. Without the JIT, the VM has to interpret the bytecodes itself - a process that requires extra CPU and memory. The JIT compiler doesn't compile every method that gets called because thousands of methods can be called at startup. Instead, OpenJ9 records the number of times a method is called. When the count reaches a pre-defined invocation threshold , JIT compilation is triggered. Once a method has been compiled by the JIT, the VM can call the compiled method rather than interpreting it.","title":"The JIT compiler"},{"location":"jit/#optimization-levels","text":"The JIT compiler can compile a method at different optimization levels: cold , warm , hot , very hot (with profiling) , or scorching . The hotter the optimization level, the better the expected performance, but the higher the cost in terms of CPU and memory. cold is used during startup processing for large applications where the goal is to achieve the best compiled code speed for as many methods as possible. warm is the workhorse; after start-up, most methods are compiled when they reach the invocation threshold. For higher optimization levels, the VM uses a sampling thread to identify methods that continue to take a lot of time. Methods that consume more than 1% are compiled at hot. Methods that consume more than 12.5% are scheduled for a scorching compilation. However, before that happens the methods are compiled at very hot with profiling to collect detailed profile data that is used by the scorching compilation. The higher optimization levels use special techniques such as escape analysis and partial redundancy elimination, or loop through certain optimization sequences more times. Although these techniques use more CPU and memory, the improved performance that is delivered by the optimizations can make the tradeoff worthwhile.","title":"Optimization levels"},{"location":"jit/#troubleshooting","text":"The JIT compiler is enabled by default to optimize performance. However, if you experience a problem running your application, temporarily turning off the JIT will tell you whether the JIT is at fault. Because JIT starts at the same time as the VM, you can only modify JIT behavior at startup. There are a number of ways to disable the JIT: Specify -Djava.compiler=NONE on the command line. Specify -Xint on the command line, which turns off the JIT and AOT compiler. To eliminate problems with one or the other you can turn these compilers off selectively with the -Xnojit and -Xnoaot options. Call the java.lang.Compiler API programmatically. Note: java.lang.Compiler is deprecated for removal in Java SE 9. If turning off the JIT solves your problem, you can investigate JIT operations in more detail by using a number of options to control behavior. Turning on verbose logging with the verbose suboption causes the JIT to record all compiler operations. However, the log file can be difficult to read because there are so many complex operations occuring in rapid succession. Follow these steps to simplify operations, which helps you pinpoint the root cause: Turn off multiple compilation threads The JIT compiler can use more than one compilation thread, which typically improves startup performance. The number of threads is determined by the VM, depending on the system configuration. You can turn off multiple threads by using the -XcompilationThreads option, which simplifies the output in the verbose log. Lower the invocation threshold When the invocation count is set to 0 , the JIT compiles every method and your application will fail immediately when the method causing the problem is reached. You can alter the threshold with the count suboption. Turn off inlining Inlining is a complex process that generates larger and more complex code. To eliminate errors caused by these operations, use the disableImlining suboption. Decrease the optimization levels Use the optlevel suboption to gradually decrease the compiler optimization levels to see whether you can isolate the level at which your problem occurs. More information about these suboptions and the command line syntax is covered in -Xjit .","title":"Troubleshooting"},{"location":"jit/#understanding-jit-verbose-logs","text":"At first glance, a JIT verbose log can look very complex. To help you understand the log we'll look at JIT compiler operations when you run the java -version command. The following option turns on verbose logging and directs output to a log file called vlogfile : java -Xjit:verbose,vlog=vlogfile -version The first section of the log includes lines that start with #INFO: , which provides information about the environment that the JIT is operating in. You can determine the version of the JIT and VM that you are using, and the type and number of processors that the JIT has access to. #INFO: _______________________________________ #INFO: Version Information: #INFO: JIT Level - e24e8aa9 #INFO: JVM Level - 20180315_120 #INFO: GC Level - e24e8aa9 #INFO: #INFO: Processor Information: #INFO: Platform Info:X86 Intel P6 #INFO: Vendor:GenuineIntel #INFO: numProc=1 #INFO: #INFO: _______________________________________ #INFO: AOT #INFO: options specified: #INFO: samplingFrequency=2 #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: _______________________________________ #INFO: JIT #INFO: options specified: #INFO: verbose,vlog=vlogfile #INFO: #INFO: options in effect: #INFO: verbose=1 #INFO: vlog=vlogfile #INFO: compressedRefs shiftAmount=0 #INFO: compressedRefs isLowMemHeap=1 #INFO: StartTime: Apr 23 09:49:10 2018 #INFO: Free Physical Memory: 996188 KB #INFO: CPU entitlement = 100.00 This section also shows the AOT and JIT options that are in force. The last few lines detail the start time of the compilation activity, how much free physical memory is available to the process, and the CPU entitlement. The information section is followed by a sequence of lines that describe the methods that are being compiled, as well as other events significant to the operation of the JIT compiler. Here is a typical line from the verbose log: + (cold) sun/reflect/Reflection.getCallerClass()Ljava/lang/Class; @ 00007FCACED1303C-00007FCACED13182 OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=00000000011E7EA8 bcsz=2 JNI compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% In this example: The method compiled is sun/reflect/Reflection.getCallerClass()Ljava/lang/Class. The + indicates that this method is successfully compiled. Failed compilations are marked by a !. (cold) tells you the optimization level that was applied. Other examples may be (warm) or (scorching). 00007FCACED1303C-00007FCACED13182 is the code range where the compiled code was generated. Q values provide information about the state of the compilation queues when the compilation occurred. bcsz shows the bytecode size. In this case it is small because this is a native method, so the JIT is simply providing an accelerated JNI transition into the native getCallerClass method. Each line of output represents a method that is compiled. The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the values time and mem into each line, as shown in the following example: + (cold) java/lang/System.getEncoding(I)Ljava/lang/String; @ 00007F29183A921C-00007F29183A936D OrdinaryMethod - Q_SZ=0 Q_SZI=0 QW=1 j9m=0000000000F13A70 bcsz=3 JNI time=311us mem=[region=704 system=16384]KB compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% time=311us reflects the amount of time taken to do the compilation. mem=[region=704 system=16384]KB reflects the amount of memory that was allocated during the compilation. The following example can be used to create verbose output that includes lines to show when compilation for a method starts and ends, and any methods that are inlined during the compilation. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version Note: The suboptions count and -XcompilationThreads1 are included only to simplify the output for this example and are not recommended for production. The following section is taken from the output and describes the compilation and inlining of one method java/lang/String.equals : (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB #INL: 7 methods inlined into 4dce72bd java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40 #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The first line is included as a result of setting the compileStart suboption and shows the start of the warm method compilation: (warm) Compiling java/lang/String.equals(Ljava/lang/Object;)Z OrdinaryMethod j9m=0000000001300B30 t=90 compThread=0 memLimit=262144 KB freePhysicalMemory=969 MB Similarly, the last line shows the successful compilation of this method, as denoted by the + : + (warm) java/lang/String.equals(Ljava/lang/Object;)Z @ 00007F53190A3E40-00007F53190A40D0 OrdinaryMethod - Q_SZ=277 Q_SZI=277 QW=1667 j9m=0000000001300B30 bcsz=127 GCR compThread=0 CpuLoad=2%(2%avg) JvmCpu=0% The lines inbetween that start with #INL describe the inlining operations that took place. A total of 7 methods were inlined into java/lang/String.equals : The first three methods ( #0 , #1 , #2 ) are inlined into the top level method, denoted as #-1 : #INL: #0: 4dce72bd #-1 inlined 4dce72bd@22 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #1: 4dce72bd #-1 inlined 4dce72bd@28 -> 81670d20 bcsz=37 java/lang/String.lengthInternal()I #INL: #2: 4dce72bd #-1 inlined 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z The next four methods ( #3 , #4 , #5 , #6 ) are inlined into the method denoted by #2 . #INL: #3: 4dce72bd #2 inlined bf62dcaf@121 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #4: 4dce72bd #2 inlined bf62dcaf@131 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #5: 4dce72bd #2 inlined bf62dcaf@156 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C #INL: #6: 4dce72bd #2 inlined bf62dcaf@166 -> bbb5af92 bcsz=39 java/lang/String.charAtInternal(I[C)C Here's how to interpret the line for #INL: #0: : The method is inlined into 4dce72bd , where 4dce72bd is an internal pointer that corresponds to this method (in this case, java/lang/String.equals(Ljava/lang/Object;)Z ). The value @22 at the end of the pointer is a bytecode index, which describes the bytecode index of the call that is being inlined. The call is 81670d20 bcsz=37 java/lang/String.lengthInternal()I , which shows the corresponding internal pointer, bytecode size (bcsz) and the name of the method that got inlined. Going through the #INL output line by line then: java/lang/String.lengthInternal()I got inlined into its caller 4dce72bd at bytecode index @22. java/lang/String.lengthInternal()I also got inlined into its caller 4dce72bd at bytecode index @28. java/lang/String.regionMatchesInternal(...) got inlined at call reference 4dce72bd at bytecode index @104. Then 4 distinct calls to java/lang/String.charAtInternal(I[C)C were also inlined into java/lang/String.regionMatchesInternal(...) : #3 at bytecode index @121 of regionMatchesInternal #4 at bytecode index @131 of regionMatchesInternal #5 at bytecode index @156 of regionMatchesInternal #6 at bytecode index @166 of regionMatchesInternal These were all the calls that the inliner decided to inline into the method being compiled. There is some additional output that describes calls to methods that weren't inlined: #INL: 4dce72bd called 4dce72bd@120 -> f734b49c bcsz=233 java/lang/String.deduplicateStrings(Ljava/lang/String;Ljava/lang/String;)V #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z #INL: 4dce72bd coldCalled 4dce72bd@104 -> bf62dcaf bcsz=182 java/lang/String.regionMatchesInternal(Ljava/lang/String;Ljava/lang/String;[C[CIII)Z While the output does not specifically say why these methods were not inlined, the relatively larger bytecode size ( bcsz=233 ) probably prevented the first method from being inlined. It's possible that, at a higher optimization level than cold, this deduplicateStrings method may get inlined. The coldCalled label on the last two lines, however, indicate that these calls are located in a part of the method that has not ever been executed, so the JIT decided that inlining those last two methods will probably increase compile time without much promise that it will improve performance. By reading the log in this way you can reconstruct the tree of inlines that are taking place as the compilation proceeds. You can see which methods are being inlined and which methods are not being inlined.","title":"Understanding JIT verbose logs"},{"location":"jit/#see-also","text":"Diagnosing a JIT or AOT problem","title":"See also"},{"location":"legal/","text":"Legal License agreement, notices, copyright, and trademark information for the user documentation. License agreement See License Notices See Notices Copyright information Eclipse OpenJ9 documentation is subject to the following copyright: Copyright (c) 2017, 2019 IBM Corp. Trademarks IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at \"Copyright and trademark information\" here . Java and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates. Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.","title":"Legal"},{"location":"legal/#legal","text":"License agreement, notices, copyright, and trademark information for the user documentation.","title":"Legal"},{"location":"legal/#license-agreement","text":"See License","title":"License agreement"},{"location":"legal/#notices","text":"See Notices","title":"Notices"},{"location":"legal/#copyright-information","text":"Eclipse OpenJ9 documentation is subject to the following copyright: Copyright (c) 2017, 2019 IBM Corp.","title":"Copyright information"},{"location":"legal/#trademarks","text":"IBM, the IBM logo, and ibm.com are trademarks or registered trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at \"Copyright and trademark information\" here . Java and all Java-based trademarks and logos are trademarks or registered trademarks of Oracle and/or its affiliates. Linux is a registered trademark of Linus Torvalds in the United States, other countries, or both. Microsoft and Windows are trademarks of Microsoft Corporation in the United States, other countries, or both.","title":"Trademarks"},{"location":"messages_intro/","text":"OpenJ9 VM messages Messages are issued by the OpenJ9 virtual machine (VM) in response to certain conditions. Understanding what the messages mean can help you with problem determination. Message categories There are three main categories of message: Information Information messages provide information about VM processing. For example, a dump information message is typically issued when a dump agent requests a dump. Warning Warning messages are issued by the VM to indicate conditions that might need user intervention. Error Error messages are issued by the VM when normal processing cannot proceed, because of unexpected conditions. OpenJ9 virtual machine messages have the following format: JVM<type><number><code> where: JVM is a standard prefix. <type> refers to the VM subcomponent that issued the message. <number> is a unique numerical number. <code> is one of the following codes: I - Information message W - Warning message E - Error message These messages can help you with problem determination. By default, all error and some information messages are routed to the system log and also written to stderr or stdout . The specific information messages are JVMDUMP039I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the VM. To route additional message types to the system log, or turn off message logging to the system log, use the -Xlog option. The -Xlog option does not affect messages written to the standard error stream (stderr). See OpenJ9 command-line options . Finding logged messages Logged messages can be found in different locations, according to platform. Finding AIX messages On AIX\u00ae, messages are logged by the syslog daemon ( /usr/sbin/syslogd ). Logged messages are written to the syslog file that is configured in /etc/syslog.conf . If the syslog daemon is not running, logged messages are lost. You can redirect messages from the syslog daemon to the AIX error log facility by performing the following configuration steps: Set up a redirect in the file syslog.conf so that syslog messages are sent to the error log, by adding the following line: user.debug errlog If syslogd is already running, reload the updated configuration by running the following command: refresh -s syslogd The updated configuration is used each time syslogd starts. 4. Use the AIX errpt command or the System Management Interface Tool (SMIT) to read the messages sent to the error log. For more information about AIX logging, see: Error-logging overview . Finding Linux messages On Linux\u00ae, messages are logged by the syslog daemon. To find where messages are logged, check the syslog configuration file. Finding macOS messages On macOS\u00ae, messages are logged by the syslog daemon. However, on Sierra and High Sierra, syslog does not work. If /var/log/system.log is not available, Console.app can be used instead. Finding Windows messages On Windows\u2122, messages are logged in the application events section of the event viewer. Finding z/OS messages On z/OS\u00ae, messages are sent to the operator console. To see the messages, go from the ispf panel to the sdsf panel, then open the log panel. Obtaining detailed message descriptions Detailed message information is available to help with problem diagnosis. Understanding the warning or error message issued by the VM can help you diagnose problems. All warning and error messages issued by the VM are listed by type in the messages guide: IBM\u00ae VM messages . The messages, error codes, and exit codes in this guide apply to multiple versions of the VM. Note: If the VM fills all available memory, the message number might be produced without a description for the error that caused the problem. Look for the message number in the relevant section of the J9 VM Messages guide to see the message description and the additional information provided.","title":"OpenJ9 messages"},{"location":"messages_intro/#openj9-vm-messages","text":"Messages are issued by the OpenJ9 virtual machine (VM) in response to certain conditions. Understanding what the messages mean can help you with problem determination.","title":"OpenJ9 VM messages"},{"location":"messages_intro/#message-categories","text":"There are three main categories of message: Information Information messages provide information about VM processing. For example, a dump information message is typically issued when a dump agent requests a dump. Warning Warning messages are issued by the VM to indicate conditions that might need user intervention. Error Error messages are issued by the VM when normal processing cannot proceed, because of unexpected conditions. OpenJ9 virtual machine messages have the following format: JVM<type><number><code> where: JVM is a standard prefix. <type> refers to the VM subcomponent that issued the message. <number> is a unique numerical number. <code> is one of the following codes: I - Information message W - Warning message E - Error message These messages can help you with problem determination. By default, all error and some information messages are routed to the system log and also written to stderr or stdout . The specific information messages are JVMDUMP039I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the VM. To route additional message types to the system log, or turn off message logging to the system log, use the -Xlog option. The -Xlog option does not affect messages written to the standard error stream (stderr). See OpenJ9 command-line options .","title":"Message categories"},{"location":"messages_intro/#finding-logged-messages","text":"Logged messages can be found in different locations, according to platform.","title":"Finding logged messages"},{"location":"messages_intro/#finding-aix-messages","text":"On AIX\u00ae, messages are logged by the syslog daemon ( /usr/sbin/syslogd ). Logged messages are written to the syslog file that is configured in /etc/syslog.conf . If the syslog daemon is not running, logged messages are lost. You can redirect messages from the syslog daemon to the AIX error log facility by performing the following configuration steps: Set up a redirect in the file syslog.conf so that syslog messages are sent to the error log, by adding the following line: user.debug errlog If syslogd is already running, reload the updated configuration by running the following command: refresh -s syslogd The updated configuration is used each time syslogd starts. 4. Use the AIX errpt command or the System Management Interface Tool (SMIT) to read the messages sent to the error log. For more information about AIX logging, see: Error-logging overview .","title":"Finding AIX messages"},{"location":"messages_intro/#finding-linux-messages","text":"On Linux\u00ae, messages are logged by the syslog daemon. To find where messages are logged, check the syslog configuration file.","title":"Finding Linux messages"},{"location":"messages_intro/#finding-macos-messages","text":"On macOS\u00ae, messages are logged by the syslog daemon. However, on Sierra and High Sierra, syslog does not work. If /var/log/system.log is not available, Console.app can be used instead.","title":"Finding macOS messages"},{"location":"messages_intro/#finding-windows-messages","text":"On Windows\u2122, messages are logged in the application events section of the event viewer.","title":"Finding Windows messages"},{"location":"messages_intro/#finding-zos-messages","text":"On z/OS\u00ae, messages are sent to the operator console. To see the messages, go from the ispf panel to the sdsf panel, then open the log panel.","title":"Finding z/OS messages"},{"location":"messages_intro/#obtaining-detailed-message-descriptions","text":"Detailed message information is available to help with problem diagnosis. Understanding the warning or error message issued by the VM can help you diagnose problems. All warning and error messages issued by the VM are listed by type in the messages guide: IBM\u00ae VM messages . The messages, error codes, and exit codes in this guide apply to multiple versions of the VM. Note: If the VM fills all available memory, the message number might be produced without a description for the error that caused the problem. Look for the message number in the relevant section of the J9 VM Messages guide to see the message description and the additional information provided.","title":"Obtaining detailed message descriptions"},{"location":"openj9_defaults/","text":"Default settings for the OpenJ9 VM The following tables provide a quick reference to the default settings for the VM when it is first installed. The last 2 columns show whether the default setting can be changed by a command-line parameter or an environment variable. Note that if both are set, the command-line parameter always takes precedence. VM setting Default Command line Env. variable Javadump Enabled yes yes Heapdump Disabled yes yes System dump Enabled yes yes Snap traces Enabled yes yes JIT dump Enabled yes yes Verbose output Disabled yes no Compressed references (See Note 1 ) yes yes Boot classpath search Disabled yes no JNI checks Disabled yes no Remote debugging Disabled yes no Strict conformance checks Disabled yes no Quickstart Disabled yes no Remote debug info server Disabled yes no Reduced signaling Disabled yes no Signal handler chaining Enabled yes no Classpath Not set yes yes Class data sharing Disabled yes no Accessibility support Enabled no yes JIT compiler Enabled yes yes AOT compiler (See Note 2 ) Enabled yes no JIT debug options Disabled yes no Java2D max size of fonts with algorithmic bold 14 point no yes Java2D use rendered bitmaps in scalable fonts Enabled no yes Java2D freetype font rasterizing Enabled no yes Java2D use AWT fonts Disabled no yes Notes: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: Enabled for -Xmx values \u2264 57 GB, otherwise disabled. On z/OS\u00ae: Enabled for -Xmx values \u2264 25 GB, otherwise disabled. With APAR OA49416 , enabled for -Xmx values \u2264 57 GB. AOT is not used by the VM unless shared classes are also enabled. VM setting AIX Linux macOS Windows z/OS Command line Env. variable Default locale None None None N/A None no yes Time to wait before starting plug-in N/A Zero N/A N/A N/A no yes Temporary directory /tmp /tmp /tmp c:\\temp /tmp no yes Plug-in redirection None None None N/A None no yes IM switching Disabled Disabled Disabled N/A Disabled no yes IM modifiers Disabled Disabled Disabled N/A Disabled no yes Thread model N/A N/A N/A N/A Native no yes Initial stack size for Java Threads (32/64-bit) . Use -Xiss<size> 2 KB 2 KB 2 KB 2 KB 2 KB yes no Maximum stack size for Java Threads (32-bit) . Use -Xss<size> 320 KB 320 KB N/A 320 KB 320 KB yes no Maximum stack size for Java Threads (64-bit) . Use -Xss<size> 1024 KB 1024 KB 1024 KB 1024 KB 1024 KB yes no Stack size for OS Threads (32-bit) . Use -Xmso<size> 256 KB 256 KB N/A 32 KB 256 KB yes no Stack size for OS Threads (64-bit) . Use -Xmso<size> 256 KB 256 KB 256 KB 256 KB 1 MB yes no Initial heap size. Use -Xms<size> 8 MB 8 MB 8 MB 8 MB 8 MB yes no Maximum Java heap size. Use -Xmx<size> See Notes See Notes See Notes See Notes See Notes yes no Page size for the Java object heap and code cache (For restrictions, see the -Xlp:codecache and -Xlp:objectheap options). Operating system default Architecture: x86: 2MB, IBM Z\u00ae: 1MB, Other architectures: Operating system default 4 KB Operating system default 1M pageable yes no Notes: The default value of -Xmx depends on the version of Java. The value is half the available memory with a minimum of 16MB and a maximum of 512 MB. The value is 25% of the available memory with a maximum of 25 GB. However, where there is 2 GB or less of physical memory, the value set is 50% of available memory with a minimum value of 16 MB and a maximum value of 512 MB. Available memory is defined as being the smallest of two values: The real or physical memory or the RLIMIT_AS value.","title":"Default settings"},{"location":"openj9_defaults/#default-settings-for-the-openj9-vm","text":"The following tables provide a quick reference to the default settings for the VM when it is first installed. The last 2 columns show whether the default setting can be changed by a command-line parameter or an environment variable. Note that if both are set, the command-line parameter always takes precedence. VM setting Default Command line Env. variable Javadump Enabled yes yes Heapdump Disabled yes yes System dump Enabled yes yes Snap traces Enabled yes yes JIT dump Enabled yes yes Verbose output Disabled yes no Compressed references (See Note 1 ) yes yes Boot classpath search Disabled yes no JNI checks Disabled yes no Remote debugging Disabled yes no Strict conformance checks Disabled yes no Quickstart Disabled yes no Remote debug info server Disabled yes no Reduced signaling Disabled yes no Signal handler chaining Enabled yes no Classpath Not set yes yes Class data sharing Disabled yes no Accessibility support Enabled no yes JIT compiler Enabled yes yes AOT compiler (See Note 2 ) Enabled yes no JIT debug options Disabled yes no Java2D max size of fonts with algorithmic bold 14 point no yes Java2D use rendered bitmaps in scalable fonts Enabled no yes Java2D freetype font rasterizing Enabled no yes Java2D use AWT fonts Disabled no yes Notes: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: Enabled for -Xmx values \u2264 57 GB, otherwise disabled. On z/OS\u00ae: Enabled for -Xmx values \u2264 25 GB, otherwise disabled. With APAR OA49416 , enabled for -Xmx values \u2264 57 GB. AOT is not used by the VM unless shared classes are also enabled. VM setting AIX Linux macOS Windows z/OS Command line Env. variable Default locale None None None N/A None no yes Time to wait before starting plug-in N/A Zero N/A N/A N/A no yes Temporary directory /tmp /tmp /tmp c:\\temp /tmp no yes Plug-in redirection None None None N/A None no yes IM switching Disabled Disabled Disabled N/A Disabled no yes IM modifiers Disabled Disabled Disabled N/A Disabled no yes Thread model N/A N/A N/A N/A Native no yes Initial stack size for Java Threads (32/64-bit) . Use -Xiss<size> 2 KB 2 KB 2 KB 2 KB 2 KB yes no Maximum stack size for Java Threads (32-bit) . Use -Xss<size> 320 KB 320 KB N/A 320 KB 320 KB yes no Maximum stack size for Java Threads (64-bit) . Use -Xss<size> 1024 KB 1024 KB 1024 KB 1024 KB 1024 KB yes no Stack size for OS Threads (32-bit) . Use -Xmso<size> 256 KB 256 KB N/A 32 KB 256 KB yes no Stack size for OS Threads (64-bit) . Use -Xmso<size> 256 KB 256 KB 256 KB 256 KB 1 MB yes no Initial heap size. Use -Xms<size> 8 MB 8 MB 8 MB 8 MB 8 MB yes no Maximum Java heap size. Use -Xmx<size> See Notes See Notes See Notes See Notes See Notes yes no Page size for the Java object heap and code cache (For restrictions, see the -Xlp:codecache and -Xlp:objectheap options). Operating system default Architecture: x86: 2MB, IBM Z\u00ae: 1MB, Other architectures: Operating system default 4 KB Operating system default 1M pageable yes no Notes: The default value of -Xmx depends on the version of Java. The value is half the available memory with a minimum of 16MB and a maximum of 512 MB. The value is 25% of the available memory with a maximum of 25 GB. However, where there is 2 GB or less of physical memory, the value set is 50% of available memory with a minimum value of 16 MB and a maximum value of 512 MB. Available memory is defined as being the smallest of two values: The real or physical memory or the RLIMIT_AS value.","title":"Default settings for the OpenJ9 VM"},{"location":"openj9_directories/","text":"Directory conventions The following tables provide a quick reference to the OpenJ9 VM directory location on different Java\u2122 versions and different platform architectures. Some pages refer to the VM directory location as <vm_dir> . Operating system Java 8 Java 11 and later AIX\u00ae <install_dir>/jre/lib/ppc[64]/default <install_dir>/ Linux\u00ae <install_dir>/jre/lib/<arch>/default <install_dir>/ macOS\u00ae <install_dir>/jre/lib/default <install_dir>/ Windows\u2122 <install_dir>\\jre\\bin\\default <install_dir>\\ z/OS\u00ae <install_dir>/jre/lib/s390[x]/default <install_dir>/ Where: <install_dir> is your JDK installation directory. <arch> depends on the architecture your Linux distribution is running on. See the following table for possible values: Architecture Value of <arch> x86 32-bit i386 x86 64-bit x86-64 IBM POWER\u00ae 32-bit (Big Endian) ppc IBM POWER 64-bit (Big Endian) ppc64 IBM POWER 64-bit (Little Endian) ppc64le IBM Z\u00ae 31-bit s390 IBM Z 64-bit s390x","title":"Directory conventions"},{"location":"openj9_directories/#directory-conventions","text":"The following tables provide a quick reference to the OpenJ9 VM directory location on different Java\u2122 versions and different platform architectures. Some pages refer to the VM directory location as <vm_dir> . Operating system Java 8 Java 11 and later AIX\u00ae <install_dir>/jre/lib/ppc[64]/default <install_dir>/ Linux\u00ae <install_dir>/jre/lib/<arch>/default <install_dir>/ macOS\u00ae <install_dir>/jre/lib/default <install_dir>/ Windows\u2122 <install_dir>\\jre\\bin\\default <install_dir>\\ z/OS\u00ae <install_dir>/jre/lib/s390[x]/default <install_dir>/ Where: <install_dir> is your JDK installation directory. <arch> depends on the architecture your Linux distribution is running on. See the following table for possible values: Architecture Value of <arch> x86 32-bit i386 x86 64-bit x86-64 IBM POWER\u00ae 32-bit (Big Endian) ppc IBM POWER 64-bit (Big Endian) ppc64 IBM POWER 64-bit (Little Endian) ppc64le IBM Z\u00ae 31-bit s390 IBM Z 64-bit s390x","title":"Directory conventions"},{"location":"openj9_newuser/","text":"New to OpenJ9? The Eclipse OpenJ9 virtual machine (VM) implements the Java Virtual Machine Specification . Most Java applications should run on an OpenJDK that contains the OpenJ9 VM without changing anything. However, because it is an independent implementation there are some differences compared to the HotSpot VM, which is the default OpenJDK VM and is also included in an Oracle JDK. Command-line options Although OpenJ9 implements its own command-line interface, many Hotspot options are recognized and accepted by the VM for compatibility. Any -XX: options that are not recognized by the VM are ignored by default, which prevents an application failing to start. You can turn off this behavior with the -XX:-IgnoreUnrecognizedXXColonOptions option. For a list of compatible options, see Switching to OpenJ9 in the Command-line options section. Garbage collection policies Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. By default, OpenJ9 uses the Generational Concurrent ( gencon ) GC policy, which is best suited for transactional applications that have many short-lived objects. The policy aims to minimize GC pause times without compromising throughput. If you are using Java 8, the gencon policy is similar to the ParallelGC policy, which is the default HotSpot policy. If you are using Java 11, the OpenJ9 balanced ( balanced ) policy is most similar to the default HotSpot policy. If you have a different type of workload, you might want to select a different GC policy. For a summary of available policies, see Garbage collection . For more information about the differences between OpenJ9 GC policies and how to choose the right one for your application, see Eclipse OpenJ9: Garbage collection tradeoffs and tuning with OpenJ9 . To start your application with a different policy, use the -Xgcpolicy option on the command line. Operational tooling If you are a Java application developer or you are responsible for managing large server or desktop deployments of a Java runtime environment, you probably use a number of tools for monitoring, management, and troubleshooting. Because OpenJ9 is an independent implementation, it has evolved with its own approach for these areas and, in some cases, its own unique tools. In other cases, tools have been added for compatibility with the reference implementation, but these tools might differ in behavior from equivalent tools in HotSpot. For a list of these tools, see Switching to OpenJ9 in the Tools section. Dumps, logs, and trace files OpenJ9 contains extensive trace and debugging capabilities to help identify, isolate, and solve run time problems. Dump files: Various types of dump are produced by default in response to certain events and can also be triggered for a whole range of events by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. Dumps include Java dumps , heap dumps , system dumps , JIT dumps, stack dumps, and snap dumps (tracepoint data). For more information, see the -Xdump option. Verbose log files: Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination, including class data sharing , garbage collection , and the JIT compiler . Trace files: The OpenJ9 implementation contains extensive tracepoints used to log information and exceptional conditions, with minimal impact on performance. Some tracepoints are enabled by default; others can be enabled on demand. For more information, see the -Xtrace option for tracing Java applications and the VM, and the -Xtgc option for tracing garbage collection. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you probably make use of the monitoring and diagnostic tools that are provided with the VM. OpenJ9 has implemented a different approach to providing similar data; rather than running a number of different tools to obtain a different piece of information, the Java dump file provides a comprehensive set of information in one place. You can find the following information in an OpenJ9 Java dump: The system the VM is running on and the resources available. The Java execution environment, including the options set from the command line. The native memory used by the VM, broken down by VM component. Memory usage in the VM for the object heap and internal VM structures, such as the JIT code cache. Lock operations that protect shared resources during runtime. Java threads, native threads, and stack traces. Hook interfaces, for performance analysis. Details about the shared classes cache, if used. Detailed information about classloaders, together with a list of libraries and classes that are loaded. For more information, see Java dump . Tools OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center. Most of the other tools provided with HotSpot are not officially supported, but equivalent functionality is available in OpenJ9 through command-line options, dump agents, and AttachAPI. Interfaces OpenJ9 provides the following interfaces, which can be used for monitoring and diagnostic purposes: JVMTI : OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information about this interface, see Java Virtual Machine Tool Interface . DTFJ interface : The Diagnostic Tool Framework for Java (DTFJ) API allows custom applications to be written that can access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information about DTFJ, see Diagnostic Tool Framework for Java . java.lang.management API: OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you might make use of certain com.sun.management interfaces. Although OpenJ9 implements some of these interfaces, a few are specific to the HotSpot VM. The following table indicates alternative classes or mechanisms that you can use for equivalent function in OpenJ9: Hotspot-specific classes Alternatives for OpenJ9 HotSpotDiagnosticMXBean OpenJ9DiagnosticsMXBean (for heap dumps) MissionControl Use Health Center MissionControlMXBean Use Health Center ThreadMXBean JvmCpuMonitorMXBean (for thread time) VMOption OpenJ9 Java dump (option -Xdump:java ) DiagnosticCommandMBean None Note: OpenJ9 implements the following com.sun.management interfaces: GarbageCollectorMXBean , GarbageCollectionNotificationInfo , GcInfo , OperatingSystemMXBean , UnixOperatingSystemMXBean . Other differences This topic describes the differences between the HotSpot VM and the Eclipse OpenJ9 VM. Therefore, if you are currently using an OpenJDK with the default Hotspot VM and you want to switch to using an OpenJDK with the OpenJ9 VM, these are the only differences you might be concerned about. If however, you are using an Oracle JDK, you might want to learn about differences between other components that make up an Oracle JDK or an OpenJDK from the AdoptOpenJDK community. For more information, read the Migration guide .","title":"New to OpenJ9?"},{"location":"openj9_newuser/#new-to-openj9","text":"The Eclipse OpenJ9 virtual machine (VM) implements the Java Virtual Machine Specification . Most Java applications should run on an OpenJDK that contains the OpenJ9 VM without changing anything. However, because it is an independent implementation there are some differences compared to the HotSpot VM, which is the default OpenJDK VM and is also included in an Oracle JDK.","title":"New to OpenJ9?"},{"location":"openj9_newuser/#command-line-options","text":"Although OpenJ9 implements its own command-line interface, many Hotspot options are recognized and accepted by the VM for compatibility. Any -XX: options that are not recognized by the VM are ignored by default, which prevents an application failing to start. You can turn off this behavior with the -XX:-IgnoreUnrecognizedXXColonOptions option. For a list of compatible options, see Switching to OpenJ9 in the Command-line options section.","title":"Command-line options"},{"location":"openj9_newuser/#garbage-collection-policies","text":"Eclipse OpenJ9 has a number of GC policies designed around different types of applications and workloads. By default, OpenJ9 uses the Generational Concurrent ( gencon ) GC policy, which is best suited for transactional applications that have many short-lived objects. The policy aims to minimize GC pause times without compromising throughput. If you are using Java 8, the gencon policy is similar to the ParallelGC policy, which is the default HotSpot policy. If you are using Java 11, the OpenJ9 balanced ( balanced ) policy is most similar to the default HotSpot policy. If you have a different type of workload, you might want to select a different GC policy. For a summary of available policies, see Garbage collection . For more information about the differences between OpenJ9 GC policies and how to choose the right one for your application, see Eclipse OpenJ9: Garbage collection tradeoffs and tuning with OpenJ9 . To start your application with a different policy, use the -Xgcpolicy option on the command line.","title":"Garbage collection policies"},{"location":"openj9_newuser/#operational-tooling","text":"If you are a Java application developer or you are responsible for managing large server or desktop deployments of a Java runtime environment, you probably use a number of tools for monitoring, management, and troubleshooting. Because OpenJ9 is an independent implementation, it has evolved with its own approach for these areas and, in some cases, its own unique tools. In other cases, tools have been added for compatibility with the reference implementation, but these tools might differ in behavior from equivalent tools in HotSpot. For a list of these tools, see Switching to OpenJ9 in the Tools section.","title":"Operational tooling"},{"location":"openj9_newuser/#dumps-logs-and-trace-files","text":"OpenJ9 contains extensive trace and debugging capabilities to help identify, isolate, and solve run time problems. Dump files: Various types of dump are produced by default in response to certain events and can also be triggered for a whole range of events by using the com.ibm.jvm.Dump API or by specifying -Xdump options on the command line. Dumps include Java dumps , heap dumps , system dumps , JIT dumps, stack dumps, and snap dumps (tracepoint data). For more information, see the -Xdump option. Verbose log files: Some components of OpenJ9 can also produce verbose output or log files to assist with problem determination, including class data sharing , garbage collection , and the JIT compiler . Trace files: The OpenJ9 implementation contains extensive tracepoints used to log information and exceptional conditions, with minimal impact on performance. Some tracepoints are enabled by default; others can be enabled on demand. For more information, see the -Xtrace option for tracing Java applications and the VM, and the -Xtgc option for tracing garbage collection. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you probably make use of the monitoring and diagnostic tools that are provided with the VM. OpenJ9 has implemented a different approach to providing similar data; rather than running a number of different tools to obtain a different piece of information, the Java dump file provides a comprehensive set of information in one place. You can find the following information in an OpenJ9 Java dump: The system the VM is running on and the resources available. The Java execution environment, including the options set from the command line. The native memory used by the VM, broken down by VM component. Memory usage in the VM for the object heap and internal VM structures, such as the JIT code cache. Lock operations that protect shared resources during runtime. Java threads, native threads, and stack traces. Hook interfaces, for performance analysis. Details about the shared classes cache, if used. Detailed information about classloaders, together with a list of libraries and classes that are loaded. For more information, see Java dump .","title":"Dumps, logs, and trace files"},{"location":"openj9_newuser/#tools","text":"OpenJ9 provides support for a number of monitoring and diagnostic tools that can be found in the Eclipse marketplace . Each tool provides a graphical user interface to help you visualize data and, in some cases, can provide tuning or debugging recommendations. Health Center: Provides real-time monitoring of running applications with minimal overhead over the network. You can monitor a whole range of operations including, class loading, CPU usage, GC heap and pause times, I/O activity, lock contention, method trace, native memory usage, profiling, and live threads. For more information, read the Health Center documentation . Garbage Collection Memory Vizualizer (GCMV): Plots GC and native memory data over time. You can view and save data as a report, raw log, tabulated data, or in graphical format. The tool helps to diagnose problems such as memory leaks with data presented in various visual formats for analysis. Tuning recommendations are also provided. For more information, read the GCMV documentation . Memory Analyzer: Examines the Java object heap to help find memory leaks or reduce memory consumption. Support is available for OpenJ9 via the DTFJ interface (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java). More information about Eclipse MAT can be found on the project website page . Interactive Diagnostic Data Explorer (IDDE): A GUI alternative to the OpenJ9 dump viewer , which can examine the contents of an OpenJ9 system dump. For more information, read the IDDE documentation . If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, the Java VisualVM utility is functionally similar to Health Center. Most of the other tools provided with HotSpot are not officially supported, but equivalent functionality is available in OpenJ9 through command-line options, dump agents, and AttachAPI.","title":"Tools"},{"location":"openj9_newuser/#interfaces","text":"OpenJ9 provides the following interfaces, which can be used for monitoring and diagnostic purposes: JVMTI : OpenJ9 supports the Java Virtual Machine Tool Interface (JVMTI) and provides extensions that allow JVMTI tools to obtain diagnostic information or trigger diagnostic operations in the VM. For more information about this interface, see Java Virtual Machine Tool Interface . DTFJ interface : The Diagnostic Tool Framework for Java (DTFJ) API allows custom applications to be written that can access a wide range of information in a system dump or a Java dump. DTFJ can be used with the Eclipse Memory Analyzer Toolkit (MAT) to examine the Java object heap for memory leaks and to reduce memory consumption. For more information about DTFJ, see Diagnostic Tool Framework for Java . java.lang.management API: OpenJ9 provides MXBean additions and extensions to this standard API, which enables you to use tools such as JConsole to monitor and manage your Java applications. For more information, see MBeans and MXBeans in the IBM\u00ae Knowledge Center. If you are familiar with using HotSpot as part of an Oracle JDK or OpenJDK, you might make use of certain com.sun.management interfaces. Although OpenJ9 implements some of these interfaces, a few are specific to the HotSpot VM. The following table indicates alternative classes or mechanisms that you can use for equivalent function in OpenJ9: Hotspot-specific classes Alternatives for OpenJ9 HotSpotDiagnosticMXBean OpenJ9DiagnosticsMXBean (for heap dumps) MissionControl Use Health Center MissionControlMXBean Use Health Center ThreadMXBean JvmCpuMonitorMXBean (for thread time) VMOption OpenJ9 Java dump (option -Xdump:java ) DiagnosticCommandMBean None Note: OpenJ9 implements the following com.sun.management interfaces: GarbageCollectorMXBean , GarbageCollectionNotificationInfo , GcInfo , OperatingSystemMXBean , UnixOperatingSystemMXBean .","title":"Interfaces"},{"location":"openj9_newuser/#other-differences","text":"This topic describes the differences between the HotSpot VM and the Eclipse OpenJ9 VM. Therefore, if you are currently using an OpenJDK with the default Hotspot VM and you want to switch to using an OpenJDK with the OpenJ9 VM, these are the only differences you might be concerned about. If however, you are using an Oracle JDK, you might want to learn about differences between other components that make up an Oracle JDK or an OpenJDK from the AdoptOpenJDK community. For more information, read the Migration guide .","title":"Other differences"},{"location":"openj9_support/","text":"Supported environments The Eclipse OpenJ9 project source code can be built against multiple JDK levels starting with JDK8, so the question of support has a more complicated answer than at OpenJDK. Our community is committed to supporting JDK levels as long as they are supported at the OpenJDK open source project with a significant user base. Currently, Eclipse OpenJ9 produces a new release every quarter that can build against all JDK levels currently supported by the OpenJDK community. We are committed to accepting problem reports when using Eclipse OpenJ9 against a supported OpenJDK level, with fixes being delivered in each release of Eclipse OpenJ9. In order to track the OpenJDK 6 month release cadence, OpenJ9 also produces two releases a year that support only a single JDK level. These releases will occur in March and September with the intention of supporting only the corresponding new OpenJDK feature release (ie: 11, 13, ...). The following table summarizes which JDK levels are expected to be supported by which Eclipse OpenJ9 releases, along with projected release dates. All future dates and support expectations are predictions that might change depending on how the OpenJDK and OpenJ9 projects evolve over time. To keep this table concise, some rows and columns will be removed over time. Eclipse OpenJ9 releases OpenJ9 release Release date JDK8 (LTS) JDK11 (LTS) JDK13 JDK14 v 0.12.0 January 2019 Yes Yes v 0.13.0 March 2019 No No v 0.14.0 April 2019 Yes Yes v 0.15.0 July 2019 Yes Yes v 0.16.0 September 2019 No No Yes (*2) v 0.17.0 October 2019 Yes Yes Yes v 0.18.0 January 2020 (*1) Yes Yes Yes v 0.19.0 March 2020 (*1) No No No Yes (*2) Notes: (*1): These OpenJ9 releases are expected, in line with our support statement. (*2): These OpenJ9 releases are the feature releases that only support the new OpenJDK release. For any issues or limitations of an Eclipse OpenJ9 release, read the release notes . Platform support The Eclipse OpenJ9 project is open to supporting any hardware/operating system platforms provided that we have community members available to maintain them. For practical reasons the Eclipse OpenJ9 JVM does not currently run on every platform. OpenJDK 8 Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK8 binaries are supported on the minimum operating system levels shown in the following tables: Linux\u00ae x32 x64 ppc64le Z31 Z64 Centos 6.9 Y Y Y N N Centos 7.4 Y Y Y N N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y Y Y RHEL 7.4 Y Y Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Y Y Ubuntu 16.04 Y Y Y N Y Ubuntu 18.04 Y Y Y N Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows\u00ae x32 x64 Windows 7 SP1 Y Y Windows 8 Y Y Windows 8.1 Y Y Windows 10 Y Y Windows Server 2012 Y Y Windows Server 2012 R2 Y Y Windows Server 2016 Y Y macOS\u00ae x64 OS X\u00ae 10.9.0+ Y AIX\u00ae ppc32 ppc64 AIX 7.1 TL4 Y Y AIX 7.2 Y Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level. OpenJDK 11 Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK11 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level. OpenJDK 13 Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK13 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level. Build environments The project build and test OpenJDK with OpenJ9 on a number of platforms. The operating system and compiler levels for the build systems are shown in the following tables. OpenJDK 8 Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER\u00ae LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z\u00ae 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 32-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 macOS x86 64-bit OSX 10.11 xcode/clang 4.6.3 and 7.2.1 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3 OpenJDK 11 Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3 OpenJDK 13 Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"Supported environments"},{"location":"openj9_support/#supported-environments","text":"The Eclipse OpenJ9 project source code can be built against multiple JDK levels starting with JDK8, so the question of support has a more complicated answer than at OpenJDK. Our community is committed to supporting JDK levels as long as they are supported at the OpenJDK open source project with a significant user base. Currently, Eclipse OpenJ9 produces a new release every quarter that can build against all JDK levels currently supported by the OpenJDK community. We are committed to accepting problem reports when using Eclipse OpenJ9 against a supported OpenJDK level, with fixes being delivered in each release of Eclipse OpenJ9. In order to track the OpenJDK 6 month release cadence, OpenJ9 also produces two releases a year that support only a single JDK level. These releases will occur in March and September with the intention of supporting only the corresponding new OpenJDK feature release (ie: 11, 13, ...). The following table summarizes which JDK levels are expected to be supported by which Eclipse OpenJ9 releases, along with projected release dates. All future dates and support expectations are predictions that might change depending on how the OpenJDK and OpenJ9 projects evolve over time. To keep this table concise, some rows and columns will be removed over time.","title":"Supported environments"},{"location":"openj9_support/#eclipse-openj9-releases","text":"OpenJ9 release Release date JDK8 (LTS) JDK11 (LTS) JDK13 JDK14 v 0.12.0 January 2019 Yes Yes v 0.13.0 March 2019 No No v 0.14.0 April 2019 Yes Yes v 0.15.0 July 2019 Yes Yes v 0.16.0 September 2019 No No Yes (*2) v 0.17.0 October 2019 Yes Yes Yes v 0.18.0 January 2020 (*1) Yes Yes Yes v 0.19.0 March 2020 (*1) No No No Yes (*2) Notes: (*1): These OpenJ9 releases are expected, in line with our support statement. (*2): These OpenJ9 releases are the feature releases that only support the new OpenJDK release. For any issues or limitations of an Eclipse OpenJ9 release, read the release notes .","title":"Eclipse OpenJ9 releases"},{"location":"openj9_support/#platform-support","text":"The Eclipse OpenJ9 project is open to supporting any hardware/operating system platforms provided that we have community members available to maintain them. For practical reasons the Eclipse OpenJ9 JVM does not currently run on every platform.","title":"Platform support"},{"location":"openj9_support/#openjdk-8","text":"Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK8 binaries are supported on the minimum operating system levels shown in the following tables: Linux\u00ae x32 x64 ppc64le Z31 Z64 Centos 6.9 Y Y Y N N Centos 7.4 Y Y Y N N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y Y Y RHEL 7.4 Y Y Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Y Y Ubuntu 16.04 Y Y Y N Y Ubuntu 18.04 Y Y Y N Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows\u00ae x32 x64 Windows 7 SP1 Y Y Windows 8 Y Y Windows 8.1 Y Y Windows 10 Y Y Windows Server 2012 Y Y Windows Server 2012 R2 Y Y Windows Server 2016 Y Y macOS\u00ae x64 OS X\u00ae 10.9.0+ Y AIX\u00ae ppc32 ppc64 AIX 7.1 TL4 Y Y AIX 7.2 Y Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level.","title":"OpenJDK 8"},{"location":"openj9_support/#openjdk-11","text":"Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK11 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level.","title":"OpenJDK 11"},{"location":"openj9_support/#openjdk-13","text":"Important: If you obtain pre-built binaries from AdoptOpenJDK.net , platform support might vary, depending on their build environment. Check the AdoptOpenJDK Platform support matrix . OpenJDK13 binaries are supported on the minimum operating system levels shown in the following tables: Linux x64 ppc64le Z64 Centos 6.9 Y Y N Centos 7.4 Y Y N Red Hat Enterprise Linux (RHEL) 6.9 Y Y Y RHEL 7.4 Y Y Y SUSE Linux Enterprise Server (SLES) 12 Y Y Y Ubuntu 16.04 Y Y Y Ubuntu 18.04 Y Y Y Note: Not all of these distributions are tested, but Linux distributions that have a minimum glibc version 2.12 are expected to function without problems. Windows x64 Windows 7 SP1 Y Windows 8 Y Windows 8.1 Y Windows 10 Y Windows Server 2012 Y Windows Server 2012 R2 Y Windows Server 2016 Y macOS x64 OS X 10.9.0+ Y AIX ppc64 AIX 7.1 TL4 Y AIX 7.2 Y When public support for an operating system version ends, OpenJ9 can no longer be supported on that level.","title":"OpenJDK 13"},{"location":"openj9_support/#build-environments","text":"The project build and test OpenJDK with OpenJ9 on a number of platforms. The operating system and compiler levels for the build systems are shown in the following tables.","title":"Build environments"},{"location":"openj9_support/#openjdk-8_1","text":"Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER\u00ae LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z\u00ae 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 32-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2010 SP1 macOS x86 64-bit OSX 10.11 xcode/clang 4.6.3 and 7.2.1 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"OpenJDK 8"},{"location":"openj9_support/#openjdk-11_1","text":"Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"OpenJDK 11"},{"location":"openj9_support/#openjdk-13_1","text":"Platform Operating system Compiler Linux x86 64-bit Ubuntu 16.04 gcc 7.3 Linux on POWER LE 64-bit Ubuntu 16.04 gcc 7.3 Linux on IBM Z 64-bit Ubuntu 16.04 gcc 7.4 Windows x86 64-bit Windows Server 2012 R2 Microsoft Visual Studio 2017 macOS x86 64-bit macOS 10.13.5 xcode/clang 9.4 AIX POWER BE 64-bit AIX 7.1 TL04 xlc/C++ 13.1.3","title":"OpenJDK 13"},{"location":"shrc/","text":"Class data sharing Sharing class data between JVMs improves start up performance and reduces memory footprint. Start up performance is improved by placing classes that an application needs when initializing into a shared classes cache. The next time the application runs, it takes much less time to start because the classes are already available. When you enable class data sharing, AOT compilation is also enabled by default, which dynamically compiles certain methods into AOT code at runtime. By using these features in combination, startup performance can be improved even further because the cached AOT code can be used to quickly enable native code performance for subsequent runs of your application. When class data sharing is enabled, OpenJ9 automatically creates a memory mapped file that stores and shares the classes in memory. The shared classes cache is updated dynamically; When an application loads new classes, the JVM automatically stores them in the cache without any user intervention. Memory footprint is reduced by sharing common classes between applications that run in separate Java VMs. Enabling class data sharing Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. If you want to change the default behaviour, use the -Xshareclasses option on the command line. For example: You can change the name and location of the default shared classes cache. You can enable messages about the default shared classes cache by using the default command line option without the silent suboption: -Xshareclasses:bootClassesOnly,nonFatal . Note: If you have multiple VMs and you do not change the default shared classes behavior, the VMs will share a single default cache, assuming that the VMs are from a single Java installation. If the VMs are from different Java installations, the cache might be deleted and recreated; for more information, see the following section about best practices. You can treat the default cache like any other shared classes cache, for example you can print statistics for it, change the soft maximum limit size, or delete it. You can enable class data sharing for non-bootstrap classes as well, by using -Xshareclasses without the bootClassesOnly suboption. You can also disable all class data sharing by using the none suboption. Best practices for using -Xshareclasses The -Xshareclasses option is highly configurable, allowing you to specify where to create the cache, how much space to allocate for AOT code and more. You can also set the cache size by using the -Xscmx option. When shared classes is enabled, it is good practice to specify some of the cache behavior: Set an application-specific cache name ( -Xshareclasses:name=<name> ). If a cache with the specified name doesn't already exist, a new cache is created. This avoids sharing your application cache with a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note: You cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. Set a specific cache directory ( -Xshareclasses:cacheDir=<directory> ). Set a cache directory that is specific to your application, to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory. Your application will be unaffected by a user running java -Xshareclasses:destroyAll . In addition, if you have VMs from different Java installations, of the same Java release and installed by the same user, each VM checks whether the existing default shared cache in the cache directory is from the same Java installation as the VM. If not, the VM deletes that shared cache, then creates a new one. Specifying a different cache directory for each Java installation avoids this situation. Ensure that the cache directory permissions are set appropriately ( -Xshareclasses:cacheDirPerm ). It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. Set the -Xshareclasses:nonfatal option. This option means that your application can start even if there is a problem opening or creating the shared cache, in which case, the VM might be able to start without class data sharing. Support for custom class loaders Classes are shared by the bootstrap class loader internally in the OpenJ9 VM. If you are using a custom class loader, you can use the Java Helper API to find and store classes in the shared class cache. For more information, see Using the Java Helper API . Cache utilities Several utilities are provided for managing active caches, which are invoked by specifying -Xshareclasses suboptions. These utilities control the following types of operations: Adjust the minimum and maximum amount of cache space reserved for AOT or JIT data. Adjust the soft maximum size of the cache. Create snapshots of a cache. Create a cache from a snapshot. Remove caches and cache snapshots. List all the compatible and incompatible caches and snapshots. For problem determination, invalidate and revalidate AOT methods that cause a failure in an application. For problem determination, provide information to analyze the contents of a shared classes cache. For more information, see -Xshareclasses . See also AOT compiler Class Sharing Diagnosing class data sharing problems","title":"Overview"},{"location":"shrc/#class-data-sharing","text":"Sharing class data between JVMs improves start up performance and reduces memory footprint. Start up performance is improved by placing classes that an application needs when initializing into a shared classes cache. The next time the application runs, it takes much less time to start because the classes are already available. When you enable class data sharing, AOT compilation is also enabled by default, which dynamically compiles certain methods into AOT code at runtime. By using these features in combination, startup performance can be improved even further because the cached AOT code can be used to quickly enable native code performance for subsequent runs of your application. When class data sharing is enabled, OpenJ9 automatically creates a memory mapped file that stores and shares the classes in memory. The shared classes cache is updated dynamically; When an application loads new classes, the JVM automatically stores them in the cache without any user intervention. Memory footprint is reduced by sharing common classes between applications that run in separate Java VMs.","title":"Class data sharing"},{"location":"shrc/#enabling-class-data-sharing","text":"Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. If you want to change the default behaviour, use the -Xshareclasses option on the command line. For example: You can change the name and location of the default shared classes cache. You can enable messages about the default shared classes cache by using the default command line option without the silent suboption: -Xshareclasses:bootClassesOnly,nonFatal . Note: If you have multiple VMs and you do not change the default shared classes behavior, the VMs will share a single default cache, assuming that the VMs are from a single Java installation. If the VMs are from different Java installations, the cache might be deleted and recreated; for more information, see the following section about best practices. You can treat the default cache like any other shared classes cache, for example you can print statistics for it, change the soft maximum limit size, or delete it. You can enable class data sharing for non-bootstrap classes as well, by using -Xshareclasses without the bootClassesOnly suboption. You can also disable all class data sharing by using the none suboption.","title":"Enabling class data sharing"},{"location":"shrc/#best-practices-for-using-xshareclasses","text":"The -Xshareclasses option is highly configurable, allowing you to specify where to create the cache, how much space to allocate for AOT code and more. You can also set the cache size by using the -Xscmx option. When shared classes is enabled, it is good practice to specify some of the cache behavior: Set an application-specific cache name ( -Xshareclasses:name=<name> ). If a cache with the specified name doesn't already exist, a new cache is created. This avoids sharing your application cache with a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note: You cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. Set a specific cache directory ( -Xshareclasses:cacheDir=<directory> ). Set a cache directory that is specific to your application, to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory. Your application will be unaffected by a user running java -Xshareclasses:destroyAll . In addition, if you have VMs from different Java installations, of the same Java release and installed by the same user, each VM checks whether the existing default shared cache in the cache directory is from the same Java installation as the VM. If not, the VM deletes that shared cache, then creates a new one. Specifying a different cache directory for each Java installation avoids this situation. Ensure that the cache directory permissions are set appropriately ( -Xshareclasses:cacheDirPerm ). It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. Set the -Xshareclasses:nonfatal option. This option means that your application can start even if there is a problem opening or creating the shared cache, in which case, the VM might be able to start without class data sharing.","title":"Best practices for using -Xshareclasses"},{"location":"shrc/#support-for-custom-class-loaders","text":"Classes are shared by the bootstrap class loader internally in the OpenJ9 VM. If you are using a custom class loader, you can use the Java Helper API to find and store classes in the shared class cache. For more information, see Using the Java Helper API .","title":"Support for custom class loaders"},{"location":"shrc/#cache-utilities","text":"Several utilities are provided for managing active caches, which are invoked by specifying -Xshareclasses suboptions. These utilities control the following types of operations: Adjust the minimum and maximum amount of cache space reserved for AOT or JIT data. Adjust the soft maximum size of the cache. Create snapshots of a cache. Create a cache from a snapshot. Remove caches and cache snapshots. List all the compatible and incompatible caches and snapshots. For problem determination, invalidate and revalidate AOT methods that cause a failure in an application. For problem determination, provide information to analyze the contents of a shared classes cache. For more information, see -Xshareclasses .","title":"Cache utilities"},{"location":"shrc/#see-also","text":"AOT compiler Class Sharing Diagnosing class data sharing problems","title":"See also"},{"location":"shrc_diag_util/","text":"Shared classes cache diagnostic utilities These utilities display information about the contents of a shared classes cache. Run the utilities by specifying them as suboptions of -Xshareclasses . The utilities run on the default cache unless you specify a cache by adding the name=<cache_name> suboption. printAllStats -Xshareclasses:printAllStats -Xshareclasses:printAllStats,name=<cache_name> Displays the contents of the cache in chronological order. You can use this output to see the history of updates that were made to the cache. For layered caches, some information is shown for the top layer cache only, and some is shown for all layers combined. To see information for the top layer cache only, use printTopLayerStats=all . Each entry in the output starts with a VM ID, so you can see which VM wrote the associated data. Here are example entries for various types of cache data, with explanations: Class paths This example shows one class path with 4 entries: 1: 0x2234FA6C CLASSPATH /myVM/Apps/application1.jar /myVM/Apps/application2.jar /myVM/Apps/application3.jar /myVM/Apps/application4.jar 1 : the ID of the VM that wrote this data. 0x2234FA6C : the address where this data is stored. CLASSPATH : the type of data that was written. ROMClasses This example shows an entry for a single ROMClass : 1: 0x2234F7DC ROMCLASS: java/lang/Runnable at 0x213684A8 Index 1 in class path 0x2234FA6C 1 : the ID of the VM that wrote this data. 0x2234F7DC : the address where the metadata about the class is stored. ROMCLASS : the type of data that was stored. java/lang/Runnable : the name of the class. 0x213684A8 : the address where the class was stored. Index 1 : the index in the class path where the class was loaded from. 0x2234FA6C : the address of the class path against which this class is stored. Stale classes are marked with !STALE! . Any partition or modification context that is used when the class is stored is also shown. AOT methods This example shows an entry for one AOT-compiled method: 1: 0x540FBA6A AOT: loadConvert for ROMClass java/util/Properties at 0x52345174 1 : the ID of the VM that wrote this data. 0x540FBA6A : the address where the data is stored. AOT : the type of data that was stored. loadConvert : the method for which AOT-compiled code is stored. java/util/Properties : the class that contains the method. 0x52345174 : the address of the class that contains the method. Stale methods are marked with !STALE! . URLs and tokens A Token is a string that is passed to the Java\u2122 SharedClassHelper API. The output for these data types has the same format as that for class paths, but with a single entry. Zip entry caches This example shows 4 separate entries for zip entry caches: 1: 0x042FE07C ZIPCACHE: luni-kernel.jar_347075_1272300300_1 Address: 0x042FE094 Size: 7898 1: 0x042FA878 ZIPCACHE: luni.jar_598904_1272300546_1 Address: 0x042FA890 Size: 14195 1: 0x042F71F8 ZIPCACHE: nio.jar_405359_1272300546_1 Address: 0x042F7210 Size: 13808 1: 0x042F6D58 ZIPCACHE: annotation.jar_13417_1272300554_1 Address: 0x042F6D70 Size: 1023 1 : the ID of the VM that wrote this data. 0x042FE07C : the address where the metadata for the zip entry cache is stored. ZIPCACHE : the type of data that was stored. luni-kernel.jar_347075_1272300300_1 : the name of the zip entry cache. 0x042FE094 : the address where the data is stored. 7898 : the size of the stored data, in bytes. JIT data Information about JIT data is shown in JITPROFILE and JITHINT entries. For example: 1: 0xD6290368 JITPROFILE: getKeyHash Signature: ()I Address: 0xD55118C0 for ROMClass java/util/Hashtable$Entry at 0xD5511640. 2: 0xD6283848 JITHINT: loadClass Signature: (Ljava/lang/String;)Ljava/lang/Class; Address: 0xD5558F98 for ROMClass com/ibm/oti/vm/BootstrapClassLoader at 0xD5558AE0. Startup hints Information about startup hints is shown in STARTUP HINTS KEY and STARTUP HINTS DETAIL . For example: 1: 0x000000002237C6E0 STARTUP HINTS KEY: -Xoptionsfile=jre\\bin\\compressedrefs\\options.default -Xlockword:mode=default -Xjcl:jclse29 -Dcom.ibm.oti.vm.bootstrap.library.path=jre\\bin\\compressedrefs;jre\\bin -Djava.home=jre -Djava.ext.dirs=jre\\lib\\ext -Duser.dir=bin -Djava.class.path=. -Dsun.java.launcher=SUN_STANDARD Address: 0x000000002237C700 Size: 96 STARTUP HINTS DETAIL Flags: 1 DATA1: 1677721 DATA2: 5033165 printStats -Xshareclasses:printStats -Xshareclasses:printStats,name=<cache_name> -Xshareclasses:printStats=<data_type1>[+<data_type2>][...],name=<cache_name> Displays summary information about the cache. For layered caches, -Xshareclasses:printStats shows some information for the top layer cache, and summary information (bytes and counts only) for all layers combined. To see information for the top layer cache only, use printTopLayerStats . You can request more detail about items of a specific data type that are stored in the shared cache by using printStats=<data_type> . Use the plus symbol (+) to separate the data types. For example, use printStats=romclass+url,name=myCache to see information about ROMClass and URL items in all the layer caches of the cache called Cache1 . The valid data types are as follows (case insensitive): help (displays the list of valid data types) all (equivalent to printAllStats ) classpath url token romclass rommethod aot jitprofile jithint zipcache stale startuphint Example output for a traditional cache (no cache layers: cache layer = 0 ), with summary information only: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr Cache contains only classes with line numbers base address = 0x00007F60B807A000 end address = 0x00007F60B905E000 allocation pointer = 0x00007F60B81BE3A8 cache layer = 0 cache size = 16776608 softmx bytes = 16776608 free bytes = 12740572 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 30440 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 189358 Class debug area % used = 14% ROMClass bytes = 1328040 AOT bytes = 98404 JIT data bytes = 168 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 2 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 24% full Cache is accessible to current user = true Example output for a cache with 2 layers ( cache layer = 1 ), with summary information only: Current statistics for top layer of cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007FCAB2766000 end address = 0x00007FCAB374A000 allocation pointer = 0x00007FCAB2766000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% Cache is 8% full Cache is accessible to current user = true --------------------------------------------------------- Current statistics for all layers of cache \"Cache1\": ROMClass bytes = 1328040 AOT bytes = 128924 JIT data bytes = 812 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 20 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% The Cache created with section indicates the options that were used when the cache was created. BCI Enabled relates to the -Xshareclasses:enableBCI option (enabled by default) and Restrict Classpaths relates to the -Xshareclasses:restrictClasspaths option. Feature = cr indicates that the cache is a 64-bit compressed references cache, as described in Creating, populating, monitoring, and deleting a cache . Line number information for classes in the cache is then shown with one of the following messages: Cache contains only classes with line numbers : VM line number processing was enabled for all the classes that were stored in this shared cache (the -Xlinenumbers option is enabled by default). All classes in the cache contain line numbers if the original classes contained line number data. Cache contains only classes without line numbers : The -Xnolinenumbers option was used to disable VM line number processing for all the classes that were stored in this shared cache, so none of the classes contain line numbers. Cache contains classes with line numbers and classes without line numbers : VM line number processing was enabled for some classes and disabled for others (the -Xnolinenumbers option was specified when some of the classes were added to the cache). The following summary data is displayed: baseAddress and endAddress The boundary addresses of the shared memory area that contains the classes. allocation pointer The address where ROMClass data is currently being allocated in the cache. cache layer The layer number that the cache stats relate to. cache size and free bytes cache size shows the total size of the shared memory area in bytes, and free bytes shows the free bytes that remain. softmx bytes The soft maximum size for the cache. For more information, see -Xscmx . ROMClass bytes The number of bytes of class data in the cache. AOT bytes The number of bytes of AOT-compiled code in the cache. Reserved space for AOT bytes The number of bytes reserved for AOT-compiled code in the cache. Maximum space for AOT bytes The maximum number of bytes of AOT-compiled code that can be stored in the cache. JIT data bytes The number of bytes of JIT-related data stored in the cache. Reserved space for JIT data bytes The number of bytes reserved for JIT-related data in the cache. Maximum space for JIT data bytes The maximum number of bytes of JIT-related data that can be stored in the cache. Zip cache bytes The number of zip entry cache bytes stored in the cache. Startup hint bytes The number of bytes of data stored to describe startup hints. Data bytes The number of bytes of non-class data stored by the VM. Metadata bytes The number of bytes of data stored to describe the cached classes. Note: This field is available only in the top layer cache output or when a cache is not layered. Metadata % used The proportion of metadata bytes to class bytes, which indicates how efficiently cache space is being used. The value shown does consider the Class debug area size . Class debug area size The size in bytes of the Class Debug Area. This area is reserved to store LineNumberTable and LocalVariableTable class attribute information. Class debug area bytes used The size in bytes of the Class Debug Area that contains data. Class debug area % used The percentage of the Class Debug Area that contains data. ROMClasses The number of classes in the cache. The cache stores ROMClasses (the class data itself, which is read-only) and information about the location from which the classes were loaded. This information is stored in different ways, depending on the Java SharedClassHelper API that was used to store the classes. For more information, see Using the Java Helper API . AOT methods Optionally, ROMClass methods can be compiled and the AOT code stored in the cache. The AOT methods information shows the total number of methods in the cache that have AOT code compiled for them. This number includes AOT code for stale classes. Classpaths , URLs , and Tokens The number of class paths, URLs, and tokens in the cache. Classes stored from a SharedClassURLClasspathHelper are stored with a Classpath. Classes stored using a SharedClassURLHelper are stored with a URL. Classes stored using a SharedClassTokenHelper are stored with a Token. Most class loaders, including the bootstrap and application class loaders, use a SharedClassURLClasspathHelper . The result is that it is most common to see class paths in the cache. The number of Classpaths, URLs, and Tokens stored is determined by a number of factors. For example, every time an element of a Classpath is updated, such as when a .jar file is rebuilt, a new Classpath is added to the cache. Additionally, if partitions or modification contexts are used, they are associated with the Classpath, URL, or Token. A Classpath, URL, or Token is stored for each unique combination of partition and modification context. For more information, see SharedClassHelper partitions and Modification contexts . Zip caches The number of .zip files that have entry caches stored in the shared cache. Startup hints The number of startup hints stored in the cache. There can be a startup hint for each unique set of command line options used to start the JVM. Stale classes The number of classes that have been marked as \"potentially stale\" by the cache code, because of a VM or Java application update. See Understanding dynamic updates . % Stale classes The percentage of classes in the cache that are stale. Cache is XXX% full The percentage of the cache that is currently used. This line is displayed only if the soft maximum size is not set. This value is calculated as follows: % Full = (('Cache Size' - 'Free Bytes') * 100) / ('Cache Size') Cache is XXX% soft full The percentage of the soft maximum size that is currently used. This line is displayed only if the soft maximum size is set. The free bytes in the cache statistics means the free bytes within the soft maximum limit. This value is calculated as follows: % soft Full = (('Soft max bytes' - 'Free Bytes') * 100) / ('Soft max bytes') For more information about the soft maximum size, see -Xscmx . Cache is accessible to current user Whether the current user can access the cache. printTopLayerStats Use this utility with a layered cache. This utility works in the same way as printStats . By default, this utility shows information for the top layer cache. To view statistics for a specific layer, use the layer=<number> option. For example, to show statistics for the second layer in a 2-layer cache, run printTopLayerStats,layer=1 . Example output: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007F234C054000 end address = 0x00007F234D038000 allocation pointer = 0x00007F234C054000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 792 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% ROMClass bytes = 0 AOT bytes = 30520 JIT data bytes = 644 Zip cache bytes = 0 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 0 # AOT Methods = 18 # Classpaths = 0 # URLs = 0 # Tokens = 0 # Zip caches = 0 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 8% full Cache is accessible to current user = true","title":"Diagnostic cache utilities"},{"location":"shrc_diag_util/#shared-classes-cache-diagnostic-utilities","text":"These utilities display information about the contents of a shared classes cache. Run the utilities by specifying them as suboptions of -Xshareclasses . The utilities run on the default cache unless you specify a cache by adding the name=<cache_name> suboption.","title":"Shared classes cache diagnostic utilities"},{"location":"shrc_diag_util/#printallstats","text":"-Xshareclasses:printAllStats -Xshareclasses:printAllStats,name=<cache_name> Displays the contents of the cache in chronological order. You can use this output to see the history of updates that were made to the cache. For layered caches, some information is shown for the top layer cache only, and some is shown for all layers combined. To see information for the top layer cache only, use printTopLayerStats=all . Each entry in the output starts with a VM ID, so you can see which VM wrote the associated data. Here are example entries for various types of cache data, with explanations:","title":"printAllStats"},{"location":"shrc_diag_util/#class-paths","text":"This example shows one class path with 4 entries: 1: 0x2234FA6C CLASSPATH /myVM/Apps/application1.jar /myVM/Apps/application2.jar /myVM/Apps/application3.jar /myVM/Apps/application4.jar 1 : the ID of the VM that wrote this data. 0x2234FA6C : the address where this data is stored. CLASSPATH : the type of data that was written.","title":"Class paths"},{"location":"shrc_diag_util/#romclasses","text":"This example shows an entry for a single ROMClass : 1: 0x2234F7DC ROMCLASS: java/lang/Runnable at 0x213684A8 Index 1 in class path 0x2234FA6C 1 : the ID of the VM that wrote this data. 0x2234F7DC : the address where the metadata about the class is stored. ROMCLASS : the type of data that was stored. java/lang/Runnable : the name of the class. 0x213684A8 : the address where the class was stored. Index 1 : the index in the class path where the class was loaded from. 0x2234FA6C : the address of the class path against which this class is stored. Stale classes are marked with !STALE! . Any partition or modification context that is used when the class is stored is also shown.","title":"ROMClasses"},{"location":"shrc_diag_util/#aot-methods","text":"This example shows an entry for one AOT-compiled method: 1: 0x540FBA6A AOT: loadConvert for ROMClass java/util/Properties at 0x52345174 1 : the ID of the VM that wrote this data. 0x540FBA6A : the address where the data is stored. AOT : the type of data that was stored. loadConvert : the method for which AOT-compiled code is stored. java/util/Properties : the class that contains the method. 0x52345174 : the address of the class that contains the method. Stale methods are marked with !STALE! .","title":"AOT methods"},{"location":"shrc_diag_util/#urls-and-tokens","text":"A Token is a string that is passed to the Java\u2122 SharedClassHelper API. The output for these data types has the same format as that for class paths, but with a single entry.","title":"URLs and tokens"},{"location":"shrc_diag_util/#zip-entry-caches","text":"This example shows 4 separate entries for zip entry caches: 1: 0x042FE07C ZIPCACHE: luni-kernel.jar_347075_1272300300_1 Address: 0x042FE094 Size: 7898 1: 0x042FA878 ZIPCACHE: luni.jar_598904_1272300546_1 Address: 0x042FA890 Size: 14195 1: 0x042F71F8 ZIPCACHE: nio.jar_405359_1272300546_1 Address: 0x042F7210 Size: 13808 1: 0x042F6D58 ZIPCACHE: annotation.jar_13417_1272300554_1 Address: 0x042F6D70 Size: 1023 1 : the ID of the VM that wrote this data. 0x042FE07C : the address where the metadata for the zip entry cache is stored. ZIPCACHE : the type of data that was stored. luni-kernel.jar_347075_1272300300_1 : the name of the zip entry cache. 0x042FE094 : the address where the data is stored. 7898 : the size of the stored data, in bytes.","title":"Zip entry caches"},{"location":"shrc_diag_util/#jit-data","text":"Information about JIT data is shown in JITPROFILE and JITHINT entries. For example: 1: 0xD6290368 JITPROFILE: getKeyHash Signature: ()I Address: 0xD55118C0 for ROMClass java/util/Hashtable$Entry at 0xD5511640. 2: 0xD6283848 JITHINT: loadClass Signature: (Ljava/lang/String;)Ljava/lang/Class; Address: 0xD5558F98 for ROMClass com/ibm/oti/vm/BootstrapClassLoader at 0xD5558AE0.","title":"JIT data"},{"location":"shrc_diag_util/#startup-hints","text":"Information about startup hints is shown in STARTUP HINTS KEY and STARTUP HINTS DETAIL . For example: 1: 0x000000002237C6E0 STARTUP HINTS KEY: -Xoptionsfile=jre\\bin\\compressedrefs\\options.default -Xlockword:mode=default -Xjcl:jclse29 -Dcom.ibm.oti.vm.bootstrap.library.path=jre\\bin\\compressedrefs;jre\\bin -Djava.home=jre -Djava.ext.dirs=jre\\lib\\ext -Duser.dir=bin -Djava.class.path=. -Dsun.java.launcher=SUN_STANDARD Address: 0x000000002237C700 Size: 96 STARTUP HINTS DETAIL Flags: 1 DATA1: 1677721 DATA2: 5033165","title":"Startup hints"},{"location":"shrc_diag_util/#printstats","text":"-Xshareclasses:printStats -Xshareclasses:printStats,name=<cache_name> -Xshareclasses:printStats=<data_type1>[+<data_type2>][...],name=<cache_name> Displays summary information about the cache. For layered caches, -Xshareclasses:printStats shows some information for the top layer cache, and summary information (bytes and counts only) for all layers combined. To see information for the top layer cache only, use printTopLayerStats . You can request more detail about items of a specific data type that are stored in the shared cache by using printStats=<data_type> . Use the plus symbol (+) to separate the data types. For example, use printStats=romclass+url,name=myCache to see information about ROMClass and URL items in all the layer caches of the cache called Cache1 . The valid data types are as follows (case insensitive): help (displays the list of valid data types) all (equivalent to printAllStats ) classpath url token romclass rommethod aot jitprofile jithint zipcache stale startuphint Example output for a traditional cache (no cache layers: cache layer = 0 ), with summary information only: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr Cache contains only classes with line numbers base address = 0x00007F60B807A000 end address = 0x00007F60B905E000 allocation pointer = 0x00007F60B81BE3A8 cache layer = 0 cache size = 16776608 softmx bytes = 16776608 free bytes = 12740572 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 30440 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 189358 Class debug area % used = 14% ROMClass bytes = 1328040 AOT bytes = 98404 JIT data bytes = 168 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 2 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 24% full Cache is accessible to current user = true Example output for a cache with 2 layers ( cache layer = 1 ), with summary information only: Current statistics for top layer of cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007FCAB2766000 end address = 0x00007FCAB374A000 allocation pointer = 0x00007FCAB2766000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% Cache is 8% full Cache is accessible to current user = true --------------------------------------------------------- Current statistics for all layers of cache \"Cache1\": ROMClass bytes = 1328040 AOT bytes = 128924 JIT data bytes = 812 Zip cache bytes = 1133704 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 452 # AOT Methods = 20 # Classpaths = 1 # URLs = 0 # Tokens = 0 # Zip caches = 21 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% The Cache created with section indicates the options that were used when the cache was created. BCI Enabled relates to the -Xshareclasses:enableBCI option (enabled by default) and Restrict Classpaths relates to the -Xshareclasses:restrictClasspaths option. Feature = cr indicates that the cache is a 64-bit compressed references cache, as described in Creating, populating, monitoring, and deleting a cache . Line number information for classes in the cache is then shown with one of the following messages: Cache contains only classes with line numbers : VM line number processing was enabled for all the classes that were stored in this shared cache (the -Xlinenumbers option is enabled by default). All classes in the cache contain line numbers if the original classes contained line number data. Cache contains only classes without line numbers : The -Xnolinenumbers option was used to disable VM line number processing for all the classes that were stored in this shared cache, so none of the classes contain line numbers. Cache contains classes with line numbers and classes without line numbers : VM line number processing was enabled for some classes and disabled for others (the -Xnolinenumbers option was specified when some of the classes were added to the cache). The following summary data is displayed:","title":"printStats"},{"location":"shrc_diag_util/#baseaddress-and-endaddress","text":"The boundary addresses of the shared memory area that contains the classes.","title":"baseAddress and endAddress"},{"location":"shrc_diag_util/#allocation-pointer","text":"The address where ROMClass data is currently being allocated in the cache.","title":"allocation pointer"},{"location":"shrc_diag_util/#cache-layer","text":"The layer number that the cache stats relate to.","title":"cache layer"},{"location":"shrc_diag_util/#cache-size-and-free-bytes","text":"cache size shows the total size of the shared memory area in bytes, and free bytes shows the free bytes that remain.","title":"cache size and free bytes"},{"location":"shrc_diag_util/#softmx-bytes","text":"The soft maximum size for the cache. For more information, see -Xscmx .","title":"softmx bytes"},{"location":"shrc_diag_util/#romclass-bytes","text":"The number of bytes of class data in the cache.","title":"ROMClass bytes"},{"location":"shrc_diag_util/#aot-bytes","text":"The number of bytes of AOT-compiled code in the cache.","title":"AOT bytes"},{"location":"shrc_diag_util/#reserved-space-for-aot-bytes","text":"The number of bytes reserved for AOT-compiled code in the cache.","title":"Reserved space for AOT bytes"},{"location":"shrc_diag_util/#maximum-space-for-aot-bytes","text":"The maximum number of bytes of AOT-compiled code that can be stored in the cache.","title":"Maximum space for AOT bytes"},{"location":"shrc_diag_util/#jit-data-bytes","text":"The number of bytes of JIT-related data stored in the cache.","title":"JIT data bytes"},{"location":"shrc_diag_util/#reserved-space-for-jit-data-bytes","text":"The number of bytes reserved for JIT-related data in the cache.","title":"Reserved space for JIT data bytes"},{"location":"shrc_diag_util/#maximum-space-for-jit-data-bytes","text":"The maximum number of bytes of JIT-related data that can be stored in the cache.","title":"Maximum space for JIT data bytes"},{"location":"shrc_diag_util/#zip-cache-bytes","text":"The number of zip entry cache bytes stored in the cache.","title":"Zip cache bytes"},{"location":"shrc_diag_util/#startup-hint-bytes","text":"The number of bytes of data stored to describe startup hints.","title":"Startup hint bytes"},{"location":"shrc_diag_util/#data-bytes","text":"The number of bytes of non-class data stored by the VM.","title":"Data bytes"},{"location":"shrc_diag_util/#metadata-bytes","text":"The number of bytes of data stored to describe the cached classes. Note: This field is available only in the top layer cache output or when a cache is not layered.","title":"Metadata bytes"},{"location":"shrc_diag_util/#metadata-used","text":"The proportion of metadata bytes to class bytes, which indicates how efficiently cache space is being used. The value shown does consider the Class debug area size .","title":"Metadata % used"},{"location":"shrc_diag_util/#class-debug-area-size","text":"The size in bytes of the Class Debug Area. This area is reserved to store LineNumberTable and LocalVariableTable class attribute information.","title":"Class debug area size"},{"location":"shrc_diag_util/#class-debug-area-bytes-used","text":"The size in bytes of the Class Debug Area that contains data.","title":"Class debug area bytes used"},{"location":"shrc_diag_util/#class-debug-area-used","text":"The percentage of the Class Debug Area that contains data.","title":"Class debug area % used"},{"location":"shrc_diag_util/#romclasses_1","text":"The number of classes in the cache. The cache stores ROMClasses (the class data itself, which is read-only) and information about the location from which the classes were loaded. This information is stored in different ways, depending on the Java SharedClassHelper API that was used to store the classes. For more information, see Using the Java Helper API .","title":"ROMClasses"},{"location":"shrc_diag_util/#aot-methods_1","text":"Optionally, ROMClass methods can be compiled and the AOT code stored in the cache. The AOT methods information shows the total number of methods in the cache that have AOT code compiled for them. This number includes AOT code for stale classes.","title":"AOT methods"},{"location":"shrc_diag_util/#classpaths-urls-and-tokens","text":"The number of class paths, URLs, and tokens in the cache. Classes stored from a SharedClassURLClasspathHelper are stored with a Classpath. Classes stored using a SharedClassURLHelper are stored with a URL. Classes stored using a SharedClassTokenHelper are stored with a Token. Most class loaders, including the bootstrap and application class loaders, use a SharedClassURLClasspathHelper . The result is that it is most common to see class paths in the cache. The number of Classpaths, URLs, and Tokens stored is determined by a number of factors. For example, every time an element of a Classpath is updated, such as when a .jar file is rebuilt, a new Classpath is added to the cache. Additionally, if partitions or modification contexts are used, they are associated with the Classpath, URL, or Token. A Classpath, URL, or Token is stored for each unique combination of partition and modification context. For more information, see SharedClassHelper partitions and Modification contexts .","title":"Classpaths, URLs, and Tokens"},{"location":"shrc_diag_util/#zip-caches","text":"The number of .zip files that have entry caches stored in the shared cache.","title":"Zip caches"},{"location":"shrc_diag_util/#startup-hints_1","text":"The number of startup hints stored in the cache. There can be a startup hint for each unique set of command line options used to start the JVM.","title":"Startup hints"},{"location":"shrc_diag_util/#stale-classes","text":"The number of classes that have been marked as \"potentially stale\" by the cache code, because of a VM or Java application update. See Understanding dynamic updates .","title":"Stale classes"},{"location":"shrc_diag_util/#stale-classes_1","text":"The percentage of classes in the cache that are stale.","title":"% Stale classes"},{"location":"shrc_diag_util/#cache-is-xxx-full","text":"The percentage of the cache that is currently used. This line is displayed only if the soft maximum size is not set. This value is calculated as follows: % Full = (('Cache Size' - 'Free Bytes') * 100) / ('Cache Size')","title":"Cache is XXX% full"},{"location":"shrc_diag_util/#cache-is-xxx-soft-full","text":"The percentage of the soft maximum size that is currently used. This line is displayed only if the soft maximum size is set. The free bytes in the cache statistics means the free bytes within the soft maximum limit. This value is calculated as follows: % soft Full = (('Soft max bytes' - 'Free Bytes') * 100) / ('Soft max bytes') For more information about the soft maximum size, see -Xscmx .","title":"Cache is XXX% soft full"},{"location":"shrc_diag_util/#cache-is-accessible-to-current-user","text":"Whether the current user can access the cache.","title":"Cache is accessible to current user"},{"location":"shrc_diag_util/#printtoplayerstats","text":"Use this utility with a layered cache. This utility works in the same way as printStats . By default, this utility shows information for the top layer cache. To view statistics for a specific layer, use the layer=<number> option. For example, to show statistics for the second layer in a 2-layer cache, run printTopLayerStats,layer=1 . Example output: Current statistics for cache \"Cache1\": Cache created with: -Xnolinenumbers = false BCI Enabled = true Restrict Classpaths = false Feature = cr base address = 0x00007F234C054000 end address = 0x00007F234D038000 allocation pointer = 0x00007F234C054000 cache layer = 1 cache size = 16776608 softmx bytes = 16776608 free bytes = 15299372 Reserved space for AOT bytes = -1 Maximum space for AOT bytes = -1 Reserved space for JIT data bytes = -1 Maximum space for JIT data bytes = -1 Metadata bytes = 792 Metadata % used = 0% Class debug area size = 1331200 Class debug area used bytes = 0 Class debug area % used = 0% ROMClass bytes = 0 AOT bytes = 30520 JIT data bytes = 644 Zip cache bytes = 0 Startup hint bytes = 0 Data bytes = 114080 # ROMClasses = 0 # AOT Methods = 18 # Classpaths = 0 # URLs = 0 # Tokens = 0 # Zip caches = 0 # Startup hints = 0 # Stale classes = 0 % Stale classes = 0% Cache is 8% full Cache is accessible to current user = true","title":"printTopLayerStats"},{"location":"tool_builder/","text":"Option builder tools You can modify many of the command-line options by specifying a number of parameters. Several of the options have many available parameters that you can combine in numerous ways to achieve the effect you want. Tools are available for the following options to help you select these parameters correctly, achieve the correct combinations, and avoid conflicts: -Xdump -Xtrace","title":"Option builder"},{"location":"tool_builder/#option-builder-tools","text":"You can modify many of the command-line options by specifying a number of parameters. Several of the options have many available parameters that you can combine in numerous ways to achieve the effect you want. Tools are available for the following options to help you select these parameters correctly, achieve the correct combinations, and avoid conflicts: -Xdump -Xtrace","title":"Option builder tools"},{"location":"tool_jcmd/","text":"Java diagnostic command ( jcmd ) tool Use the jcmd tool to run diagnostic commands on a specified VM. Note: Running diagnostic commands can significantly affect the performance of the target VM. The command syntax is as follows: jcmd [<options>] [<vmid> <arguments>] Where: The available <options> are: -J : supplies arguments to the Java VM that is running the jcmd command. You can use multiple -J options, for example: jcmd -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -h : prints the jcmd help <vmid> is the Attach API virtual machine identifier for the Java\u2122 VM process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. You can use the jps command to find the VMID. The available arguments are: help : shows the diagnostic commands that are available for this VM. This list of commands can vary between VMs. help <command> : shows help information for the specified diagnostic command <command> [<command_arguments>] : runs the specified diagnostic command, with optional command arguments Examples: jcmd 31452 Thread.print jcmd 31452 help Dump.heap jcmd 31452 Dump.heap myHeapDump Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For information about the differences between these two implementations, see Switching to OpenJ9 . The tool uses the Attach API, and has the following limitations: Displays information only for local processes that are owned by the current user, due to security considerations. Displays information for OpenJ9 Java processes only Does not show information for processes whose Attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java command (jcmd) tool"},{"location":"tool_jcmd/#java-diagnostic-command-jcmd-tool","text":"Use the jcmd tool to run diagnostic commands on a specified VM. Note: Running diagnostic commands can significantly affect the performance of the target VM. The command syntax is as follows: jcmd [<options>] [<vmid> <arguments>] Where: The available <options> are: -J : supplies arguments to the Java VM that is running the jcmd command. You can use multiple -J options, for example: jcmd -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -h : prints the jcmd help <vmid> is the Attach API virtual machine identifier for the Java\u2122 VM process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. You can use the jps command to find the VMID. The available arguments are: help : shows the diagnostic commands that are available for this VM. This list of commands can vary between VMs. help <command> : shows help information for the specified diagnostic command <command> [<command_arguments>] : runs the specified diagnostic command, with optional command arguments Examples: jcmd 31452 Thread.print jcmd 31452 help Dump.heap jcmd 31452 Dump.heap myHeapDump Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For information about the differences between these two implementations, see Switching to OpenJ9 . The tool uses the Attach API, and has the following limitations: Displays information only for local processes that are owned by the current user, due to security considerations. Displays information for OpenJ9 Java processes only Does not show information for processes whose Attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java diagnostic command (jcmd) tool"},{"location":"tool_jdmpview/","text":"Dump viewer ( jdmpview ) The dump viewer is a command-line tool that allows you to examine the contents of system dumps produced from the OpenJ9 VM. The dump viewer allows you to view both Java\u2122 and native information from the time the dump was produced. For long running tasks, the dump viewer can also be run in batch mode. The dump viewer is useful for diagnosing OutOfMemoryError exceptions in Java\u2122 applications. For problems like general protection faults (GPF), system abends, and SIGSEVs, a system debugger such as gdb (Linux) provides more information. Syntax Starting the dump viewer jdmpview (-core <core file> | -zip <zip file>) [-notemp] Input option Explanation -core <core file> Specifies a dump file. -zip <zip file> Specifies a compressed file containing the core file and associated XML file (produced by the dump extractor ( jextract ) tool on AIX\u00ae and Linux\u2122 systems). -notemp By default, when you specify a file by using the -zip option, the contents are extracted to a temporary directory before processing. Use the -notemp option to prevent this extraction step, and run all subsequent commands in memory. Note: The -core option can be used with the -zip option to specify the core and XML files in the compressed file. Without these options, jdmpview shows multiple contexts, one for each source file that it identified in the compressed file. On z/OS\u00ae, you can copy the dump to an HFS file and supply that as input to jdmpview , or you can supply a fully qualified MVS\u2122 data set name. For example: > jdmpview -core USER1.JVM.TDUMP.SSHD6.D070430.T092211 DTFJView version 4.28.3, using DTFJ version 1.11.28004 Loading image from DTFJ... MVS data set names may contain the dollar sign ($). Names that contain a dollar sign must be enclosed by single quotation marks ('). For example: > jdmpview -core 'USER1.JVM.$TDUMP.SSH$D7.D141211.T045506' After jdmpview processes the dump files, a session starts, showing this message: For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" > If you run the jdmpview tool on a compressed file that contains multiple dumps, the tool detects and shows all the dump files, whether these are system dumps, Java dumps, or heap dumps. Because of this behavior, more than one context might be displayed when you start jdmpview . To switch context, type context <n> , where <n> is the context value for the dump you want to investigate. On z/OS, a system dump can contain multiple address spaces and an address space can contain multiple VM instances. In this case, the context allows you to select the address space and VM instance within the dump file. The following z/OS example shows address spaces ( ASID ), with two JVMs occupying address space 0x73 (context 5 and 6). The current context is 5 ( CTX:5> ), shown with an asterisk. To view the JVM in context 6, you can switch by specifying context 6 . CTX:5> context Available contexts (* = currently selected context) : 0 : ASID: 0x1 : No JRE : No JRE 1 : ASID: 0x3 : No JRE : No JRE 2 : ASID: 0x4 : No JRE : No JRE 3 : ASID: 0x6 : No JRE : No JRE 4 : ASID: 0x7 : No JRE : No JRE *5 : ASID: 0x73 EDB: 0x83d2053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 6 : ASID: 0x73 EDB: 0x8004053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 7 : ASID: 0x73 EDB: 0x4a7bd9e8 : No JRE 8 : ASID: 0xffff : No JRE : No JRE If you are using jdmpview to view Java dumps and heap dumps, some options do not produce any output. For example, a heap dump doesn't contain the information requested by the info system command, but does contain information requested by the info class command. If you are viewing a dump where there are a large number of objects on the heap, you can speed up the performance of jdmpview by ensuring that your system has enough memory available and does not need to page memory to disk. To achieve this, start jdmpview with a larger heap size by specifying the -Xmx option. Use the -J option to pass the -Xmx command line option to the JVM. For example: jdmpview -J-Xmx<n> -core <core file> The options available to the dump viewer session are shown under Session parameters Starting in batch mode For long running or routine jobs, jdmpview can be used in batch mode. You can run a single command without specifying a command file by appending the command to the end of the jdmpview command line. For example: jdmpview -core mycore.dmp info class When specifying jdmpview commands that accept a wildcard parameter, you must replace the wildcard symbol with ALL to prevent the shell interpreting the wildcard symbol. For example, in interactive mode, the command info thread * must be specified in the following way: jdmpview -core mycore.dmp info thread ALL Batch mode is controlled with the following command line options: Option Explanation -cmdfile <path to command file> A file that contains a series of jdmpview commands, which are read and run sequentially. -charset <character set name> The character set for the commands specified in -cmdfile (name must be a supported charset as defined in java.nio.charset.Charset. For example, US-ASCII) -outfile <path to output file> The file to record any output generated by commands. -overwrite If the file specified in -outfile exists, this option overwrites the file. -append If the file specified in -outfile exists, new output messages are appended to the end of that file. The -append and -overwrite options cannot be used at the same time. The command file can have empty lines that contain spaces, or comment lines that start with // or #. These lines are ignored by jdmpview. Example command file: // commands.txt info system info proc To run jdmpview in batch mode, using this command file, specify: jdmpview -outfile out.txt [-overwrite|-append] -cmdfile commands.txt -core <path to core file> When the output file exists, you need to specify either the -overwrite option or the -append option. If you do not, an error message is generated. Processing output You can redirect command output to a file, or pipe the command output to another command. To redirect jdmpview command output to a file, use one of the following formats: command > <target_file> If the target file exists, this redirection overwrites the content within it. command >> <target_file> If the target file exists, this redirection appends the output to it. Where <target_file> is the file name, which can include the full path to the file. To pipe jdmpview command output to another command, use the vertical bar (|) character. For example: command | grep string You can chain more than two commands together by using multiple vertical bar characters. The following commands can be used to interrogate the output: charsFrom charsTo grep tokens Using CharsFrom Use the charsFrom command after the vertical bar character to exclude all characters that come before a specified pattern in a resulting line. charsFrom <options> pattern Where <options> : -e or -exclude : Exclude the matched pattern from the resulting line. By default, the matched pattern is included in the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays resulting lines that contain the pattern jre , and trims each line to exclude all characters that come before this pattern: > info mod | charsFrom jre jre/lib/ppc64/libzip.so @ 0x0, sections: jre/lib/ppc64/libdbgwrapper80.so @ 0x0, sections: jre/lib/ppc64/libverify.so @ 0x0, sections: jre/lib/ppc64/libjava.so @ 0x0, sections: jre/lib/ppc64/compressedrefs/libjclse7b_28.so @ 0x0, sections: Using CharsTo Use the CharsTo command after the vertical bar character to include the characters in a resulting line until a specific pattern is found. charsTo <options> pattern Where <options> : -include : Include the matched pattern in the resulting line. By default, the matched pattern is excluded from the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays lines that contain the pattern \"@\", and trims each line to exclude all characters from \"@\" onwards: > info mod | charsTo @ bin/java /usr/lib64/gconv/UTF-16.so /test/sdk/lib/ppc64le/libnet.so /test/sdk/lib/ppc64le/libnio.so /test/sdk/lib/ppc64le/libzip.so /test/sdk/lib/ppc64le/libjsig.so libjsig.so You can also use charsFrom and charsTo together, separated by a vertical bar character. For example, the following command displays lines that contain the pattern \"lib\", and trims each line to exclude all characters that come before this pattern, as well as all characters from the pattern @ : > info mod | charsFrom lib | charsTo @ lib/ppc64le/libzip.so lib/ppc64le/libjsig.so lib/ppc64le/libverify.so lib/ppc64le/libjava.so lib/ppc64le/compressedrefs/libj9jit29.so Note: The line will not be displayed if the charsFrom and charsTo are used together, but only one of the patterns are matched in a line. Furthermore, the line will not be displayed if both patterns are matched in a line, but the charsTo pattern appears before, and not after, the charsFrom pattern. Using grep Use the grep command after the vertical bar character to show which lines match a specified pattern. grep <options> pattern Where <options> : -i : Ignore case. -r , -G , or --regex : Use a regular expression as defined in the Java documentation of the java.utils.regex.Pattern class. -b or --block : Show blocks of lines where at least one of the lines matches the pattern. Blocks of lines are separated by empty lines. -A <NUM> or +<NUM> : Show at most <NUM> lines after the matching line. For example grep -A 2 pattern or grep +2 pattern. -B <NUM> or -<NUM> : Show at most <NUM> lines before the matching line. -C <NUM> or +-<NUM> : Show at most <NUM> lines before and after the matching line. -v or --invert-match : Use with the grep command to show lines that do not match the pattern. These options are equivalent to the grep- command. -F or --fixed-strings : Do not treat the asterisk (*) as a wildcard character. Use these options with the -r , -G , or --regex options. Pattern rules: An asterisk (*) in a pattern is treated as a wildcard character unless you specify the -F or --fixed-strings options. If a pattern contains spaces, enclose the pattern in a pair of double quotation marks (\"). If a pattern contains double quotation marks, enclose the pattern in a pair of single quotation marks ('). You can specify multiple sub-patterns to match by using the following format, but only if you do not use the -r , -G , or --regex options: \"[pattern1|pattern2|...|patternN]\" The initial and trailing double quotation marks and brackets ([ ]) are required. Use a vertical bar character to separate the sub-patterns. Quotation marks and the vertical bar are not allowed in a sub-pattern. Spaces are allowed in the middle of a sub-pattern, but leading and trailing spaces will be trimmed. Use the grep command to show lines that do not match the pattern. For example, the following command displays the number of instances and total heap size for the java/lang/String class: > info class | grep java/lang/String 94 7688 [Ljava/lang/String; 1822 58304 java/lang/String 1 16 java/lang/String$CaseInsensitiveComparator 0 0 java/lang/String$UnsafeHelpers The following command uses two pipes in combination to display the number of instances and total heap size for the java/lang/StringCoding.StringDecoder class: > info class | grep java/lang/String | grep -i decoder 1 48 java/lang/StringCoding$StringDecoder Using tokens Use the tokens command after the vertical bar character to isolate specified tokens in the resulting lines. tokens [options] range[,range][..range] You can define range in the following formats: x x,y x..y A set of rules applies to these formats: x or y can be prefixed with \"-\". This means that x or y are counting backwards from the end of a list. For example, a y value of -1 represents the last token in a list, while -2 represents the penultimate token in a list. x must represent a token that either precedes or is at the same position as y. In this format, if x is omitted, it is assumed to be '1'. If y is omitted, it is assumed to be '-1'. For example, the following command displays the first and second token for each resulting line: > info mmap | grep -r ^0x | tokens 1,2 0x0000000000012fff 0x000000000000d000 0x0000000000017fff 0x0000000000004000 0x00000000009dafff 0x0000000000018000 0x00000000009fffff 0x000000000001f000 0x0000000000cbefff 0x0000000000002000 0x0000000000d76fff 0x0000000000001000 0x0000000003145fff 0x0000000000071000 0x0000000003b93fff 0x0000000000003000 Session parameters When jdmpview is started, many parameters can be used during the session to interrogate the system dump data, which are divided into general and expert parameters. The general parameters are documented in this section. To see a list of expert parameters, use the !j9help option. !j9help !j9help Lists all expert parameters that can be used in a session, with a brief description. cd cd <directory_name> Changes the working directory to <directory_name> . The working directory is used for log files. Logging is controlled by the set logging command. Use the pwd command to query the current working directory. cmdfile cmdfile <directory_name> Runs all of the commands in a file. The commands are read line by line and run sequentially. Empty lines, and lines that start with // or # , are ignored. Use the option charset to identify the character set that is used in the chosen file. The character set must be supported, as defined in java.nio.charset.Charset , such as US-ASCII . deadlock This command detects deadlock situations in the Java application that was running when the system dump was produced. Example output: deadlock loop: thread: Thread-2 (monitor object: 0x9e32c8) waiting for => thread: Thread-3 (monitor object: 0x9e3300) waiting for => thread: Thread-2 (monitor object: 0x9e32c8) In this example, the deadlock analysis shows that Thread-2 is waiting for a lock held by Thread-3 , which is in turn waiting for a lock held earlier by Thread-2 . Threads are identified by their Java thread name, whereas object monitors are identified by the address of the object in the Java heap. You can obtain further information about the threads using the info thread * command. You can obtain further information about the monitors using the x/J <0xaddr> command. find find <pattern>,<start_address>,<end_address>,<memory_boundary>, <bytes_to_print>,<matches_to_display> This command searches for <pattern> in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the find command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes. findnext findptr <pattern>,<start_address>,<end_address>,<memory_boundary>,<bytes_to_print>,<matches_to_display> Finds the next instance of the last string passed to find or findptr . It repeats the previous find or findptr command, depending on which one was issued last, starting from the last match. Searches memory for the given pointer. findptr searches for <pattern> as a pointer in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the findptr command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes. help help [<command_name>] Shows information for a specific command. If you supply no parameters, help shows the complete list of supported commands. history history|his [-r][<N>] Recalls and displays the history of commands that you have run. The default behavior is to display the 20 most recent commands. If you use the argument <N> , then N commands are displayed. For example, if you run history 35, then the 35 most recent commands are displayed. You can also use the -r option with <N> to run the Nth most recent command in your history. Using the -r option alone runs the most recent command in your history. info thread info thread [*|all|<native_thread_ID>|<zos_TCB_address>] Displays information about Java and native threads. The following information is displayed for all threads (\"*\"), or the specified thread: Thread id Registers Stack sections Thread frames: procedure name and base pointer Thread properties: list of native thread properties and their values. For example: thread priority. Associated Java thread, if applicable: Name of Java thread Address of associated java.lang.Thread object State (shown in JVMTI and java.lang.Thread.State formats) The monitor the thread is waiting for Thread frames: base pointer, method, and filename:line If you supply no parameters, the command shows information about the current thread. info system Displays the following information about the system that produced the core dump: Amount of memory Operating system Virtual machine or virtual machines present info class info class [<class_name>] [-sort:<name>|<count>|<size>] Displays the inheritance chain and other data for a given class. If a class name is passed to info class, the following information is shown about that class: - Name - ID - Superclass ID - Class loader ID - Modifiers - Number of instances and total size of instances - Inheritance chain - Fields with modifiers (and values for static fields) - Methods with modifiers If no parameters are passed to `info class`, the following information is shown: - The number of instances of each class. - The total size of all instances of each class. - The class name - The total number of instances of all classes. - The total size of all objects. The `sort` option allows the list of classes to be sorted by name (default), by number of instances of each class, or by the total size of instances of each class. info proc Displays threads, command-line arguments, environment variables, and shared modules of the current process. To view the shared modules used by a process, use the info sym command. info jitm Displays JIT compiled methods and their addresses: Method name and signature Method start address Method end address info lock Displays a list of available monitors and locked objects. info sym Displays a list of available modules. For each process in the address spaces, this command shows a list of module sections for each module, their start and end addresses, names, and sizes. info mmap info mmap [<address>] [-verbose] [-sort:<size>|<address>] Displays a summary list of memory sections in the process address space, with start and end address, size, and properties. If an address parameter is specified, the results show details of only the memory section containing the address. If -verbose is specified, full details of the properties of each memory section are displayed. The -sort option allows the list of memory sections to be sorted by size or by start address (default). info heap info heap [*|<heap_name>*] If no parameters are passed to this command, the heap names and heap sections are shown. Using either \"*\" or a heap name shows the following information about all heaps or the specified heap: Heap name (Heap size and occupancy) Heap sections Section name Section size Whether the section is shared Whether the section is executable Whether the section is read only heapdump heapdump [<heaps>] Generates a Java heap dump to a file. You can select which Java heaps to dump by listing the heap names, separated by spaces. To see which heaps are available, use the info heap command. By default, all Java heaps are dumped. hexdump hexdump <hex_address> <bytes_to_print> Displays a section of memory in a hexdump-like format. Displays <bytes_to_print> bytes of memory contents starting from <hex_address> . + Displays the next section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling forwards through memory. The previous hexdump command is repeated, starting from the end of the previous one. - Displays the previous section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling backwards through memory. The previous hexdump command is repeated, starting from a position before the previous one. pwd Displays the current working directory, which is the directory where log files are stored. quit Exits the core file viewing tool; any log files that are currently open are closed before exit. set heapdump Configures Heapdump generation settings. set heapdump <options> where <options> are: phd : Set the Heapdump format to Portable Heapdump, which is the default. txt : Set the Heapdump format to classic. file <file> : Set the destination of the Heapdump. multiplefiles [on|off] : If multiplefiles is set to on, each Java heap in the system dump is written to a separate file. If multiplefiles is set to off, all Java heaps are written to the same file. The default is off. set logging set logging <options> Configures logging settings, starts logging, or stops logging. This parameter enables the results of commands to be logged to a file, where <options> are: [on|off] : Turns logging on or off. (Default: off) file <filename> : Sets the file to log to. The path is relative to the directory returned by the pwd command, unless an absolute path is specified. If the file is set while logging is on, the change takes effect the next time logging is started. Not set by default. overwrite [on|off] : Turns overwriting of the specified log file on or off. When overwrite is off, log messages are appended to the log file. When overwrite is on, the log file is overwritten after the set logging command. (Default: off) redirect [on|off] : Turns redirecting to file on or off, with off being the default. When logging is set to on: A value of on for redirect sends non-error output only to the log file. A value of off for redirect sends non-error output to the console and log file. Redirect must be turned off before logging can be turned off. (Default: off) show heapdump Displays the current Heapdump generation settings. show logging Displays the current logging settings: set_logging = [on|off] set_logging_file = set_logging_overwrite = [on|off] set_logging_redirect = [on|off] current_logging_file = The file that is currently being logged to might be different from set_logging_file, if that value was changed after logging was started. whatis <hex_address> Displays information about whatis stored at the given memory address, <hex_address> . This command examines the memory location at <hex_address> and tries to find out more information about this address. For example: > whatis 0x8e76a8 heap #1 - name: Default@19fce8 0x8e76a8 is within heap segment: 8b0000 -- cb0000 0x8e76a8 is start of an object of type java/lang/Thread x/ (examine) Passes the number of items to display and the unit size, as listed in the following table, to the sub-command. For example, x/12bd . Abbreviation Unit Size b Byte 8-bit h Half word 16-bit w Word 32-bit g Giant word 64-bit This command is similar to the use of the x/ command in gdb, including the use of defaults. x/J [ <class_name> | <0xaddr> ] Displays information about a particular object, or all objects of a class. If <class_name> is supplied, all static fields with their values are shown, followed by all objects of that class with their fields and values. If an object address (in hex) is supplied, static fields for that object's class are not shown; the other fields and values of that object are printed along with its address. Note: This command ignores the number of items and unit size passed to it by the x/ command. x/D < 0xaddr > Displays the integer at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. This command uses the number of items and unit size passed to it by the x/ command. x/X < 0xaddr > Displays the hex value of the bytes at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. Note: This command uses the number of items and unit size passed to it by the x/ command. x/K < 0xaddr > Where the size is defined by the pointer size of the architecture, this parameter shows the value of each section of memory. The output is adjusted for the hardware architecture this dump file is from, starting at the specified address. It also displays a module with a module section and an offset from the start of that module section in memory if the pointer points to that module section. If no symbol is found, it displays a \"*\" and an offset from the current address if the pointer points to an address in 4KB (4096 bytes) of the current address. Although this command can work on an arbitrary section of memory, it is probably more useful on a section of memory that refers to a stack frame. To find the memory section of a thread stack frame, use the info thread command. Note: This command uses the number of items and unit size passed to it by the x/ command. Example This example session illustrates a selection of the commands available and their use. In the example session, which is generated on a Linux system, some lines have been removed for clarity (and terseness). User input is prefaced by a greater than symbol (>). test@madras:~/test> sdk/bin/jdmpview -core core.20121116.154147.16838.0001.dmp DTFJView version 4.27.57, using DTFJ version 1.10.27022 Loading image from DTFJ... For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" Available contexts (* = currently selected context) : Source : file:///home/test/core.20121116.154147.16838.0001.dmp *0 : PID: 16867 : JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6480-20121116_01 ) > help + displays the next section of memory in hexdump-like format - displays the previous section of memory in hexdump-like format cd changes the current working directory, used for log files close [context id] closes the connection to a core file context [ID|asid ID] switch to the selected context deadlock displays information about deadlocks if there are any exit Exit the application find searches memory for a given string findnext finds the next instance of the last string passed to \"find\" findptr searches memory for the given pointer heapdump generates a PHD or classic format heapdump help [command name] displays list of commands or help for a specific command hexdump outputs a section of memory in a hexdump-like format info <component> Information about the specified component info class <Java class name> Provides information about the specified Java class info heap [*|heap name] Displays information about Java heaps info jitm Displays JIT'ed methods and their addresses info lock outputs a list of system monitors and locked objects info mmap Outputs a list of all memory segments in the address space info mod outputs module information info proc shortened form of info process info process displays threads, command line arguments, environment info sym an alias for 'mod' info sys shortened form of info system info system displays information about the system the core dump is from info thread displays information about Java and native threads log [name level] display and control instances of java.util.logging.Logger open [path to core or zip] opens the specified core or zip file plugins Plugin management commands list Show the list of loaded plugins for the current context reload Reload plugins for the current context showpath Show the DTFJ View plugin search path for the current context setpath Set the DTFJ View plugin search path for the current context pwd displays the current working directory quit Exit the application set [logging|heapdump] Sets options for the specified command set heapdump configures heapdump format, filename and multiple heap support set logging configures several logging-related parameters, starts/stops logging on turn on logging off turn off logging file turn on logging overwrite controls the overwriting of log files show [logging|heapdump] Displays the current set options for a command show heapdump displays heapdump settings show logging shows the current logging options whatis [hex address] gives information about what is stored at the given memory address x/d <hex address> displays the integer at the specified address x/j <object address> [class name] displays information about a particular object or all objects of a class x/k <hex address> displays the specified memory section as if it were a stack frame parameters x/x <hex address> displays the hex value of the bytes at the specified address > set logging file log.txt logging turned on; outputting to \"/home/test/log.txt\" > info system Machine OS: Linux Hypervisor: PowerVM Machine name: madras Machine IP address(es): 9.20.88.155 System memory: 8269201408 Dump creation time: 2015/08/10 14:44:36:019 Dump creation time (nanoseconds): 21314421467539 Java version: JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6490-20121116_01) JVM start time: 2015/08/10 14:44:05:690 JVM start time (nanoseconds): 21284086192267 > info thread * native threads for address space process id: 16838 thread id: 16839 registers: native stack sections: native stack frames: properties: associated Java thread: name: main Thread object: java/lang/Thread @ 0x2ffd1e08 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x0000000000085b28 method: void com/ibm/jvm/Dump.SystemDumpImpl() (Native Method) objects: <no objects in this frame> bp: 0x0000000000085b40 method: void com/ibm/jvm/Dump.SystemDump() source: Dump.java:41 objects: <no objects in this frame> bp: 0x0000000000085b68 method: void mySystemDump.main(String[]) source: mySystemDump.java:29 objects: <no objects in this frame> ===Lines Removed=== name: GC Slave id: 16860 Thread object: java/lang/Thread @ 0x3001b980 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: GC Slave id: 16861 Thread object: java/lang/Thread @ 0x3001c180 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: Signal Dispatcher id: 16847 Thread object: com/ibm/misc/SignalDispatcher @ 0x3000f268 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x00000000000df748 method: int com/ibm/misc/SignalDispatcher.waitForSignal() (Native Method) objects: <no objects in this frame> bp: 0x00000000000df788 method: void com/ibm/misc/SignalDispatcher.run() source: SignalDispatcher.java:54 objects: 0x30015828 0x30015828 ===Lines Removed=== > info heap * Heap #1: Generational@fff78303d30 Section #1: Heap extent at 0x100d0000 (0x300000 bytes) Size: 3145728 bytes Shared: false Executable: false Read Only: false Section #2: Heap extent at 0x2ffd0000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false Section #3: Heap extent at 0x30050000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false > info class java/lang/String name = java/lang/String ID = 0x37c00 superID = 0x30300 classLoader = 0x2ffe9b58 modifiers: public final number of instances: 2146 total size of instances: 51504 bytes Inheritance chain.... java/lang/Object java/lang/String Fields...... static fields for \"java/lang/String\" private static final long serialVersionUID = -6849794470754667710 (0xa0f0a4387a3bb342) public static final java.util.Comparator CASE_INSENSITIVE_ORDER = <object> @ 0x2ffd0278 private static final char[] ascii = <object> @ 0x2ffd02c8 private static String[] stringArray = <object> @ 0x2ffd0298 private static final int stringArraySize = 10 (0xa) static boolean enableCopy = false private static int seed = -126504465 (0xfffffffff875b1ef) private static char[] startCombiningAbove = <object> @ 0x100d0c40 private static char[] endCombiningAbove = <object> @ 0x100d0cc0 private static final char[] upperValues = <object> @ 0x100d0d40 private static final java.io.ObjectStreamField[] serialPersistentFields = <object> @ 0x2ffd0920 non-static fields for \"java/lang/String\" private final char[] value private final int offset private final int count private int hashCode private int hashCode32 Methods...... Bytecode range(s): : private static native int getSeed() Bytecode range(s): fff76d8ce48 -- fff76d8ce5e: public void <init>() Bytecode range(s): fff76d8ce88 -- fff76d8cecd: private void <init>(String, char) Bytecode range(s): fff76d8cf10 -- fff76d8cf19: public void <init>(byte[]) Bytecode range(s): fff76d8cf40 -- fff76d8cf4a: public void <init>(byte[], int) Bytecode range(s): fff76d8cf7c -- fff76d8cfb5: public void <init>(byte[], int, int) Bytecode range(s): fff76d8cff8 -- fff76d8d065: public void <init>(byte[], int, int, int) Bytecode range(s): fff76d8d0c4 -- fff76d8d10c: public void <init>(byte[], int, int, String) ===Lines Removed=== > whatis 0x2ffd0298 heap #1 - name: Generational@fff78303d30 0x2ffd0298 is within heap segment: 2ffd0000 -- 30050000 0x2ffd0298 is the start of an object of type [Ljava/lang/String;","title":"Dump viewer"},{"location":"tool_jdmpview/#dump-viewer-jdmpview","text":"The dump viewer is a command-line tool that allows you to examine the contents of system dumps produced from the OpenJ9 VM. The dump viewer allows you to view both Java\u2122 and native information from the time the dump was produced. For long running tasks, the dump viewer can also be run in batch mode. The dump viewer is useful for diagnosing OutOfMemoryError exceptions in Java\u2122 applications. For problems like general protection faults (GPF), system abends, and SIGSEVs, a system debugger such as gdb (Linux) provides more information.","title":"Dump viewer (jdmpview)"},{"location":"tool_jdmpview/#syntax","text":"","title":"Syntax"},{"location":"tool_jdmpview/#starting-the-dump-viewer","text":"jdmpview (-core <core file> | -zip <zip file>) [-notemp] Input option Explanation -core <core file> Specifies a dump file. -zip <zip file> Specifies a compressed file containing the core file and associated XML file (produced by the dump extractor ( jextract ) tool on AIX\u00ae and Linux\u2122 systems). -notemp By default, when you specify a file by using the -zip option, the contents are extracted to a temporary directory before processing. Use the -notemp option to prevent this extraction step, and run all subsequent commands in memory. Note: The -core option can be used with the -zip option to specify the core and XML files in the compressed file. Without these options, jdmpview shows multiple contexts, one for each source file that it identified in the compressed file. On z/OS\u00ae, you can copy the dump to an HFS file and supply that as input to jdmpview , or you can supply a fully qualified MVS\u2122 data set name. For example: > jdmpview -core USER1.JVM.TDUMP.SSHD6.D070430.T092211 DTFJView version 4.28.3, using DTFJ version 1.11.28004 Loading image from DTFJ... MVS data set names may contain the dollar sign ($). Names that contain a dollar sign must be enclosed by single quotation marks ('). For example: > jdmpview -core 'USER1.JVM.$TDUMP.SSH$D7.D141211.T045506' After jdmpview processes the dump files, a session starts, showing this message: For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" > If you run the jdmpview tool on a compressed file that contains multiple dumps, the tool detects and shows all the dump files, whether these are system dumps, Java dumps, or heap dumps. Because of this behavior, more than one context might be displayed when you start jdmpview . To switch context, type context <n> , where <n> is the context value for the dump you want to investigate. On z/OS, a system dump can contain multiple address spaces and an address space can contain multiple VM instances. In this case, the context allows you to select the address space and VM instance within the dump file. The following z/OS example shows address spaces ( ASID ), with two JVMs occupying address space 0x73 (context 5 and 6). The current context is 5 ( CTX:5> ), shown with an asterisk. To view the JVM in context 6, you can switch by specifying context 6 . CTX:5> context Available contexts (* = currently selected context) : 0 : ASID: 0x1 : No JRE : No JRE 1 : ASID: 0x3 : No JRE : No JRE 2 : ASID: 0x4 : No JRE : No JRE 3 : ASID: 0x6 : No JRE : No JRE 4 : ASID: 0x7 : No JRE : No JRE *5 : ASID: 0x73 EDB: 0x83d2053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 6 : ASID: 0x73 EDB: 0x8004053a0 : JRE 1.8.0 z/OS s390x-64 build 20181117_128845 (pmz6480-20181120_01) 7 : ASID: 0x73 EDB: 0x4a7bd9e8 : No JRE 8 : ASID: 0xffff : No JRE : No JRE If you are using jdmpview to view Java dumps and heap dumps, some options do not produce any output. For example, a heap dump doesn't contain the information requested by the info system command, but does contain information requested by the info class command. If you are viewing a dump where there are a large number of objects on the heap, you can speed up the performance of jdmpview by ensuring that your system has enough memory available and does not need to page memory to disk. To achieve this, start jdmpview with a larger heap size by specifying the -Xmx option. Use the -J option to pass the -Xmx command line option to the JVM. For example: jdmpview -J-Xmx<n> -core <core file> The options available to the dump viewer session are shown under Session parameters","title":"Starting the dump viewer"},{"location":"tool_jdmpview/#starting-in-batch-mode","text":"For long running or routine jobs, jdmpview can be used in batch mode. You can run a single command without specifying a command file by appending the command to the end of the jdmpview command line. For example: jdmpview -core mycore.dmp info class When specifying jdmpview commands that accept a wildcard parameter, you must replace the wildcard symbol with ALL to prevent the shell interpreting the wildcard symbol. For example, in interactive mode, the command info thread * must be specified in the following way: jdmpview -core mycore.dmp info thread ALL Batch mode is controlled with the following command line options: Option Explanation -cmdfile <path to command file> A file that contains a series of jdmpview commands, which are read and run sequentially. -charset <character set name> The character set for the commands specified in -cmdfile (name must be a supported charset as defined in java.nio.charset.Charset. For example, US-ASCII) -outfile <path to output file> The file to record any output generated by commands. -overwrite If the file specified in -outfile exists, this option overwrites the file. -append If the file specified in -outfile exists, new output messages are appended to the end of that file. The -append and -overwrite options cannot be used at the same time. The command file can have empty lines that contain spaces, or comment lines that start with // or #. These lines are ignored by jdmpview. Example command file: // commands.txt info system info proc To run jdmpview in batch mode, using this command file, specify: jdmpview -outfile out.txt [-overwrite|-append] -cmdfile commands.txt -core <path to core file> When the output file exists, you need to specify either the -overwrite option or the -append option. If you do not, an error message is generated.","title":"Starting in batch mode"},{"location":"tool_jdmpview/#processing-output","text":"You can redirect command output to a file, or pipe the command output to another command. To redirect jdmpview command output to a file, use one of the following formats: command > <target_file> If the target file exists, this redirection overwrites the content within it. command >> <target_file> If the target file exists, this redirection appends the output to it. Where <target_file> is the file name, which can include the full path to the file. To pipe jdmpview command output to another command, use the vertical bar (|) character. For example: command | grep string You can chain more than two commands together by using multiple vertical bar characters. The following commands can be used to interrogate the output: charsFrom charsTo grep tokens","title":"Processing output"},{"location":"tool_jdmpview/#using-charsfrom","text":"Use the charsFrom command after the vertical bar character to exclude all characters that come before a specified pattern in a resulting line. charsFrom <options> pattern Where <options> : -e or -exclude : Exclude the matched pattern from the resulting line. By default, the matched pattern is included in the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays resulting lines that contain the pattern jre , and trims each line to exclude all characters that come before this pattern: > info mod | charsFrom jre jre/lib/ppc64/libzip.so @ 0x0, sections: jre/lib/ppc64/libdbgwrapper80.so @ 0x0, sections: jre/lib/ppc64/libverify.so @ 0x0, sections: jre/lib/ppc64/libjava.so @ 0x0, sections: jre/lib/ppc64/compressedrefs/libjclse7b_28.so @ 0x0, sections:","title":"Using CharsFrom"},{"location":"tool_jdmpview/#using-charsto","text":"Use the CharsTo command after the vertical bar character to include the characters in a resulting line until a specific pattern is found. charsTo <options> pattern Where <options> : -include : Include the matched pattern in the resulting line. By default, the matched pattern is excluded from the resulting line. -keep : Keep lines that do not contain a match to the pattern. By default, lines that do not contain a match are excluded from the results. -i or -ignoreCase : Ignore case. For example, the following command displays lines that contain the pattern \"@\", and trims each line to exclude all characters from \"@\" onwards: > info mod | charsTo @ bin/java /usr/lib64/gconv/UTF-16.so /test/sdk/lib/ppc64le/libnet.so /test/sdk/lib/ppc64le/libnio.so /test/sdk/lib/ppc64le/libzip.so /test/sdk/lib/ppc64le/libjsig.so libjsig.so You can also use charsFrom and charsTo together, separated by a vertical bar character. For example, the following command displays lines that contain the pattern \"lib\", and trims each line to exclude all characters that come before this pattern, as well as all characters from the pattern @ : > info mod | charsFrom lib | charsTo @ lib/ppc64le/libzip.so lib/ppc64le/libjsig.so lib/ppc64le/libverify.so lib/ppc64le/libjava.so lib/ppc64le/compressedrefs/libj9jit29.so Note: The line will not be displayed if the charsFrom and charsTo are used together, but only one of the patterns are matched in a line. Furthermore, the line will not be displayed if both patterns are matched in a line, but the charsTo pattern appears before, and not after, the charsFrom pattern.","title":"Using CharsTo"},{"location":"tool_jdmpview/#using-grep","text":"Use the grep command after the vertical bar character to show which lines match a specified pattern. grep <options> pattern Where <options> : -i : Ignore case. -r , -G , or --regex : Use a regular expression as defined in the Java documentation of the java.utils.regex.Pattern class. -b or --block : Show blocks of lines where at least one of the lines matches the pattern. Blocks of lines are separated by empty lines. -A <NUM> or +<NUM> : Show at most <NUM> lines after the matching line. For example grep -A 2 pattern or grep +2 pattern. -B <NUM> or -<NUM> : Show at most <NUM> lines before the matching line. -C <NUM> or +-<NUM> : Show at most <NUM> lines before and after the matching line. -v or --invert-match : Use with the grep command to show lines that do not match the pattern. These options are equivalent to the grep- command. -F or --fixed-strings : Do not treat the asterisk (*) as a wildcard character. Use these options with the -r , -G , or --regex options. Pattern rules: An asterisk (*) in a pattern is treated as a wildcard character unless you specify the -F or --fixed-strings options. If a pattern contains spaces, enclose the pattern in a pair of double quotation marks (\"). If a pattern contains double quotation marks, enclose the pattern in a pair of single quotation marks ('). You can specify multiple sub-patterns to match by using the following format, but only if you do not use the -r , -G , or --regex options: \"[pattern1|pattern2|...|patternN]\" The initial and trailing double quotation marks and brackets ([ ]) are required. Use a vertical bar character to separate the sub-patterns. Quotation marks and the vertical bar are not allowed in a sub-pattern. Spaces are allowed in the middle of a sub-pattern, but leading and trailing spaces will be trimmed. Use the grep command to show lines that do not match the pattern. For example, the following command displays the number of instances and total heap size for the java/lang/String class: > info class | grep java/lang/String 94 7688 [Ljava/lang/String; 1822 58304 java/lang/String 1 16 java/lang/String$CaseInsensitiveComparator 0 0 java/lang/String$UnsafeHelpers The following command uses two pipes in combination to display the number of instances and total heap size for the java/lang/StringCoding.StringDecoder class: > info class | grep java/lang/String | grep -i decoder 1 48 java/lang/StringCoding$StringDecoder","title":"Using grep"},{"location":"tool_jdmpview/#using-tokens","text":"Use the tokens command after the vertical bar character to isolate specified tokens in the resulting lines. tokens [options] range[,range][..range] You can define range in the following formats: x x,y x..y A set of rules applies to these formats: x or y can be prefixed with \"-\". This means that x or y are counting backwards from the end of a list. For example, a y value of -1 represents the last token in a list, while -2 represents the penultimate token in a list. x must represent a token that either precedes or is at the same position as y. In this format, if x is omitted, it is assumed to be '1'. If y is omitted, it is assumed to be '-1'. For example, the following command displays the first and second token for each resulting line: > info mmap | grep -r ^0x | tokens 1,2 0x0000000000012fff 0x000000000000d000 0x0000000000017fff 0x0000000000004000 0x00000000009dafff 0x0000000000018000 0x00000000009fffff 0x000000000001f000 0x0000000000cbefff 0x0000000000002000 0x0000000000d76fff 0x0000000000001000 0x0000000003145fff 0x0000000000071000 0x0000000003b93fff 0x0000000000003000","title":"Using tokens"},{"location":"tool_jdmpview/#session-parameters","text":"When jdmpview is started, many parameters can be used during the session to interrogate the system dump data, which are divided into general and expert parameters. The general parameters are documented in this section. To see a list of expert parameters, use the !j9help option.","title":"Session parameters"},{"location":"tool_jdmpview/#j9help","text":"!j9help Lists all expert parameters that can be used in a session, with a brief description.","title":"!j9help"},{"location":"tool_jdmpview/#cd","text":"cd <directory_name> Changes the working directory to <directory_name> . The working directory is used for log files. Logging is controlled by the set logging command. Use the pwd command to query the current working directory.","title":"cd"},{"location":"tool_jdmpview/#cmdfile","text":"cmdfile <directory_name> Runs all of the commands in a file. The commands are read line by line and run sequentially. Empty lines, and lines that start with // or # , are ignored. Use the option charset to identify the character set that is used in the chosen file. The character set must be supported, as defined in java.nio.charset.Charset , such as US-ASCII .","title":"cmdfile"},{"location":"tool_jdmpview/#deadlock","text":"This command detects deadlock situations in the Java application that was running when the system dump was produced. Example output: deadlock loop: thread: Thread-2 (monitor object: 0x9e32c8) waiting for => thread: Thread-3 (monitor object: 0x9e3300) waiting for => thread: Thread-2 (monitor object: 0x9e32c8) In this example, the deadlock analysis shows that Thread-2 is waiting for a lock held by Thread-3 , which is in turn waiting for a lock held earlier by Thread-2 . Threads are identified by their Java thread name, whereas object monitors are identified by the address of the object in the Java heap. You can obtain further information about the threads using the info thread * command. You can obtain further information about the monitors using the x/J <0xaddr> command.","title":"deadlock"},{"location":"tool_jdmpview/#find","text":"find <pattern>,<start_address>,<end_address>,<memory_boundary>, <bytes_to_print>,<matches_to_display> This command searches for <pattern> in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the find command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes.","title":"find"},{"location":"tool_jdmpview/#findnext","text":"findptr <pattern>,<start_address>,<end_address>,<memory_boundary>,<bytes_to_print>,<matches_to_display> Finds the next instance of the last string passed to find or findptr . It repeats the previous find or findptr command, depending on which one was issued last, starting from the last match. Searches memory for the given pointer. findptr searches for <pattern> as a pointer in the memory segment from <start_address> to <end_address> (both inclusive), and shows the number of matching addresses you specify with <matches_to_display> . You can also display the next <bytes_to_print> bytes for the last match. By default, the findptr command searches for the pattern at every byte in the range. If you know the pattern is aligned to a particular byte boundary, you can specify <memory_boundary> to search every <memory_boundary> bytes. For example, if you specify a <memory_boundary> of \"4\", the command searches for the pattern every 4 bytes.","title":"findnext"},{"location":"tool_jdmpview/#help","text":"help [<command_name>] Shows information for a specific command. If you supply no parameters, help shows the complete list of supported commands.","title":"help"},{"location":"tool_jdmpview/#history","text":"history|his [-r][<N>] Recalls and displays the history of commands that you have run. The default behavior is to display the 20 most recent commands. If you use the argument <N> , then N commands are displayed. For example, if you run history 35, then the 35 most recent commands are displayed. You can also use the -r option with <N> to run the Nth most recent command in your history. Using the -r option alone runs the most recent command in your history.","title":"history"},{"location":"tool_jdmpview/#info-thread","text":"info thread [*|all|<native_thread_ID>|<zos_TCB_address>] Displays information about Java and native threads. The following information is displayed for all threads (\"*\"), or the specified thread: Thread id Registers Stack sections Thread frames: procedure name and base pointer Thread properties: list of native thread properties and their values. For example: thread priority. Associated Java thread, if applicable: Name of Java thread Address of associated java.lang.Thread object State (shown in JVMTI and java.lang.Thread.State formats) The monitor the thread is waiting for Thread frames: base pointer, method, and filename:line If you supply no parameters, the command shows information about the current thread.","title":"info thread"},{"location":"tool_jdmpview/#info-system","text":"Displays the following information about the system that produced the core dump: Amount of memory Operating system Virtual machine or virtual machines present","title":"info system"},{"location":"tool_jdmpview/#info-class","text":"info class [<class_name>] [-sort:<name>|<count>|<size>] Displays the inheritance chain and other data for a given class. If a class name is passed to info class, the following information is shown about that class: - Name - ID - Superclass ID - Class loader ID - Modifiers - Number of instances and total size of instances - Inheritance chain - Fields with modifiers (and values for static fields) - Methods with modifiers If no parameters are passed to `info class`, the following information is shown: - The number of instances of each class. - The total size of all instances of each class. - The class name - The total number of instances of all classes. - The total size of all objects. The `sort` option allows the list of classes to be sorted by name (default), by number of instances of each class, or by the total size of instances of each class.","title":"info class"},{"location":"tool_jdmpview/#info-proc","text":"Displays threads, command-line arguments, environment variables, and shared modules of the current process. To view the shared modules used by a process, use the info sym command.","title":"info proc"},{"location":"tool_jdmpview/#info-jitm","text":"Displays JIT compiled methods and their addresses: Method name and signature Method start address Method end address","title":"info jitm"},{"location":"tool_jdmpview/#info-lock","text":"Displays a list of available monitors and locked objects.","title":"info lock"},{"location":"tool_jdmpview/#info-sym","text":"Displays a list of available modules. For each process in the address spaces, this command shows a list of module sections for each module, their start and end addresses, names, and sizes.","title":"info sym"},{"location":"tool_jdmpview/#info-mmap","text":"info mmap [<address>] [-verbose] [-sort:<size>|<address>] Displays a summary list of memory sections in the process address space, with start and end address, size, and properties. If an address parameter is specified, the results show details of only the memory section containing the address. If -verbose is specified, full details of the properties of each memory section are displayed. The -sort option allows the list of memory sections to be sorted by size or by start address (default).","title":"info mmap"},{"location":"tool_jdmpview/#info-heap","text":"info heap [*|<heap_name>*] If no parameters are passed to this command, the heap names and heap sections are shown. Using either \"*\" or a heap name shows the following information about all heaps or the specified heap: Heap name (Heap size and occupancy) Heap sections Section name Section size Whether the section is shared Whether the section is executable Whether the section is read only","title":"info heap"},{"location":"tool_jdmpview/#heapdump","text":"heapdump [<heaps>] Generates a Java heap dump to a file. You can select which Java heaps to dump by listing the heap names, separated by spaces. To see which heaps are available, use the info heap command. By default, all Java heaps are dumped.","title":"heapdump"},{"location":"tool_jdmpview/#hexdump","text":"hexdump <hex_address> <bytes_to_print> Displays a section of memory in a hexdump-like format. Displays <bytes_to_print> bytes of memory contents starting from <hex_address> .","title":"hexdump"},{"location":"tool_jdmpview/#_1","text":"Displays the next section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling forwards through memory. The previous hexdump command is repeated, starting from the end of the previous one.","title":"+"},{"location":"tool_jdmpview/#-","text":"Displays the previous section of memory in hexdump-like format. This command is used with the hexdump command to enable easy scrolling backwards through memory. The previous hexdump command is repeated, starting from a position before the previous one.","title":"-"},{"location":"tool_jdmpview/#pwd","text":"Displays the current working directory, which is the directory where log files are stored.","title":"pwd"},{"location":"tool_jdmpview/#quit","text":"Exits the core file viewing tool; any log files that are currently open are closed before exit.","title":"quit"},{"location":"tool_jdmpview/#set-heapdump","text":"Configures Heapdump generation settings. set heapdump <options> where <options> are: phd : Set the Heapdump format to Portable Heapdump, which is the default. txt : Set the Heapdump format to classic. file <file> : Set the destination of the Heapdump. multiplefiles [on|off] : If multiplefiles is set to on, each Java heap in the system dump is written to a separate file. If multiplefiles is set to off, all Java heaps are written to the same file. The default is off.","title":"set heapdump"},{"location":"tool_jdmpview/#set-logging","text":"set logging <options> Configures logging settings, starts logging, or stops logging. This parameter enables the results of commands to be logged to a file, where <options> are: [on|off] : Turns logging on or off. (Default: off) file <filename> : Sets the file to log to. The path is relative to the directory returned by the pwd command, unless an absolute path is specified. If the file is set while logging is on, the change takes effect the next time logging is started. Not set by default. overwrite [on|off] : Turns overwriting of the specified log file on or off. When overwrite is off, log messages are appended to the log file. When overwrite is on, the log file is overwritten after the set logging command. (Default: off) redirect [on|off] : Turns redirecting to file on or off, with off being the default. When logging is set to on: A value of on for redirect sends non-error output only to the log file. A value of off for redirect sends non-error output to the console and log file. Redirect must be turned off before logging can be turned off. (Default: off)","title":"set logging"},{"location":"tool_jdmpview/#show-heapdump","text":"Displays the current Heapdump generation settings.","title":"show heapdump"},{"location":"tool_jdmpview/#show-logging","text":"Displays the current logging settings: set_logging = [on|off] set_logging_file = set_logging_overwrite = [on|off] set_logging_redirect = [on|off] current_logging_file = The file that is currently being logged to might be different from set_logging_file, if that value was changed after logging was started.","title":"show logging"},{"location":"tool_jdmpview/#whatis-lthex_addressgt","text":"Displays information about whatis stored at the given memory address, <hex_address> . This command examines the memory location at <hex_address> and tries to find out more information about this address. For example: > whatis 0x8e76a8 heap #1 - name: Default@19fce8 0x8e76a8 is within heap segment: 8b0000 -- cb0000 0x8e76a8 is start of an object of type java/lang/Thread","title":"whatis &lt;hex_address&gt;"},{"location":"tool_jdmpview/#x-examine","text":"Passes the number of items to display and the unit size, as listed in the following table, to the sub-command. For example, x/12bd . Abbreviation Unit Size b Byte 8-bit h Half word 16-bit w Word 32-bit g Giant word 64-bit This command is similar to the use of the x/ command in gdb, including the use of defaults.","title":"x/ (examine)"},{"location":"tool_jdmpview/#xj-ltclass_namegtlt0xaddrgt","text":"Displays information about a particular object, or all objects of a class. If <class_name> is supplied, all static fields with their values are shown, followed by all objects of that class with their fields and values. If an object address (in hex) is supplied, static fields for that object's class are not shown; the other fields and values of that object are printed along with its address. Note: This command ignores the number of items and unit size passed to it by the x/ command.","title":"x/J [&lt;class_name&gt;|&lt;0xaddr&gt;]"},{"location":"tool_jdmpview/#xd-0xaddr","text":"Displays the integer at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. This command uses the number of items and unit size passed to it by the x/ command.","title":"x/D &lt;0xaddr&gt;"},{"location":"tool_jdmpview/#xx-0xaddr","text":"Displays the hex value of the bytes at the specified address, adjusted for the hardware architecture this dump file is from. For example, the file might be from a big endian architecture. Note: This command uses the number of items and unit size passed to it by the x/ command.","title":"x/X &lt;0xaddr&gt;"},{"location":"tool_jdmpview/#xk-0xaddr","text":"Where the size is defined by the pointer size of the architecture, this parameter shows the value of each section of memory. The output is adjusted for the hardware architecture this dump file is from, starting at the specified address. It also displays a module with a module section and an offset from the start of that module section in memory if the pointer points to that module section. If no symbol is found, it displays a \"*\" and an offset from the current address if the pointer points to an address in 4KB (4096 bytes) of the current address. Although this command can work on an arbitrary section of memory, it is probably more useful on a section of memory that refers to a stack frame. To find the memory section of a thread stack frame, use the info thread command. Note: This command uses the number of items and unit size passed to it by the x/ command.","title":"x/K &lt;0xaddr&gt;"},{"location":"tool_jdmpview/#example","text":"This example session illustrates a selection of the commands available and their use. In the example session, which is generated on a Linux system, some lines have been removed for clarity (and terseness). User input is prefaced by a greater than symbol (>). test@madras:~/test> sdk/bin/jdmpview -core core.20121116.154147.16838.0001.dmp DTFJView version 4.27.57, using DTFJ version 1.10.27022 Loading image from DTFJ... For a list of commands, type \"help\"; for how to use \"help\", type \"help help\" Available contexts (* = currently selected context) : Source : file:///home/test/core.20121116.154147.16838.0001.dmp *0 : PID: 16867 : JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6480-20121116_01 ) > help + displays the next section of memory in hexdump-like format - displays the previous section of memory in hexdump-like format cd changes the current working directory, used for log files close [context id] closes the connection to a core file context [ID|asid ID] switch to the selected context deadlock displays information about deadlocks if there are any exit Exit the application find searches memory for a given string findnext finds the next instance of the last string passed to \"find\" findptr searches memory for the given pointer heapdump generates a PHD or classic format heapdump help [command name] displays list of commands or help for a specific command hexdump outputs a section of memory in a hexdump-like format info <component> Information about the specified component info class <Java class name> Provides information about the specified Java class info heap [*|heap name] Displays information about Java heaps info jitm Displays JIT'ed methods and their addresses info lock outputs a list of system monitors and locked objects info mmap Outputs a list of all memory segments in the address space info mod outputs module information info proc shortened form of info process info process displays threads, command line arguments, environment info sym an alias for 'mod' info sys shortened form of info system info system displays information about the system the core dump is from info thread displays information about Java and native threads log [name level] display and control instances of java.util.logging.Logger open [path to core or zip] opens the specified core or zip file plugins Plugin management commands list Show the list of loaded plugins for the current context reload Reload plugins for the current context showpath Show the DTFJ View plugin search path for the current context setpath Set the DTFJ View plugin search path for the current context pwd displays the current working directory quit Exit the application set [logging|heapdump] Sets options for the specified command set heapdump configures heapdump format, filename and multiple heap support set logging configures several logging-related parameters, starts/stops logging on turn on logging off turn off logging file turn on logging overwrite controls the overwriting of log files show [logging|heapdump] Displays the current set options for a command show heapdump displays heapdump settings show logging shows the current logging options whatis [hex address] gives information about what is stored at the given memory address x/d <hex address> displays the integer at the specified address x/j <object address> [class name] displays information about a particular object or all objects of a class x/k <hex address> displays the specified memory section as if it were a stack frame parameters x/x <hex address> displays the hex value of the bytes at the specified address > set logging file log.txt logging turned on; outputting to \"/home/test/log.txt\" > info system Machine OS: Linux Hypervisor: PowerVM Machine name: madras Machine IP address(es): 9.20.88.155 System memory: 8269201408 Dump creation time: 2015/08/10 14:44:36:019 Dump creation time (nanoseconds): 21314421467539 Java version: JRE 1.8.0 Linux ppc64-64 build 20121115_128521 (pxp6490-20121116_01) JVM start time: 2015/08/10 14:44:05:690 JVM start time (nanoseconds): 21284086192267 > info thread * native threads for address space process id: 16838 thread id: 16839 registers: native stack sections: native stack frames: properties: associated Java thread: name: main Thread object: java/lang/Thread @ 0x2ffd1e08 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x0000000000085b28 method: void com/ibm/jvm/Dump.SystemDumpImpl() (Native Method) objects: <no objects in this frame> bp: 0x0000000000085b40 method: void com/ibm/jvm/Dump.SystemDump() source: Dump.java:41 objects: <no objects in this frame> bp: 0x0000000000085b68 method: void mySystemDump.main(String[]) source: mySystemDump.java:29 objects: <no objects in this frame> ===Lines Removed=== name: GC Slave id: 16860 Thread object: java/lang/Thread @ 0x3001b980 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: GC Slave id: 16861 Thread object: java/lang/Thread @ 0x3001c180 Priority: 5 Thread.State: WAITING JVMTI state: ALIVE WAITING WAITING_INDEFINITELY IN_OBJECT_WAIT waiting to be notified on: \"MM_ParallelDispatcher::slaveThread\" with ID 0x1004cbc8 owner name: <unowned> Java stack frames: <no frames to print> name: Signal Dispatcher id: 16847 Thread object: com/ibm/misc/SignalDispatcher @ 0x3000f268 Priority: 5 Thread.State: RUNNABLE JVMTI state: ALIVE RUNNABLE Java stack frames: bp: 0x00000000000df748 method: int com/ibm/misc/SignalDispatcher.waitForSignal() (Native Method) objects: <no objects in this frame> bp: 0x00000000000df788 method: void com/ibm/misc/SignalDispatcher.run() source: SignalDispatcher.java:54 objects: 0x30015828 0x30015828 ===Lines Removed=== > info heap * Heap #1: Generational@fff78303d30 Section #1: Heap extent at 0x100d0000 (0x300000 bytes) Size: 3145728 bytes Shared: false Executable: false Read Only: false Section #2: Heap extent at 0x2ffd0000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false Section #3: Heap extent at 0x30050000 (0x80000 bytes) Size: 524288 bytes Shared: false Executable: false Read Only: false > info class java/lang/String name = java/lang/String ID = 0x37c00 superID = 0x30300 classLoader = 0x2ffe9b58 modifiers: public final number of instances: 2146 total size of instances: 51504 bytes Inheritance chain.... java/lang/Object java/lang/String Fields...... static fields for \"java/lang/String\" private static final long serialVersionUID = -6849794470754667710 (0xa0f0a4387a3bb342) public static final java.util.Comparator CASE_INSENSITIVE_ORDER = <object> @ 0x2ffd0278 private static final char[] ascii = <object> @ 0x2ffd02c8 private static String[] stringArray = <object> @ 0x2ffd0298 private static final int stringArraySize = 10 (0xa) static boolean enableCopy = false private static int seed = -126504465 (0xfffffffff875b1ef) private static char[] startCombiningAbove = <object> @ 0x100d0c40 private static char[] endCombiningAbove = <object> @ 0x100d0cc0 private static final char[] upperValues = <object> @ 0x100d0d40 private static final java.io.ObjectStreamField[] serialPersistentFields = <object> @ 0x2ffd0920 non-static fields for \"java/lang/String\" private final char[] value private final int offset private final int count private int hashCode private int hashCode32 Methods...... Bytecode range(s): : private static native int getSeed() Bytecode range(s): fff76d8ce48 -- fff76d8ce5e: public void <init>() Bytecode range(s): fff76d8ce88 -- fff76d8cecd: private void <init>(String, char) Bytecode range(s): fff76d8cf10 -- fff76d8cf19: public void <init>(byte[]) Bytecode range(s): fff76d8cf40 -- fff76d8cf4a: public void <init>(byte[], int) Bytecode range(s): fff76d8cf7c -- fff76d8cfb5: public void <init>(byte[], int, int) Bytecode range(s): fff76d8cff8 -- fff76d8d065: public void <init>(byte[], int, int, int) Bytecode range(s): fff76d8d0c4 -- fff76d8d10c: public void <init>(byte[], int, int, String) ===Lines Removed=== > whatis 0x2ffd0298 heap #1 - name: Generational@fff78303d30 0x2ffd0298 is within heap segment: 2ffd0000 -- 30050000 0x2ffd0298 is the start of an object of type [Ljava/lang/String;","title":"Example"},{"location":"tool_jextract/","text":"Dump extractor ( jextract ) (AIX\u00ae, Linux\u2122, macOS\u00ae ) On some operating systems, copies of executable files and libraries are required for a full analysis of a core dump (you can get some information from the dump without these files, but not as much). Run the jextract utility to collect these extra files and package them into an archive file along with the core dump. To analyze the output, use the dump viewer ( jdmpview ) . Syntax jextract <core file name> [<zip_file>] where: <core file name> is the name of the system dump. <zip_file> is the name you want to give to the processed file. If you do not specify a name, output is written to <core file name>.zip by default. The output is written to the same directory as the core file. If you are analyzing a dump from a VM that used -Xcompressedrefs , include the -J-Xcompressedrefs parameter to run jextract using compressed references. Restriction: You must run jextract using the same VM level, on the same system that produced the system dump. If you run jextract on a VM level that is different from the one on which the dump was produced you see the following messages: J9RAS.buildID is incorrect (found e8801ed67d21c6be, expecting eb4173107d21c673). This version of jextract is incompatible with this dump. Failure detected during jextract, see previous message(s). See also Dump viewer ( jdmpview )","title":"Dump extractor"},{"location":"tool_jextract/#dump-extractor-jextract","text":"(AIX\u00ae, Linux\u2122, macOS\u00ae ) On some operating systems, copies of executable files and libraries are required for a full analysis of a core dump (you can get some information from the dump without these files, but not as much). Run the jextract utility to collect these extra files and package them into an archive file along with the core dump. To analyze the output, use the dump viewer ( jdmpview ) .","title":"Dump extractor (jextract)"},{"location":"tool_jextract/#syntax","text":"jextract <core file name> [<zip_file>] where: <core file name> is the name of the system dump. <zip_file> is the name you want to give to the processed file. If you do not specify a name, output is written to <core file name>.zip by default. The output is written to the same directory as the core file. If you are analyzing a dump from a VM that used -Xcompressedrefs , include the -J-Xcompressedrefs parameter to run jextract using compressed references. Restriction: You must run jextract using the same VM level, on the same system that produced the system dump. If you run jextract on a VM level that is different from the one on which the dump was produced you see the following messages: J9RAS.buildID is incorrect (found e8801ed67d21c6be, expecting eb4173107d21c673). This version of jextract is incompatible with this dump. Failure detected during jextract, see previous message(s).","title":"Syntax"},{"location":"tool_jextract/#see-also","text":"Dump viewer ( jdmpview )","title":"See also"},{"location":"tool_jmap/","text":"Java memory map ( jmap ) tool Use the jmap tool to get memory information for a particular Java\u2122 process, or list of processes. The tool shows statistics about classes on the heap, including the number of objects and their aggregate size. The command syntax is as follows: jmap [<option>] [<vmid>] <vmid> is the Attach API virtual machine identifier for the Java process. This ID is typically the same as the operating system process ID , unless you specified the -Dcom.ibm.tools.attach.id system property when you started the process. VMID is shown in jps or other Attach API-based tools. Multiple VMIDs can be specified, separated by a space. If you do not specify a VMID, the command reads input from stdin . You can therefore get information for all processes by piping the output of the jps command to jmap : jps -q | jmap -histo IDs of dead processes are silently ignored. On its own, jmap prints help information. To obtain memory information, a -histo argument must be supplied, where the available <options> are as follows: -histo : Prints statistics about classes on the heap, including the number of objects and their aggregate size -histo:live : Prints statistics for live objects only -J : supplies arguments to the Java VM that is running the jmap command. You can use multiple -J options, for example: jmap -J-Xms2m -J-Xmx10m The output has the following format: num object count total size class name ------------------------------------------------- 1 3354 107328 [C 2 717 57360 java.lang.Class 3 2427 38832 java.lang.String 4 50 13200 [J 5 717 11472 java.lang.J9VMInternals$ClassInitializationLock 6 342 8208 java.lang.StringBuilder 7 151 7248 jdk.internal.org.objectweb.asm.Item 8 396 6336 [Ljava.lang.Object; Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The following tool limitations apply: Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <options> <pid> . Displaying data from core dumps is not supported; use jdmpview instead. Other options , such as -F (force a dump of an unresponsive process) can be accomplished using kill -QUIT <pid> .","title":"Java memory map (jmap) tool"},{"location":"tool_jmap/#java-memory-map-jmap-tool","text":"Use the jmap tool to get memory information for a particular Java\u2122 process, or list of processes. The tool shows statistics about classes on the heap, including the number of objects and their aggregate size. The command syntax is as follows: jmap [<option>] [<vmid>] <vmid> is the Attach API virtual machine identifier for the Java process. This ID is typically the same as the operating system process ID , unless you specified the -Dcom.ibm.tools.attach.id system property when you started the process. VMID is shown in jps or other Attach API-based tools. Multiple VMIDs can be specified, separated by a space. If you do not specify a VMID, the command reads input from stdin . You can therefore get information for all processes by piping the output of the jps command to jmap : jps -q | jmap -histo IDs of dead processes are silently ignored. On its own, jmap prints help information. To obtain memory information, a -histo argument must be supplied, where the available <options> are as follows: -histo : Prints statistics about classes on the heap, including the number of objects and their aggregate size -histo:live : Prints statistics for live objects only -J : supplies arguments to the Java VM that is running the jmap command. You can use multiple -J options, for example: jmap -J-Xms2m -J-Xmx10m The output has the following format: num object count total size class name ------------------------------------------------- 1 3354 107328 [C 2 717 57360 java.lang.Class 3 2427 38832 java.lang.String 4 50 13200 [J 5 717 11472 java.lang.J9VMInternals$ClassInitializationLock 6 342 8208 java.lang.StringBuilder 7 151 7248 jdk.internal.org.objectweb.asm.Item 8 396 6336 [Ljava.lang.Object; Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The following tool limitations apply: Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <options> <pid> . Displaying data from core dumps is not supported; use jdmpview instead. Other options , such as -F (force a dump of an unresponsive process) can be accomplished using kill -QUIT <pid> .","title":"Java memory map (jmap) tool"},{"location":"tool_jps/","text":"Java process status ( jps ) tool Use the jps tool to query running Java\u2122 processes. The tool shows information for every Java process that is owned by the current user ID on the current host. The command syntax is as follows: jps [<options>] where the available <options> are as follows: -J : supplies arguments to the Java VM that is running the jps command. You can use multiple -J options, for example: jps -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -l : prints the application package name -q : prints only the virtual machine identifiers -m : prints the application arguments -v : prints the Java VM arguments, including those that are produced automatically The output has the following format: <VMID> [[<class_name>|<jar_name>|\"Unknown\"] [<application_args>][<vm_args>]] where VMID is the Attach API virtual machine identifier for the Java process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. For example: $ jps -l 5462 org.foo.bar.MyApplication 14332 openj9.tools.attach.diagnostics.Jps $ jps -q 5462 14332 Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The tool uses the Attach API, and has the following limitations: Does not list Java processes on other hosts, to enhance security Does not list Java processes owned by other users Does not list non-OpenJ9 Java processes Does not list processes whose attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java process status (jps)"},{"location":"tool_jps/#java-process-status-jps-tool","text":"Use the jps tool to query running Java\u2122 processes. The tool shows information for every Java process that is owned by the current user ID on the current host. The command syntax is as follows: jps [<options>] where the available <options> are as follows: -J : supplies arguments to the Java VM that is running the jps command. You can use multiple -J options, for example: jps -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -l : prints the application package name -q : prints only the virtual machine identifiers -m : prints the application arguments -v : prints the Java VM arguments, including those that are produced automatically The output has the following format: <VMID> [[<class_name>|<jar_name>|\"Unknown\"] [<application_args>][<vm_args>]] where VMID is the Attach API virtual machine identifier for the Java process. This ID is often, but not always, the same as the operating system process ID . One example where the ID might be different is if you specified the system property -Dcom.ibm.tools.attach.id when you started the process. For example: $ jps -l 5462 org.foo.bar.MyApplication 14332 openj9.tools.attach.diagnostics.Jps $ jps -q 5462 14332 Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. The tool uses the Attach API, and has the following limitations: Does not list Java processes on other hosts, to enhance security Does not list Java processes owned by other users Does not list non-OpenJ9 Java processes Does not list processes whose attach API is disabled. Note: The Attach API is disabled by default on z/OS. For more information about the Attach API, including how to enable and secure it, see Support for the Java Attach API .","title":"Java process status (jps) tool"},{"location":"tool_jstack/","text":"Java stack ( jstack ) tool Use the jstack tool to obtain Java stack traces and thread information for processes. The tool is similar to the HotSpot tool of the same name; the OpenJ9 version of jstack is an independent implementation, added for compatibility. The command syntax is as follows: jstack <options>* <pid>* Where <pid>* is a list of process IDs. If none are supplied, the process IDs are read from stdin , which allows a user running a Bourne or equivalent shell to query all processes via jps -q | jstack . IDs of inactive processes are silently ignored. The output contains Java stacks and thread information of the specified processes (equivalent to the information provided in java.lang.management.ThreadInfo ). The values for <options>* are as follows: -J : supplies arguments to the Java VM that is running the jstack command. You can use multiple -J options, for example: jstack -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -p : prints the system and agent properties of the process -l : prints more verbose output, including information about locks -h : prints help information Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For more information about differences, see Switching to OpenJ9 .","title":"Java stack (jstack) tool"},{"location":"tool_jstack/#java-stack-jstack-tool","text":"Use the jstack tool to obtain Java stack traces and thread information for processes. The tool is similar to the HotSpot tool of the same name; the OpenJ9 version of jstack is an independent implementation, added for compatibility. The command syntax is as follows: jstack <options>* <pid>* Where <pid>* is a list of process IDs. If none are supplied, the process IDs are read from stdin , which allows a user running a Bourne or equivalent shell to query all processes via jps -q | jstack . IDs of inactive processes are silently ignored. The output contains Java stacks and thread information of the specified processes (equivalent to the information provided in java.lang.management.ThreadInfo ). The values for <options>* are as follows: -J : supplies arguments to the Java VM that is running the jstack command. You can use multiple -J options, for example: jstack -J-Xmx10m -J-Dcom.ibm.tools.attach.enable=yes -p : prints the system and agent properties of the process -l : prints more verbose output, including information about locks -h : prints help information Restrictions: This tool is not supported and is subject to change or removal in future releases. Although similar in usage and output to the HotSpot tool of the same name, this tool is a different implementation that is specific to OpenJ9. For more information about differences, see Switching to OpenJ9 .","title":"Java stack (jstack) tool"},{"location":"tool_migration/","text":"Switching to OpenJ9 OpenJ9 provides the following tools, which might differ in behavior from the HotSpot equivalent. Note: For information about HotSpot equivalences and differences for items other than tools, see New to OpenJ9? Java diagnostic command tool ( jcmd ) Runs diagnostic commands on a specified VM. The main difference from the HotSpot jcmd tool is that the following options are not currently supported: The -f option to read commands from a file. The Perfcounter.print option for displaying performance counters for the target VM. Selecting VMs by main class instead of VMID. Specifying 0 as a VMID to target all VMs. Java memory map tool ( jmap ) Displays information about classes on the heap, including the number of objects and their aggregate size. The main differences from the HotSpot jmap tool are as follows: Uses the Attach API. Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <option> <vmid> , where <vmid> is the Attach API virtual machine identifier for the Java\u2122 process. Does not support displaying data from core dumps; use Dump viewer instead. Does not include a -F option to force a dump of an unresponsive process. User kill -QUIT <pid> instead, where <pid> is the process identifier. For more information, see jmap . Java process status ( jps ) Displays information about running Java processes. The main differences from the HotSpot jps tool are as follows: Runs on Windows\u00ae, AIX\u00ae, and z/OS\u00ae, as well as Linux\u00ae. Uses the Attach API. Shows processes on the current host only. There is no -V option. For more information, see Java process status . Java stack ( jstack ) tool Displays information about Java stack traces and thread information for processes. The main differences from the HotSpot jstack tool are as follows: In the interests of security, the OpenJ9 implementation of jstack prints only information about local processes that are owned by the current user. Printing data for core dumps is not supported. Use the Dump viewer instead. There is no -m option. Printing data for native stack frames is not supported. There is no -F option to force a dump, although this might be accomplished using kill -QUIT <pid> on some platforms. For more information, see jstack .","title":"Switching to OpenJ9"},{"location":"tool_migration/#switching-to-openj9","text":"OpenJ9 provides the following tools, which might differ in behavior from the HotSpot equivalent. Note: For information about HotSpot equivalences and differences for items other than tools, see New to OpenJ9?","title":"Switching to OpenJ9"},{"location":"tool_migration/#java-diagnostic-command-tool-jcmd","text":"Runs diagnostic commands on a specified VM. The main difference from the HotSpot jcmd tool is that the following options are not currently supported: The -f option to read commands from a file. The Perfcounter.print option for displaying performance counters for the target VM. Selecting VMs by main class instead of VMID. Specifying 0 as a VMID to target all VMs.","title":"Java diagnostic command tool (jcmd)"},{"location":"tool_migration/#java-memory-map-tool-jmap","text":"Displays information about classes on the heap, including the number of objects and their aggregate size. The main differences from the HotSpot jmap tool are as follows: Uses the Attach API. Displays information only for local processes that are owned by the current user, due to security considerations. You can display information for remote processes by using ssh user@host jmap <option> <vmid> , where <vmid> is the Attach API virtual machine identifier for the Java\u2122 process. Does not support displaying data from core dumps; use Dump viewer instead. Does not include a -F option to force a dump of an unresponsive process. User kill -QUIT <pid> instead, where <pid> is the process identifier. For more information, see jmap .","title":"Java memory map tool (jmap)"},{"location":"tool_migration/#java-process-status-jps","text":"Displays information about running Java processes. The main differences from the HotSpot jps tool are as follows: Runs on Windows\u00ae, AIX\u00ae, and z/OS\u00ae, as well as Linux\u00ae. Uses the Attach API. Shows processes on the current host only. There is no -V option. For more information, see Java process status .","title":"Java process status (jps)"},{"location":"tool_migration/#java-stack-jstack-tool","text":"Displays information about Java stack traces and thread information for processes. The main differences from the HotSpot jstack tool are as follows: In the interests of security, the OpenJ9 implementation of jstack prints only information about local processes that are owned by the current user. Printing data for core dumps is not supported. Use the Dump viewer instead. There is no -m option. Printing data for native stack frames is not supported. There is no -F option to force a dump, although this might be accomplished using kill -QUIT <pid> on some platforms. For more information, see jstack .","title":"Java stack (jstack) tool"},{"location":"tool_traceformat/","text":"Trace formatter ( traceformat ) The trace formatter is a Java\u2122 program that converts binary trace point data in a trace file to a readable form. The formatter requires the TraceFormat.dat and J9TraceFormat.dat files, which contain the formatting templates. The formatter produces a file that contains header information about the VM that produced the binary trace file, a list of threads for which trace points were produced, and the formatted trace points with their time stamp, thread ID, trace point ID, and trace point data. Syntax To use the trace formatter on a binary trace file type: traceformat <input_file> [<output_file>] <parameters> Where <input_file> is the name of the binary trace file to be formatted, and <output_file> is the name of the output file. If you do not specify an output file, the output file is called input_file.fmt . The size of the heap that is needed to format the trace is directly proportional to the number of threads present in the trace file. For large numbers of threads the formatter might run out of memory, generating the error OutOfMemoryError . In this case, increase the heap size by using the -Xmx option. Parameters The following <parameters> are available with the trace formatter: Option Explanation -datfile=<file1.dat>[,<file2.dat>] A comma-separated list of trace formatting data files. By default, the following files are used:$JAVA_HOME/lib/J9TraceFormat.dat and $JAVA_HOME/lib/TraceFormat.dat -format_time=yes|no Specifies whether to format the time stamps into human readable form. The default is yes . -help Displays usage information. -indent Indents trace messages at each Entry trace point and outdents trace messages at each Exit trace point. The default is not to indent the messages. -summary Prints summary information to the screen without generating an output file. -threads=<thread id>[,<thread id>]... Filters the output for the given thread IDs only. thread id is the ID of the thread, which can be specified in decimal or hex (0x) format. Any number of thread IDs can be specified, separated by commas. -timezone=+|-HH:MM Specifies the offset from UTC, as positive or negative hours and minutes, to apply when formatting time stamps. -verbose Output detailed warning and error messages, and performance statistics. Examples The following example shows output from running the trace formatter command: C:\\test>traceformat sample.trc Writing formatted trace output to file sample.trc.fmt Processing 0.4921875Mb of binary trace data Completed processing of 6983 tracepoints with 0 warnings and 0 errors The formatted trace output looks similar to the following extract, which is truncated to show the key areas of information: Trace Summary Service level: JRE 1.8.0 Windows 7 amd64-64 build (pwa6480sr2-20150624_06(SR2)) JVM startup options: -Xoptionsfile=c:\\build\\pwa6480sr2-20150624\\sdk\\lib\\compressedrefs\\options.default .... Processor information: Arch family: AMD64 Processor Sub-type: Opteron Num Processors: 8 Word size: 64 Trace activation information:: FORMAT=c:\\build\\pwa6480sr2-20150624\\sdk\\lib;. MAXIMAL=all{level1} EXCEPTION=j9mm{gclogger} MAXIMAL=all{level2} output=sample Trace file header: JVM start time: 08:58:35.527000000 Generations: 1 Pointer size: 8 Active threads .... 0x000000000f155f00 Attach API wait loop 0x000000000f18b200 Thread-1 0x000000000f190200 Thread-3 Trace Formatted Data Time (UTC) Thread ID Tracepoint ID Type Tracepoint Data 08:58:35.527291919 *0x000000000f010500 j9trc.0 Event Trace engine initialized for VM = 0x3ad4d0 08:58:35.527349836 0x000000000f010500 j9prt.0 Event Trace engine initialized for module j9port 08:58:35.527354040 0x000000000f010500 j9thr.0 Event Trace engine initialized for module j9thr 08:58:35.529409621 *0x000000000f01eb00 j9trc.5 Event Thread started VMthread = 0xf01eb00, name = (unnamed thread), nativeID = 0x24a798 .... 08:58:35.536134516 0x000000000f010500 j9vm.1 Entry >Create RAM class from ROM class 0x3cab680 in class loader 0x3042338 08:58:35.536136384 0x000000000f010500 j9vm.80 Event ROM class 0x3cab680 is named java/lang/Object 08:58:35.536200373 0x000000000f010500 j9vm.2 Exit <Created RAM class 0xf03ef00 from ROM class 0x3cab680","title":"Trace formatter"},{"location":"tool_traceformat/#trace-formatter-traceformat","text":"The trace formatter is a Java\u2122 program that converts binary trace point data in a trace file to a readable form. The formatter requires the TraceFormat.dat and J9TraceFormat.dat files, which contain the formatting templates. The formatter produces a file that contains header information about the VM that produced the binary trace file, a list of threads for which trace points were produced, and the formatted trace points with their time stamp, thread ID, trace point ID, and trace point data.","title":"Trace formatter (traceformat)"},{"location":"tool_traceformat/#syntax","text":"To use the trace formatter on a binary trace file type: traceformat <input_file> [<output_file>] <parameters> Where <input_file> is the name of the binary trace file to be formatted, and <output_file> is the name of the output file. If you do not specify an output file, the output file is called input_file.fmt . The size of the heap that is needed to format the trace is directly proportional to the number of threads present in the trace file. For large numbers of threads the formatter might run out of memory, generating the error OutOfMemoryError . In this case, increase the heap size by using the -Xmx option.","title":"Syntax"},{"location":"tool_traceformat/#parameters","text":"The following <parameters> are available with the trace formatter: Option Explanation -datfile=<file1.dat>[,<file2.dat>] A comma-separated list of trace formatting data files. By default, the following files are used:$JAVA_HOME/lib/J9TraceFormat.dat and $JAVA_HOME/lib/TraceFormat.dat -format_time=yes|no Specifies whether to format the time stamps into human readable form. The default is yes . -help Displays usage information. -indent Indents trace messages at each Entry trace point and outdents trace messages at each Exit trace point. The default is not to indent the messages. -summary Prints summary information to the screen without generating an output file. -threads=<thread id>[,<thread id>]... Filters the output for the given thread IDs only. thread id is the ID of the thread, which can be specified in decimal or hex (0x) format. Any number of thread IDs can be specified, separated by commas. -timezone=+|-HH:MM Specifies the offset from UTC, as positive or negative hours and minutes, to apply when formatting time stamps. -verbose Output detailed warning and error messages, and performance statistics.","title":"Parameters"},{"location":"tool_traceformat/#examples","text":"The following example shows output from running the trace formatter command: C:\\test>traceformat sample.trc Writing formatted trace output to file sample.trc.fmt Processing 0.4921875Mb of binary trace data Completed processing of 6983 tracepoints with 0 warnings and 0 errors The formatted trace output looks similar to the following extract, which is truncated to show the key areas of information: Trace Summary Service level: JRE 1.8.0 Windows 7 amd64-64 build (pwa6480sr2-20150624_06(SR2)) JVM startup options: -Xoptionsfile=c:\\build\\pwa6480sr2-20150624\\sdk\\lib\\compressedrefs\\options.default .... Processor information: Arch family: AMD64 Processor Sub-type: Opteron Num Processors: 8 Word size: 64 Trace activation information:: FORMAT=c:\\build\\pwa6480sr2-20150624\\sdk\\lib;. MAXIMAL=all{level1} EXCEPTION=j9mm{gclogger} MAXIMAL=all{level2} output=sample Trace file header: JVM start time: 08:58:35.527000000 Generations: 1 Pointer size: 8 Active threads .... 0x000000000f155f00 Attach API wait loop 0x000000000f18b200 Thread-1 0x000000000f190200 Thread-3 Trace Formatted Data Time (UTC) Thread ID Tracepoint ID Type Tracepoint Data 08:58:35.527291919 *0x000000000f010500 j9trc.0 Event Trace engine initialized for VM = 0x3ad4d0 08:58:35.527349836 0x000000000f010500 j9prt.0 Event Trace engine initialized for module j9port 08:58:35.527354040 0x000000000f010500 j9thr.0 Event Trace engine initialized for module j9thr 08:58:35.529409621 *0x000000000f01eb00 j9trc.5 Event Thread started VMthread = 0xf01eb00, name = (unnamed thread), nativeID = 0x24a798 .... 08:58:35.536134516 0x000000000f010500 j9vm.1 Entry >Create RAM class from ROM class 0x3cab680 in class loader 0x3042338 08:58:35.536136384 0x000000000f010500 j9vm.80 Event ROM class 0x3cab680 is named java/lang/Object 08:58:35.536200373 0x000000000f010500 j9vm.2 Exit <Created RAM class 0xf03ef00 from ROM class 0x3cab680","title":"Examples"},{"location":"version0.10/","text":"What's new in version 0.10.0 The following new features and notable changes since v.0.9.0 are included in this release: New binaries and changes to supported environments. Change to the default shared classes cache size for OpenJDK 8 builds New information for the SHARED CLASSES section of a Javadump file Support for OpenJDK HotSpot options Features and changes Binaries and supported environments OpenJ9 release 0.10.0 supports OpenJDK 11, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 11 OpenJDK 11 with Eclipse OpenJ9 is a long term support (LTS) release and supersedes OpenJDK 10 with Eclipse OpenJ9. Although it is possible to build an OpenJDK v8 with the OpenJ9 0.10.0 release level, testing at the project is not complete and therefore support is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments Change to the default shared classes cache size For OpenJDK 8 builds, the default shared classes cache size is increased from 16 MB to 300 MB, with a \"soft\" maximum limit for the initial size of the cache set to 64 MB. Certain exceptions apply. For more information, see -Xshareclasses . The new default also applies to OpenJDK 11 builds. New information for the SHARED CLASSES section of a Java dump file The value of the soft maximum size ( -Xscmx ) of the shared classes cache is now recorded in the SHARED CLASSES section of a Java dump file against the string 2SCLTEXTSMB . For example output, see Java dump . Support for OpenJDK HotSpot options For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:HeapDumpPath -XX:[+|-]HeapDumpOnOutOfMemory -XX:ActiveProcessorCount Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.9.0 and v 0.10.0 releases, see the Release notes .","title":"Version 0.10.0"},{"location":"version0.10/#whats-new-in-version-0100","text":"The following new features and notable changes since v.0.9.0 are included in this release: New binaries and changes to supported environments. Change to the default shared classes cache size for OpenJDK 8 builds New information for the SHARED CLASSES section of a Javadump file Support for OpenJDK HotSpot options","title":"What's new in version 0.10.0"},{"location":"version0.10/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.10/#binaries-and-supported-environments","text":"OpenJ9 release 0.10.0 supports OpenJDK 11, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 11 OpenJDK 11 with Eclipse OpenJ9 is a long term support (LTS) release and supersedes OpenJDK 10 with Eclipse OpenJ9. Although it is possible to build an OpenJDK v8 with the OpenJ9 0.10.0 release level, testing at the project is not complete and therefore support is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments","title":"Binaries and supported environments"},{"location":"version0.10/#change-to-the-default-shared-classes-cache-size","text":"For OpenJDK 8 builds, the default shared classes cache size is increased from 16 MB to 300 MB, with a \"soft\" maximum limit for the initial size of the cache set to 64 MB. Certain exceptions apply. For more information, see -Xshareclasses . The new default also applies to OpenJDK 11 builds.","title":"Change to the default shared classes cache size"},{"location":"version0.10/#new-information-for-the-shared-classes-section-of-a-java-dump-file","text":"The value of the soft maximum size ( -Xscmx ) of the shared classes cache is now recorded in the SHARED CLASSES section of a Java dump file against the string 2SCLTEXTSMB . For example output, see Java dump .","title":"New information for the SHARED CLASSES section of a Java dump file"},{"location":"version0.10/#support-for-openjdk-hotspot-options","text":"For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:HeapDumpPath -XX:[+|-]HeapDumpOnOutOfMemory -XX:ActiveProcessorCount","title":"Support for OpenJDK HotSpot options"},{"location":"version0.10/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.9.0 and v 0.10.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.11/","text":"What's new in version 0.11.0 The following new features and notable changes since v 0.10.0 are included in this release: New binaries and changes to supported environments. OpenSSL is now supported for improved native cryptographic performance Changes to the location of the default shared cache and cache snapshot directory New class data sharing suboptions Container awareness in the OpenJ9 VM is now enabled by default Pause-less garbage collection mode is now available on Linux x86 platforms You can now restrict identity hash codes to non-negative values Support for OpenJDK HotSpot options Features and changes Binaries and supported environments OpenJ9 release 0.11.0 provides limited support for the macOS\u00ae platform on OpenJDK 11. Early builds of OpenJDK 11 with OpenJ9 on macOS are available at the AdoptOpenJDK project at the following link: OpenJDK version 11 Support for macOS on OpenJDK 8 is coming soon. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments OpenSSL is now supported for improved native cryptographic performance OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binary due to an unresolved problem. Changes to the location of the default shared cache and cache snapshot directory To increase security, the default shared classes cache directory is changed on non-Windows platforms from /tmp/javasharedresources/ to the user's home directory, unless you specify -Xshareclasses:groupAccess . If you use the groupAccess suboption, the default directory is unchanged because some members of the group might not have access to the user home directory. Note: For persistent caches, the shared classes cache directory cannot be on an NFS mount. If your user home directory is on an NFS mount, either move it or use the -Xshareclasses:cacheDir=<directory> suboption to specify a different directory for the cache. In general, caches cannot be shared across different Java releases, so you cannot re-use a cache that was created by a previous level of Java 11; if you use the name and cacheDir suboptions to specify an existing cache, the VM attempts to delete the cache and create a new one. However, on Windows, the cache cannot be deleted if it is in use, in which case the VM continues to use the existing cache. You can find and remove old caches or snapshots by using the following command-line options: For persistent caches: - -Xshareclasses:cacheDir=/tmp/javasharedresources/,listAllCaches to find the cache - -Xshareclasses:cacheDir=/tmp/javasharedresources/,name=<cacheName>,destroy to remove the cache For nonpersistent caches or snapshots: - -Xshareclasses:cacheDir=/tmp,listAllCaches to find the item - -Xshareclasses:cacheDir=/tmp,name=<snapshotName>,destroySnapshot to remove the item New class data sharing suboptions -Xshareclasses:bootClassesOnly : disables caching of classes that are loaded by non-bootstrap class loaders. This suboption also enables the nonfatal suboption, which allows the VM to start even if there was an error creating the shared classes cache. -Xshareclasses:fatal : prevents the VM from starting if there was an error creating the shared classes cache. You might want to enable this suboption when using the -Xshareclasses:bootClassesOnly suboption, to troubleshoot problems when creating the cache. Container awareness in the OpenJ9 VM is now enabled by default When using container technology, applications are typically run on their own and do not need to compete for memory. If the VM detects that it is running in a container environment, and a memory limit for the container is set, the VM automatically adjusts the maximum default Java heap size. In earlier releases, this behavior was enabled by setting the -XX:+UseContainerSupport option. This setting is now the default. For more information about the Java heap size set for a container, see -XX:[+|-]UseContainerSupport . Pause-less garbage collection mode is now available on Linux x86 platforms Pause-less garbage collection mode is aimed at large heap, response-time sensitive applications. When enabled, the VM attempts to reduce GC pause times. In earlier releases, pause-less garbage collection mode ( -Xgc:concurrentScavenge ) was available only on IBM z14 hardware. This mode is now available on 64-bit x86 Linux platforms. Restrictions: The Generational Concurrent ( gencon ) garbage collection policy must be used. (This is the default policy.) Compressed references must be used. See -Xcompressedrefs . Compressed references are enabled by default when the maximum heap size ( -Xmx ) \u2264 57 GB. The concurrent scavenge option is ignored if the maximum heap size is > 57 GB. You can now restrict identity hash codes to non-negative values OpenJ9 allows both positive and negative identity hashcodes, which can be problematic if your program (incorrectly) assumes hashcodes can only be positive. However, you can now use the -XX:[+|-]PositiveIdentityHash option to limit identity hash codes to non-negative values. Support for OpenJDK HotSpot options For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:MaxHeapSize -XX:InitialHeapSize Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.10.0 and v 0.11.0 releases, see the Release notes .","title":"Version 0.11.0"},{"location":"version0.11/#whats-new-in-version-0110","text":"The following new features and notable changes since v 0.10.0 are included in this release: New binaries and changes to supported environments. OpenSSL is now supported for improved native cryptographic performance Changes to the location of the default shared cache and cache snapshot directory New class data sharing suboptions Container awareness in the OpenJ9 VM is now enabled by default Pause-less garbage collection mode is now available on Linux x86 platforms You can now restrict identity hash codes to non-negative values Support for OpenJDK HotSpot options","title":"What's new in version 0.11.0"},{"location":"version0.11/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.11/#binaries-and-supported-environments","text":"OpenJ9 release 0.11.0 provides limited support for the macOS\u00ae platform on OpenJDK 11. Early builds of OpenJDK 11 with OpenJ9 on macOS are available at the AdoptOpenJDK project at the following link: OpenJDK version 11 Support for macOS on OpenJDK 8 is coming soon. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments","title":"Binaries and supported environments"},{"location":"version0.11/#openssl-is-now-supported-for-improved-native-cryptographic-performance","text":"OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binary due to an unresolved problem.","title":"OpenSSL is now supported for improved native cryptographic performance"},{"location":"version0.11/#changes-to-the-location-of-the-default-shared-cache-and-cache-snapshot-directory","text":"To increase security, the default shared classes cache directory is changed on non-Windows platforms from /tmp/javasharedresources/ to the user's home directory, unless you specify -Xshareclasses:groupAccess . If you use the groupAccess suboption, the default directory is unchanged because some members of the group might not have access to the user home directory. Note: For persistent caches, the shared classes cache directory cannot be on an NFS mount. If your user home directory is on an NFS mount, either move it or use the -Xshareclasses:cacheDir=<directory> suboption to specify a different directory for the cache. In general, caches cannot be shared across different Java releases, so you cannot re-use a cache that was created by a previous level of Java 11; if you use the name and cacheDir suboptions to specify an existing cache, the VM attempts to delete the cache and create a new one. However, on Windows, the cache cannot be deleted if it is in use, in which case the VM continues to use the existing cache. You can find and remove old caches or snapshots by using the following command-line options: For persistent caches: - -Xshareclasses:cacheDir=/tmp/javasharedresources/,listAllCaches to find the cache - -Xshareclasses:cacheDir=/tmp/javasharedresources/,name=<cacheName>,destroy to remove the cache For nonpersistent caches or snapshots: - -Xshareclasses:cacheDir=/tmp,listAllCaches to find the item - -Xshareclasses:cacheDir=/tmp,name=<snapshotName>,destroySnapshot to remove the item","title":"Changes to the location of the default shared cache and cache snapshot directory"},{"location":"version0.11/#new-class-data-sharing-suboptions","text":"-Xshareclasses:bootClassesOnly : disables caching of classes that are loaded by non-bootstrap class loaders. This suboption also enables the nonfatal suboption, which allows the VM to start even if there was an error creating the shared classes cache. -Xshareclasses:fatal : prevents the VM from starting if there was an error creating the shared classes cache. You might want to enable this suboption when using the -Xshareclasses:bootClassesOnly suboption, to troubleshoot problems when creating the cache.","title":"New class data sharing suboptions"},{"location":"version0.11/#container-awareness-in-the-openj9-vm-is-now-enabled-by-default","text":"When using container technology, applications are typically run on their own and do not need to compete for memory. If the VM detects that it is running in a container environment, and a memory limit for the container is set, the VM automatically adjusts the maximum default Java heap size. In earlier releases, this behavior was enabled by setting the -XX:+UseContainerSupport option. This setting is now the default. For more information about the Java heap size set for a container, see -XX:[+|-]UseContainerSupport .","title":"Container awareness in the OpenJ9 VM is now enabled by default"},{"location":"version0.11/#pause-less-garbage-collection-mode-is-now-available-on-linux-x86-platforms","text":"Pause-less garbage collection mode is aimed at large heap, response-time sensitive applications. When enabled, the VM attempts to reduce GC pause times. In earlier releases, pause-less garbage collection mode ( -Xgc:concurrentScavenge ) was available only on IBM z14 hardware. This mode is now available on 64-bit x86 Linux platforms. Restrictions: The Generational Concurrent ( gencon ) garbage collection policy must be used. (This is the default policy.) Compressed references must be used. See -Xcompressedrefs . Compressed references are enabled by default when the maximum heap size ( -Xmx ) \u2264 57 GB. The concurrent scavenge option is ignored if the maximum heap size is > 57 GB.","title":"Pause-less garbage collection mode is now available on Linux x86 platforms"},{"location":"version0.11/#you-can-now-restrict-identity-hash-codes-to-non-negative-values","text":"OpenJ9 allows both positive and negative identity hashcodes, which can be problematic if your program (incorrectly) assumes hashcodes can only be positive. However, you can now use the -XX:[+|-]PositiveIdentityHash option to limit identity hash codes to non-negative values.","title":"You can now restrict identity hash codes to non-negative values"},{"location":"version0.11/#support-for-openjdk-hotspot-options","text":"For compatibility, the following OpenJDK Hotspot options are now supported by OpenJ9: -XX:MaxHeapSize -XX:InitialHeapSize","title":"Support for OpenJDK HotSpot options"},{"location":"version0.11/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.10.0 and v 0.11.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.12/","text":"What's new in version 0.12.x Version 0.12.0 The following new features and notable changes since v 0.11.0 are included in this release: Improved flexibility for managing the size of the JIT code cache Idle-tuning is enabled by default when OpenJ9 runs in a docker container Changes to default shared classes cache directory permissions (not Windows) OpenSSL is now supported for improved native cryptographic performance Improved support for pause-less garbage collection RSA algorithm support for OpenSSL IBM_JAVA_OPTIONS is deprecated Warning: Following the release of OpenJ9 0.12.0, an intermittent problem was identified with OpenSSL V1.1.x acceleration of the cryptographic Digest algorithm. For more information about the issue, see #4530 . You can turn off the Digest algorithm by setting the -Djdk.nativeDigest system property to false . A new release of OpenJ9 (0.12.1) is available that disables the Digest algorithm by default. Features and changes Binaries and supported environments OpenJ9 release 0.12.0 provides support for OpenJDK 8 with OpenJ9 and OpenJDK 11 with OpenJ9 . In this release support is extended to the 64-bit macOS\u00ae platform on OpenJDK with OpenJ9. Builds for all platforms are available from the AdoptOpenJDK project at the following links: OpenJDK 8 with OpenJ9 OpenJDK 11 with OpenJ9 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Improved flexibility for managing the size of the JIT code cache The JIT code cache stores the native code of compiled Java\u2122 methods. By default, the size of the code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. In earlier releases the size of the code cache could be increased from the default value by using the -Xcodecachetotal command line option. In this release the size can also be decreased by using this option, with a minimum size of 2 MB. The size of the JIT code cache also affects the size of the JIT data cache, which holds metadata about compiled methods. If you use the -Xcodecachetotal option to manage the size of the code cache, the size of the data cache is adjusted by the same proportion. For more information, see -Xcodecachetotal . Idle-tuning is enabled by default when OpenJ9 runs in a docker container In an earlier release, a set of idle-tuning options were introduced to manage the footprint of the Java heap when the OpenJ9 VM is in an idle state. These options could be set manually on the command line. In this release, the following two options are enabled by default when OpenJ9 is running in a container: -XX:[+|-]IdleTuningGcOnIdle , which runs a garbage collection cycle and releases free memory pages back to the operating system when the VM state is set to idle. -XX:[+|-]IdleTuningCompactOnIdle , which compacts the object heap to reduce fragmentation when the VM state is set to idle. By default, the VM must be idle for 180 seconds before the status is set to idle. To control the wait time before an idle state is set, use the -XX:IdleTuningMinIdleWaitTime option. To turn off idle detection, set the value to 0 . Changes to default shared classes cache directory permissions (not Windows) If you do not use the cachDirPerm suboption to specify permissions for a shared classes cache directory, and the cache directory is not the /tmp/javasharedresources default, the following changes apply: When creating a new cache directory, the default permissions are now stricter. If the cache directory already exists, permissions are now unchanged (previously, when a cache was opened using this directory, the permissions would be set to 0777). For more information, see -Xshareclasses . OpenSSL is now supported for improved native cryptographic performance OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: OpenJDK 8 with OpenJ9 includes OpenSSL support since v 0.11.0. Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binaries due to an unresolved problem. Improved support for pause-less garbage collection Concurrent scavenge mode is now supported on 64-bit Windows operating systems. In Eclipse OpenJ9 v 0.11.0, support was added for -Xgc:concurrentScavenge on Linux x86-64 virtual machines that use compressed references. In this release, support is now available for Linux x86-64 large-heap virtual machines (non-compressed references). For more information, see the -Xgc:concurrentScavenge option. RSA algorithm support for OpenSSL OpenSSL v1.1 support for the RSA algorithm is added in this release, providing improved cryptographic performance. OpenSSL support is enabled by default. If you want to turn off support for the RSA algorithm, set the -Djdk.nativeRSA system property to false . IBM_JAVA_OPTIONS is deprecated The VM environment variable IBM_JAVA_OPTIONS is deprecated and is replaced by OPENJ9_JAVA_OPTIONS . IBM_JAVA_OPTIONS will be removed in a future release. For more information about the use of this variable, see the general options in Environment variables . Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.11.0 and v 0.12.0 releases, see the Release notes . Version 0.12.1 The following change is implemented since v 0.12.0: By default, OpenJ9 provides native cryptographic acceleration using OpenSSL v 1.1.x for the Digest, CBC, GCM, and RSA algorithms. Under certain circumstances acceleration of the Digest algorithm was found to cause a segmentation error. Cryptographic acceleration of the Digest algorithm is now turned off by default. The system property -Djdk.nativeDigest cannot be used to turn on support. This property is ignored by the VM. Full release information Release notes to describe the changes between Eclipse OpenJ9 v 0.12.0 and v 0.12.1 releases, can be found in the OpenJ9 GitHub repository .","title":"Version 0.12.0"},{"location":"version0.12/#whats-new-in-version-012x","text":"","title":"What's new in version 0.12.x"},{"location":"version0.12/#version-0120","text":"The following new features and notable changes since v 0.11.0 are included in this release: Improved flexibility for managing the size of the JIT code cache Idle-tuning is enabled by default when OpenJ9 runs in a docker container Changes to default shared classes cache directory permissions (not Windows) OpenSSL is now supported for improved native cryptographic performance Improved support for pause-less garbage collection RSA algorithm support for OpenSSL IBM_JAVA_OPTIONS is deprecated Warning: Following the release of OpenJ9 0.12.0, an intermittent problem was identified with OpenSSL V1.1.x acceleration of the cryptographic Digest algorithm. For more information about the issue, see #4530 . You can turn off the Digest algorithm by setting the -Djdk.nativeDigest system property to false . A new release of OpenJ9 (0.12.1) is available that disables the Digest algorithm by default.","title":"Version 0.12.0"},{"location":"version0.12/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.12/#binaries-and-supported-environments","text":"OpenJ9 release 0.12.0 provides support for OpenJDK 8 with OpenJ9 and OpenJDK 11 with OpenJ9 . In this release support is extended to the 64-bit macOS\u00ae platform on OpenJDK with OpenJ9. Builds for all platforms are available from the AdoptOpenJDK project at the following links: OpenJDK 8 with OpenJ9 OpenJDK 11 with OpenJ9 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.12/#improved-flexibility-for-managing-the-size-of-the-jit-code-cache","text":"The JIT code cache stores the native code of compiled Java\u2122 methods. By default, the size of the code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. In earlier releases the size of the code cache could be increased from the default value by using the -Xcodecachetotal command line option. In this release the size can also be decreased by using this option, with a minimum size of 2 MB. The size of the JIT code cache also affects the size of the JIT data cache, which holds metadata about compiled methods. If you use the -Xcodecachetotal option to manage the size of the code cache, the size of the data cache is adjusted by the same proportion. For more information, see -Xcodecachetotal .","title":"Improved flexibility for managing the size of the JIT code cache"},{"location":"version0.12/#idle-tuning-is-enabled-by-default-when-openj9-runs-in-a-docker-container","text":"In an earlier release, a set of idle-tuning options were introduced to manage the footprint of the Java heap when the OpenJ9 VM is in an idle state. These options could be set manually on the command line. In this release, the following two options are enabled by default when OpenJ9 is running in a container: -XX:[+|-]IdleTuningGcOnIdle , which runs a garbage collection cycle and releases free memory pages back to the operating system when the VM state is set to idle. -XX:[+|-]IdleTuningCompactOnIdle , which compacts the object heap to reduce fragmentation when the VM state is set to idle. By default, the VM must be idle for 180 seconds before the status is set to idle. To control the wait time before an idle state is set, use the -XX:IdleTuningMinIdleWaitTime option. To turn off idle detection, set the value to 0 .","title":"Idle-tuning is enabled by default when OpenJ9 runs in a docker container"},{"location":"version0.12/#changes-to-default-shared-classes-cache-directory-permissions-not-windows","text":"If you do not use the cachDirPerm suboption to specify permissions for a shared classes cache directory, and the cache directory is not the /tmp/javasharedresources default, the following changes apply: When creating a new cache directory, the default permissions are now stricter. If the cache directory already exists, permissions are now unchanged (previously, when a cache was opened using this directory, the permissions would be set to 0777). For more information, see -Xshareclasses .","title":"Changes to default shared classes cache directory permissions (not Windows)"},{"location":"version0.12/#openssl-is-now-supported-for-improved-native-cryptographic-performance","text":"OpenSSL is a native open source cryptographic toolkit for Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols, which provides improved cryptographic performance compared to the in-built OpenJDK Java cryptographic implementation. The OpenSSL V1.1.x implementation is enabled by default and supported for the Digest, CBC, and GCM algorithms. Binaries obtained from AdoptOpenJDK include OpenSSL v1.1.x (see Note). For more information about tuning the OpenSSL implementation, see Performance tuning . Note: OpenJDK 8 with OpenJ9 includes OpenSSL support since v 0.11.0. Currently, OpenSSL is not bundled as part of the AdoptOpenJDK AIX binaries due to an unresolved problem.","title":"OpenSSL is now supported for improved native cryptographic performance"},{"location":"version0.12/#improved-support-for-pause-less-garbage-collection","text":"Concurrent scavenge mode is now supported on 64-bit Windows operating systems. In Eclipse OpenJ9 v 0.11.0, support was added for -Xgc:concurrentScavenge on Linux x86-64 virtual machines that use compressed references. In this release, support is now available for Linux x86-64 large-heap virtual machines (non-compressed references). For more information, see the -Xgc:concurrentScavenge option.","title":"Improved support for pause-less garbage collection"},{"location":"version0.12/#rsa-algorithm-support-for-openssl","text":"OpenSSL v1.1 support for the RSA algorithm is added in this release, providing improved cryptographic performance. OpenSSL support is enabled by default. If you want to turn off support for the RSA algorithm, set the -Djdk.nativeRSA system property to false .","title":"RSA algorithm support for OpenSSL"},{"location":"version0.12/#ibm_java_options-is-deprecated","text":"The VM environment variable IBM_JAVA_OPTIONS is deprecated and is replaced by OPENJ9_JAVA_OPTIONS . IBM_JAVA_OPTIONS will be removed in a future release. For more information about the use of this variable, see the general options in Environment variables .","title":"IBM_JAVA_OPTIONS is deprecated"},{"location":"version0.12/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.11.0 and v 0.12.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.12/#version-0121","text":"The following change is implemented since v 0.12.0: By default, OpenJ9 provides native cryptographic acceleration using OpenSSL v 1.1.x for the Digest, CBC, GCM, and RSA algorithms. Under certain circumstances acceleration of the Digest algorithm was found to cause a segmentation error. Cryptographic acceleration of the Digest algorithm is now turned off by default. The system property -Djdk.nativeDigest cannot be used to turn on support. This property is ignored by the VM.","title":"Version 0.12.1"},{"location":"version0.12/#full-release-information_1","text":"Release notes to describe the changes between Eclipse OpenJ9 v 0.12.0 and v 0.12.1 releases, can be found in the OpenJ9 GitHub repository .","title":"Full release information"},{"location":"version0.13/","text":"What's new in version 0.13.0 The following new features and notable changes since v 0.12.1 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New Java\u2122 process status tool Writing a Java dump to STDOUT or STDERR Better diagnostic information for Linux systems that implement control groups Improved support for pause-less garbage collection Features and changes Binaries and supported environments OpenJ9 release 0.13.0 supports OpenJDK 12, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 12 OpenJDK 12 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.12.0. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.13.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Support for OpenSSL 1.0.2 OpenSSL cryptographic support is extended to include OpenSSL 1.0.2 for the Digest, CBC, GCM, and RSA algorithms. Support is enabled by default. On Linux and AIX platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . In addition, support for the OpenSSL Digest algorithm is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path. New Java process status tool A Java process status tool ( jps ) is available for querying running Java processes. For more information, see Java process status . Writing a Java dump to STDOUT or STDERR You can now write a Java dump file to STDOUT or STDERR by using the -Xdump command-line option. See Writing to STDOUT / STDERR for details. Better diagnostic information for Linux systems that implement control groups If you use control groups (cgroups) to manage resources on Linux systems, information about CPU and memory limits is now recorded in a Java dump file. This information is particularly important for applications that run in Docker containers, because when resource limits are set inside a container, the Docker Engine relies on cgroups to enforce the settings. If you are getting a Java OutOfMemoryError error because a container limit has been set on the amount of memory available to an application and this allocation is not sufficient, you can diagnose this problem from the Java dump file. You can find the cgroup information in the ENVINFO section. For sample output, see Java dump (ENVINFO) . Improved support for pause-less garbage collection Concurrent scavenge mode is now supported on the following platforms: Linux on POWER LE AIX For more information, see the -Xgc:concurrentScavenge option. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.12.1 and v 0.13.0 releases, see the Release notes .","title":"Version 0.13.0"},{"location":"version0.13/#whats-new-in-version-0130","text":"The following new features and notable changes since v 0.12.1 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New Java\u2122 process status tool Writing a Java dump to STDOUT or STDERR Better diagnostic information for Linux systems that implement control groups Improved support for pause-less garbage collection","title":"What's new in version 0.13.0"},{"location":"version0.13/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.13/#binaries-and-supported-environments","text":"OpenJ9 release 0.13.0 supports OpenJDK 12, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 12 OpenJDK 12 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.12.0. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.13.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.13/#support-for-openssl-102","text":"OpenSSL cryptographic support is extended to include OpenSSL 1.0.2 for the Digest, CBC, GCM, and RSA algorithms. Support is enabled by default. On Linux and AIX platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . In addition, support for the OpenSSL Digest algorithm is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path.","title":"Support for OpenSSL 1.0.2"},{"location":"version0.13/#new-java-process-status-tool","text":"A Java process status tool ( jps ) is available for querying running Java processes. For more information, see Java process status .","title":"New Java process status tool"},{"location":"version0.13/#writing-a-java-dump-to-stdout-or-stderr","text":"You can now write a Java dump file to STDOUT or STDERR by using the -Xdump command-line option. See Writing to STDOUT / STDERR for details.","title":"Writing a Java dump to STDOUT or STDERR"},{"location":"version0.13/#better-diagnostic-information-for-linux-systems-that-implement-control-groups","text":"If you use control groups (cgroups) to manage resources on Linux systems, information about CPU and memory limits is now recorded in a Java dump file. This information is particularly important for applications that run in Docker containers, because when resource limits are set inside a container, the Docker Engine relies on cgroups to enforce the settings. If you are getting a Java OutOfMemoryError error because a container limit has been set on the amount of memory available to an application and this allocation is not sufficient, you can diagnose this problem from the Java dump file. You can find the cgroup information in the ENVINFO section. For sample output, see Java dump (ENVINFO) .","title":"Better diagnostic information for Linux systems that implement control groups"},{"location":"version0.13/#improved-support-for-pause-less-garbage-collection","text":"Concurrent scavenge mode is now supported on the following platforms: Linux on POWER LE AIX For more information, see the -Xgc:concurrentScavenge option.","title":"Improved support for pause-less garbage collection"},{"location":"version0.13/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.12.1 and v 0.13.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.14/","text":"What's new in version 0.14.x Version 0.14.0 The following new features and notable changes since v 0.13.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New option for ignoring or reporting unrecognized -XX: options Improved support for pause-less garbage collection New Java stack ( jstack ) tool for obtaining stack traces and thread information New Java process status ( jps ) tool New experimental option to improve the performance of JVMTI watched fields New option to prevent a network query being used to determine host name and IP address Changes to the shared classes cache generation number Change to the default native stack size on 64-bit z/OS\u00ae Features and changes Binaries and supported environments OpenJ9 release 0.14.0 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 12 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Support for OpenSSL 1.0.2 OpenJ9 release 0.13.0 introduced support for OpenSSL 1.0.2 for Java 12. In this release, support is extended to Java 8 and Java 11. OpenSSL is enabled by default for the CBC, Digest, GCM, and RSA cryptographic algorithms. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . Note: Support for the OpenSSL Digest algorithm on Java 8 and 11 is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path. New option for ignoring or reporting unrecognized -XX: options By default, unrecognized -XX: command-line options are ignored, which prevents an application failing to start. You can now use -XX:-IgnoreUnrecognizedXXColonOptions to turn off this behavior, so that unrecognized -XX: options are reported instead. For more information, see -XX:[+|-]IgnoreUnrecognizedXXColonOptions . Improved support for pause-less garbage collection Support for Concurrent scavenge mode is now extended to Linux on POWER\u00ae BE architectures. For more information, see -Xgc:concurrentScavenge . New jstack tool for obtaining stack traces and thread information For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jstack tool. To learn how to use the tool and about any differences compared to the HotSpot tool of the same name, see Java stack tool . New jps tool OpenJ9 release 0.13.0 introduced support for the jps tool for Java 12. In this release, support is added for Java 8 and 11. The jps tool can be used to query running Java processes. For more information, see Java process status . New experimental option to improve the performance of JVMTI watched fields The -XX:[+|-]JITInlineWatches option is introduced in this release. When enabled, the option turns on experimental JIT operations that are intended to improve the performance of JVMTI watched fields. This option is currently supported only on x86 platforms (Windows\u00ae, macOS\u00ae, and Linux). New option to prevent a network query being used to determine host name and IP address By default, a network query is used to determine the host name and IP address for troubleshooting purposes. To avoid your program waiting to time out if a nameserver cannot be contacted, you can now prevent the query from being performed. For more information, see -XX:[+|-]ReadIPInfoForRAS . Changes to the shared classes cache generation number On all platforms, the format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache, rather than re-creating or reusing an existing cache. To save space, all existing shared caches can be removed unless they are in use by an earlier release. For more information about destroying a shared classes cache, see -Xshareclasses . Change to the default native stack size on 64-bit z/OS The default stack size for operating system threads on 64-bit z/OS is changed from 384 KB to the operating system minimum of 1 MB. For more information about this setting, see -Xmso . Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.13.0 and v 0.14.0 releases, see the Release notes . Version 0.14.2 The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.1 OpenSSL Digest algorithm disabled Features and changes Binaries and supported environments OpenJ9 release 0.14.2 supports OpenJDK 8 and 11. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 The Windows (MSI) installer for OpenJDK v8 (64-bit) can now be used to optionally install the IcedTea-Web package, which provides equivalent functionality to Java Web Start. For more information about the installer, see the AdoptOpenJDK Installation page . For more information about migrating to IcedTea-Web, read the AdoptOpenJDK Migration Guide . To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Support for OpenSSL 1.0.1 OpenSSL version 1.0.1 support is now enabled; Earlier releases supported only OpenSSL 1.0.2 and 1.1.x. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . OpenSSL Digest algorithm disabled Due to issue #5611 , the Digest algorithm is disabled.","title":"Version 0.14.0"},{"location":"version0.14/#whats-new-in-version-014x","text":"","title":"What's new in version 0.14.x"},{"location":"version0.14/#version-0140","text":"The following new features and notable changes since v 0.13.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.2 New option for ignoring or reporting unrecognized -XX: options Improved support for pause-less garbage collection New Java stack ( jstack ) tool for obtaining stack traces and thread information New Java process status ( jps ) tool New experimental option to improve the performance of JVMTI watched fields New option to prevent a network query being used to determine host name and IP address Changes to the shared classes cache generation number Change to the default native stack size on 64-bit z/OS\u00ae","title":"Version 0.14.0"},{"location":"version0.14/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.14/#binaries-and-supported-environments","text":"OpenJ9 release 0.14.0 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 12 To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.14/#support-for-openssl-102","text":"OpenJ9 release 0.13.0 introduced support for OpenSSL 1.0.2 for Java 12. In this release, support is extended to Java 8 and Java 11. OpenSSL is enabled by default for the CBC, Digest, GCM, and RSA cryptographic algorithms. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations . Note: Support for the OpenSSL Digest algorithm on Java 8 and 11 is re-enabled in this release following the resolution of issue #4530 . Warning: Earlier versions of OpenJDK with OpenJ9 from the AdoptOpenJDK project bundle OpenSSL as part of the binary package. On Linux and AIX systems, OpenSSL is no longer bundled and the libraries are expected to be available on the system path.","title":"Support for OpenSSL 1.0.2"},{"location":"version0.14/#new-option-for-ignoring-or-reporting-unrecognized-xx-options","text":"By default, unrecognized -XX: command-line options are ignored, which prevents an application failing to start. You can now use -XX:-IgnoreUnrecognizedXXColonOptions to turn off this behavior, so that unrecognized -XX: options are reported instead. For more information, see -XX:[+|-]IgnoreUnrecognizedXXColonOptions .","title":"New option for ignoring or reporting unrecognized -XX: options"},{"location":"version0.14/#improved-support-for-pause-less-garbage-collection","text":"Support for Concurrent scavenge mode is now extended to Linux on POWER\u00ae BE architectures. For more information, see -Xgc:concurrentScavenge .","title":"Improved support for pause-less garbage collection"},{"location":"version0.14/#new-jstack-tool-for-obtaining-stack-traces-and-thread-information","text":"For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jstack tool. To learn how to use the tool and about any differences compared to the HotSpot tool of the same name, see Java stack tool .","title":"New jstack tool for obtaining stack traces and thread information"},{"location":"version0.14/#new-jps-tool","text":"OpenJ9 release 0.13.0 introduced support for the jps tool for Java 12. In this release, support is added for Java 8 and 11. The jps tool can be used to query running Java processes. For more information, see Java process status .","title":"New jps tool"},{"location":"version0.14/#new-experimental-option-to-improve-the-performance-of-jvmti-watched-fields","text":"The -XX:[+|-]JITInlineWatches option is introduced in this release. When enabled, the option turns on experimental JIT operations that are intended to improve the performance of JVMTI watched fields. This option is currently supported only on x86 platforms (Windows\u00ae, macOS\u00ae, and Linux).","title":"New experimental option to improve the performance of JVMTI watched fields"},{"location":"version0.14/#new-option-to-prevent-a-network-query-being-used-to-determine-host-name-and-ip-address","text":"By default, a network query is used to determine the host name and IP address for troubleshooting purposes. To avoid your program waiting to time out if a nameserver cannot be contacted, you can now prevent the query from being performed. For more information, see -XX:[+|-]ReadIPInfoForRAS .","title":"New option to prevent a network query being used to determine host name and IP address"},{"location":"version0.14/#changes-to-the-shared-classes-cache-generation-number","text":"On all platforms, the format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache, rather than re-creating or reusing an existing cache. To save space, all existing shared caches can be removed unless they are in use by an earlier release. For more information about destroying a shared classes cache, see -Xshareclasses .","title":"Changes to the shared classes cache generation number"},{"location":"version0.14/#change-to-the-default-native-stack-size-on-64-bit-zos","text":"The default stack size for operating system threads on 64-bit z/OS is changed from 384 KB to the operating system minimum of 1 MB. For more information about this setting, see -Xmso .","title":"Change to the default native stack size on 64-bit z/OS"},{"location":"version0.14/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.13.0 and v 0.14.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.14/#version-0142","text":"The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Support for OpenSSL 1.0.1 OpenSSL Digest algorithm disabled","title":"Version 0.14.2"},{"location":"version0.14/#features-and-changes_1","text":"","title":"Features and changes"},{"location":"version0.14/#binaries-and-supported-environments_1","text":"OpenJ9 release 0.14.2 supports OpenJDK 8 and 11. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 The Windows (MSI) installer for OpenJDK v8 (64-bit) can now be used to optionally install the IcedTea-Web package, which provides equivalent functionality to Java Web Start. For more information about the installer, see the AdoptOpenJDK Installation page . For more information about migrating to IcedTea-Web, read the AdoptOpenJDK Migration Guide . To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.14/#support-for-openssl-101","text":"OpenSSL version 1.0.1 support is now enabled; Earlier releases supported only OpenSSL 1.0.2 and 1.1.x. On Linux\u00ae and AIX\u00ae platforms, the OpenSSL libraries are expected to be available on the system path. For more information about cryptographic acceleration with OpenSSL, see Cryptographic operations .","title":"Support for OpenSSL 1.0.1"},{"location":"version0.14/#openssl-digest-algorithm-disabled","text":"Due to issue #5611 , the Digest algorithm is disabled.","title":"OpenSSL Digest algorithm disabled"},{"location":"version0.15/","text":"What's new in version 0.15.1 The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Performance improvements for JVMTI watched fields Support for pause-less garbage collection on IBM Z systems ChaCha20 algorithm support for OpenSSL OpenSSL Digest algorithm disabled Support for OpenJDK HotSpot options Support for Transparent Huge Pages (THP) Support for low-overhead heap profiling (JEP 331) New Java memory map (jmap) tool Automatically setting an initial heap size Removal of -Xdiagnosticscollector option Change in behaviour of -XX:[+|-]IdleTuningCompactOnIdle Addition of heuristics for compaction during idle GC Change in shared classes behavior for checking timestamps of jar or zip files Features and changes Binaries and supported environments OpenJ9 release 0.15.0 and 0.15.1 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: - OpenJDK version 8 - OpenJDK version 11 - OpenJDK version 12 Note: The binaries at AdoptOpenJDK are labeled 0.15.1 due to a missing change. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Performance improvements for JVMTI watched fields OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which, when enabled, turned on experimental JIT operations to improve the performance of JVMTI watched fields. Following successful results, this option is now enabled by default. This option is now also supported on z/OS\u00ae and Linux for IBM Z\u00ae, in addition to x86 platforms (Windows\u00ae, macOS\u00ae, and Linux). Support for pause-less garbage collection on IBM Z systems Support for Concurrent scavenge mode is now extended to Linux on IBM Z\u00ae systems and z/OS\u00ae. For more information, see -Xgc:concurrentScavenge . ChaCha20 algorithm support for OpenSSL The ChaCha20 and ChaCha20-Poly1305 algorithms can now use OpenSSL on Java 11. For more information, see -Djdk.nativeChaCha20 . OpenSSL Digest algorithm disabled Due to issue #5611 , the Digest algorithm is disabled. This algorithm was disabled for Java 8 and 11 in release 0.14.2, which did not support Java 12. Support for OpenJDK HotSpot options For compatibility, the -XX:OnOutOfMemoryError OpenJDK Hotspot option is now supported by OpenJ9. Support for Transparent Huge Pages (THP) The VM now supports the allocation of huge pages on Linux when you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting. To enable this feature, set -XX:+TransparentHugePage on the command line when you start your application. This option is currently not enabled by default. Support for low-overhead heap profiling JEP 331 provides a mechanism for sampling Java heap allocations with a low overhead via the JVM Tool Interface (JVMTI). Restrictions: JEP 331 is implemented for OpenJ9 with the following limitations: The balanced and metronome garbage collection policies are not supported. The JEP331 JVMTI agent and the Health Center agent both set a sampling interval, which by default is different. If both agents are used at the same time the Health Center agent will get incorrect results, unless the sampling intervals are adjusted to use the same value. New Java memory map tool The Java memory map (jmap) tool is similar to the HotSpot tool of the same name, and can be used to print statistics about classes on the heap, including the number of objects and their aggregate size. For usage information, see Java memory map (jmap) tool . Automatically setting an initial heap size OpenJ9 can now learn and set an appropriate initial heap size for an application as an alternative to a user manually sizing and setting an -Xms value. The VM records the size of the heap when startup processing ends, writing this data to the shared classes cache. An average value is set over a few restarts, helping to ensure that the value used for the initial heap size is as accurate as possible. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. To turn on this behavior, set the -XX:+UseGCStartupHints option on the command line when you start your application. Removal of -Xdiagnosticscollector option This option was redundant and has now been removed. If you try to use this option on the command line, the VM outputs this error message: JVMJ9VM007E Command-line option unrecognised: -Xdiagnosticscollector Change in behaviour of -XX:IdleTuningCompactOnIdle -XX:[+|-]IdleTuningCompactOnIdle is now no longer effective when -XX:+IdleTuningGcOnIdle is not specified. Heuristics for compaction during idle GC OpenJ9 now automatically compacts the heap when certain triggers are met during idle garbage collection (GC). As a result of this change, -XX:[+|-]IdleTuningCompactOnIdle is deprecated. Change in shared classes behavior for checking timestamps of jar or zip files In earlier releases, the shared classes cache checks timestamps of jar or zip files every time a class is loaded and reloads a class if the timestamp has changed. This behavior is now changed; timestamps are checked only when zip or jar files are added to class loaders and used for the first time to look for a class, which can improve class-loading performance. If jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. To revert to the behavior of earlier releases, set the -Xshareclasses:checkURLTimestamps option on the command line when you start your application. Note: Multiple -Xshareclasses: options are not combined, only the last one is used. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.14.0 and v 0.15.1 releases, see the Release notes .","title":"Version 0.15.1"},{"location":"version0.15/#whats-new-in-version-0151","text":"The following new features and notable changes since v 0.14.0 are included in this release: New binaries and changes to supported environments Performance improvements for JVMTI watched fields Support for pause-less garbage collection on IBM Z systems ChaCha20 algorithm support for OpenSSL OpenSSL Digest algorithm disabled Support for OpenJDK HotSpot options Support for Transparent Huge Pages (THP) Support for low-overhead heap profiling (JEP 331) New Java memory map (jmap) tool Automatically setting an initial heap size Removal of -Xdiagnosticscollector option Change in behaviour of -XX:[+|-]IdleTuningCompactOnIdle Addition of heuristics for compaction during idle GC Change in shared classes behavior for checking timestamps of jar or zip files","title":"What's new in version 0.15.1"},{"location":"version0.15/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.15/#binaries-and-supported-environments","text":"OpenJ9 release 0.15.0 and 0.15.1 supports OpenJDK 8, 11, and 12. Binaries are available from the AdoptOpenJDK community at the following links: - OpenJDK version 8 - OpenJDK version 11 - OpenJDK version 12 Note: The binaries at AdoptOpenJDK are labeled 0.15.1 due to a missing change. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.15/#performance-improvements-for-jvmti-watched-fields","text":"OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which, when enabled, turned on experimental JIT operations to improve the performance of JVMTI watched fields. Following successful results, this option is now enabled by default. This option is now also supported on z/OS\u00ae and Linux for IBM Z\u00ae, in addition to x86 platforms (Windows\u00ae, macOS\u00ae, and Linux).","title":"Performance improvements for JVMTI watched fields"},{"location":"version0.15/#support-for-pause-less-garbage-collection-on-ibm-z-systems","text":"Support for Concurrent scavenge mode is now extended to Linux on IBM Z\u00ae systems and z/OS\u00ae. For more information, see -Xgc:concurrentScavenge .","title":"Support for pause-less garbage collection on IBM Z systems"},{"location":"version0.15/#chacha20-algorithm-support-for-openssl","text":"The ChaCha20 and ChaCha20-Poly1305 algorithms can now use OpenSSL on Java 11. For more information, see -Djdk.nativeChaCha20 .","title":"ChaCha20 algorithm support for OpenSSL"},{"location":"version0.15/#openssl-digest-algorithm-disabled","text":"Due to issue #5611 , the Digest algorithm is disabled. This algorithm was disabled for Java 8 and 11 in release 0.14.2, which did not support Java 12.","title":"OpenSSL Digest algorithm disabled"},{"location":"version0.15/#support-for-openjdk-hotspot-options","text":"For compatibility, the -XX:OnOutOfMemoryError OpenJDK Hotspot option is now supported by OpenJ9.","title":"Support for OpenJDK HotSpot options"},{"location":"version0.15/#support-for-transparent-huge-pages-thp","text":"The VM now supports the allocation of huge pages on Linux when you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting. To enable this feature, set -XX:+TransparentHugePage on the command line when you start your application. This option is currently not enabled by default.","title":"Support for Transparent Huge Pages (THP)"},{"location":"version0.15/#support-for-low-overhead-heap-profiling","text":"JEP 331 provides a mechanism for sampling Java heap allocations with a low overhead via the JVM Tool Interface (JVMTI). Restrictions: JEP 331 is implemented for OpenJ9 with the following limitations: The balanced and metronome garbage collection policies are not supported. The JEP331 JVMTI agent and the Health Center agent both set a sampling interval, which by default is different. If both agents are used at the same time the Health Center agent will get incorrect results, unless the sampling intervals are adjusted to use the same value.","title":"Support for low-overhead heap profiling"},{"location":"version0.15/#new-java-memory-map-tool","text":"The Java memory map (jmap) tool is similar to the HotSpot tool of the same name, and can be used to print statistics about classes on the heap, including the number of objects and their aggregate size. For usage information, see Java memory map (jmap) tool .","title":"New Java memory map tool"},{"location":"version0.15/#automatically-setting-an-initial-heap-size","text":"OpenJ9 can now learn and set an appropriate initial heap size for an application as an alternative to a user manually sizing and setting an -Xms value. The VM records the size of the heap when startup processing ends, writing this data to the shared classes cache. An average value is set over a few restarts, helping to ensure that the value used for the initial heap size is as accurate as possible. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. To turn on this behavior, set the -XX:+UseGCStartupHints option on the command line when you start your application.","title":"Automatically setting an initial heap size"},{"location":"version0.15/#removal-of-xdiagnosticscollector-option","text":"This option was redundant and has now been removed. If you try to use this option on the command line, the VM outputs this error message: JVMJ9VM007E Command-line option unrecognised: -Xdiagnosticscollector","title":"Removal of -Xdiagnosticscollector option"},{"location":"version0.15/#change-in-behaviour-of-xxidletuningcompactonidle","text":"-XX:[+|-]IdleTuningCompactOnIdle is now no longer effective when -XX:+IdleTuningGcOnIdle is not specified.","title":"Change in behaviour of -XX:IdleTuningCompactOnIdle"},{"location":"version0.15/#heuristics-for-compaction-during-idle-gc","text":"OpenJ9 now automatically compacts the heap when certain triggers are met during idle garbage collection (GC). As a result of this change, -XX:[+|-]IdleTuningCompactOnIdle is deprecated.","title":"Heuristics for compaction during idle GC"},{"location":"version0.15/#change-in-shared-classes-behavior-for-checking-timestamps-of-jar-or-zip-files","text":"In earlier releases, the shared classes cache checks timestamps of jar or zip files every time a class is loaded and reloads a class if the timestamp has changed. This behavior is now changed; timestamps are checked only when zip or jar files are added to class loaders and used for the first time to look for a class, which can improve class-loading performance. If jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. To revert to the behavior of earlier releases, set the -Xshareclasses:checkURLTimestamps option on the command line when you start your application. Note: Multiple -Xshareclasses: options are not combined, only the last one is used.","title":"Change in shared classes behavior for checking timestamps of jar or zip files"},{"location":"version0.15/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.14.0 and v 0.15.1 releases, see the Release notes .","title":"Full release information"},{"location":"version0.16/","text":"What's new in version 0.16.0 The following new features and notable changes since v 0.15.1 are included in this release: New binaries and changes to supported environments Some class data sharing is enabled by default Automatic setting of initial heap size is enabled by default Option to share VM anonymous classes Performance improvements for JVMTI watched fields on Power Systems Linux on x86: Support for Transparent Huge Pages (THP) New Java\u2122 diagnostic command ( jcmd ) tool Changes to the shared classes cache generation number The -Xverify:none and -noverify options are deprecated Features and changes Binaries and supported environments OpenJ9 release 0.16.0 supports OpenJDK 13, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 13 OpenJDK 13 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.15.2. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.16.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . Some class data sharing is enabled by default Class data sharing is enabled by default for bootstrap classes, unless your application is running in a container. You can use the -Xshareclasses option to change the default behavior, including using -Xshareclasses:none to disable all class data sharing. For more information, see Class data sharing . Automatic setting of initial heap size is enabled by default OpenJ9 version 0.15.1 introduced the -XX:[+|-]UseGCStartupHints option, which, when enabled, turned on the automatic learning and setting of an appropriate heap size for an application. This option is now enabled by default. Option to share VM anonymous classes Prior to version 0.16.0, anonymous classes, those created by Unsafe.defineAnonymousClass , were not stored in the shared classes cache. They are now stored there by default, which means they are available for ahead-of-time (AOT) compilation, potentially improving startup performance. A new command, -XX:[+|-]ShareAnonymousClasses , is introduced that enables you to stop anonymous classes being stored in the shared classes cache. Performance improvements for JVMTI watched fields on Power Systems OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which turns on JIT operations to improve the performance of JVMTI watched fields. This option, which was enabled by default in version 0.15.1, is now also supported on AIX\u00ae and Linux on Power Systems\u2122. Linux\u00ae on x86: Support for Transparent Huge Pages (THP) When you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting on Linux on x86 systems, THP is now enabled by default. To disable this feature, set -XX:-TransparentHugePage on the command line when you start your application. The THP setting on other systems remains disabled by default when you use madvise , but can be enabled by setting -XX:+TransparentHugePage . New jcmd tool For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jcmd tool for running diagnostic commands on a VM. For more information, see Java diagnostic command tool . Changes to the shared classes cache generation number The format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache rather than re-creating or reusing an existing cache. To save space, you can remove all existing shared caches unless they are in use by an earlier release. As a result of the format change, a layer column now appears in the output of the -Xshareclasses:listAllCaches option. This change is to support a future enhancement. For more information about the -Xshareclasses option, including the destroy options that you can use to remove caches, see -Xshareclasses . The -Xverify:none and -noverify options are deprecated The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.15.1 and v 0.16.0 releases, see the Release notes .","title":"Version 0.16.0"},{"location":"version0.16/#whats-new-in-version-0160","text":"The following new features and notable changes since v 0.15.1 are included in this release: New binaries and changes to supported environments Some class data sharing is enabled by default Automatic setting of initial heap size is enabled by default Option to share VM anonymous classes Performance improvements for JVMTI watched fields on Power Systems Linux on x86: Support for Transparent Huge Pages (THP) New Java\u2122 diagnostic command ( jcmd ) tool Changes to the shared classes cache generation number The -Xverify:none and -noverify options are deprecated","title":"What's new in version 0.16.0"},{"location":"version0.16/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.16/#binaries-and-supported-environments","text":"OpenJ9 release 0.16.0 supports OpenJDK 13, which is available from the AdoptOpenJDK community at the following link: OpenJDK version 13 OpenJDK 13 with Eclipse OpenJ9 is not a long term support (LTS) release. The latest builds of OpenJDK with OpenJ9 for Java 8 and 11 at the AdoptOpenJDK community are for Eclipse OpenJ9 release 0.15.2. Features mentioned in these release notes are not available in these builds. Although it might be possible to build an OpenJDK 8 or OpenJDK 11 with OpenJ9 0.16.0, testing at the project is not complete and therefore support for any of these features is not available. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.16/#some-class-data-sharing-is-enabled-by-default","text":"Class data sharing is enabled by default for bootstrap classes, unless your application is running in a container. You can use the -Xshareclasses option to change the default behavior, including using -Xshareclasses:none to disable all class data sharing. For more information, see Class data sharing .","title":"Some class data sharing is enabled by default"},{"location":"version0.16/#automatic-setting-of-initial-heap-size-is-enabled-by-default","text":"OpenJ9 version 0.15.1 introduced the -XX:[+|-]UseGCStartupHints option, which, when enabled, turned on the automatic learning and setting of an appropriate heap size for an application. This option is now enabled by default.","title":"Automatic setting of initial heap size is enabled by default"},{"location":"version0.16/#option-to-share-vm-anonymous-classes","text":"Prior to version 0.16.0, anonymous classes, those created by Unsafe.defineAnonymousClass , were not stored in the shared classes cache. They are now stored there by default, which means they are available for ahead-of-time (AOT) compilation, potentially improving startup performance. A new command, -XX:[+|-]ShareAnonymousClasses , is introduced that enables you to stop anonymous classes being stored in the shared classes cache.","title":"Option to share VM anonymous classes"},{"location":"version0.16/#performance-improvements-for-jvmti-watched-fields-on-power-systems","text":"OpenJ9 version 0.14.0 introduced the -XX:[+|-]JITInlineWatches option, which turns on JIT operations to improve the performance of JVMTI watched fields. This option, which was enabled by default in version 0.15.1, is now also supported on AIX\u00ae and Linux on Power Systems\u2122.","title":"Performance improvements for JVMTI watched fields on Power Systems"},{"location":"version0.16/#linux-on-x86-support-for-transparent-huge-pages-thp","text":"When you use the madvise ( /sys/kernel/mm/transparent_hugepage/enabled ) setting on Linux on x86 systems, THP is now enabled by default. To disable this feature, set -XX:-TransparentHugePage on the command line when you start your application. The THP setting on other systems remains disabled by default when you use madvise , but can be enabled by setting -XX:+TransparentHugePage .","title":"Linux&reg; on x86: Support for Transparent Huge Pages (THP)"},{"location":"version0.16/#new-jcmd-tool","text":"For compatibility with the reference implementation, OpenJ9 now includes an independent implementation of the jcmd tool for running diagnostic commands on a VM. For more information, see Java diagnostic command tool .","title":"New jcmd tool"},{"location":"version0.16/#changes-to-the-shared-classes-cache-generation-number","text":"The format of classes that are stored in the shared classes cache is changed, which causes the JVM to create a new shared classes cache rather than re-creating or reusing an existing cache. To save space, you can remove all existing shared caches unless they are in use by an earlier release. As a result of the format change, a layer column now appears in the output of the -Xshareclasses:listAllCaches option. This change is to support a future enhancement. For more information about the -Xshareclasses option, including the destroy options that you can use to remove caches, see -Xshareclasses .","title":"Changes to the shared classes cache generation number"},{"location":"version0.16/#the-xverifynone-and-noverify-options-are-deprecated","text":"The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions.","title":"The -Xverify:none and -noverify options are deprecated"},{"location":"version0.16/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.15.1 and v 0.16.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.17/","text":"What's new in version 0.17.0 The following new features and notable changes since v 0.16.0 are included in this release: New binaries and changes to supported environments New shared classes cache suboptions for layered caches New shared classes cache suboption to skip disk space check Option to share 'Unsafe' classes Option to record class relationships in the verifier Support for the IBM z15\u00ae processor Digest algorithm is re-enabled Direct Dump Reader (DDR) VM restriction removed The format of the HOOKS section of a Java dump has changed LUDCL caching disabled by default Features and changes Binaries and supported environments OpenJ9 release 0.17.0 supports OpenJDK 8, 11, and 13. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 13 Note: The Windows\u00ae and macOS\u00ae binaries from the AdoptOpenJDK community for OpenJDK 8, 11, and 13 have been updated to OpenSSL v1.1.1d. Look for the following release names to identify these packages: OpenJDK 8: jdk8u232-b09.1_openj9-0.17.0 OpenJDK 11: jdk-11.0.5+10.1_openj9-0.17.0 OpenjDK 13: jdk-13.0.1+9.1_openj9-0.17.0) Note: The last release of OpenJDK 8 and 11 from AdoptOpenJDK is Eclipse OpenJ9 0.15.1. To read about other features and changes in the VM since 0.15.1, check the Version 0.16.0 release notes too. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments . New shared classes cache suboptions for layered caches (Experimental, 64-bit only) New suboptions are available for creating layered caches, where a cache builds on another cache with the same name. You can use these suboptions to save space when building a Docker container, for example. Note: Because these suboptions are experimental, do not use them in a production environment. The new options are: createLayer layer=<number> (see this section for more information about layered caches) printTopLayerStats destroyAllLayers New shared classes cache suboption to skip disk space check When creating a persistent shared classes cache, the OpenJ9 VM checks that there is sufficient disk space available on the file system. For file systems that do not support the checking of free space, you can set the -Xshareclasses:noPersistentDiskSpaceCheck option, which causes the VM to skip the space checking operation. If there isn't enough disk space available when the cache is written, a SIGBUS or SIGSEGV signal occurs and the VM ends. For more information, see the -Xshareclasses:noPersistentDiskSpaceCheck option. Option to share 'Unsafe' classes Classes created through Unsafe.defineClass are now stored by default in the shared classes cache. You can use the -XX:-ShareUnsafeClasses option to change the default behavior. For more information, see -XX:[+|-]ShareUnsafeClasses . Option to record class relationships in the verifier A new command line option -XX:+ClassRelationshipVerifier allows you to record class relationships in the verifier, which avoids unnecessary class loading and reduces VM startup time. This is a new approach to bytecode verification that delays validating the relationships between classes until the classes are required to be loaded for a program's execution thus loading only those classes that are needed. For more information, see -XX:[+|-]ClassRelationshipVerifier . Support for the IBM z15 processor This release adds JIT compiler support for exploiting z15 instructions. Digest algorithm is re-enabled Issue #5611 is fixed, so support for the Digest algorithm is re-enabled. For more information about this support, see Cryptographic operations . Direct Dump Reader (DDR) VM restriction removed Prior to this version, you had to use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core when using DDR. This restriction has now been removed. The format of the HOOKS section of a Java dump has changed The format of the HOOKS section of a Java dump, which shows internal VM event callbacks, has changed: Recorded times have been changed from milliseconds to microseconds to provide increased precision. A new field, 3HKTOTALTIME , is included, which gives the total duration of previous events. The hook data is now reset after each Java dump. For more information and an example of the new format, see Java dump: HOOKS LUDCL caching disabled by default By caching the Latest User Defined Class Loader (LUDCL), Java applications that use deserialization extensively can see a performance improvement. This capability is controlled by the -Dcom.ibm.enableClassCaching system property and is now disabled by default due to issue #7332 . Note: Versions of the documentation before 0.17.0 incorrectly identified this property as disabled by default when it was actually enabled by default in the VM. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.16 and v 0.17.0 releases, see the Release notes .","title":"Version 0.17.0"},{"location":"version0.17/#whats-new-in-version-0170","text":"The following new features and notable changes since v 0.16.0 are included in this release: New binaries and changes to supported environments New shared classes cache suboptions for layered caches New shared classes cache suboption to skip disk space check Option to share 'Unsafe' classes Option to record class relationships in the verifier Support for the IBM z15\u00ae processor Digest algorithm is re-enabled Direct Dump Reader (DDR) VM restriction removed The format of the HOOKS section of a Java dump has changed LUDCL caching disabled by default","title":"What's new in version 0.17.0"},{"location":"version0.17/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.17/#binaries-and-supported-environments","text":"OpenJ9 release 0.17.0 supports OpenJDK 8, 11, and 13. Binaries are available from the AdoptOpenJDK community at the following links: OpenJDK version 8 OpenJDK version 11 OpenJDK version 13 Note: The Windows\u00ae and macOS\u00ae binaries from the AdoptOpenJDK community for OpenJDK 8, 11, and 13 have been updated to OpenSSL v1.1.1d. Look for the following release names to identify these packages: OpenJDK 8: jdk8u232-b09.1_openj9-0.17.0 OpenJDK 11: jdk-11.0.5+10.1_openj9-0.17.0 OpenjDK 13: jdk-13.0.1+9.1_openj9-0.17.0) Note: The last release of OpenJDK 8 and 11 from AdoptOpenJDK is Eclipse OpenJ9 0.15.1. To read about other features and changes in the VM since 0.15.1, check the Version 0.16.0 release notes too. To learn more about support for OpenJ9 releases, including OpenJDK levels and platform support, see Supported environments .","title":"Binaries and supported environments"},{"location":"version0.17/#new-shared-classes-cache-suboptions-for-layered-caches","text":"(Experimental, 64-bit only) New suboptions are available for creating layered caches, where a cache builds on another cache with the same name. You can use these suboptions to save space when building a Docker container, for example. Note: Because these suboptions are experimental, do not use them in a production environment. The new options are: createLayer layer=<number> (see this section for more information about layered caches) printTopLayerStats destroyAllLayers","title":"New shared classes cache suboptions for layered caches"},{"location":"version0.17/#new-shared-classes-cache-suboption-to-skip-disk-space-check","text":"When creating a persistent shared classes cache, the OpenJ9 VM checks that there is sufficient disk space available on the file system. For file systems that do not support the checking of free space, you can set the -Xshareclasses:noPersistentDiskSpaceCheck option, which causes the VM to skip the space checking operation. If there isn't enough disk space available when the cache is written, a SIGBUS or SIGSEGV signal occurs and the VM ends. For more information, see the -Xshareclasses:noPersistentDiskSpaceCheck option.","title":"New shared classes cache suboption to skip disk space check"},{"location":"version0.17/#option-to-share-unsafe-classes","text":"Classes created through Unsafe.defineClass are now stored by default in the shared classes cache. You can use the -XX:-ShareUnsafeClasses option to change the default behavior. For more information, see -XX:[+|-]ShareUnsafeClasses .","title":"Option to share 'Unsafe' classes"},{"location":"version0.17/#option-to-record-class-relationships-in-the-verifier","text":"A new command line option -XX:+ClassRelationshipVerifier allows you to record class relationships in the verifier, which avoids unnecessary class loading and reduces VM startup time. This is a new approach to bytecode verification that delays validating the relationships between classes until the classes are required to be loaded for a program's execution thus loading only those classes that are needed. For more information, see -XX:[+|-]ClassRelationshipVerifier .","title":"Option to record class relationships in the verifier"},{"location":"version0.17/#support-for-the-ibm-z15-processor","text":"This release adds JIT compiler support for exploiting z15 instructions.","title":"Support for the IBM z15 processor"},{"location":"version0.17/#digest-algorithm-is-re-enabled","text":"Issue #5611 is fixed, so support for the Digest algorithm is re-enabled. For more information about this support, see Cryptographic operations .","title":"Digest algorithm is re-enabled"},{"location":"version0.17/#direct-dump-reader-ddr-vm-restriction-removed","text":"Prior to this version, you had to use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core when using DDR. This restriction has now been removed.","title":"Direct Dump Reader (DDR) VM restriction removed"},{"location":"version0.17/#the-format-of-the-hooks-section-of-a-java-dump-has-changed","text":"The format of the HOOKS section of a Java dump, which shows internal VM event callbacks, has changed: Recorded times have been changed from milliseconds to microseconds to provide increased precision. A new field, 3HKTOTALTIME , is included, which gives the total duration of previous events. The hook data is now reset after each Java dump. For more information and an example of the new format, see Java dump: HOOKS","title":"The format of the HOOKS section of a Java dump has changed"},{"location":"version0.17/#ludcl-caching-disabled-by-default","text":"By caching the Latest User Defined Class Loader (LUDCL), Java applications that use deserialization extensively can see a performance improvement. This capability is controlled by the -Dcom.ibm.enableClassCaching system property and is now disabled by default due to issue #7332 . Note: Versions of the documentation before 0.17.0 incorrectly identified this property as disabled by default when it was actually enabled by default in the VM.","title":"LUDCL caching disabled by default"},{"location":"version0.17/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.16 and v 0.17.0 releases, see the Release notes .","title":"Full release information"},{"location":"version0.8/","text":"Release notes - version 0.8.0 Version 0.8.0 is the first release of Eclipse OpenJ9, as defined in the release plan . This release supports OpenJDK Version 8 binaries at AdoptOpenJDK.net that contain the Eclipse OpenJ9 virtual machine. For more information about supported platforms, and any issues and limitations, read the OpenJ9 GitHub release notes .","title":"Version 0.8.0"},{"location":"version0.8/#release-notes-version-080","text":"Version 0.8.0 is the first release of Eclipse OpenJ9, as defined in the release plan . This release supports OpenJDK Version 8 binaries at AdoptOpenJDK.net that contain the Eclipse OpenJ9 virtual machine. For more information about supported platforms, and any issues and limitations, read the OpenJ9 GitHub release notes .","title":"Release notes - version 0.8.0"},{"location":"version0.9/","text":"What's new in version 0.9.0 The following new features and notable changes from v.0.8.0 are included in this release: New binaries and supported environments. The idle tuning feature is now supported on Linux running on Power\u00ae Systems and IBM Z\u00ae Systems. A new Garbage Collection (GC) policy is available that performs no housekeeping. A command line option is provided to automatically set a larger Java heap size for applications that run in containers. You can now specify the maximum Java heap size as a percentage value. The shared classes feature now supports nested jar files. System dump data can now be read to help diagnose problems on Linux and Windows platforms. There are notable changes to the java.lang.String class. There are notable changes to the com.ibm.oti.shared.SharedClassCacheInfo class. Features and changes Binaries and supported platforms The following additional OpenJDK binaries that contain the OpenJ9 VM are now available from the AdoptOpenJDK community: OpenJDK version 10 OpenJDK version 8 for 32-bit Windows OpenJDK version 8 for x86 64-bit Linux (Large Heap) for Java heaps >57 GB. Complete platform support information for OpenJ9 can be found in Supported environments Idle tuning feature The idle tuning feature in OpenJ9 keeps your memory footprint small by releasing unused memory back to the operating system. Prior to Eclipse v 0.9.0 this feature was available only on Linux x86 architectures with the gencon garbage collection policy. From v 0.9.0, this feature is now available on Linux for IBM POWER\u00ae and IBM Z\u00ae architectures. For more information about this feature, see the following command line options, which control this behavior: -XX:[+|-]IdleTuningCompactOnIdle -XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle The following blog post describes the benefits of using this feature: Are you still paying for unused memory when your Java app is idle? New GC policy A new GC policy is introduced for JEP 318: Epsilon: A No-Op Garbage Collector . When this policy is enabled, the Java object heap is expanded in the normal way until the limit is reached, but memory is not reclaimed through garbage collection. When the limit is reached the VM shuts down. This JEP has a number of use cases including short-lived applications and certain test scenarios. To enable this policy you can use one of the following options: -Xgcpolicy:nogc -XX:+UseNoGC Modifying the default Java heap size for applications that run in containers When using container technology, applications are typically run on their own and do not need to compete for memory. In this release, changes are introduced to detect when OpenJ9 is running inside a container. If your application is running in a container and you want the VM to allocate a larger fraction of memory to the Java heap, set the -XX:+UseContainerSupport option on the command line. The following table shows the maximum Java heap size that gets set, depending on the memory available: Physical memory <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512M Greater than 2 GB 75% <size> The default heap size for containers only takes affect when running in a container environment and when -XX:+UseContainerSupport is specified, which is expected to be the default in a future release. Specifying the maximum Java heap size as a percentage value OpenJ9 now supports setting the heap size as a percentage of the physical memory. The following OpenJDK options are recognized and can be set for the VM: -XX:MaxRAMPercentage -XX:InitialRAMPercentage To understand how to set these options, see -XX:InitialRAMPercentage / -XX:MaxRAMPercentage . If your application is running in a container and you have specified -XX:+UseContainerSupport , as described in Modifying the default Java heap size for applications that run in containers , both the default heap size for containers and the -XX:MaxRAMPercentage and -XX:InitialRAMPercentage options are based on the available container memory. Shared classes support for nested jar files Changes are made to the com.ibm.oti.shared API to support nested jar files. Direct Dump Reader enabled on Linux and Windows Direct Dump Reader (DDR) support is now enabled for the OpenJ9 VM on all Linux architectures and on Windows. The DDR code enables the VM to read system dump data by using the OpenJ9 Diagnostic Tool Framework for Java (DTFJ) API or the jdmpview tool. If you use the Eclipse Memory Analyzer Tool (MAT) , you can also analyze OpenJ9 or IBM VMs by installing the DTFJ plugin. (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java) You must use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core. This restriction will be fixed in a later version of OpenJ9. Changes to the java.lang.String class To match the behavior of OpenJDK, java.lang.String no longer has a count field, which changes the way that String.subString() works compared to Java 8. String.subString() now copies the value array. Similarly, StringBuffer and StringBuilder do not share the value array with any String created by toString() . For performance and compatibility with the new String object layout, the OpenJ9 implementations of StringBuffer and StringBuilder have been deprecated in favor of the OpenJDK implementations. Changes to the SharedClassCacheInfo class SharedClassCacheInfo.getCacheJVMLevel() used to return the JVMLEVEL constant that maps to a Java version number, for example JVMLEVEL_JAVA8 . This call now returns only the Java version number, for example 10 for Java 10. Full release information To see a complete list of changes between Eclipse OpenJ9 v 0.8.0 and v 0.9.0 releases, see the Release notes .","title":"Version 0.9.0"},{"location":"version0.9/#whats-new-in-version-090","text":"The following new features and notable changes from v.0.8.0 are included in this release: New binaries and supported environments. The idle tuning feature is now supported on Linux running on Power\u00ae Systems and IBM Z\u00ae Systems. A new Garbage Collection (GC) policy is available that performs no housekeeping. A command line option is provided to automatically set a larger Java heap size for applications that run in containers. You can now specify the maximum Java heap size as a percentage value. The shared classes feature now supports nested jar files. System dump data can now be read to help diagnose problems on Linux and Windows platforms. There are notable changes to the java.lang.String class. There are notable changes to the com.ibm.oti.shared.SharedClassCacheInfo class.","title":"What's new in version 0.9.0"},{"location":"version0.9/#features-and-changes","text":"","title":"Features and changes"},{"location":"version0.9/#binaries-and-supported-platforms","text":"The following additional OpenJDK binaries that contain the OpenJ9 VM are now available from the AdoptOpenJDK community: OpenJDK version 10 OpenJDK version 8 for 32-bit Windows OpenJDK version 8 for x86 64-bit Linux (Large Heap) for Java heaps >57 GB. Complete platform support information for OpenJ9 can be found in Supported environments","title":"Binaries and supported platforms"},{"location":"version0.9/#idle-tuning-feature","text":"The idle tuning feature in OpenJ9 keeps your memory footprint small by releasing unused memory back to the operating system. Prior to Eclipse v 0.9.0 this feature was available only on Linux x86 architectures with the gencon garbage collection policy. From v 0.9.0, this feature is now available on Linux for IBM POWER\u00ae and IBM Z\u00ae architectures. For more information about this feature, see the following command line options, which control this behavior: -XX:[+|-]IdleTuningCompactOnIdle -XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle The following blog post describes the benefits of using this feature: Are you still paying for unused memory when your Java app is idle?","title":"Idle tuning feature"},{"location":"version0.9/#new-gc-policy","text":"A new GC policy is introduced for JEP 318: Epsilon: A No-Op Garbage Collector . When this policy is enabled, the Java object heap is expanded in the normal way until the limit is reached, but memory is not reclaimed through garbage collection. When the limit is reached the VM shuts down. This JEP has a number of use cases including short-lived applications and certain test scenarios. To enable this policy you can use one of the following options: -Xgcpolicy:nogc -XX:+UseNoGC","title":"New GC policy"},{"location":"version0.9/#modifying-the-default-java-heap-size-for-applications-that-run-in-containers","text":"When using container technology, applications are typically run on their own and do not need to compete for memory. In this release, changes are introduced to detect when OpenJ9 is running inside a container. If your application is running in a container and you want the VM to allocate a larger fraction of memory to the Java heap, set the -XX:+UseContainerSupport option on the command line. The following table shows the maximum Java heap size that gets set, depending on the memory available: Physical memory <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512M Greater than 2 GB 75% <size> The default heap size for containers only takes affect when running in a container environment and when -XX:+UseContainerSupport is specified, which is expected to be the default in a future release.","title":"Modifying the default Java heap size for applications that run in containers"},{"location":"version0.9/#specifying-the-maximum-java-heap-size-as-a-percentage-value","text":"OpenJ9 now supports setting the heap size as a percentage of the physical memory. The following OpenJDK options are recognized and can be set for the VM: -XX:MaxRAMPercentage -XX:InitialRAMPercentage To understand how to set these options, see -XX:InitialRAMPercentage / -XX:MaxRAMPercentage . If your application is running in a container and you have specified -XX:+UseContainerSupport , as described in Modifying the default Java heap size for applications that run in containers , both the default heap size for containers and the -XX:MaxRAMPercentage and -XX:InitialRAMPercentage options are based on the available container memory.","title":"Specifying the maximum Java heap size as a percentage value"},{"location":"version0.9/#shared-classes-support-for-nested-jar-files","text":"Changes are made to the com.ibm.oti.shared API to support nested jar files.","title":"Shared classes support for nested jar files"},{"location":"version0.9/#direct-dump-reader-enabled-on-linux-and-windows","text":"Direct Dump Reader (DDR) support is now enabled for the OpenJ9 VM on all Linux architectures and on Windows. The DDR code enables the VM to read system dump data by using the OpenJ9 Diagnostic Tool Framework for Java (DTFJ) API or the jdmpview tool. If you use the Eclipse Memory Analyzer Tool (MAT) , you can also analyze OpenJ9 or IBM VMs by installing the DTFJ plugin. (Install from the Eclipse Help menu; Install New Software > Work with \"IBM Diagnostic Tool Framework for Java\" > IBM Monitoring and Diagnostic Tools > Diagnostic Tool Framework for Java) You must use a 32-bit VM to look at a 32-bit core, and a 64-bit VM to look at a 64-bit core. This restriction will be fixed in a later version of OpenJ9.","title":"Direct Dump Reader enabled on Linux and Windows"},{"location":"version0.9/#changes-to-the-javalangstring-class","text":"To match the behavior of OpenJDK, java.lang.String no longer has a count field, which changes the way that String.subString() works compared to Java 8. String.subString() now copies the value array. Similarly, StringBuffer and StringBuilder do not share the value array with any String created by toString() . For performance and compatibility with the new String object layout, the OpenJ9 implementations of StringBuffer and StringBuilder have been deprecated in favor of the OpenJDK implementations.","title":"Changes to the java.lang.String class"},{"location":"version0.9/#changes-to-the-sharedclasscacheinfo-class","text":"SharedClassCacheInfo.getCacheJVMLevel() used to return the JVMLEVEL constant that maps to a Java version number, for example JVMLEVEL_JAVA8 . This call now returns only the Java version number, for example 10 for Java 10.","title":"Changes to the SharedClassCacheInfo class"},{"location":"version0.9/#full-release-information","text":"To see a complete list of changes between Eclipse OpenJ9 v 0.8.0 and v 0.9.0 releases, see the Release notes .","title":"Full release information"},{"location":"x/","text":"-X Displays help on nonstandard options. Syntax -X","title":"-X"},{"location":"x/#-x","text":"Displays help on nonstandard options.","title":"-X"},{"location":"x/#syntax","text":"-X","title":"Syntax"},{"location":"x_jvm_commands/","text":"Using -X command-line options Use these options to configure the OpenJ9 virtual machine (VM). Unlike standard options, options prefixed with -X are nonstandard and are typically unique to a Java\u2122 virtual machine implementation. However, in some cases, -X option names are common to different VM implementations and might have the same function. For options that take a <size> parameter, suffix the number with \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , -Xmx16384k , or -Xmx16777216 on the command line.","title":"Using -X options"},{"location":"x_jvm_commands/#using-x-command-line-options","text":"Use these options to configure the OpenJ9 virtual machine (VM). Unlike standard options, options prefixed with -X are nonstandard and are typically unique to a Java\u2122 virtual machine implementation. However, in some cases, -X option names are common to different VM implementations and might have the same function. For options that take a <size> parameter, suffix the number with \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , -Xmx16384k , or -Xmx16777216 on the command line.","title":"Using -X command-line options"},{"location":"xaggressive/","text":"-Xaggressive Enables performance optimizations and new platform exploitation that are expected to be the default in future releases. Syntax -Xaggressive","title":"-Xaggressive"},{"location":"xaggressive/#-xaggressive","text":"Enables performance optimizations and new platform exploitation that are expected to be the default in future releases.","title":"-Xaggressive"},{"location":"xaggressive/#syntax","text":"-Xaggressive","title":"Syntax"},{"location":"xalwaysclassgc/","text":"-Xalwaysclassgc Always perform dynamic class unloading checks during global garbage collection. Syntax -Xalwaysclassgc Default behavior If you don't set this option, the default behavior is defined by -Xclassgc .","title":"-Xalwaysclassgc"},{"location":"xalwaysclassgc/#-xalwaysclassgc","text":"Always perform dynamic class unloading checks during global garbage collection.","title":"-Xalwaysclassgc"},{"location":"xalwaysclassgc/#syntax","text":"-Xalwaysclassgc","title":"Syntax"},{"location":"xalwaysclassgc/#default-behavior","text":"If you don't set this option, the default behavior is defined by -Xclassgc .","title":"Default behavior"},{"location":"xaot/","text":"-Xaot / -Xnoaot Use this option to control the behavior of the ahead-of-time (AOT) compiler. AOT compilation allows the compilation of Java\u2122 classes into native code for subsequent executions of the same program. The AOT compiler works with the class data sharing framework. The AOT compiler generates native code dynamically while an application runs and caches any generated AOT code in the shared data cache. Subsequent VMs that execute the method can load and use the AOT code from the shared data cache without incurring the performance decrease experienced with JIT-compiled native code. Performance Because AOT code must persist over different program executions, AOT-generated code does not perform as well as JIT-generated code. AOT code usually performs better than interpreted code. In a VM without an AOT compiler or with the AOT compiler disabled, the JIT compiler selectively compiles frequently used methods into optimized native code. There is a time cost associated with compiling methods because the JIT compiler operates while the application is running. Because methods begin by being interpreted and most JIT compilations occur during startup, startup times can be increased. Startup performance can be improved by using the shared AOT code to provide native code without compiling. There is a small time cost to load the AOT code for a method from the shared data cache and bind it into a running program. The time cost is low compared to the time it takes the JIT compiler to compile that method. Default behavior The AOT compiler is enabled by default, but is only active when shared classes are enabled. By default, shared classes are disabled so that no AOT activity occurs. When the AOT compiler is active, the compiler selects the methods to be AOT compiled with the primary goal of improving startup time. Syntax Setting Action Default -Xaot Enable AOT yes -Xaot:<parameter>[=<value>]{,<parameter>[=<value>]} Enable AOT with modifications -Xnoaot Disable AOT Parameters for -Xaot Note: Although the AOT compiler is enabled by default, it is not active unless shared classes are enabled. Using this option on its own therefore has no effect. Use the -Xshareclasses option to enable shared classes. You can concatenate several parameters by using commas. Parameter Effect count The number of times a method is called before it is compiled or loaded from an existing shared class cache. exclude The method you want to exclude when AOT code is compiled or loaded from the shared classes cache. limitFile Compile or load only the methods listed in the specified limit file. loadExclude Do not load specified methods. loadLimit Load specified methods only. loadLimitFile Load only the methods listed in the specified limit file). verbose Reports information about the AOT and JIT compiler configuration and method compilation. count -Xaot:count=<n> where <n> is the number of times a method is called before it is compiled or loaded from an existing shared class cache. For example, setting -Xaot:count=0 forces the AOT compiler to compile everything on first execution. exclude -Xaot:exclude=<method> where <method> is the Java method you want to exclude when AOT code is compiled or loaded from the shared classes cache. Use this option if the method causes the program to fail. limitFile -Xaot:limitFile=(<filename>,<m>,<n>) Compile or load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not compiled or loaded. loadExclude -Xaot:loadExclude=<method_prefix> Do not load methods beginning with <method_prefix> . loadLimit -Xaot:loadLimit=<method_prefix> Load methods beginning with <method_prefix> only. loadLimitFile -Xaot:loadLimitFile=(<filename>,<m>,<n>) Load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not loaded. verbose -Xaot:verbose Reports information about the AOT and JIT compiler configuration and method compilation. See also -Xquickstart","title":"-Xnoaot"},{"location":"xaot/#-xaot-xnoaot","text":"Use this option to control the behavior of the ahead-of-time (AOT) compiler. AOT compilation allows the compilation of Java\u2122 classes into native code for subsequent executions of the same program. The AOT compiler works with the class data sharing framework. The AOT compiler generates native code dynamically while an application runs and caches any generated AOT code in the shared data cache. Subsequent VMs that execute the method can load and use the AOT code from the shared data cache without incurring the performance decrease experienced with JIT-compiled native code.","title":"-Xaot / -Xnoaot"},{"location":"xaot/#performance","text":"Because AOT code must persist over different program executions, AOT-generated code does not perform as well as JIT-generated code. AOT code usually performs better than interpreted code. In a VM without an AOT compiler or with the AOT compiler disabled, the JIT compiler selectively compiles frequently used methods into optimized native code. There is a time cost associated with compiling methods because the JIT compiler operates while the application is running. Because methods begin by being interpreted and most JIT compilations occur during startup, startup times can be increased. Startup performance can be improved by using the shared AOT code to provide native code without compiling. There is a small time cost to load the AOT code for a method from the shared data cache and bind it into a running program. The time cost is low compared to the time it takes the JIT compiler to compile that method.","title":"Performance"},{"location":"xaot/#default-behavior","text":"The AOT compiler is enabled by default, but is only active when shared classes are enabled. By default, shared classes are disabled so that no AOT activity occurs. When the AOT compiler is active, the compiler selects the methods to be AOT compiled with the primary goal of improving startup time.","title":"Default behavior"},{"location":"xaot/#syntax","text":"Setting Action Default -Xaot Enable AOT yes -Xaot:<parameter>[=<value>]{,<parameter>[=<value>]} Enable AOT with modifications -Xnoaot Disable AOT","title":"Syntax"},{"location":"xaot/#parameters-for-xaot","text":"Note: Although the AOT compiler is enabled by default, it is not active unless shared classes are enabled. Using this option on its own therefore has no effect. Use the -Xshareclasses option to enable shared classes. You can concatenate several parameters by using commas. Parameter Effect count The number of times a method is called before it is compiled or loaded from an existing shared class cache. exclude The method you want to exclude when AOT code is compiled or loaded from the shared classes cache. limitFile Compile or load only the methods listed in the specified limit file. loadExclude Do not load specified methods. loadLimit Load specified methods only. loadLimitFile Load only the methods listed in the specified limit file). verbose Reports information about the AOT and JIT compiler configuration and method compilation.","title":"Parameters for -Xaot"},{"location":"xaot/#count","text":"-Xaot:count=<n> where <n> is the number of times a method is called before it is compiled or loaded from an existing shared class cache. For example, setting -Xaot:count=0 forces the AOT compiler to compile everything on first execution.","title":"count"},{"location":"xaot/#exclude","text":"-Xaot:exclude=<method> where <method> is the Java method you want to exclude when AOT code is compiled or loaded from the shared classes cache. Use this option if the method causes the program to fail.","title":"exclude"},{"location":"xaot/#limitfile","text":"-Xaot:limitFile=(<filename>,<m>,<n>) Compile or load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not compiled or loaded.","title":"limitFile"},{"location":"xaot/#loadexclude","text":"-Xaot:loadExclude=<method_prefix> Do not load methods beginning with <method_prefix> .","title":"loadExclude"},{"location":"xaot/#loadlimit","text":"-Xaot:loadLimit=<method_prefix> Load methods beginning with <method_prefix> only.","title":"loadLimit"},{"location":"xaot/#loadlimitfile","text":"-Xaot:loadLimitFile=(<filename>,<m>,<n>) Load only the methods listed on lines <m> to <n> in the specified limit file ( <filename> ). Methods not listed in the limit file and methods listed on lines outside the range are not loaded.","title":"loadLimitFile"},{"location":"xaot/#verbose","text":"-Xaot:verbose Reports information about the AOT and JIT compiler configuration and method compilation.","title":"verbose"},{"location":"xaot/#see-also","text":"-Xquickstart","title":"See also"},{"location":"xargencoding/","text":"-Xargencoding The java and javaw launchers accept arguments and class names containing any character that is in the character set of the current locale. You can also specify any Unicode character in the class name and arguments by using Java\u2122 escape sequences. To do this, use the -Xargencoding command-line option. Syntax -Xargencoding:<parameter> Parameters No parameter -Xargencoding You can use Unicode escape sequences in the argument list that you pass to this option. To specify a Unicode character, use escape sequences in the form \\u#### , where # is a hexadecimal digit (0-9, A-F). For example, to specify a class that is called HelloWorld and use Unicode encoding for both capital letters, use this command: :::java java -Xargencoding \\u0048ello\\u0057orld utf8 -Xargencoding:utf8 Use utf8 encoding. latin -Xargencoding:latin Use ISO8859_1 encoding.","title":"-Xargencoding"},{"location":"xargencoding/#-xargencoding","text":"The java and javaw launchers accept arguments and class names containing any character that is in the character set of the current locale. You can also specify any Unicode character in the class name and arguments by using Java\u2122 escape sequences. To do this, use the -Xargencoding command-line option.","title":"-Xargencoding"},{"location":"xargencoding/#syntax","text":"-Xargencoding:<parameter>","title":"Syntax"},{"location":"xargencoding/#parameters","text":"","title":"Parameters"},{"location":"xargencoding/#no-parameter","text":"-Xargencoding You can use Unicode escape sequences in the argument list that you pass to this option. To specify a Unicode character, use escape sequences in the form \\u#### , where # is a hexadecimal digit (0-9, A-F). For example, to specify a class that is called HelloWorld and use Unicode encoding for both capital letters, use this command: :::java java -Xargencoding \\u0048ello\\u0057orld","title":"No parameter"},{"location":"xargencoding/#utf8","text":"-Xargencoding:utf8 Use utf8 encoding.","title":"utf8"},{"location":"xargencoding/#latin","text":"-Xargencoding:latin Use ISO8859_1 encoding.","title":"latin"},{"location":"xbootclasspath/","text":"-Xbootclasspath This Oracle\u00ae Hotspot\u2122 option specifies the search path for bootstrap classes and resources. The default is to search for bootstrap classes and resources in the internal VM directories and .jar files. The option is recognized by the OpenJ9 VM. Syntax Limited to... Setting Effect -Xbootclasspath:<path> Sets the search path for bootstrap classes and resources. -Xbootclasspath/p:<path> Prepends the specified resources to the front of the bootstrap class path. -Xbootclasspath/a:<path> Appends the specified resources to the end of the bootstrap class path. where <path> represents directories and compressed or Java\u2122 archive files separated with colons (:). On Windows\u2122 systems, use a semicolon (;) as a separator. Oracle advise that you should \"not deploy applications that use this option to override a class in rt.jar , because this violates the JRE binary code license.\"","title":"-Xbootclasspath"},{"location":"xbootclasspath/#-xbootclasspath","text":"This Oracle\u00ae Hotspot\u2122 option specifies the search path for bootstrap classes and resources. The default is to search for bootstrap classes and resources in the internal VM directories and .jar files. The option is recognized by the OpenJ9 VM.","title":"-Xbootclasspath"},{"location":"xbootclasspath/#syntax","text":"Limited to... Setting Effect -Xbootclasspath:<path> Sets the search path for bootstrap classes and resources. -Xbootclasspath/p:<path> Prepends the specified resources to the front of the bootstrap class path. -Xbootclasspath/a:<path> Appends the specified resources to the end of the bootstrap class path. where <path> represents directories and compressed or Java\u2122 archive files separated with colons (:). On Windows\u2122 systems, use a semicolon (;) as a separator. Oracle advise that you should \"not deploy applications that use this option to override a class in rt.jar , because this violates the JRE binary code license.\"","title":"Syntax"},{"location":"xceehdlr/","text":"-XCEEHDLR (31-bit z/OS\u00ae only) Controls OpenJ9 VM Language Environment\u00ae condition handling. Syntax -XCEEHDLR Explanation Use the -XCEEHDLR option if you want the new behavior for the Java\u2122 and COBOL interoperability batch mode environment, because this option makes signal and condition handling behavior more predictable in a mixed Java and COBOL environment. When the -XCEEHDLR option is enabled, a condition triggered by an arithmetic operation while executing a Java Native Interface (JNI) component causes the VM to convert the Language Environment condition into a Java ConditionException . When the -XCEEHDLR option is used the VM does not install POSIX signal handlers for the following signals: SIGBUS SIGFPE SIGILL SIGSEGV SIGTRAP Instead, user condition handlers are registered by the VM, using the CEEHDLR() method. These condition handlers are registered every time a thread calls into the VM. Threads call into the VM using the Java Native Interface and including the invocation interfaces, for example JNI\\_CreateJavaVM . The Java runtime continues to register POSIX signal handlers for the following signals: SIGABRT SIGINT SIGQUIT SIGTERM Signal chaining using the libjsig.so library is not supported. When the -XCEEHDLR option is used, condition handler actions take place in the following sequence: All severity 0 and severity 1 conditions are percolated. If a Language Environment condition is triggered in JNI code as a result of an arithmetic operation, the VM condition handler resumes executing Java code as if the JNI native code had thrown a com.ibm.le.conditionhandling.ConditionException exception. This exception class is a subclass of java.lang.RuntimeException . Note: The Language Environment conditions that correspond to arithmetic operations are CEE3208S through CEE3234S . However, the Language Environment does not deliver conditions CEE3208S , CEE3213S , or CEE3234S to C applications, so the VM condition handler will not receive them. If the condition handling reaches this step, the condition is considered to be unrecoverable. RAS diagnostic information is generated, and the VM ends by calling the CEE3AB2() service with abend code 3565, reason code 0, and cleanup code 0. Restriction: You cannot use -Xsignal:userConditionHandler=percolate and -XCEEHDLR together. See also -Xsignal:userConditionHandler=percolate Signals used by the VM .","title":"-XCEEHDLR"},{"location":"xceehdlr/#-xceehdlr","text":"(31-bit z/OS\u00ae only) Controls OpenJ9 VM Language Environment\u00ae condition handling.","title":"-XCEEHDLR"},{"location":"xceehdlr/#syntax","text":"-XCEEHDLR","title":"Syntax"},{"location":"xceehdlr/#explanation","text":"Use the -XCEEHDLR option if you want the new behavior for the Java\u2122 and COBOL interoperability batch mode environment, because this option makes signal and condition handling behavior more predictable in a mixed Java and COBOL environment. When the -XCEEHDLR option is enabled, a condition triggered by an arithmetic operation while executing a Java Native Interface (JNI) component causes the VM to convert the Language Environment condition into a Java ConditionException . When the -XCEEHDLR option is used the VM does not install POSIX signal handlers for the following signals: SIGBUS SIGFPE SIGILL SIGSEGV SIGTRAP Instead, user condition handlers are registered by the VM, using the CEEHDLR() method. These condition handlers are registered every time a thread calls into the VM. Threads call into the VM using the Java Native Interface and including the invocation interfaces, for example JNI\\_CreateJavaVM . The Java runtime continues to register POSIX signal handlers for the following signals: SIGABRT SIGINT SIGQUIT SIGTERM Signal chaining using the libjsig.so library is not supported. When the -XCEEHDLR option is used, condition handler actions take place in the following sequence: All severity 0 and severity 1 conditions are percolated. If a Language Environment condition is triggered in JNI code as a result of an arithmetic operation, the VM condition handler resumes executing Java code as if the JNI native code had thrown a com.ibm.le.conditionhandling.ConditionException exception. This exception class is a subclass of java.lang.RuntimeException . Note: The Language Environment conditions that correspond to arithmetic operations are CEE3208S through CEE3234S . However, the Language Environment does not deliver conditions CEE3208S , CEE3213S , or CEE3234S to C applications, so the VM condition handler will not receive them. If the condition handling reaches this step, the condition is considered to be unrecoverable. RAS diagnostic information is generated, and the VM ends by calling the CEE3AB2() service with abend code 3565, reason code 0, and cleanup code 0. Restriction: You cannot use -Xsignal:userConditionHandler=percolate and -XCEEHDLR together.","title":"Explanation"},{"location":"xceehdlr/#see-also","text":"-Xsignal:userConditionHandler=percolate Signals used by the VM .","title":"See also"},{"location":"xcheck/","text":"-Xcheck You can use the -Xcheck option to run checks during OpenJ9 virtual machine (VM) startup, such as memory checks or checks on JNI functions. Syntax -Xcheck:<parameter> Parameters Parameter Effect classpath Checks the classpath and reports errors such as a missing directory or JAR file. dump Checks the operating system for settings that might truncate system dumps. (AIX\u00ae and Linux\u00ae only) gc Runs additional checks on garbage collection. jni Runs additional checks for JNI functions. memory Identifies memory leaks inside the VM using strict checks that cause the VM to exit on failure. vm Performs additional checks on the VM. classpath -Xcheck:classpath Checks the classpath and reports errors such as a missing directory or JAR file. dump AIX and Linux only -Xcheck:dump Checks operating system settings during VM startup. Messages are issued if the operating system has settings that might truncate system dumps. On AIX systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated This message indicates that the AIX operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM it might be truncated, and therefore of greatly reduced value in investigating the cause of crashes and other issues. For more information about how to set user limits on AIX, see Setting system resource limits on AIX and Linux systems . JVMJ9VM134W The system fullcore option is set to FALSE, system dumps may be truncated This message indicates that the AIX operating system Enable full CORE dump option is set to FALSE . This setting might result in truncated system dumps. For more information about how to set this option correctly on AIX, see Setting system resource limits on AIX and Linux systems . On Linux systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated. This message indicates that the Linux operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM, it might be truncated and therefore of greatly reduced value in investigating the cause of crashes and other issues. Review the documentation that is provided for your operating system to correctly configure the value for ulimits . For further information, see Setting system resource limits on AIX and Linux systems . JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, abrt-hook-ccpp , is configured in the operating system to intercept any system dump files that are generated. This program is part of the Automatic Bug Reporting Tool (ABRT). For more information, see Automatic Bug Reporting Tool . This tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the ABRT tool and messages that are written by the tool in /var/log/messages . If problems occur when generating system dumps from the VM, consider disabling ABRT. JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/share/apport/apport %p %s %c\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, apport , is configured in the operating system to intercept any system dump files that are generated. For more information about this tool, see: Apport The tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the Apport tool and messages that are written by the tool in /var/log/apport.log . If problems occur when generating system dumps from the VM, consider disabling the Apport tool. JVMJ9VM136W \"/proc/sys/kernel/core_pattern setting \"/tmp/cores/core.%e.%p.%h.%t \" specifies a format string for renaming core dumps. The JVM may be unable to locate core dumps and rename them. This message indicates that the Linux /proc/sys/kernel/core_pattern option is set to rename system dumps. The tokens that are used in the operating system dump name might interfere with the VM's system dump file processing, in particular with file names specified in the VM -Xdump options. If problems occur when generating system dumps from the VM, consider changing the /proc/sys/kernel/core_pattern setting to the default value of core . gc -Xcheck:gc[:help][:<scan options>][:<verify options>][:<misc options>] Runs additional checks on garbage collection. By default, no checks are made. There are many scan, verify, and miscellaneous suboptions available. If you do not specify any, all possible scan and verify suboptions are run, plus the miscellaneous verbose and check suboptions. For more information, see the output of -Xcheck:gc:help . jni -Xcheck:jni[:help][:<option>] Runs additional checks for JNI functions. By default, no checks are made. For more information, see the output of -Xcheck:jni:help . memory -Xcheck:memory[:<option>] Identifies memory leaks inside the VM by using strict checks that cause the VM to exit on failure. Restriction: You cannot include -Xcheck:memory in the options file (see -Xoptionsfile ). The available parameters are as follows: :all (Default if no options specified) Enables checking of all allocated and freed blocks on every free and allocate call. This check of the heap is the most thorough. It typically causes the VM to exit on nearly all memory-related problems soon after they are caused. This option has the greatest affect on performance. :callsite=<number_of_allocations> Displays callsite information every <number_of_allocations> . De-allocations are not counted. Callsite information is presented in a table with separate information for each callsite. Statistics include: The number and size of allocation and free requests since the last report. The number of the allocation request responsible for the largest allocation from each site. Callsites are presented as sourcefile:linenumber for C code and assembly function name for assembler code. Callsites that do not provide callsite information are accumulated into an \"unknown\" entry. :failat=<number_of_allocations> Causes memory allocation to fail (return NULL) after <number_of_allocations> . For example, setting <number_of_allocations> to 13 causes the 14th allocation to return NULL. De-allocations are not counted. Use this option to ensure that VM code reliably handles allocation failures. This option is useful for checking allocation site behavior rather than setting a specific allocation limit. :ignoreUnknownBlocks Ignores attempts to free memory that was not allocated using the -Xcheck:memory tool. Instead, the -Xcheck:memory statistics that are printed out at the end of a run indicates the number of \"unknown\" blocks that were freed. :mprotect=[top|bottom] Locks pages of memory on supported platforms, causing the program to stop if padding before or after the allocated block is accessed for reads or writes. An extra page is locked on each side of the block returned to the user. If you do not request an exact multiple of one page of memory, a region on one side of your memory is not locked. The top and bottom options control which side of the memory area is locked. top aligns your memory blocks to the top of the page (lower address), so buffer underruns result in an application failure. bottom aligns your memory blocks to the bottom of the page (higher address) so buffer overruns result in an application failure. Standard padding scans detect buffer underruns when using top and buffer overruns when using bottom . :nofree Keeps a list of blocks that are already used instead of freeing memory. This list, and the list of currently allocated blocks, is checked for memory corruption on every allocation and deallocation. Use this option to detect a dangling pointer (a pointer that is \"dereferenced\" after its target memory is freed). This option cannot be reliably used with long-running applications (such as WebSphere\u00ae Application Server), because \"freed\" memory is never reused or released by the VM. :noscan Checks for blocks that are not freed. This option has little effect on performance, but memory corruption is not detected. This option is compatible only with subAllocator , callsite , and callsitesmall . :quick Enables block padding only and is used to detect basic heap corruption. Every allocated block is padded with sentinel bytes, which are verified on every allocate and free. Block padding is faster than the default of checking every block, but is not as effective. :skipto=<number_of_allocations> Causes the program to check only on allocations that occur after <number_of_allocations> . De-allocations are not counted. Use this option to speed up VM startup when early allocations are not causing the memory problem. The VM performs approximately 250+ allocations during startup. :subAllocator[=<size_in_MB>] Allocates a dedicated and contiguous region of memory for all VM allocations. This option helps to determine if user JNI code or the VM is responsible for memory corruption. Corruption in the VM subAllocator heap suggests that the VM is causing the problem; corruption in the user-allocated memory suggests that user code is corrupting memory. Typically, user and VM allocated memory are interleaved. :zero Newly allocated blocks are set to 0 instead of being filled with the 0xE7E7xxxxxxxxE7E7 pattern. Setting these blocks to 0 helps you to determine whether a callsite is expecting zeroed memory, in which case the allocation request is followed by memset(pointer, 0, size) . vm -Xcheck:vm[:<option>] Performs additional checks on the VM. By default, no checking is performed. For more information, run -Xcheck:vm:help .","title":"-Xcheck"},{"location":"xcheck/#-xcheck","text":"You can use the -Xcheck option to run checks during OpenJ9 virtual machine (VM) startup, such as memory checks or checks on JNI functions.","title":"-Xcheck"},{"location":"xcheck/#syntax","text":"-Xcheck:<parameter>","title":"Syntax"},{"location":"xcheck/#parameters","text":"Parameter Effect classpath Checks the classpath and reports errors such as a missing directory or JAR file. dump Checks the operating system for settings that might truncate system dumps. (AIX\u00ae and Linux\u00ae only) gc Runs additional checks on garbage collection. jni Runs additional checks for JNI functions. memory Identifies memory leaks inside the VM using strict checks that cause the VM to exit on failure. vm Performs additional checks on the VM.","title":"Parameters"},{"location":"xcheck/#classpath","text":"-Xcheck:classpath Checks the classpath and reports errors such as a missing directory or JAR file.","title":"classpath"},{"location":"xcheck/#dump","text":"AIX and Linux only -Xcheck:dump Checks operating system settings during VM startup. Messages are issued if the operating system has settings that might truncate system dumps. On AIX systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated This message indicates that the AIX operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM it might be truncated, and therefore of greatly reduced value in investigating the cause of crashes and other issues. For more information about how to set user limits on AIX, see Setting system resource limits on AIX and Linux systems . JVMJ9VM134W The system fullcore option is set to FALSE, system dumps may be truncated This message indicates that the AIX operating system Enable full CORE dump option is set to FALSE . This setting might result in truncated system dumps. For more information about how to set this option correctly on AIX, see Setting system resource limits on AIX and Linux systems . On Linux systems, the following messages are possible: JVMJ9VM133W The system core size hard ulimit is set to <value>, system dumps may be truncated. This message indicates that the Linux operating system user limit is set to restrict the size of system dumps to the value indicated. If a system dump is produced by the VM, it might be truncated and therefore of greatly reduced value in investigating the cause of crashes and other issues. Review the documentation that is provided for your operating system to correctly configure the value for ulimits . For further information, see Setting system resource limits on AIX and Linux systems . JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, abrt-hook-ccpp , is configured in the operating system to intercept any system dump files that are generated. This program is part of the Automatic Bug Reporting Tool (ABRT). For more information, see Automatic Bug Reporting Tool . This tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the ABRT tool and messages that are written by the tool in /var/log/messages . If problems occur when generating system dumps from the VM, consider disabling ABRT. JVMJ9VM135W /proc/sys/kernel/core_pattern setting \"|/usr/share/apport/apport %p %s %c\" specifies that core dumps are to be piped to an external program. The JVM may be unable to locate core dumps and rename them. This message means that an external program, apport , is configured in the operating system to intercept any system dump files that are generated. For more information about this tool, see: Apport The tool might interfere with the VM's system dump file processing by renaming or truncating system dumps. Review the configuration of the Apport tool and messages that are written by the tool in /var/log/apport.log . If problems occur when generating system dumps from the VM, consider disabling the Apport tool. JVMJ9VM136W \"/proc/sys/kernel/core_pattern setting \"/tmp/cores/core.%e.%p.%h.%t \" specifies a format string for renaming core dumps. The JVM may be unable to locate core dumps and rename them. This message indicates that the Linux /proc/sys/kernel/core_pattern option is set to rename system dumps. The tokens that are used in the operating system dump name might interfere with the VM's system dump file processing, in particular with file names specified in the VM -Xdump options. If problems occur when generating system dumps from the VM, consider changing the /proc/sys/kernel/core_pattern setting to the default value of core .","title":"dump"},{"location":"xcheck/#gc","text":"-Xcheck:gc[:help][:<scan options>][:<verify options>][:<misc options>] Runs additional checks on garbage collection. By default, no checks are made. There are many scan, verify, and miscellaneous suboptions available. If you do not specify any, all possible scan and verify suboptions are run, plus the miscellaneous verbose and check suboptions. For more information, see the output of -Xcheck:gc:help .","title":"gc"},{"location":"xcheck/#jni","text":"-Xcheck:jni[:help][:<option>] Runs additional checks for JNI functions. By default, no checks are made. For more information, see the output of -Xcheck:jni:help .","title":"jni"},{"location":"xcheck/#memory","text":"-Xcheck:memory[:<option>] Identifies memory leaks inside the VM by using strict checks that cause the VM to exit on failure. Restriction: You cannot include -Xcheck:memory in the options file (see -Xoptionsfile ). The available parameters are as follows: :all (Default if no options specified) Enables checking of all allocated and freed blocks on every free and allocate call. This check of the heap is the most thorough. It typically causes the VM to exit on nearly all memory-related problems soon after they are caused. This option has the greatest affect on performance. :callsite=<number_of_allocations> Displays callsite information every <number_of_allocations> . De-allocations are not counted. Callsite information is presented in a table with separate information for each callsite. Statistics include: The number and size of allocation and free requests since the last report. The number of the allocation request responsible for the largest allocation from each site. Callsites are presented as sourcefile:linenumber for C code and assembly function name for assembler code. Callsites that do not provide callsite information are accumulated into an \"unknown\" entry. :failat=<number_of_allocations> Causes memory allocation to fail (return NULL) after <number_of_allocations> . For example, setting <number_of_allocations> to 13 causes the 14th allocation to return NULL. De-allocations are not counted. Use this option to ensure that VM code reliably handles allocation failures. This option is useful for checking allocation site behavior rather than setting a specific allocation limit. :ignoreUnknownBlocks Ignores attempts to free memory that was not allocated using the -Xcheck:memory tool. Instead, the -Xcheck:memory statistics that are printed out at the end of a run indicates the number of \"unknown\" blocks that were freed. :mprotect=[top|bottom] Locks pages of memory on supported platforms, causing the program to stop if padding before or after the allocated block is accessed for reads or writes. An extra page is locked on each side of the block returned to the user. If you do not request an exact multiple of one page of memory, a region on one side of your memory is not locked. The top and bottom options control which side of the memory area is locked. top aligns your memory blocks to the top of the page (lower address), so buffer underruns result in an application failure. bottom aligns your memory blocks to the bottom of the page (higher address) so buffer overruns result in an application failure. Standard padding scans detect buffer underruns when using top and buffer overruns when using bottom . :nofree Keeps a list of blocks that are already used instead of freeing memory. This list, and the list of currently allocated blocks, is checked for memory corruption on every allocation and deallocation. Use this option to detect a dangling pointer (a pointer that is \"dereferenced\" after its target memory is freed). This option cannot be reliably used with long-running applications (such as WebSphere\u00ae Application Server), because \"freed\" memory is never reused or released by the VM. :noscan Checks for blocks that are not freed. This option has little effect on performance, but memory corruption is not detected. This option is compatible only with subAllocator , callsite , and callsitesmall . :quick Enables block padding only and is used to detect basic heap corruption. Every allocated block is padded with sentinel bytes, which are verified on every allocate and free. Block padding is faster than the default of checking every block, but is not as effective. :skipto=<number_of_allocations> Causes the program to check only on allocations that occur after <number_of_allocations> . De-allocations are not counted. Use this option to speed up VM startup when early allocations are not causing the memory problem. The VM performs approximately 250+ allocations during startup. :subAllocator[=<size_in_MB>] Allocates a dedicated and contiguous region of memory for all VM allocations. This option helps to determine if user JNI code or the VM is responsible for memory corruption. Corruption in the VM subAllocator heap suggests that the VM is causing the problem; corruption in the user-allocated memory suggests that user code is corrupting memory. Typically, user and VM allocated memory are interleaved. :zero Newly allocated blocks are set to 0 instead of being filled with the 0xE7E7xxxxxxxxE7E7 pattern. Setting these blocks to 0 helps you to determine whether a callsite is expecting zeroed memory, in which case the allocation request is followed by memset(pointer, 0, size) .","title":"memory"},{"location":"xcheck/#vm","text":"-Xcheck:vm[:<option>] Performs additional checks on the VM. By default, no checking is performed. For more information, run -Xcheck:vm:help .","title":"vm"},{"location":"xclassgc/","text":"-Xclassgc / -Xnoclassgc Enables and disables class garbage collection (the dynamic unloading of class objects by the VM). When enabled, garbage collection, occurs only on class loader changes. This is the default behavior. Note: Disabling class garbage collection is not recommended as this causes unlimited native memory growth, leading to out-of-memory errors. Syntax Setting Action Default -Xclassgc Enable GC yes -Xnoclassgc Disable GC","title":"-Xnoclassgc"},{"location":"xclassgc/#-xclassgc-xnoclassgc","text":"Enables and disables class garbage collection (the dynamic unloading of class objects by the VM). When enabled, garbage collection, occurs only on class loader changes. This is the default behavior. Note: Disabling class garbage collection is not recommended as this causes unlimited native memory growth, leading to out-of-memory errors.","title":"-Xclassgc / -Xnoclassgc"},{"location":"xclassgc/#syntax","text":"Setting Action Default -Xclassgc Enable GC yes -Xnoclassgc Disable GC","title":"Syntax"},{"location":"xcodecache/","text":"-Xcodecache Use this option to tune performance. This option sets the size of each block of memory that is allocated to store the native code of compiled Java\u2122 methods. By default, this size is selected internally according to the processor architecture and the capability of your system. The maximum value you can specify is 32 MB. If you set a value larger than 32 MB, the JIT ignores the input and sets the value to 32 MB. Note: The JIT compiler might allocate more than one code cache for an application. Use the -Xcodecachetotal option to set the maximum amount of memory that is used by all code caches. Syntax -Xcodecache<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"-Xcodecache"},{"location":"xcodecache/#-xcodecache","text":"Use this option to tune performance. This option sets the size of each block of memory that is allocated to store the native code of compiled Java\u2122 methods. By default, this size is selected internally according to the processor architecture and the capability of your system. The maximum value you can specify is 32 MB. If you set a value larger than 32 MB, the JIT ignores the input and sets the value to 32 MB. Note: The JIT compiler might allocate more than one code cache for an application. Use the -Xcodecachetotal option to set the maximum amount of memory that is used by all code caches.","title":"-Xcodecache"},{"location":"xcodecache/#syntax","text":"-Xcodecache<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xcodecachetotal/","text":"-Xcodecachetotal Use this option to set the maximum size limit for the JIT code cache. This option also affects the size of the JIT data cache. Syntax -Xcodecachetotal<size> The default size is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. See Using -X command-line options for more information about specifying the <size> parameter. Explanation By default, the total size of the JIT code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. Long-running, complex, server-type applications can fill the JIT code cache, which can cause performance problems because not all of the important methods can be JIT-compiled. Use the -Xcodecachetotal option to increase or decrease the maximum code cache size to a setting that suits your application. The minimum size of the code cache is restricted to 2 MB. The value that you specify is rounded up to a multiple of the code cache block size, as specified by the -Xcodecache option. If you specify a value for the -Xcodecachetotal option that is smaller than the default setting, that value is ignored. When you use this option, the maximum size limit for the JIT data cache, which holds metadata about compiled methods, is increased or decreased proportionally to support the JIT compilations. The maximum size limits, for both the JIT code and data caches, that are in use by the VM are shown in Javadump output. Look for lines that begin with 1STSEGLIMIT . Use this information together with verbose JIT tracing to determine suitable values for this option on your system. For example Javadump output, see Java dump: Storage Management (MEMINFO) . See also -Xjit","title":"-Xcodecachetotal"},{"location":"xcodecachetotal/#-xcodecachetotal","text":"Use this option to set the maximum size limit for the JIT code cache. This option also affects the size of the JIT data cache.","title":"-Xcodecachetotal"},{"location":"xcodecachetotal/#syntax","text":"-Xcodecachetotal<size> The default size is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xcodecachetotal/#explanation","text":"By default, the total size of the JIT code cache is 256 MB for a 64-bit VM and 64 MB for a 31/32-bit VM. Long-running, complex, server-type applications can fill the JIT code cache, which can cause performance problems because not all of the important methods can be JIT-compiled. Use the -Xcodecachetotal option to increase or decrease the maximum code cache size to a setting that suits your application. The minimum size of the code cache is restricted to 2 MB. The value that you specify is rounded up to a multiple of the code cache block size, as specified by the -Xcodecache option. If you specify a value for the -Xcodecachetotal option that is smaller than the default setting, that value is ignored. When you use this option, the maximum size limit for the JIT data cache, which holds metadata about compiled methods, is increased or decreased proportionally to support the JIT compilations. The maximum size limits, for both the JIT code and data caches, that are in use by the VM are shown in Javadump output. Look for lines that begin with 1STSEGLIMIT . Use this information together with verbose JIT tracing to determine suitable values for this option on your system. For example Javadump output, see Java dump: Storage Management (MEMINFO) .","title":"Explanation"},{"location":"xcodecachetotal/#see-also","text":"-Xjit","title":"See also"},{"location":"xcomp/","text":"-Xcomp The use of this option is deprecated; use -Xjit:count=0 instead. Syntax -Xcomp","title":"-Xcomp"},{"location":"xcomp/#-xcomp","text":"The use of this option is deprecated; use -Xjit:count=0 instead.","title":"-Xcomp"},{"location":"xcomp/#syntax","text":"-Xcomp","title":"Syntax"},{"location":"xcompactexplicitgc/","text":"\u2011Xcompactexplicitgc / \u2011Xnocompactexplicitgc Enables or disables full compaction each time System.gc() is called. Compaction takes place on global garbage collections if you specify -Xcompactgc or if compaction triggers are met. Syntax Setting Action Default -Xcompactexplicitgc Enable compaction yes -Xnocompactexplicitgc Disable compaction See also Global garbage collection: Compaction phase","title":"-Xnocompactexplicitgc"},{"location":"xcompactexplicitgc/#xcompactexplicitgc-xnocompactexplicitgc","text":"Enables or disables full compaction each time System.gc() is called. Compaction takes place on global garbage collections if you specify -Xcompactgc or if compaction triggers are met.","title":"\u2011Xcompactexplicitgc / \u2011Xnocompactexplicitgc"},{"location":"xcompactexplicitgc/#syntax","text":"Setting Action Default -Xcompactexplicitgc Enable compaction yes -Xnocompactexplicitgc Disable compaction","title":"Syntax"},{"location":"xcompactexplicitgc/#see-also","text":"Global garbage collection: Compaction phase","title":"See also"},{"location":"xcompactgc/","text":"-Xcompactgc / -Xnocompactgc Enables or disables full compaction on all garbage collections (system and global). Syntax Setting Action -Xcompactgc Enable full compaction -Xnocompactgc Disable full compaction Default behavior If no compaction option is specified, the garbage collector compacts based on a series of triggers that attempt to compact only when it is beneficial to the future performance of the OpenJ9 VM. See also Global garbage collection: Compaction phase","title":"-Xnocompactgc"},{"location":"xcompactgc/#-xcompactgc-xnocompactgc","text":"Enables or disables full compaction on all garbage collections (system and global).","title":"-Xcompactgc / -Xnocompactgc"},{"location":"xcompactgc/#syntax","text":"Setting Action -Xcompactgc Enable full compaction -Xnocompactgc Disable full compaction","title":"Syntax"},{"location":"xcompactgc/#default-behavior","text":"If no compaction option is specified, the garbage collector compacts based on a series of triggers that attempt to compact only when it is beneficial to the future performance of the OpenJ9 VM.","title":"Default behavior"},{"location":"xcompactgc/#see-also","text":"Global garbage collection: Compaction phase","title":"See also"},{"location":"xcompilationthreads/","text":"-XcompilationThreads Use this option to specify the number of compilation threads that are used by the JIT compiler. Syntax -XcompilationThreads<n> where <n> is the number of threads, in the range 1-4 inclusive. A number greater than 4 prevents the Java\u2122 VM from starting successfully. Setting the compilation threads to zero does not prevent the JIT from working. Instead, if you do not want the JIT to work, use the -Xint option. Explanation When multiple compilation threads are used, the JIT might generate several diagnostic log files. A log file is generated for each compilation thread. The naming convention for the log file generated by the first compilation thread uses the following pattern: :::java <specified_filename>.<date>.<time>.<pid> The first compilation thread has ID 0. Log files generated by the second and subsequent compilation threads append the ID of the corresponding compilation thread as a suffix to the log file name. The pattern for these log file names is as follows: :::java <specified_filename>.<date>.<time>.<pid>.<compilation_thread_ID> For example, the second compilation thread has ID 1. The result is that the corresponding log file name has the form: :::java <specified_filename>.<date>.<time>.<pid>.1","title":"-XcompilationThreads"},{"location":"xcompilationthreads/#-xcompilationthreads","text":"Use this option to specify the number of compilation threads that are used by the JIT compiler.","title":"-XcompilationThreads"},{"location":"xcompilationthreads/#syntax","text":"-XcompilationThreads<n> where <n> is the number of threads, in the range 1-4 inclusive. A number greater than 4 prevents the Java\u2122 VM from starting successfully. Setting the compilation threads to zero does not prevent the JIT from working. Instead, if you do not want the JIT to work, use the -Xint option.","title":"Syntax"},{"location":"xcompilationthreads/#explanation","text":"When multiple compilation threads are used, the JIT might generate several diagnostic log files. A log file is generated for each compilation thread. The naming convention for the log file generated by the first compilation thread uses the following pattern: :::java <specified_filename>.<date>.<time>.<pid> The first compilation thread has ID 0. Log files generated by the second and subsequent compilation threads append the ID of the corresponding compilation thread as a suffix to the log file name. The pattern for these log file names is as follows: :::java <specified_filename>.<date>.<time>.<pid>.<compilation_thread_ID> For example, the second compilation thread has ID 1. The result is that the corresponding log file name has the form: :::java <specified_filename>.<date>.<time>.<pid>.1","title":"Explanation"},{"location":"xcompressedrefs/","text":"-Xcompressedrefs / -Xnocompressedrefs (64-bit only) Enables or disables the use of compressed references. Restriction: You cannot include -Xcompressedrefs in the options file (see -Xoptionsfile ). Syntax Setting Action Default -Xcompressedrefs Enable compression yes (see Default behavior ) -Xnocompressedrefs Disable compression Default behavior Compressed references are enabled by default when -Xmx \u2264 57 GB. z/OS\u00ae: This threshold value assumes that you have APAR OA49416 installed. If you do not have the APAR installed, the threshold value is 25 GB. AIX\u00ae and Linux\u00ae: For the metronome garbage collection policy, the threshold is 25 GB. See also Compressed references","title":"-Xnocompressedrefs"},{"location":"xcompressedrefs/#-xcompressedrefs-xnocompressedrefs","text":"(64-bit only) Enables or disables the use of compressed references. Restriction: You cannot include -Xcompressedrefs in the options file (see -Xoptionsfile ).","title":"-Xcompressedrefs / -Xnocompressedrefs"},{"location":"xcompressedrefs/#syntax","text":"Setting Action Default -Xcompressedrefs Enable compression yes (see Default behavior ) -Xnocompressedrefs Disable compression","title":"Syntax"},{"location":"xcompressedrefs/#default-behavior","text":"Compressed references are enabled by default when -Xmx \u2264 57 GB. z/OS\u00ae: This threshold value assumes that you have APAR OA49416 installed. If you do not have the APAR installed, the threshold value is 25 GB. AIX\u00ae and Linux\u00ae: For the metronome garbage collection policy, the threshold is 25 GB.","title":"Default behavior"},{"location":"xcompressedrefs/#see-also","text":"Compressed references","title":"See also"},{"location":"xconcurrentbackground/","text":"-Xconcurrentbackground Specifies the number of low-priority background threads attached to assist the mutator threads in concurrent mark. Syntax -Xconcurrentbackground<n> Default behavior The default is 0 for Linux\u00ae on IBM Z\u00ae and 1 on all other platforms.","title":"-Xconcurrentbackground"},{"location":"xconcurrentbackground/#-xconcurrentbackground","text":"Specifies the number of low-priority background threads attached to assist the mutator threads in concurrent mark.","title":"-Xconcurrentbackground"},{"location":"xconcurrentbackground/#syntax","text":"-Xconcurrentbackground<n>","title":"Syntax"},{"location":"xconcurrentbackground/#default-behavior","text":"The default is 0 for Linux\u00ae on IBM Z\u00ae and 1 on all other platforms.","title":"Default behavior"},{"location":"xconcurrentlevel/","text":"-Xconcurrentlevel This option indicates the ratio between the amount of heap allocated and the amount of heap marked (the allocation \"tax\" rate). Syntax -Xconcurrentlevel<number> Default behavior The default is 8.","title":"-Xconcurrentlevel"},{"location":"xconcurrentlevel/#-xconcurrentlevel","text":"This option indicates the ratio between the amount of heap allocated and the amount of heap marked (the allocation \"tax\" rate).","title":"-Xconcurrentlevel"},{"location":"xconcurrentlevel/#syntax","text":"-Xconcurrentlevel<number>","title":"Syntax"},{"location":"xconcurrentlevel/#default-behavior","text":"The default is 8.","title":"Default behavior"},{"location":"xconcurrentslack/","text":"-Xconcurrentslack Attempts to keep the specified amount of the heap space free in concurrent collectors by starting the concurrent operations earlier. Using this option can sometimes alleviate pause time problems in concurrent collectors at the cost of longer concurrent cycles, affecting total throughput. Syntax -Xconcurrentslack<size> See Using -X command-line options for more information about specifying the <size> parameter. Default behavior The default value is 0, which is optimal for most applications.","title":"-Xconcurrentslack"},{"location":"xconcurrentslack/#-xconcurrentslack","text":"Attempts to keep the specified amount of the heap space free in concurrent collectors by starting the concurrent operations earlier. Using this option can sometimes alleviate pause time problems in concurrent collectors at the cost of longer concurrent cycles, affecting total throughput.","title":"-Xconcurrentslack"},{"location":"xconcurrentslack/#syntax","text":"-Xconcurrentslack<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xconcurrentslack/#default-behavior","text":"The default value is 0, which is optimal for most applications.","title":"Default behavior"},{"location":"xconmeter/","text":"-Xconmeter This option determines the usage of which area, LOA (large object area) or SOA (small object area), is metered and hence which allocations are taxed during concurrent mark. Syntax -Xconmeter:<parameter> Parameters soa -Xconmeter:soa (Default) Applies the allocation tax to allocations from the small object area (SOA). loa -Xconmeter:loa Applies the allocation tax to allocations from the large object area (LOA). dynamic -Xconmeter:dynamic The collector dynamically determines which area to meter based on which area is exhausted first, whether it is the SOA or the LOA. Default behavior By default, allocation tax is applied to the SOA.","title":"-Xconmeter"},{"location":"xconmeter/#-xconmeter","text":"This option determines the usage of which area, LOA (large object area) or SOA (small object area), is metered and hence which allocations are taxed during concurrent mark.","title":"-Xconmeter"},{"location":"xconmeter/#syntax","text":"-Xconmeter:<parameter>","title":"Syntax"},{"location":"xconmeter/#parameters","text":"","title":"Parameters"},{"location":"xconmeter/#soa","text":"-Xconmeter:soa (Default) Applies the allocation tax to allocations from the small object area (SOA).","title":"soa"},{"location":"xconmeter/#loa","text":"-Xconmeter:loa Applies the allocation tax to allocations from the large object area (LOA).","title":"loa"},{"location":"xconmeter/#dynamic","text":"-Xconmeter:dynamic The collector dynamically determines which area to meter based on which area is exhausted first, whether it is the SOA or the LOA.","title":"dynamic"},{"location":"xconmeter/#default-behavior","text":"By default, allocation tax is applied to the SOA.","title":"Default behavior"},{"location":"xdisablejavadump/","text":"-Xdisablejavadump Turns off Java dump generation on errors and signals. Syntax -Xdisablejavadump Default behavior By default, Javadump generation is enabled. See also -Xdump","title":"-Xdisablejavadump"},{"location":"xdisablejavadump/#-xdisablejavadump","text":"Turns off Java dump generation on errors and signals.","title":"-Xdisablejavadump"},{"location":"xdisablejavadump/#syntax","text":"-Xdisablejavadump","title":"Syntax"},{"location":"xdisablejavadump/#default-behavior","text":"By default, Javadump generation is enabled.","title":"Default behavior"},{"location":"xdisablejavadump/#see-also","text":"-Xdump","title":"See also"},{"location":"xdump/","text":"-Xdump OpenJ9 produces various types of diagnostic information for analysis when different events occur, such as a general protection fault. The dumps produced are controlled by dump agents, which are initialized when the OpenJ9 virtual machine (VM) starts. The default settings for the dump agents are sufficient for most cases. However, you can use the -Xdump option on the command line to fine tune the dump agent settings. For example, you can use the -Xdump option to add and remove dump agents for various VM events, update default dump settings, and limit the number of dumps that are produced. A large set of options and suboptions are available for controlling dumps, which provides a lot of flexibility. Xdump Option Builder Use the Xdump Option Builder tool to help you specify the correct options and avoid incompatibilities. Syntax -Xdump:<parameter> The following table lists the help options for -Xdump , which provide usage and configuration information: Command Result -Xdump:help Displays general dump help. -Xdump:events Lists available trigger events. -Xdump:request Lists additional VM requests. -Xdump:tokens Lists recognized label tokens. -Xdump:what Shows registered agents on startup. -Xdump:<agent>:help Displays dump agent usage information. The following options can be used to control the production of diagnostic data: Parameter Result -Xdump:none Removes all default dump agents and any preceding dump options. -Xdump:dynamic Enable support for pluggable agents -Xdump:nofailover Discards dumps when the default or specified dump location is full. -Xdump:directory=<path> Specifies a directory for all dump types to be written to. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents. -Xdump:suspendwith=<offset> Modifies the signal that is used to suspend VM threads while a dump file is being written. Use <offset> to change the default signal number. (Linux\u00ae only) -Xdump:<agent>:<suboptions> Provides detailed suboptions per dump agent that provide more granular control. Dump agents can be configured at a very granular level by specifying suboptions. The <events> suboption is the prime trigger mechanism. The full set of suboptions are listed in the following table: Dump agent suboptions Result -Xdump:<agent>:none Removes the dump agent. -Xdump:<agent>:defaults Prints the default options for the dump agent. -Xdump:<agent>:events=<events> Triggers a dump agent when a specific event occurs. -Xdump:<agent>:exec=<command> Starts an external application for the dump agent. -Xdump:<agent>:file=<filename> Specifies where to write the dump for the dump agent. -Xdump:<agent>:filter=<filter> Filters dumps by wildcards or events. -Xdump:<agent>:msg_filter=<filter> Filters on text strings within an exception message. -Xdump:<agent>:opts=<options> Used by specific dump agents to select the type of dump file to produce. -Xdump:<agent>:priority=<0-999> Specifies the priority that the dump agents run in. -Xdump:<agent>:range=<ranges> Starts and stops a dump agent on a particular occurrence of a VM. -Xdump:<agent>:request=<requests> Asks the VM to prepare the state before starting the dump agent. You can have multiple -Xdump options on the command line. You can also have multiple dump types triggered by multiple events. For example, the following command turns off the creation of heap dump files, and creates a dump agent that produces a heap dump file and a Java\u2122 dump file when either a vmstart or vmstop event occurs: java -Xdump:heap:none -Xdump:heap+java:events=vmstart+vmstop -mp . -m <class> [args...] Note: Multiple suboptions that follow an Xdump suboption must be split with a comma (,), for example: java -Xdump:java:events=vmstart,file=/STDERR/ -version For more detailed information on the these parameters and suboptions, including examples, see Parameters . Dump agents A dump agent performs diagnostic tasks when triggered. Most dump agents save information on the state of the VM in some form of dump or trace file for later analysis. An exception is the \"tool\" agent, which can be used to trigger external processes when specific events occur. Dump agent Description stack Stack dumps are very basic dumps in which the status and Java stack of the thread is written to stderr. console Console dumps are very basic dumps, in which the status of every Java thread is written to stderr. system System dumps capture the raw process image or address space of an application. tool The tool option allows external processes to be started when an event occurs. java Java dumps are an internally generated and formatted analysis of the VM, giving information that includes the Java threads present, the classes loaded, and heap statistics. heap Heap dumps capture all object instances in the heap, including each object address, type or class name, size, and references to other objects. snap Take a snap of the trace buffers, which contain tracepoint data. ceedump LE CEEDUMP dumps are z/OS\u00ae formatted summary system dumps that show stack traces for each thread that is in the VM process, together with register information and a short dump of storage for each register. jit JIT compiler dumps contain diagnostic data in a binary format. Default dump agents During VM initialization a set of dump agents are added by default. You can override this set of dump agents using -Xdump on the command line. To show the registered dump agents, user the Xdump:what option on the command line. The following sample output shows the default dump agents that are in place on a Linux system: java -Xdump:what Registered dump agents ---------------------- -Xdump:system: events=gpf+abort+traceassert+corruptcache, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=999, request=serial ---------------------- -Xdump:system: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..1, priority=999, request=exclusive+compact+prepwalk ---------------------- -Xdump:heap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.%seq.phd, range=1..4, priority=500, request=exclusive+compact+prepwalk, opts=PHD ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- -Xdump:java: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..4, priority=400, request=exclusive+preempt ---------------------- -Xdump:snap: events=gpf+abort+traceassert+corruptcache, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..0, priority=300, request=serial ---------------------- -Xdump:snap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..4, priority=300, request=serial ---------------------- -Xdump:jit: events=gpf+abort, label=/home/user/jitdump.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=200, request=serial ---------------------- Dump agent tokens You can use tokens to add context to dump file names and directories, and to pass command-line arguments to the tool agent. The tokens available are listed in the following table: Token Description %Y Year (4 digits) %y Year (2 digits) %m Month (2 digits) %d Day of the month (2 digits) %H Hour ( 2 digits) %M Minute (2 digits) %S Second (2 digits) %pid Process ID %uid User name %seq Dump counter %tick msec counter %home Java home directory %last Last dump %job Job name (z/OS only) %jobid Job ID (z/OS only) %asid Address space ID (z/OS only) &DS Dump Section. An incrementing sequence number used for splitting TDUMP files to be less than 2 GB in size. (z/OS 64-bit only) Merging -Xdump agents If you configure more than one dump agent, each responds to events according to its configuration. However, the internal structures representing the dump agent configuration might not match the command line, because dump agents are merged for efficiency. Two sets of options can be merged as long as none of the agent settings conflict. This means that the list of installed dump agents and their parameters produced by -Xdump:what might not be grouped in the same way as the original -Xdump options that configured them. For example, you can use the following command to specify that a dump agent creates a Java dump file on class unload: java -Xdump:java:events=unload -Xdump:what This command does not create a new agent, as can be seen in the results from the -Xdump:what option. ... ---------------------- -Xdump:java: events=gpf+user+abort+unload+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- The configuration is merged with the existing Java dump agent for events gpf , user , abort , traceassert , and corruptcache , because none of the specified options for the new unload agent conflict with those for the existing agent. In the previous example, if one of the parameters for the unload agent is changed so that it conflicts with the existing agent, then it cannot be merged. For example, the following command specifies a different priority, forcing a separate agent to be created: java -Xdump:java:events=unload,priority=100 -Xdump:what The results of the -Xdump:what option in the command are as follows. ... ---------------------- -Xdump:java: events=unload, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=100, request=exclusive+preempt ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- To merge dump agents, the request , filter , opts , label , and range parameters must match exactly. If you specify multiple agents that filter on the same string, but keep all other parameters the same, the agents are merged. For example: java -Xdump:none -Xdump:java:events=uncaught,filter=java/lang/NullPointerException -Xdump:java:events=unload,filter=java/lang/NullPointerException -Xdump:what The results of this command are as follows: Registered dump agents ---------------------- -Xdump:java: events=unload+uncaught, filter=java/lang/NullPointerException, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- Dump events Dump agents are triggered by events occurring during operation of the OpenJ9 VM. Some events can be filtered to improve the relevance of the output. The following table shows the events that are available as dump agent triggers: Event Triggered when.... Filters on .... gpf A General Protection Fault (GPF) occurs. Not applicable user The VM receives the SIGQUIT (Linux, macOS\u00ae, AIX\u00ae, z/OS) or SIGBREAK (Windows\u2122) signal from the operating system. Not applicable abort The VM receives the SIGABRT signal from the operating system. Not applicable vmstart The virtual machine is started. Not applicable vmstop The virtual machine stops. Exit code; for example, filter=#129..#192#-42#255 load A class is loaded. Class name; for example, filter=java/lang/String unload A class us unloaded. Not applicable throw An exception is thrown. Exception class name; for example, filter=java/lang/OutOfMem* catch An exception is caught. Exception class name; for example, filter=*Memory* uncaught A Java exception is not caught by the application. Exception class name; for example, filter=*MemoryError systhrow A Java exception is about to be thrown by the VM. This is different from the 'throw' event because it is only triggered for error conditions detected internally in the VM. Exception class name; for example, filter=java/lang/OutOfMem* . thrstart A new thread is started. Not applicable blocked A thread becomes blocked. Not applicable thrstop A thread stops. Not applicable fullgc A garbage collection cycle is started. Not applicable slow A thread takes longer than 50ms to respond to an internal VM request. Time taken; for example, filter=#300ms will trigger when a thread takes longer than 300ms to respond to an internal VM request. allocation A Java object is allocated with a size matching the given filter specification. Object size; a filter must be supplied. For example, filter=#5m will trigger on objects larger than 5 Mb. Ranges are also supported; for example, filter=#256k..512k will trigger on objects between 256 Kb and 512 Kb in size. traceassert An internal error occurs in the VM. Not applicable corruptcache The VM finds that the shared class cache is corrupt. Not applicable excessivegc An excessive amount of time is being spent in the garbage collector. Not applicable Note: The gpf , traceassert , and abort events cannot trigger a heap dump, prepare the heap (request=prepwalk), or compact the heap (request=compact). Parameters -Xdump:<agent>:<suboptions> descriptions and examples. help To print usage information for a specific dump agent, use -Xdump:<agent>:help none:<options> Use the -Xdump:none option to add and remove dump agents for various VM events, update default dump settings (such as the dump name), and limit the number of dumps that are produced. The option can be used to affect all agents by specifying -Xdump:none:<options> or specific agents by specifying -Xdump:<agent>:none:<suboptions> where <suboptions> is one of the following control types: events=<event> exec=<command> file=<filename> filter=<filter> opts=<options> priority=<0-999> range=<ranges> request=<requests> Explanations for these suboptions are provided elsewhere in this topic. To remove all default dump agents and any preceding dump options, use -Xdump:none . Use this option so that you can subsequently specify a completely new dump configuration. You can also remove dump agents of a particular type. Here are some examples: To turn off all heap dumps (including default agents) but leave Java dumps enabled, use the following option: -Xdump:java+heap:events=vmstop -Xdump:heap:none To turn off all dump agents for corruptcache events: -Xdump:none:events=corruptcache To turn off just system dumps for corruptcache events: -Xdump:system:none:events=corruptcache To turn off all dumps when a java/lang/OutOfMemory error is thrown: -Xdump:none:events=systhrow,filter=java/lang/OutOfMemoryError To turn off just system dumps when a java/lang/OutOfMemory error is thrown: -Xdump:system:none:events=systhrow,filter=java/lang/OutOfMemoryError If you remove all dump agents by using -Xdump:none with no further -Xdump options, the VM still provides these basic diagnostic outputs: If a user signal (kill -QUIT) is sent to the VM, a brief listing of the Java threads including their stacks, status, and monitor information is written to stderr. If a crash occurs, information about the location of the crash, VM options, and native and Java stack traces are written to stderr. A system dump file is also written to the user's home directory. Note: Removing dump agents and specifying a new dump configuration can require a long set of command-line options. To reuse command-line options, save the new dump configuration in a file and use the -Xoptionsfile option. For more information, see -Xoptionsfile . defaults Each dump type has default options. To view the default options for a particular dump type, use -Xdump:<agent>:defaults . You can change the default options at run time. For example, you can direct Java dump files into a separate directory for each process, and guarantee unique files by adding a sequence number to the file name using: -Xdump:java:defaults:file=dumps/%pid/javacore-%seq.txt` Or, for example, on z/OS, you can add the jobname to the Java dump file name using: -Xdump:java:defaults:file=javacore.%job.%H%M%S.txt This option does not add a Java dump agent; it updates the default settings for Java dump agents. Further Java dump agents will then create dump files using this specification for filenames, unless overridden. Note: Changing the defaults for a dump type will also affect the default agents for that dump type added by the VM during initialization. For example if you change the default file name for Java dump files, that will change the file name used by the default Java dump agents. However, changing the default range option will not change the range used by the default Java dump agents, because those agents override the range option with specific values. events=<event> To trigger a dump as a result of an event, use the -Xdump:<agent>:events=<event> suboption. For a list of possible events, see Dump events . For example, the following command instructs the VM to create a dump agent at startup that produces a Heap dump whenever the vmstop event happens: -Xdump:heap:events=vmstop exec=<command> The exec suboption is used by the tool dump agent to specify an external application to start. You can set a specific command to run for a particular dump agent with the following command: -Xdump:<agent>:exec=<command> file=<filename> The file suboption specifies where the diagnostics information is written for the specified dump type. The syntax is -Xdump:<agent>:file=<filename> . For example, to create a Heap dump called my.dmp when a vmstop event is received, use: java -Xdump:heap:events=vmstop,file=my.dmp When producing system dump files on z/OS platforms, use the dsn option instead of the file option. For example: java -Xdump:system:events=vmstop,dsn=%uid.MYDUMP Writing to STDOUT / STDERR Add one of the following options to write a Java dump file to STDOUT or STDERR respectively: -Xdump:java:file=/STDOUT/ -Xdump:java:file=/STDERR/ The keywords /STDOUT/ and /STDERR/ are not case sensitive; /stdout/ and /stderr/ are equivalent. By common convention, you can use a dash ( - ) to refer to STDOUT: -Xdump:java:file=- Tokens You can use tokens to add context to dump file names. For a list of tokens, see Dump agent tokens . File location The location for the dump file is selected from the following options, in this order: The location specified by the -Xdump:<agent>:file suboption on the command line (if that location includes a path). This location applies to the specified dump agent type only. The location specified by the -Xdump:directory option on the command line. This location applies to all dump agent types. The location specified by the relevant environment variable: Dump agent type z/OS operating systems Other operating systems Java dumps _CEE_DMPTARG IBM_JAVACOREDIR Heap dumps _CEE_DMPTARG IBM_HEAPDUMPDIR System dumps JAVA_DUMP_TDUMP_PATTERN IBM_COREDIR JIT dumps _CEE_DMPTARG IBM_COREDIR Snap traces _CEE_DMPTARG IBM_COREDIR The current working directory of the OpenJ9 VM process. If the directory does not exist, it is created. If the dump file cannot be written to the selected location, the VM reverts to using the following locations, in this order: On Windows platforms only, the system default location is C:\\WINDOWS . The location specified by the TMPDIR environment variable. The C:\\Temp on Windows operating systems, or the /tmp directory on other operating systems. This VM action does not apply to system dumps on z/OS operating systems that use the dsn option. You can prevent the VM reverting to different dump locations by using the -Xdump:nofailover option. filter=<filter> Some VM events occur thousands of times during the lifetime of an application. Dump agents can use filters and ranges to avoid producing an excessive number of dump files. The following syntax must be used: -Xdump:<agent>:filter=<filter> Wildcards You can use a wildcard in your exception event filter by placing an asterisk only at the beginning or end of the filter. The following command does not work because the second asterisk is not at the end: -Xdump:java:events=throw,filter=*InvalidArgumentException#*.myVirtualMethod To fix the problem, change this filter to the following string: -Xdump:java:events=throw,filter=*InvalidArgumentException#MyApplication.* Class loading and exception events You can filter class loading ( load ) and exception ( throw , catch , uncaught , systhrow ) events by the name of the class that is being loaded, thrown or caught. For example: -Xdump:java:events=load,filter=java/lang/String -Xdump:java:events=throw,filter=java/lang/ArrayStoreException -Xdump:java:events=catch,filter=java/lang/NullPointerException In addition, you can filter throw , uncaught , and systhrow exception events by the name of the method that throws the exception. The name of the parent class must include the full package name, using the forward slash (/) as a separator. Use a dot (.) to separate the method name from the class name. You can use an asterisk (*) as a wildcard character, to include all methods (optional portions are shown in brackets). For example: -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] For example, to trigger a Java dump when method MyApplication.myMethod() throws a NullPointerException exception, use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.myMethod The stack frame offset allows you to filter on the name of a method that calls the throwing method. This option is useful if the exception is being thrown from a general purpose or utility class. For example, to trigger a Java dump when a method called by MyApplication.main() throws a NullPointerException , use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.main#1 The default value of the stack frame offset is zero. You can filter the catch exception events by Java method name (optional portions are shown in brackets). For example: -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] You can filter throw , uncaught , and systhrowexception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] You can filter the catch exception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] Note: The filters apply to the stacktrace and fire every time the same exception is rethrown, which might result in multiple Java core files. vmstop event You can filter the VM shut down event ( vmstop ) by using one or more exit codes: -Xdump:java:events=vmstop,filter=#129..192#-42#255 slow event You can filter the slow event to change the time threshold from the default of 50 ms: -Xdump:java:events=slow,filter=#300ms allocation event You must filter the allocation event to specify the size of objects that cause a trigger. You can set the filter size from zero up to the maximum value of a 32-bit pointer on 32-bit platforms, or the maximum value of a 64-bit pointer on 64-bit platforms. Setting the lower filter value to zero triggers a dump on all allocations. For example, to trigger dumps on allocations greater than 5 Mb in size, use: -Xdump:stack:events=allocation,filter=#5m To trigger dumps on allocations between 256Kb and 512Kb in size, use: -Xdump:stack:events=allocation,filter=#256k..512k Other events If you apply a filter to an event that does not support filtering, the filter is ignored. msg_filter=<filter> You can use the msg_filter suboption to filter on text strings within an exception message, allowing you to reduce the number of dump files produced. This option is supported only for the following events: throw , catch , systhrow , and uncaught . Use the following syntax to include message filtering in your dump output: -Xdump:<agent>:events=<event>,msg_filter=<filter>` where <filter> is a text string from the exceptions that you want to include in the dump file. This suboption supports asterisks as wild cards. The following example filters java/lang/VerifyError exceptions that contains the text string class format : -Xdump:java:events=throw,filter=java/lang/VerifyError,msg_filter=*class format* opts=<options> The full syntax is -Xdump:<agent>:opts=<options> . The heap dump agent uses this suboption to specify the type of file to produce. On z/OS, the system dump agent uses this suboption to specify the type of dump to produce. Heap dumps You can specify a PHD heap dump file (PHD), a classic text heap dump file (CLASSIC), or both. The default is a PHD file. For example: -Xdump:heap:opts=PHD -Xdump:heap:opts=CLASSIC -Xdump:heap:opts=PHD+CLASSIC z/OS system dumps You can specify a system transaction dump (IEATDUMP), an LE dump (CEEDUMP), or both. The default is an IEADUMP file. For example: -Xdump:system:opts=IEATDUMP -Xdump:system:opts=CEEDUMP -Xdump:system:opts=IEATDUMP+CEEDUMP The ceedump agent is the preferred way to specify LE dumps, for example: -Xdump:ceedump:events=gpf Tool dumps The tool dump agent supports two suboptions that can be specified using the opts subption. You can run the external process asynchronously with opts=ASYNC. You can also specify a delay in milliseconds that produces a pause after starting the command. These two options can be used independently or together. The following examples show different options for starting a new process that runs myProgram : -Xdump:tool:events=vmstop,exec=myProgram Without the opts suboption, the tool dump agent starts the process, and waits for the process to end before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC When opts=ASYNC is specified, the tool dump agent starts the process, and continues without waiting for the new process to end. -Xdump:tool:events=vmstop,exec=myProgram,opts=WAIT1000 This option starts the process, waits for the process to end, and then waits a further 1 second (1000 milliseconds) before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC+WAIT10000 Finally the last example starts the process and waits for 10 seconds before continuing, whether the process is still running or not. This last form is useful if you are starting a process that does not end, but requires time to initialize properly. priority=<0-999> One event can generate multiple dump files. The agents that produce each dump file run sequentially and their order is determined by the priority keyword set for each agent. The full syntax for this command is -Xdump:<agent>:priority=<0-999> . Examination of the output from -Xdump:what shows that a gpf event produces a snap trace, a Java dump file, and a system dump file. In this example, the system dump runs first, with priority 999. The snap dump runs second, with priority 500. The Java dump runs last, with priority 10: -Xdump:heap:events=vmstop,priority=123 The maximum value allowed for priority is 999. Higher priority dump agents are started first. If you do not specifically set a priority, default values are taken based on the dump type. The default priority and the other default values for a particular type of dump, can be displayed by using -Xdump:<type>:defaults . For example: java -Xdump:heap:defaults -version Default -Xdump:heap settings: events=gpf+user filter= file=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.phd range=1..0 priority=500 request=exclusive+compact+prepwalk opts=PHD range=<ranges> You can start and stop dump agents on a particular occurrence of a VM event by using the range suboption: -Xdump:<agent>:range=<ranges> For example: -Xdump:java:events=fullgc,range=100..200 Note: range=1..0 against an event means \"on every occurrence\". The VM default dump agents have the range suboption set to 1..0 for all events except systhrow. Most systhrow events with filter=java/lang/OutOfMemoryError have the range suboption set to 1..4, which limits the number of dump files produced on OutOfMemory conditions to a maximum of 4. For more information, see Default dump agents . If you add a new dump agent and do not specify the range, a default of 1..0 is used. request=<requests> Use the request suboption to ask the VM to prepare the state before starting the dump agent: -Xdump:<agent>:request=<requests> The available suboptions are listed in the following table: suboption value Description exclusive Request exclusive access to the VM. compact Run garbage collection. This option removes all unreachable objects from the heap before the dump file is generated. prepwalk Prepare the heap for walking. You must also specify exclusive when you use this option. serial Suspend other dumps until this dump is finished. preempt Applies to the Java dump agent and controls whether native threads in the process are forcibly pre-empted in order to collect stack traces. If this option is not specified, only Java stack traces are collected in the Java dump. You can specify more than one request option by using + . For example: -Xdump:heap:request=exclusive+compact+prepwalk The VM exclusive access mechanism allows a VM thread to halt the activity of other VM threads in a controlled way by using internal VM locks. When the request=exclusive option is specified for a dump agent, the VM thread that is producing the dump waits for threads that are running Java code to halt, and for garbage collection operations to complete, before the dump file is written. This process helps ensure that the dump has consistent data. When the dump is complete, the mechanism allows the other threads to resume. By default, only system dumps for OutOfMemoryError exceptions request exclusive access. Other system dump events typically result from a crash. In these cases, exclusive access is not requested because acquiring locks during a crash can be problematic. If system dumps are requested by using the com.ibm.jvm.Dump.SystemDump() API, the default system dump agent settings are used, and exclusive access is not requested. However, if you intend to use the system dump file for Java heap memory analysis, use the following option to request exclusive access when the dump is taken: -Xdump:system:defaults:request=exclusive+compact+prepwalk These settings avoid capturing a dump file with in-flight data during garbage collection. As an alternative, you can use the com.ibm.jvm.Dump.triggerDump() API and specify request=exclusive+compact+prepwalk on the API call. For more information about the com.ibm.jvm.Dump API , see the API reference information. The default setting of the request suboption for Java dump files is request=exclusive+preempt . To change the settings so that Java dump files are produced without pre-empting threads to collect native stack traces, use the following option: -Xdump:java:request=exclusive In general, the default request options are sufficient. Dump output Dump output is written to different files, depending on the type of dump and the platform. File names include a time stamp. Dump type File name (AIX, Linux, macOS, Windows) File name (z/OS) System dump core.%Y%m%d.%H%M%S.%pid.dmp %uid.JVM.TDUMP.%job.D%Y%m%d.T%H%M%S (31-bit), %uid.JVM.%job.D%y%m%d.T%H%M%S.X&DS (64-bit) See Note Java dump javacore.%Y%m%d.%H%M%S.%pid.%seq.txt javacore.%Y%m%d.%H%M%S.%pid.%seq.txt Heap dump heapdump.%Y%m%d.%H%M%S.%pid.phd heapdump.%Y%m%d.T%H%M%S.phd JIT dump jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp LE CEEDUMP - CEEDUMP.%Y%m%d.%H%M%S.%pid See Note The tokens used in this table, for example %Y , are described in Dump agent tokens . Note: On z/OS, the system dump file name can be set with the JAVA_DUMP_TDUMP_PATTERN environment variable. The CEEDUMP, which is not produced by default, is stored in the directory specified by _CEE_DMPTARG or the current directory if _CEE_DMPTARG is not specified. System dumps on Linux Linux does not provide an operating system API for generating a system dump from a running process. The VM produces system dumps on Linux by using the fork() API to start an identical process to the parent VM process. The VM then generates a SIGSEGV signal in the child process. The SIGSEGV signal causes Linux to create a system dump for the child process. The parent VM processes and renames the system dump, as required, by the -Xdump options, and might add additional data into the dump file. The system dump file for the child process contains an exact copy of the memory areas used in the parent. The dump viewer can obtain information about the Java threads, classes, and heap from the system dump. However, the dump viewer, and other system dump debuggers show only the single native thread that was running in the child process. You can use the Linux kernel.core_pattern setting to specify the name and path for system dumps. The VM dump agents override the Linux system dump name and path by renaming the dump as specified in the -Xdump options. If the kernel.core_pattern setting specifies a different file system to the -Xdump options, the VM dump agents might be unable to change the file path. In this case the VM renames the dump file, but leaves the file path unchanged. You can find the dump file name and location in the JVMDUMP010I message. Note: If you use the %t specifier in the kernel.core_pattern setting, the VM does not rename the dump. The VM cannot determine the exact time that Linux generated the core file, and therefore cannot be certain which Linux dump file is the correct one to rename. See also -Xtrace -Xdisablejavadump","title":"-Xdump"},{"location":"xdump/#-xdump","text":"OpenJ9 produces various types of diagnostic information for analysis when different events occur, such as a general protection fault. The dumps produced are controlled by dump agents, which are initialized when the OpenJ9 virtual machine (VM) starts. The default settings for the dump agents are sufficient for most cases. However, you can use the -Xdump option on the command line to fine tune the dump agent settings. For example, you can use the -Xdump option to add and remove dump agents for various VM events, update default dump settings, and limit the number of dumps that are produced. A large set of options and suboptions are available for controlling dumps, which provides a lot of flexibility.","title":"-Xdump"},{"location":"xdump/#xdump-option-builder","text":"Use the Xdump Option Builder tool to help you specify the correct options and avoid incompatibilities.","title":"Xdump Option Builder"},{"location":"xdump/#syntax","text":"-Xdump:<parameter> The following table lists the help options for -Xdump , which provide usage and configuration information: Command Result -Xdump:help Displays general dump help. -Xdump:events Lists available trigger events. -Xdump:request Lists additional VM requests. -Xdump:tokens Lists recognized label tokens. -Xdump:what Shows registered agents on startup. -Xdump:<agent>:help Displays dump agent usage information. The following options can be used to control the production of diagnostic data: Parameter Result -Xdump:none Removes all default dump agents and any preceding dump options. -Xdump:dynamic Enable support for pluggable agents -Xdump:nofailover Discards dumps when the default or specified dump location is full. -Xdump:directory=<path> Specifies a directory for all dump types to be written to. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents. -Xdump:suspendwith=<offset> Modifies the signal that is used to suspend VM threads while a dump file is being written. Use <offset> to change the default signal number. (Linux\u00ae only) -Xdump:<agent>:<suboptions> Provides detailed suboptions per dump agent that provide more granular control. Dump agents can be configured at a very granular level by specifying suboptions. The <events> suboption is the prime trigger mechanism. The full set of suboptions are listed in the following table: Dump agent suboptions Result -Xdump:<agent>:none Removes the dump agent. -Xdump:<agent>:defaults Prints the default options for the dump agent. -Xdump:<agent>:events=<events> Triggers a dump agent when a specific event occurs. -Xdump:<agent>:exec=<command> Starts an external application for the dump agent. -Xdump:<agent>:file=<filename> Specifies where to write the dump for the dump agent. -Xdump:<agent>:filter=<filter> Filters dumps by wildcards or events. -Xdump:<agent>:msg_filter=<filter> Filters on text strings within an exception message. -Xdump:<agent>:opts=<options> Used by specific dump agents to select the type of dump file to produce. -Xdump:<agent>:priority=<0-999> Specifies the priority that the dump agents run in. -Xdump:<agent>:range=<ranges> Starts and stops a dump agent on a particular occurrence of a VM. -Xdump:<agent>:request=<requests> Asks the VM to prepare the state before starting the dump agent. You can have multiple -Xdump options on the command line. You can also have multiple dump types triggered by multiple events. For example, the following command turns off the creation of heap dump files, and creates a dump agent that produces a heap dump file and a Java\u2122 dump file when either a vmstart or vmstop event occurs: java -Xdump:heap:none -Xdump:heap+java:events=vmstart+vmstop -mp . -m <class> [args...] Note: Multiple suboptions that follow an Xdump suboption must be split with a comma (,), for example: java -Xdump:java:events=vmstart,file=/STDERR/ -version For more detailed information on the these parameters and suboptions, including examples, see Parameters .","title":"Syntax"},{"location":"xdump/#dump-agents","text":"A dump agent performs diagnostic tasks when triggered. Most dump agents save information on the state of the VM in some form of dump or trace file for later analysis. An exception is the \"tool\" agent, which can be used to trigger external processes when specific events occur. Dump agent Description stack Stack dumps are very basic dumps in which the status and Java stack of the thread is written to stderr. console Console dumps are very basic dumps, in which the status of every Java thread is written to stderr. system System dumps capture the raw process image or address space of an application. tool The tool option allows external processes to be started when an event occurs. java Java dumps are an internally generated and formatted analysis of the VM, giving information that includes the Java threads present, the classes loaded, and heap statistics. heap Heap dumps capture all object instances in the heap, including each object address, type or class name, size, and references to other objects. snap Take a snap of the trace buffers, which contain tracepoint data. ceedump LE CEEDUMP dumps are z/OS\u00ae formatted summary system dumps that show stack traces for each thread that is in the VM process, together with register information and a short dump of storage for each register. jit JIT compiler dumps contain diagnostic data in a binary format.","title":"Dump agents"},{"location":"xdump/#default-dump-agents","text":"During VM initialization a set of dump agents are added by default. You can override this set of dump agents using -Xdump on the command line. To show the registered dump agents, user the Xdump:what option on the command line. The following sample output shows the default dump agents that are in place on a Linux system: java -Xdump:what Registered dump agents ---------------------- -Xdump:system: events=gpf+abort+traceassert+corruptcache, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=999, request=serial ---------------------- -Xdump:system: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/core.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..1, priority=999, request=exclusive+compact+prepwalk ---------------------- -Xdump:heap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.%seq.phd, range=1..4, priority=500, request=exclusive+compact+prepwalk, opts=PHD ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- -Xdump:java: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..4, priority=400, request=exclusive+preempt ---------------------- -Xdump:snap: events=gpf+abort+traceassert+corruptcache, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..0, priority=300, request=serial ---------------------- -Xdump:snap: events=systhrow, filter=java/lang/OutOfMemoryError, label=/home/user/Snap.%Y%m%d.%H%M%S.%pid.%seq.trc, range=1..4, priority=300, request=serial ---------------------- -Xdump:jit: events=gpf+abort, label=/home/user/jitdump.%Y%m%d.%H%M%S.%pid.%seq.dmp, range=1..0, priority=200, request=serial ----------------------","title":"Default dump agents"},{"location":"xdump/#dump-agent-tokens","text":"You can use tokens to add context to dump file names and directories, and to pass command-line arguments to the tool agent. The tokens available are listed in the following table: Token Description %Y Year (4 digits) %y Year (2 digits) %m Month (2 digits) %d Day of the month (2 digits) %H Hour ( 2 digits) %M Minute (2 digits) %S Second (2 digits) %pid Process ID %uid User name %seq Dump counter %tick msec counter %home Java home directory %last Last dump %job Job name (z/OS only) %jobid Job ID (z/OS only) %asid Address space ID (z/OS only) &DS Dump Section. An incrementing sequence number used for splitting TDUMP files to be less than 2 GB in size. (z/OS 64-bit only)","title":"Dump agent tokens"},{"location":"xdump/#merging-xdump-agents","text":"If you configure more than one dump agent, each responds to events according to its configuration. However, the internal structures representing the dump agent configuration might not match the command line, because dump agents are merged for efficiency. Two sets of options can be merged as long as none of the agent settings conflict. This means that the list of installed dump agents and their parameters produced by -Xdump:what might not be grouped in the same way as the original -Xdump options that configured them. For example, you can use the following command to specify that a dump agent creates a Java dump file on class unload: java -Xdump:java:events=unload -Xdump:what This command does not create a new agent, as can be seen in the results from the -Xdump:what option. ... ---------------------- -Xdump:java: events=gpf+user+abort+unload+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- The configuration is merged with the existing Java dump agent for events gpf , user , abort , traceassert , and corruptcache , because none of the specified options for the new unload agent conflict with those for the existing agent. In the previous example, if one of the parameters for the unload agent is changed so that it conflicts with the existing agent, then it cannot be merged. For example, the following command specifies a different priority, forcing a separate agent to be created: java -Xdump:java:events=unload,priority=100 -Xdump:what The results of the -Xdump:what option in the command are as follows. ... ---------------------- -Xdump:java: events=unload, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=100, request=exclusive+preempt ---------------------- -Xdump:java: events=gpf+user+abort+traceassert+corruptcache, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ---------------------- To merge dump agents, the request , filter , opts , label , and range parameters must match exactly. If you specify multiple agents that filter on the same string, but keep all other parameters the same, the agents are merged. For example: java -Xdump:none -Xdump:java:events=uncaught,filter=java/lang/NullPointerException -Xdump:java:events=unload,filter=java/lang/NullPointerException -Xdump:what The results of this command are as follows: Registered dump agents ---------------------- -Xdump:java: events=unload+uncaught, filter=java/lang/NullPointerException, label=/home/user/javacore.%Y%m%d.%H%M%S.%pid.%seq.txt, range=1..0, priority=400, request=exclusive+preempt ----------------------","title":"Merging -Xdump agents"},{"location":"xdump/#dump-events","text":"Dump agents are triggered by events occurring during operation of the OpenJ9 VM. Some events can be filtered to improve the relevance of the output. The following table shows the events that are available as dump agent triggers: Event Triggered when.... Filters on .... gpf A General Protection Fault (GPF) occurs. Not applicable user The VM receives the SIGQUIT (Linux, macOS\u00ae, AIX\u00ae, z/OS) or SIGBREAK (Windows\u2122) signal from the operating system. Not applicable abort The VM receives the SIGABRT signal from the operating system. Not applicable vmstart The virtual machine is started. Not applicable vmstop The virtual machine stops. Exit code; for example, filter=#129..#192#-42#255 load A class is loaded. Class name; for example, filter=java/lang/String unload A class us unloaded. Not applicable throw An exception is thrown. Exception class name; for example, filter=java/lang/OutOfMem* catch An exception is caught. Exception class name; for example, filter=*Memory* uncaught A Java exception is not caught by the application. Exception class name; for example, filter=*MemoryError systhrow A Java exception is about to be thrown by the VM. This is different from the 'throw' event because it is only triggered for error conditions detected internally in the VM. Exception class name; for example, filter=java/lang/OutOfMem* . thrstart A new thread is started. Not applicable blocked A thread becomes blocked. Not applicable thrstop A thread stops. Not applicable fullgc A garbage collection cycle is started. Not applicable slow A thread takes longer than 50ms to respond to an internal VM request. Time taken; for example, filter=#300ms will trigger when a thread takes longer than 300ms to respond to an internal VM request. allocation A Java object is allocated with a size matching the given filter specification. Object size; a filter must be supplied. For example, filter=#5m will trigger on objects larger than 5 Mb. Ranges are also supported; for example, filter=#256k..512k will trigger on objects between 256 Kb and 512 Kb in size. traceassert An internal error occurs in the VM. Not applicable corruptcache The VM finds that the shared class cache is corrupt. Not applicable excessivegc An excessive amount of time is being spent in the garbage collector. Not applicable Note: The gpf , traceassert , and abort events cannot trigger a heap dump, prepare the heap (request=prepwalk), or compact the heap (request=compact).","title":"Dump events"},{"location":"xdump/#parameters","text":"-Xdump:<agent>:<suboptions> descriptions and examples.","title":"Parameters"},{"location":"xdump/#help","text":"To print usage information for a specific dump agent, use -Xdump:<agent>:help","title":"help"},{"location":"xdump/#noneltoptionsgt","text":"Use the -Xdump:none option to add and remove dump agents for various VM events, update default dump settings (such as the dump name), and limit the number of dumps that are produced. The option can be used to affect all agents by specifying -Xdump:none:<options> or specific agents by specifying -Xdump:<agent>:none:<suboptions> where <suboptions> is one of the following control types: events=<event> exec=<command> file=<filename> filter=<filter> opts=<options> priority=<0-999> range=<ranges> request=<requests> Explanations for these suboptions are provided elsewhere in this topic. To remove all default dump agents and any preceding dump options, use -Xdump:none . Use this option so that you can subsequently specify a completely new dump configuration. You can also remove dump agents of a particular type. Here are some examples: To turn off all heap dumps (including default agents) but leave Java dumps enabled, use the following option: -Xdump:java+heap:events=vmstop -Xdump:heap:none To turn off all dump agents for corruptcache events: -Xdump:none:events=corruptcache To turn off just system dumps for corruptcache events: -Xdump:system:none:events=corruptcache To turn off all dumps when a java/lang/OutOfMemory error is thrown: -Xdump:none:events=systhrow,filter=java/lang/OutOfMemoryError To turn off just system dumps when a java/lang/OutOfMemory error is thrown: -Xdump:system:none:events=systhrow,filter=java/lang/OutOfMemoryError If you remove all dump agents by using -Xdump:none with no further -Xdump options, the VM still provides these basic diagnostic outputs: If a user signal (kill -QUIT) is sent to the VM, a brief listing of the Java threads including their stacks, status, and monitor information is written to stderr. If a crash occurs, information about the location of the crash, VM options, and native and Java stack traces are written to stderr. A system dump file is also written to the user's home directory. Note: Removing dump agents and specifying a new dump configuration can require a long set of command-line options. To reuse command-line options, save the new dump configuration in a file and use the -Xoptionsfile option. For more information, see -Xoptionsfile .","title":"none:&lt;options&gt;"},{"location":"xdump/#defaults","text":"Each dump type has default options. To view the default options for a particular dump type, use -Xdump:<agent>:defaults . You can change the default options at run time. For example, you can direct Java dump files into a separate directory for each process, and guarantee unique files by adding a sequence number to the file name using: -Xdump:java:defaults:file=dumps/%pid/javacore-%seq.txt` Or, for example, on z/OS, you can add the jobname to the Java dump file name using: -Xdump:java:defaults:file=javacore.%job.%H%M%S.txt This option does not add a Java dump agent; it updates the default settings for Java dump agents. Further Java dump agents will then create dump files using this specification for filenames, unless overridden. Note: Changing the defaults for a dump type will also affect the default agents for that dump type added by the VM during initialization. For example if you change the default file name for Java dump files, that will change the file name used by the default Java dump agents. However, changing the default range option will not change the range used by the default Java dump agents, because those agents override the range option with specific values.","title":"defaults"},{"location":"xdump/#eventslteventgt","text":"To trigger a dump as a result of an event, use the -Xdump:<agent>:events=<event> suboption. For a list of possible events, see Dump events . For example, the following command instructs the VM to create a dump agent at startup that produces a Heap dump whenever the vmstop event happens: -Xdump:heap:events=vmstop","title":"events=&lt;event&gt;"},{"location":"xdump/#execltcommandgt","text":"The exec suboption is used by the tool dump agent to specify an external application to start. You can set a specific command to run for a particular dump agent with the following command: -Xdump:<agent>:exec=<command>","title":"exec=&lt;command&gt;"},{"location":"xdump/#fileltfilenamegt","text":"The file suboption specifies where the diagnostics information is written for the specified dump type. The syntax is -Xdump:<agent>:file=<filename> . For example, to create a Heap dump called my.dmp when a vmstop event is received, use: java -Xdump:heap:events=vmstop,file=my.dmp When producing system dump files on z/OS platforms, use the dsn option instead of the file option. For example: java -Xdump:system:events=vmstop,dsn=%uid.MYDUMP","title":"file=&lt;filename&gt;"},{"location":"xdump/#writing-to-stdoutstderr","text":"Add one of the following options to write a Java dump file to STDOUT or STDERR respectively: -Xdump:java:file=/STDOUT/ -Xdump:java:file=/STDERR/ The keywords /STDOUT/ and /STDERR/ are not case sensitive; /stdout/ and /stderr/ are equivalent. By common convention, you can use a dash ( - ) to refer to STDOUT: -Xdump:java:file=-","title":"Writing to STDOUT/STDERR"},{"location":"xdump/#tokens","text":"You can use tokens to add context to dump file names. For a list of tokens, see Dump agent tokens .","title":"Tokens"},{"location":"xdump/#file-location","text":"The location for the dump file is selected from the following options, in this order: The location specified by the -Xdump:<agent>:file suboption on the command line (if that location includes a path). This location applies to the specified dump agent type only. The location specified by the -Xdump:directory option on the command line. This location applies to all dump agent types. The location specified by the relevant environment variable: Dump agent type z/OS operating systems Other operating systems Java dumps _CEE_DMPTARG IBM_JAVACOREDIR Heap dumps _CEE_DMPTARG IBM_HEAPDUMPDIR System dumps JAVA_DUMP_TDUMP_PATTERN IBM_COREDIR JIT dumps _CEE_DMPTARG IBM_COREDIR Snap traces _CEE_DMPTARG IBM_COREDIR The current working directory of the OpenJ9 VM process. If the directory does not exist, it is created. If the dump file cannot be written to the selected location, the VM reverts to using the following locations, in this order: On Windows platforms only, the system default location is C:\\WINDOWS . The location specified by the TMPDIR environment variable. The C:\\Temp on Windows operating systems, or the /tmp directory on other operating systems. This VM action does not apply to system dumps on z/OS operating systems that use the dsn option. You can prevent the VM reverting to different dump locations by using the -Xdump:nofailover option.","title":"File location"},{"location":"xdump/#filterltfiltergt","text":"Some VM events occur thousands of times during the lifetime of an application. Dump agents can use filters and ranges to avoid producing an excessive number of dump files. The following syntax must be used: -Xdump:<agent>:filter=<filter>","title":"filter=&lt;filter&gt;"},{"location":"xdump/#wildcards","text":"You can use a wildcard in your exception event filter by placing an asterisk only at the beginning or end of the filter. The following command does not work because the second asterisk is not at the end: -Xdump:java:events=throw,filter=*InvalidArgumentException#*.myVirtualMethod To fix the problem, change this filter to the following string: -Xdump:java:events=throw,filter=*InvalidArgumentException#MyApplication.*","title":"Wildcards"},{"location":"xdump/#class-loading-and-exception-events","text":"You can filter class loading ( load ) and exception ( throw , catch , uncaught , systhrow ) events by the name of the class that is being loaded, thrown or caught. For example: -Xdump:java:events=load,filter=java/lang/String -Xdump:java:events=throw,filter=java/lang/ArrayStoreException -Xdump:java:events=catch,filter=java/lang/NullPointerException In addition, you can filter throw , uncaught , and systhrow exception events by the name of the method that throws the exception. The name of the parent class must include the full package name, using the forward slash (/) as a separator. Use a dot (.) to separate the method name from the class name. You can use an asterisk (*) as a wildcard character, to include all methods (optional portions are shown in brackets). For example: -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] For example, to trigger a Java dump when method MyApplication.myMethod() throws a NullPointerException exception, use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.myMethod The stack frame offset allows you to filter on the name of a method that calls the throwing method. This option is useful if the exception is being thrown from a general purpose or utility class. For example, to trigger a Java dump when a method called by MyApplication.main() throws a NullPointerException , use the following syntax: -Xdump:java:events=throw,filter=java/lang/NullPointerException#com/ibm/MyApplication.main#1 The default value of the stack frame offset is zero. You can filter the catch exception events by Java method name (optional portions are shown in brackets). For example: -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] You can filter throw , uncaught , and systhrowexception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=throw,filter=ExceptionClassName[#com/ibm/ThrowingClassName.throwingMethodName[#stackFrameOffset]] You can filter the catch exception events by Java method name (optional portions are shown in brackets): -Xdump:java:events=catch,filter=ExceptionClassName[#com/ibm/CatchingClassName.catchingMethodName] Note: The filters apply to the stacktrace and fire every time the same exception is rethrown, which might result in multiple Java core files.","title":"Class loading and exception events"},{"location":"xdump/#vmstop-event","text":"You can filter the VM shut down event ( vmstop ) by using one or more exit codes: -Xdump:java:events=vmstop,filter=#129..192#-42#255","title":"vmstop event"},{"location":"xdump/#slow-event","text":"You can filter the slow event to change the time threshold from the default of 50 ms: -Xdump:java:events=slow,filter=#300ms","title":"slow event"},{"location":"xdump/#allocation-event","text":"You must filter the allocation event to specify the size of objects that cause a trigger. You can set the filter size from zero up to the maximum value of a 32-bit pointer on 32-bit platforms, or the maximum value of a 64-bit pointer on 64-bit platforms. Setting the lower filter value to zero triggers a dump on all allocations. For example, to trigger dumps on allocations greater than 5 Mb in size, use: -Xdump:stack:events=allocation,filter=#5m To trigger dumps on allocations between 256Kb and 512Kb in size, use: -Xdump:stack:events=allocation,filter=#256k..512k","title":"allocation event"},{"location":"xdump/#other-events","text":"If you apply a filter to an event that does not support filtering, the filter is ignored.","title":"Other events"},{"location":"xdump/#msg_filterltfiltergt","text":"You can use the msg_filter suboption to filter on text strings within an exception message, allowing you to reduce the number of dump files produced. This option is supported only for the following events: throw , catch , systhrow , and uncaught . Use the following syntax to include message filtering in your dump output: -Xdump:<agent>:events=<event>,msg_filter=<filter>` where <filter> is a text string from the exceptions that you want to include in the dump file. This suboption supports asterisks as wild cards. The following example filters java/lang/VerifyError exceptions that contains the text string class format : -Xdump:java:events=throw,filter=java/lang/VerifyError,msg_filter=*class format*","title":"msg_filter=&lt;filter&gt;"},{"location":"xdump/#optsltoptionsgt","text":"The full syntax is -Xdump:<agent>:opts=<options> . The heap dump agent uses this suboption to specify the type of file to produce. On z/OS, the system dump agent uses this suboption to specify the type of dump to produce.","title":"opts=&lt;options&gt;"},{"location":"xdump/#heap-dumps","text":"You can specify a PHD heap dump file (PHD), a classic text heap dump file (CLASSIC), or both. The default is a PHD file. For example: -Xdump:heap:opts=PHD -Xdump:heap:opts=CLASSIC -Xdump:heap:opts=PHD+CLASSIC","title":"Heap dumps"},{"location":"xdump/#zos-system-dumps","text":"You can specify a system transaction dump (IEATDUMP), an LE dump (CEEDUMP), or both. The default is an IEADUMP file. For example: -Xdump:system:opts=IEATDUMP -Xdump:system:opts=CEEDUMP -Xdump:system:opts=IEATDUMP+CEEDUMP The ceedump agent is the preferred way to specify LE dumps, for example: -Xdump:ceedump:events=gpf","title":"z/OS system dumps"},{"location":"xdump/#tool-dumps","text":"The tool dump agent supports two suboptions that can be specified using the opts subption. You can run the external process asynchronously with opts=ASYNC. You can also specify a delay in milliseconds that produces a pause after starting the command. These two options can be used independently or together. The following examples show different options for starting a new process that runs myProgram : -Xdump:tool:events=vmstop,exec=myProgram Without the opts suboption, the tool dump agent starts the process, and waits for the process to end before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC When opts=ASYNC is specified, the tool dump agent starts the process, and continues without waiting for the new process to end. -Xdump:tool:events=vmstop,exec=myProgram,opts=WAIT1000 This option starts the process, waits for the process to end, and then waits a further 1 second (1000 milliseconds) before continuing. -Xdump:tool:events=vmstop,exec=myProgram,opts=ASYNC+WAIT10000 Finally the last example starts the process and waits for 10 seconds before continuing, whether the process is still running or not. This last form is useful if you are starting a process that does not end, but requires time to initialize properly.","title":"Tool dumps"},{"location":"xdump/#prioritylt0-999gt","text":"One event can generate multiple dump files. The agents that produce each dump file run sequentially and their order is determined by the priority keyword set for each agent. The full syntax for this command is -Xdump:<agent>:priority=<0-999> . Examination of the output from -Xdump:what shows that a gpf event produces a snap trace, a Java dump file, and a system dump file. In this example, the system dump runs first, with priority 999. The snap dump runs second, with priority 500. The Java dump runs last, with priority 10: -Xdump:heap:events=vmstop,priority=123 The maximum value allowed for priority is 999. Higher priority dump agents are started first. If you do not specifically set a priority, default values are taken based on the dump type. The default priority and the other default values for a particular type of dump, can be displayed by using -Xdump:<type>:defaults . For example: java -Xdump:heap:defaults -version Default -Xdump:heap settings: events=gpf+user filter= file=/home/user/heapdump.%Y%m%d.%H%M%S.%pid.phd range=1..0 priority=500 request=exclusive+compact+prepwalk opts=PHD","title":"priority=&lt;0-999&gt;"},{"location":"xdump/#rangeltrangesgt","text":"You can start and stop dump agents on a particular occurrence of a VM event by using the range suboption: -Xdump:<agent>:range=<ranges> For example: -Xdump:java:events=fullgc,range=100..200 Note: range=1..0 against an event means \"on every occurrence\". The VM default dump agents have the range suboption set to 1..0 for all events except systhrow. Most systhrow events with filter=java/lang/OutOfMemoryError have the range suboption set to 1..4, which limits the number of dump files produced on OutOfMemory conditions to a maximum of 4. For more information, see Default dump agents . If you add a new dump agent and do not specify the range, a default of 1..0 is used.","title":"range=&lt;ranges&gt;"},{"location":"xdump/#requestltrequestsgt","text":"Use the request suboption to ask the VM to prepare the state before starting the dump agent: -Xdump:<agent>:request=<requests> The available suboptions are listed in the following table: suboption value Description exclusive Request exclusive access to the VM. compact Run garbage collection. This option removes all unreachable objects from the heap before the dump file is generated. prepwalk Prepare the heap for walking. You must also specify exclusive when you use this option. serial Suspend other dumps until this dump is finished. preempt Applies to the Java dump agent and controls whether native threads in the process are forcibly pre-empted in order to collect stack traces. If this option is not specified, only Java stack traces are collected in the Java dump. You can specify more than one request option by using + . For example: -Xdump:heap:request=exclusive+compact+prepwalk The VM exclusive access mechanism allows a VM thread to halt the activity of other VM threads in a controlled way by using internal VM locks. When the request=exclusive option is specified for a dump agent, the VM thread that is producing the dump waits for threads that are running Java code to halt, and for garbage collection operations to complete, before the dump file is written. This process helps ensure that the dump has consistent data. When the dump is complete, the mechanism allows the other threads to resume. By default, only system dumps for OutOfMemoryError exceptions request exclusive access. Other system dump events typically result from a crash. In these cases, exclusive access is not requested because acquiring locks during a crash can be problematic. If system dumps are requested by using the com.ibm.jvm.Dump.SystemDump() API, the default system dump agent settings are used, and exclusive access is not requested. However, if you intend to use the system dump file for Java heap memory analysis, use the following option to request exclusive access when the dump is taken: -Xdump:system:defaults:request=exclusive+compact+prepwalk These settings avoid capturing a dump file with in-flight data during garbage collection. As an alternative, you can use the com.ibm.jvm.Dump.triggerDump() API and specify request=exclusive+compact+prepwalk on the API call. For more information about the com.ibm.jvm.Dump API , see the API reference information. The default setting of the request suboption for Java dump files is request=exclusive+preempt . To change the settings so that Java dump files are produced without pre-empting threads to collect native stack traces, use the following option: -Xdump:java:request=exclusive In general, the default request options are sufficient.","title":"request=&lt;requests&gt;"},{"location":"xdump/#dump-output","text":"Dump output is written to different files, depending on the type of dump and the platform. File names include a time stamp. Dump type File name (AIX, Linux, macOS, Windows) File name (z/OS) System dump core.%Y%m%d.%H%M%S.%pid.dmp %uid.JVM.TDUMP.%job.D%Y%m%d.T%H%M%S (31-bit), %uid.JVM.%job.D%y%m%d.T%H%M%S.X&DS (64-bit) See Note Java dump javacore.%Y%m%d.%H%M%S.%pid.%seq.txt javacore.%Y%m%d.%H%M%S.%pid.%seq.txt Heap dump heapdump.%Y%m%d.%H%M%S.%pid.phd heapdump.%Y%m%d.T%H%M%S.phd JIT dump jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp jitdump%Y%m%d.%H%M%S.%pid.%seq.dmp LE CEEDUMP - CEEDUMP.%Y%m%d.%H%M%S.%pid See Note The tokens used in this table, for example %Y , are described in Dump agent tokens . Note: On z/OS, the system dump file name can be set with the JAVA_DUMP_TDUMP_PATTERN environment variable. The CEEDUMP, which is not produced by default, is stored in the directory specified by _CEE_DMPTARG or the current directory if _CEE_DMPTARG is not specified.","title":"Dump output"},{"location":"xdump/#system-dumps-on-linux","text":"Linux does not provide an operating system API for generating a system dump from a running process. The VM produces system dumps on Linux by using the fork() API to start an identical process to the parent VM process. The VM then generates a SIGSEGV signal in the child process. The SIGSEGV signal causes Linux to create a system dump for the child process. The parent VM processes and renames the system dump, as required, by the -Xdump options, and might add additional data into the dump file. The system dump file for the child process contains an exact copy of the memory areas used in the parent. The dump viewer can obtain information about the Java threads, classes, and heap from the system dump. However, the dump viewer, and other system dump debuggers show only the single native thread that was running in the child process. You can use the Linux kernel.core_pattern setting to specify the name and path for system dumps. The VM dump agents override the Linux system dump name and path by renaming the dump as specified in the -Xdump options. If the kernel.core_pattern setting specifies a different file system to the -Xdump options, the VM dump agents might be unable to change the file path. In this case the VM renames the dump file, but leaves the file path unchanged. You can find the dump file name and location in the JVMDUMP010I message. Note: If you use the %t specifier in the kernel.core_pattern setting, the VM does not rename the dump. The VM cannot determine the exact time that Linux generated the core file, and therefore cannot be certain which Linux dump file is the correct one to rename.","title":"System dumps on Linux"},{"location":"xdump/#see-also","text":"-Xtrace -Xdisablejavadump","title":"See also"},{"location":"xenableexcessivegc/","text":"\u2011Xenableexcessivegc / \u2011Xdisableexcessivegc Enables or disables the throwing of an OutOfMemory exception if excessive time is spent in the GC. If excessive time is spent in the GC, the option returns null for an allocate request and thus causes an OutOfMemory exception to be thrown. Note: The OutOfMemory exception is thrown only when the heap has been fully expanded and the percentage of application run time that is not spent in garbage collection is at least 95%. This percentage is the default value that triggers an excessive GC event. You can control this value with the -Xgc:excessiveGCratio option. Syntax Setting Effect Default -Xenableexcessivegc Enable exception yes -Xdisableexcessivegc Disable exception","title":"-Xenableexcessivegc"},{"location":"xenableexcessivegc/#xenableexcessivegc-xdisableexcessivegc","text":"Enables or disables the throwing of an OutOfMemory exception if excessive time is spent in the GC. If excessive time is spent in the GC, the option returns null for an allocate request and thus causes an OutOfMemory exception to be thrown. Note: The OutOfMemory exception is thrown only when the heap has been fully expanded and the percentage of application run time that is not spent in garbage collection is at least 95%. This percentage is the default value that triggers an excessive GC event. You can control this value with the -Xgc:excessiveGCratio option.","title":"\u2011Xenableexcessivegc / \u2011Xdisableexcessivegc"},{"location":"xenableexcessivegc/#syntax","text":"Setting Effect Default -Xenableexcessivegc Enable exception yes -Xdisableexcessivegc Disable exception","title":"Syntax"},{"location":"xenableexplicitgc/","text":"\u2011Xenableexplicitgc / \u2011Xdisableexplicitgc Enables and disables garbage collection (GC) when calls are made to System.gc() . Syntax Setting Effect Default -Xenableexplicitgc Enable GC yes -Xdisableexplicitgc Disable GC Explanation Although it is possible to programmatically trigger a garbage collection by calling System.gc() , performance can be adversely affected by halting the application before it is really necessary. Use this option to prevent the VM responding to application requests for a garage collection cycle.","title":"-Xenableexplicitgc"},{"location":"xenableexplicitgc/#xenableexplicitgc-xdisableexplicitgc","text":"Enables and disables garbage collection (GC) when calls are made to System.gc() .","title":"\u2011Xenableexplicitgc / \u2011Xdisableexplicitgc"},{"location":"xenableexplicitgc/#syntax","text":"Setting Effect Default -Xenableexplicitgc Enable GC yes -Xdisableexplicitgc Disable GC","title":"Syntax"},{"location":"xenableexplicitgc/#explanation","text":"Although it is possible to programmatically trigger a garbage collection by calling System.gc() , performance can be adversely affected by halting the application before it is really necessary. Use this option to prevent the VM responding to application requests for a garage collection cycle.","title":"Explanation"},{"location":"xenablestringconstantgc/","text":"\u2011Xenablestringconstantgc / \u2011Xdisablestringconstantgc Enables or disables the collection of strings from the string intern table. Syntax Setting Effect Default -Xenablestringconstantgc Enable collection yes -Xdisablestringconstantgc Disable collection","title":"-Xenablestringconstantgc"},{"location":"xenablestringconstantgc/#xenablestringconstantgc-xdisablestringconstantgc","text":"Enables or disables the collection of strings from the string intern table.","title":"\u2011Xenablestringconstantgc / \u2011Xdisablestringconstantgc"},{"location":"xenablestringconstantgc/#syntax","text":"Setting Effect Default -Xenablestringconstantgc Enable collection yes -Xdisablestringconstantgc Disable collection","title":"Syntax"},{"location":"xfastresolve/","text":"-Xfastresolve Tune performance by improving the resolution time for classes when the field count exceeds the specified threshold. If profiling tools show significant costs in field resolution, change the threshold until the costs are reduced. If you enable this option, additional memory is used when the threshold is exceeded. Note: The use of this option is deprecated. Syntax -Xfastresolve<n> where <n> is the required threshold.","title":"-Xfastresolve"},{"location":"xfastresolve/#-xfastresolve","text":"Tune performance by improving the resolution time for classes when the field count exceeds the specified threshold. If profiling tools show significant costs in field resolution, change the threshold until the costs are reduced. If you enable this option, additional memory is used when the threshold is exceeded. Note: The use of this option is deprecated.","title":"-Xfastresolve"},{"location":"xfastresolve/#syntax","text":"-Xfastresolve<n> where <n> is the required threshold.","title":"Syntax"},{"location":"xfuture/","text":"-Xfuture As described in the Oracle \"Non-Standard Options\" documentation , this Hotspot option turns on strict class-file format checks. For compatibility, this option is also supported by the OpenJ9 VM. Syntax -Xfuture Explanation Oracle recommend that you use this flag when you are developing new code because stricter checks will become the default in future releases. Note: You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier . Default behavior By default, strict format checks are disabled.","title":"-Xfuture"},{"location":"xfuture/#-xfuture","text":"As described in the Oracle \"Non-Standard Options\" documentation , this Hotspot option turns on strict class-file format checks. For compatibility, this option is also supported by the OpenJ9 VM.","title":"-Xfuture"},{"location":"xfuture/#syntax","text":"-Xfuture","title":"Syntax"},{"location":"xfuture/#explanation","text":"Oracle recommend that you use this flag when you are developing new code because stricter checks will become the default in future releases. Note: You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier .","title":"Explanation"},{"location":"xfuture/#default-behavior","text":"By default, strict format checks are disabled.","title":"Default behavior"},{"location":"xgc/","text":"-Xgc Options that change the behavior of the Garbage Collector (GC). Syntax -Xgc:<parameter> Parameters Parameter Effect concurrentScavenge Enables a garbage collection (GC) mode with less pause times. dnssExpectedTimeRatioMaximum Sets the maximum time to spend on GC of the nursery area. dnssExpectedTimeRatioMinimum Sets the minimum time to spend on GC of the nursery area. excessiveGCratio Sets a boundary value beyond which GC is deemed to be excessive. minContractPercent Sets the minimum percentage of the heap that can be contracted at any given time. maxContractPercent Sets the maximum percentage of the heap that can be contracted at any given time. overrideHiresTimerCheck Overrides GC operating system checks for timer resolution. preferredHeapBase Sets a memory range for the Java\u2122 heap. (AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. scvTenureAge Sets the initial scavenger tenure age in the generational concurrent GC policy. stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required. tlhIncrementSize Sets the size of the thread local heap (TLH). increment tlhInitialSize Sets the initial size of the thread local. heap tlhMaximumSize Sets the maximum size of the thread local. heap verboseFormat Sets the verbose GC format. concurrentScavenge (64-bit: Windows, AIX, Linux (x86, POWER\u00ae, or IBM Z\u00ae), and z/OS\u00ae) -Xgc:concurrentScavenge This option supports pause-less garbage collection mode when you use the Generational Concurrent ( gencon ) garbage collection policy (the default policy). If you set this option, the VM attempts to reduce GC pause times for response-time sensitive, large-heap applications. Note: Linux on Z and z/OS This option is supported by all generations of IBM Z\u00ae hardware to enable pause-less GC with two modes of operation: hardware-based and software-based operations. IBM z13\u2122 and earlier hardware operates in software-based pause-less GC mode; and IBM z14\u2122 and later hardware (with supported software) operates in hardware-based mode. Hardware-based pause-less GC is supported on IBM z14\u2122 and later hardware running the following software: Operating systems: z/OS V2R3 z/OS V2R2 and APAR OA51643 . RHEL 7.5 (minimum kernel level 4.14) Ubuntu 18.04 (minimum kernel level 4.15) Hypervisors: IBM z/VM 6.4 with APAR VM65987 IBM z/VM 7.1 KVM solutions with QEMU 2.10 or later and minimum host kernel level 4.12 (for example, RHEL 7.5 with kernel level 4.14) If these requirements are not met, the option is ignored. Note: On z/OS, the virtual storage used might exceed the Java maximum heap size. Set the z/OS memory limit, specified by ulimit -M , to a larger value than the maximum heap size. dnssExpectedTimeRatioMaximum -Xgc:dnssExpectedTimeRatioMaximum=<value> Setting Value Default <value> [percentage] 5 The maximum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals. dnssExpectedTimeRatioMinimum -Xgc:dnssExpectedTimeRatioMinimum=<value> Setting Value Default <value> [percentage] 1 The minimum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals. excessiveGCratio -Xgc:excessiveGCratio=<value> Setting Value Default <value> [percentage] 95 where <value> is a percentage of total application run time that is not spent in GC. The default value is 95, which means that anything over 5% of total application run time spent on GC is deemed excessive. This option can be used only when -Xenableexcessivegc is set (enabled by default). minContractPercent -Xgc:minContractPercent=<n> Setting Value Default <n> [percentage] - The minimum percentage of the heap that can be contracted at any given time. maxContractPercent -Xgc:maxContractPercent=<n> Setting Value Default <n> [percentage] - The maximum percentage of the heap that can be contracted at any given time. For example, -Xgc:maxContractPercent=20 causes the heap to contract by as much as 20%. overrideHiresTimerCheck -Xgc:overrideHiresTimerCheck When the VM starts, the GC checks that the operating system can meet the timer resolution requirements for the requested target pause time. Typically, this check correctly identifies operating systems that can deliver adequate time resolution. However, in some cases the operating system provides a more conservative answer than strictly necessary for GC pause time management, which prevents startup. Specifying this parameter causes the GC to ignore the answer returned by the operating system. The VM starts, but GC pause time management remains subject to operating system performance, which might not provide adequate timer resolution. Note: Use this option with caution, and only when you are unable to use a supported operating system. preferredHeapBase (AIX, Linux, macOS, and Windows only) -Xgc:preferredHeapBase=<address> Setting Value Default <value> [hexadecimal] - where, <address> is the base memory address for the heap. Use this option with the -Xcompressedrefs option to allocate the heap you specify with the -Xmx option, in a memory range of your choice. If -Xcompressedrefs is not specified, this option has no effect. In the following example, the heap is located at the 4 GB mark, leaving the lowest 4 GB of address space for use by other processes. -Xgc:preferredHeapBase=0x100000000 If the heap cannot be allocated in a contiguous block at the preferredHeapBase address you specified, an error occurs detailing a Garbage Collection (GC) allocation failure startup. When the preferredHeapBase option is used with the -Xlp option, the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size. scvNoAdaptiveTenure -Xgc:scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. The initial age that is set is maintained throughout the run time of the VM. See scvTenureAge . scvTenureAge -Xgc:scvTenureAge=<n> Setting Value Default <n> [1 - 14] 10 Sets the initial scavenger tenure age in the generational concurrent GC policy. For more information, see Generational Concurrent policy . stdGlobalCompactToSatisfyAllocate -Xgc:stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required to satisfy the current allocation failure by removing the dynamic compaction triggers that look at heap occupancy. This option works only with the following GC policies: gencon optthruput optavgpause tlhIncrementSize -Xgc:tlhIncrementSize=<bytes> Sets the increment size of the thread local heap (TLH), which plays a key role in cache allocation. Threads start creating TLHs with a predefined initial size (default 2 KB). On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). Use this option to control the increment size. tlhInitialSize -Xgc:tlhInitialSize=<bytes> Sets the initial size of the TLH. The default size is 2 KB. tlhMaximumSize -Xgc:tlhMaximumSize=<bytes> Sets the maximum size of the TLH. The size of the TLH varies from 512 bytes (768 on 64-bit JVMs) to 128 KB, depending on the allocation rate of the thread. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. Typically, when the maximum TLH size is increased, you should also increase the increment size ( -XtlhIncrementSize ) proportionally, so that active threads can reach the maximum requested TLH size more quickly. verboseFormat -Xgc:verboseFormat=<format> Setting Value Default <format> default yes deprecated default : The default verbose garbage collection format for OpenJ9. For more information, see Verbose garbage collection logging . deprecated : The verbose garbage collection format available in the IBM J9 VM V2.4 and earlier.","title":"-Xgc"},{"location":"xgc/#-xgc","text":"Options that change the behavior of the Garbage Collector (GC).","title":"-Xgc"},{"location":"xgc/#syntax","text":"-Xgc:<parameter>","title":"Syntax"},{"location":"xgc/#parameters","text":"Parameter Effect concurrentScavenge Enables a garbage collection (GC) mode with less pause times. dnssExpectedTimeRatioMaximum Sets the maximum time to spend on GC of the nursery area. dnssExpectedTimeRatioMinimum Sets the minimum time to spend on GC of the nursery area. excessiveGCratio Sets a boundary value beyond which GC is deemed to be excessive. minContractPercent Sets the minimum percentage of the heap that can be contracted at any given time. maxContractPercent Sets the maximum percentage of the heap that can be contracted at any given time. overrideHiresTimerCheck Overrides GC operating system checks for timer resolution. preferredHeapBase Sets a memory range for the Java\u2122 heap. (AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. scvTenureAge Sets the initial scavenger tenure age in the generational concurrent GC policy. stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required. tlhIncrementSize Sets the size of the thread local heap (TLH). increment tlhInitialSize Sets the initial size of the thread local. heap tlhMaximumSize Sets the maximum size of the thread local. heap verboseFormat Sets the verbose GC format.","title":"Parameters"},{"location":"xgc/#concurrentscavenge","text":"(64-bit: Windows, AIX, Linux (x86, POWER\u00ae, or IBM Z\u00ae), and z/OS\u00ae) -Xgc:concurrentScavenge This option supports pause-less garbage collection mode when you use the Generational Concurrent ( gencon ) garbage collection policy (the default policy). If you set this option, the VM attempts to reduce GC pause times for response-time sensitive, large-heap applications. Note: Linux on Z and z/OS This option is supported by all generations of IBM Z\u00ae hardware to enable pause-less GC with two modes of operation: hardware-based and software-based operations. IBM z13\u2122 and earlier hardware operates in software-based pause-less GC mode; and IBM z14\u2122 and later hardware (with supported software) operates in hardware-based mode. Hardware-based pause-less GC is supported on IBM z14\u2122 and later hardware running the following software: Operating systems: z/OS V2R3 z/OS V2R2 and APAR OA51643 . RHEL 7.5 (minimum kernel level 4.14) Ubuntu 18.04 (minimum kernel level 4.15) Hypervisors: IBM z/VM 6.4 with APAR VM65987 IBM z/VM 7.1 KVM solutions with QEMU 2.10 or later and minimum host kernel level 4.12 (for example, RHEL 7.5 with kernel level 4.14) If these requirements are not met, the option is ignored. Note: On z/OS, the virtual storage used might exceed the Java maximum heap size. Set the z/OS memory limit, specified by ulimit -M , to a larger value than the maximum heap size.","title":"concurrentScavenge"},{"location":"xgc/#dnssexpectedtimeratiomaximum","text":"-Xgc:dnssExpectedTimeRatioMaximum=<value> Setting Value Default <value> [percentage] 5 The maximum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals.","title":"dnssExpectedTimeRatioMaximum"},{"location":"xgc/#dnssexpectedtimeratiominimum","text":"-Xgc:dnssExpectedTimeRatioMinimum=<value> Setting Value Default <value> [percentage] 1 The minimum amount of time spent on garbage collection of the nursery area, expressed as a percentage of the overall time for the last three GC intervals.","title":"dnssExpectedTimeRatioMinimum"},{"location":"xgc/#excessivegcratio","text":"-Xgc:excessiveGCratio=<value> Setting Value Default <value> [percentage] 95 where <value> is a percentage of total application run time that is not spent in GC. The default value is 95, which means that anything over 5% of total application run time spent on GC is deemed excessive. This option can be used only when -Xenableexcessivegc is set (enabled by default).","title":"excessiveGCratio"},{"location":"xgc/#mincontractpercent","text":"-Xgc:minContractPercent=<n> Setting Value Default <n> [percentage] - The minimum percentage of the heap that can be contracted at any given time.","title":"minContractPercent"},{"location":"xgc/#maxcontractpercent","text":"-Xgc:maxContractPercent=<n> Setting Value Default <n> [percentage] - The maximum percentage of the heap that can be contracted at any given time. For example, -Xgc:maxContractPercent=20 causes the heap to contract by as much as 20%.","title":"maxContractPercent"},{"location":"xgc/#overridehirestimercheck","text":"-Xgc:overrideHiresTimerCheck When the VM starts, the GC checks that the operating system can meet the timer resolution requirements for the requested target pause time. Typically, this check correctly identifies operating systems that can deliver adequate time resolution. However, in some cases the operating system provides a more conservative answer than strictly necessary for GC pause time management, which prevents startup. Specifying this parameter causes the GC to ignore the answer returned by the operating system. The VM starts, but GC pause time management remains subject to operating system performance, which might not provide adequate timer resolution. Note: Use this option with caution, and only when you are unable to use a supported operating system.","title":"overrideHiresTimerCheck"},{"location":"xgc/#preferredheapbase","text":"(AIX, Linux, macOS, and Windows only) -Xgc:preferredHeapBase=<address> Setting Value Default <value> [hexadecimal] - where, <address> is the base memory address for the heap. Use this option with the -Xcompressedrefs option to allocate the heap you specify with the -Xmx option, in a memory range of your choice. If -Xcompressedrefs is not specified, this option has no effect. In the following example, the heap is located at the 4 GB mark, leaving the lowest 4 GB of address space for use by other processes. -Xgc:preferredHeapBase=0x100000000 If the heap cannot be allocated in a contiguous block at the preferredHeapBase address you specified, an error occurs detailing a Garbage Collection (GC) allocation failure startup. When the preferredHeapBase option is used with the -Xlp option, the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size.","title":"preferredHeapBase"},{"location":"xgc/#scvnoadaptivetenure","text":"-Xgc:scvNoAdaptiveTenure Turns off the adaptive tenure age in the generational concurrent GC policy. The initial age that is set is maintained throughout the run time of the VM. See scvTenureAge .","title":"scvNoAdaptiveTenure"},{"location":"xgc/#scvtenureage","text":"-Xgc:scvTenureAge=<n> Setting Value Default <n> [1 - 14] 10 Sets the initial scavenger tenure age in the generational concurrent GC policy. For more information, see Generational Concurrent policy .","title":"scvTenureAge"},{"location":"xgc/#stdglobalcompacttosatisfyallocate","text":"-Xgc:stdGlobalCompactToSatisfyAllocate Prevents the GC from performing a compaction unless absolutely required to satisfy the current allocation failure by removing the dynamic compaction triggers that look at heap occupancy. This option works only with the following GC policies: gencon optthruput optavgpause","title":"stdGlobalCompactToSatisfyAllocate"},{"location":"xgc/#tlhincrementsize","text":"-Xgc:tlhIncrementSize=<bytes> Sets the increment size of the thread local heap (TLH), which plays a key role in cache allocation. Threads start creating TLHs with a predefined initial size (default 2 KB). On every TLH refresh, the requested size for that thread is increased by an increment (default 4 KB). Use this option to control the increment size.","title":"tlhIncrementSize"},{"location":"xgc/#tlhinitialsize","text":"-Xgc:tlhInitialSize=<bytes> Sets the initial size of the TLH. The default size is 2 KB.","title":"tlhInitialSize"},{"location":"xgc/#tlhmaximumsize","text":"-Xgc:tlhMaximumSize=<bytes> Sets the maximum size of the TLH. The size of the TLH varies from 512 bytes (768 on 64-bit JVMs) to 128 KB, depending on the allocation rate of the thread. Larger TLHs can help reduce heap lock contention, but might also reduce heap utilisation and increase heap fragmentation. Typically, when the maximum TLH size is increased, you should also increase the increment size ( -XtlhIncrementSize ) proportionally, so that active threads can reach the maximum requested TLH size more quickly.","title":"tlhMaximumSize"},{"location":"xgc/#verboseformat","text":"-Xgc:verboseFormat=<format> Setting Value Default <format> default yes deprecated default : The default verbose garbage collection format for OpenJ9. For more information, see Verbose garbage collection logging . deprecated : The verbose garbage collection format available in the IBM J9 VM V2.4 and earlier.","title":"verboseFormat"},{"location":"xgcpolicy/","text":"-Xgcpolicy Controls the behavior of the garbage collector by specifying different garbage collection policies. Syntax -Xgcpolicy:<parameter> Parameters Parameter Default balanced gencon yes metronome (AIX\u00ae, Linux\u00ae x86 only) nogc optavgpause optthruput Specify the garbage collection policy that you want the OpenJ9 VM to use: balanced -Xgcpolicy:balanced The balanced policy policy uses mark, sweep, compact and generational style garbage collection. The concurrent mark phase is disabled; concurrent garbage collection technology is used, but not in the way that concurrent mark is implemented for other policies. The balanced policy uses a region-based layout for the Java\u2122 heap. These regions are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The policy tries to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance. If you are using large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER\u2122 platforms only), the balanced policy might further improve application throughput. Note: If you are using the balanced GC policy in a Docker container that uses the default seccomp Docker profile, you must start the container with --security-opt seccomp=unconfined to exploit NUMA characteristics. These options are not required if you are running in Kubernetes, because unconfined is set by default (see Seccomp ). For more information about this policy, including when to use it, see Balanced Garbage Collection policy . Defaults and options The initial heap size is Xmx/1024 , rounded down to the nearest power of 2, where Xmx is the maximum heap size available. You can override this value by specifying the -Xms option on the command line. The following options can also be specified on the command line with -Xgcpolicy:balanced : -Xalwaysclassgc -Xclassgc -Xcompactexplicitgc -Xdisableexcessivegc -Xdisableexplicitgc -Xenableexcessivegc -Xgcthreads<number> -Xgcworkpackets<number> -Xmaxe<size> -Xmaxf<percentage> -Xmaxt<percentage> -Xmca<size> -Xmco<size> -Xmine<size> -Xminf<percentage> -Xmint<percentage> -Xmn<size> -Xmns<size> -Xmnx<size> -Xms<size> -Xmx<size> -Xnoclassgc -Xnocompactexplicitgc -Xnuma:none -Xsoftmx<size> -Xsoftrefthreshold<number> -Xverbosegclog[:<file> [, <X>,<Y>]] The behavior of the following options is different when specified with -Xgcpolicy:balanced : -Xcompactgc Compaction occurs when a System.gc() call is received (default). Compaction always occurs on all other collection types. -Xnocompactgc Compaction does not occur when a System.gc() call is received. Compaction always occurs on all other collection types. The following options are ignored when specified with -Xgcpolicy:balanced : -Xconcurrentbackground<number> -Xconcurrentlevel<number> -Xconcurrentslack<size> -Xconmeter:<soa | loa | dynamic> -Xdisablestringconstantgc -Xenablestringconstantgc -Xloa -Xloainitial<percentage> -Xloamaximum<percentage> -Xloaminimum<percentage> -Xmo<size> -Xmoi<size> -Xmos<size> -Xmr<size> -Xmrx<size> -Xnoloa -Xnopartialcompactgc (deprecated) -Xpartialcompactgc (deprecated) gencon -Xgcpolicy:gencon The generational concurrent policy (default) uses a concurrent mark phase combined with generational garbage collection to help minimize the time that is spent in any garbage collection pause. This policy is particularly useful for applications with many short-lived objects, such as transactional applications. Pause times can be significantly shorter than with the optthruput policy, while still producing good throughput. Heap fragmentation is also reduced. metronome (AIX, Linux x86 only) -Xgcpolicy:metronome The metronome policy is an incremental, deterministic garbage collector with short pause times. Applications that are dependent on precise response times can take advantage of this technology by avoiding potentially long delays from garbage collection activity. The metronome policy is supported on specific hardware and operating system configurations. For more information, see Using the Metronome Garbage Collector . Defaults and options -Xgc:synchronousGCOnOOM | -Xgc:nosynchronousGCOnOOM One occasion when garbage collection occurs is when the heap runs out of memory. If there is no more free space in the heap, using -Xgc:synchronousGCOnOOM stops your application while garbage collection removes unused objects. If free space runs out again, consider decreasing the target utilization to allow garbage collection more time to complete. Setting -Xgc:nosynchronousGCOnOOM implies that when heap memory is full your application stops and issues an out-of-memory message. The default is -Xgc:synchronousGCOnOOM . -Xnoclassgc Disables class garbage collection. This option switches off garbage collection of storage associated with Java classes that are no longer being used by the OpenJ9 VM. The default behavior is -Xnoclassgc. -Xgc:targetPauseTime=N Sets the garbage collection pause time, where N is the time in milliseconds. When this option is specified, the GC operates with pauses that do not exceed the value specified. If this option is not specified the default pause time is set to 3 milliseconds. For example, running with -Xgc:targetPauseTime=20 causes the GC to pause for no longer than 20 milliseconds during GC operations. -Xgc:targetUtilization=N Sets the application utilization to N% ; the Garbage Collector attempts to use at most (100-N)% of each time interval. Reasonable values are in the range of 50-80%. Applications with low allocation rates might be able to run at 90%. The default is 70%. This example shows the maximum size of the heap memory is 30 MB. The garbage collector attempts to use 25% of each time interval because the target utilization for the application is 75%. java -Xgcpolicy:metronome -Xmx30m -Xgc:targetUtilization=75 Test -Xgc:threads=N Specifies the number of GC threads to run. The default is the number of processor cores available to the process. The maximum value you can specify is the number of processors available to the operating system. -Xgc:verboseGCCycleTime=N N is the time in milliseconds that the summary information should be dumped. Note: The cycle time does not mean that the summary information is dumped precisely at that time, but when the last garbage collection event that meets this time criterion passes. -Xmx<size> Specifies the Java heap size. Unlike other garbage collection strategies, the real-time Metronome GC does not support heap expansion. There is not an initial or maximum heap size option. You can specify only the maximum heap size. nogc -Xgcpolicy:nogc This policy handles only memory allocation and heap expansion, but doesn't reclaim any memory. If the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. Because there is no GC pause and most overheads on allocations are eliminated, the impact on runtime performance is minimized. This policy therefore provides benfits for \"garbage-free\" applications. See the following section, \"When to use nogc\", for some possible use cases. You should be especially careful when using any of the following techniques with nogc because memory is never released under this policy: - Finalization - Direct memory access - Weak, soft, and phantom references This policy can also be enabled with the -XX:+UseNoGC option. Further details are available at JEP 318: Epsilon: A No-Op Garbage Collector . When to use nogc For most Java applications, you should not use nogc . However, there are some particular situations where it can be appropriate: Testing during development GC performance. Use nogc as a baseline when testing the performance of other GC policies, including the provision of a low-latency baseline. Application memory. Use nogc to test your settings for allocated memory. If you use -Xmx to set the heap size that should not be exceeded, then your application will crash with a heap dump if it tries to exceed your memory limit. Running applications with minimal or no GC requrements You might use nogc when an application is so short lived that allocated memory is never exhausted and running a full GC cycle is therefore a waste of resources. Similarly, when memory application is well understood or where there is rarely memory to be reclaimed, you might prefer to avoid unnecessary GC cycles and rely on a failover mechanism to occasionally restart the VM as necessary. optavgpause -Xgcpolicy:optavgpause The \"optimize for pause time\" policy uses concurrent mark and concurrent sweep phases. Pause times are shorter than with optthruput , but application throughput is reduced because some garbage collection work is taking place while the application is running. Consider using this policy if you have a large heap size (available on 64-bit platforms), because this policy limits the effect of increasing heap size on the length of the garbage collection pause. However, if your application uses many short-lived objects, the gencon policy might produce better performance. optthruput -Xgcpolicy:optthruput The \"optimize for throughput\" policy disables the concurrent mark phase. The application stops during global garbage collection, so long pauses can occur. This configuration is typically used for large-heap applications when high application throughput, rather than short garbage collection pauses, is the main performance goal. If your application cannot tolerate long garbage collection pauses, consider using another policy, such as gencon .","title":"-Xgcpolicy"},{"location":"xgcpolicy/#-xgcpolicy","text":"Controls the behavior of the garbage collector by specifying different garbage collection policies.","title":"-Xgcpolicy"},{"location":"xgcpolicy/#syntax","text":"-Xgcpolicy:<parameter>","title":"Syntax"},{"location":"xgcpolicy/#parameters","text":"Parameter Default balanced gencon yes metronome (AIX\u00ae, Linux\u00ae x86 only) nogc optavgpause optthruput Specify the garbage collection policy that you want the OpenJ9 VM to use:","title":"Parameters"},{"location":"xgcpolicy/#balanced","text":"-Xgcpolicy:balanced The balanced policy policy uses mark, sweep, compact and generational style garbage collection. The concurrent mark phase is disabled; concurrent garbage collection technology is used, but not in the way that concurrent mark is implemented for other policies. The balanced policy uses a region-based layout for the Java\u2122 heap. These regions are individually managed to reduce the maximum pause time on large heaps and increase the efficiency of garbage collection. The policy tries to avoid global collections by matching object allocation and survival rates. If you have problems with application pause times that are caused by global garbage collections, particularly compactions, this policy might improve application performance. If you are using large systems that have Non-Uniform Memory Architecture (NUMA) characteristics (x86 and POWER\u2122 platforms only), the balanced policy might further improve application throughput. Note: If you are using the balanced GC policy in a Docker container that uses the default seccomp Docker profile, you must start the container with --security-opt seccomp=unconfined to exploit NUMA characteristics. These options are not required if you are running in Kubernetes, because unconfined is set by default (see Seccomp ). For more information about this policy, including when to use it, see Balanced Garbage Collection policy .","title":"balanced"},{"location":"xgcpolicy/#defaults-and-options","text":"The initial heap size is Xmx/1024 , rounded down to the nearest power of 2, where Xmx is the maximum heap size available. You can override this value by specifying the -Xms option on the command line. The following options can also be specified on the command line with -Xgcpolicy:balanced : -Xalwaysclassgc -Xclassgc -Xcompactexplicitgc -Xdisableexcessivegc -Xdisableexplicitgc -Xenableexcessivegc -Xgcthreads<number> -Xgcworkpackets<number> -Xmaxe<size> -Xmaxf<percentage> -Xmaxt<percentage> -Xmca<size> -Xmco<size> -Xmine<size> -Xminf<percentage> -Xmint<percentage> -Xmn<size> -Xmns<size> -Xmnx<size> -Xms<size> -Xmx<size> -Xnoclassgc -Xnocompactexplicitgc -Xnuma:none -Xsoftmx<size> -Xsoftrefthreshold<number> -Xverbosegclog[:<file> [, <X>,<Y>]] The behavior of the following options is different when specified with -Xgcpolicy:balanced : -Xcompactgc Compaction occurs when a System.gc() call is received (default). Compaction always occurs on all other collection types. -Xnocompactgc Compaction does not occur when a System.gc() call is received. Compaction always occurs on all other collection types. The following options are ignored when specified with -Xgcpolicy:balanced : -Xconcurrentbackground<number> -Xconcurrentlevel<number> -Xconcurrentslack<size> -Xconmeter:<soa | loa | dynamic> -Xdisablestringconstantgc -Xenablestringconstantgc -Xloa -Xloainitial<percentage> -Xloamaximum<percentage> -Xloaminimum<percentage> -Xmo<size> -Xmoi<size> -Xmos<size> -Xmr<size> -Xmrx<size> -Xnoloa -Xnopartialcompactgc (deprecated) -Xpartialcompactgc (deprecated)","title":"Defaults and options"},{"location":"xgcpolicy/#gencon","text":"-Xgcpolicy:gencon The generational concurrent policy (default) uses a concurrent mark phase combined with generational garbage collection to help minimize the time that is spent in any garbage collection pause. This policy is particularly useful for applications with many short-lived objects, such as transactional applications. Pause times can be significantly shorter than with the optthruput policy, while still producing good throughput. Heap fragmentation is also reduced.","title":"gencon"},{"location":"xgcpolicy/#metronome-aix-linux-x86-only","text":"-Xgcpolicy:metronome The metronome policy is an incremental, deterministic garbage collector with short pause times. Applications that are dependent on precise response times can take advantage of this technology by avoiding potentially long delays from garbage collection activity. The metronome policy is supported on specific hardware and operating system configurations. For more information, see Using the Metronome Garbage Collector .","title":"metronome (AIX, Linux x86 only)"},{"location":"xgcpolicy/#defaults-and-options_1","text":"-Xgc:synchronousGCOnOOM | -Xgc:nosynchronousGCOnOOM One occasion when garbage collection occurs is when the heap runs out of memory. If there is no more free space in the heap, using -Xgc:synchronousGCOnOOM stops your application while garbage collection removes unused objects. If free space runs out again, consider decreasing the target utilization to allow garbage collection more time to complete. Setting -Xgc:nosynchronousGCOnOOM implies that when heap memory is full your application stops and issues an out-of-memory message. The default is -Xgc:synchronousGCOnOOM . -Xnoclassgc Disables class garbage collection. This option switches off garbage collection of storage associated with Java classes that are no longer being used by the OpenJ9 VM. The default behavior is -Xnoclassgc. -Xgc:targetPauseTime=N Sets the garbage collection pause time, where N is the time in milliseconds. When this option is specified, the GC operates with pauses that do not exceed the value specified. If this option is not specified the default pause time is set to 3 milliseconds. For example, running with -Xgc:targetPauseTime=20 causes the GC to pause for no longer than 20 milliseconds during GC operations. -Xgc:targetUtilization=N Sets the application utilization to N% ; the Garbage Collector attempts to use at most (100-N)% of each time interval. Reasonable values are in the range of 50-80%. Applications with low allocation rates might be able to run at 90%. The default is 70%. This example shows the maximum size of the heap memory is 30 MB. The garbage collector attempts to use 25% of each time interval because the target utilization for the application is 75%. java -Xgcpolicy:metronome -Xmx30m -Xgc:targetUtilization=75 Test -Xgc:threads=N Specifies the number of GC threads to run. The default is the number of processor cores available to the process. The maximum value you can specify is the number of processors available to the operating system. -Xgc:verboseGCCycleTime=N N is the time in milliseconds that the summary information should be dumped. Note: The cycle time does not mean that the summary information is dumped precisely at that time, but when the last garbage collection event that meets this time criterion passes. -Xmx<size> Specifies the Java heap size. Unlike other garbage collection strategies, the real-time Metronome GC does not support heap expansion. There is not an initial or maximum heap size option. You can specify only the maximum heap size.","title":"Defaults and options"},{"location":"xgcpolicy/#nogc","text":"-Xgcpolicy:nogc This policy handles only memory allocation and heap expansion, but doesn't reclaim any memory. If the available Java heap becomes exhausted, an OutOfMemoryError exception is triggered and the VM stops. Because there is no GC pause and most overheads on allocations are eliminated, the impact on runtime performance is minimized. This policy therefore provides benfits for \"garbage-free\" applications. See the following section, \"When to use nogc\", for some possible use cases. You should be especially careful when using any of the following techniques with nogc because memory is never released under this policy: - Finalization - Direct memory access - Weak, soft, and phantom references This policy can also be enabled with the -XX:+UseNoGC option. Further details are available at JEP 318: Epsilon: A No-Op Garbage Collector .","title":"nogc"},{"location":"xgcpolicy/#when-to-use-nogc","text":"For most Java applications, you should not use nogc . However, there are some particular situations where it can be appropriate: Testing during development GC performance. Use nogc as a baseline when testing the performance of other GC policies, including the provision of a low-latency baseline. Application memory. Use nogc to test your settings for allocated memory. If you use -Xmx to set the heap size that should not be exceeded, then your application will crash with a heap dump if it tries to exceed your memory limit. Running applications with minimal or no GC requrements You might use nogc when an application is so short lived that allocated memory is never exhausted and running a full GC cycle is therefore a waste of resources. Similarly, when memory application is well understood or where there is rarely memory to be reclaimed, you might prefer to avoid unnecessary GC cycles and rely on a failover mechanism to occasionally restart the VM as necessary.","title":"When to use nogc"},{"location":"xgcpolicy/#optavgpause","text":"-Xgcpolicy:optavgpause The \"optimize for pause time\" policy uses concurrent mark and concurrent sweep phases. Pause times are shorter than with optthruput , but application throughput is reduced because some garbage collection work is taking place while the application is running. Consider using this policy if you have a large heap size (available on 64-bit platforms), because this policy limits the effect of increasing heap size on the length of the garbage collection pause. However, if your application uses many short-lived objects, the gencon policy might produce better performance.","title":"optavgpause"},{"location":"xgcpolicy/#optthruput","text":"-Xgcpolicy:optthruput The \"optimize for throughput\" policy disables the concurrent mark phase. The application stops during global garbage collection, so long pauses can occur. This configuration is typically used for large-heap applications when high application throughput, rather than short garbage collection pauses, is the main performance goal. If your application cannot tolerate long garbage collection pauses, consider using another policy, such as gencon .","title":"optthruput"},{"location":"xgcsplitheap/","text":"-Xgc:splitheap (Windows\u2122 32-bit only) By default, the VM uses a contiguous Java\u2122 heap to store Java objects. However, on Windows 32-bit systems, there are restrictions in the 32-bit memory space that prevents a process accessing more than 2GB of memory, even if there is more memory available. To increase the maximum allocatable heap size, OpenJ9 can split the heap, allowing memory use up to the 4GB limit. Restrictions: A split heap forces the Garbage Collector to use the gencon policy and allocates the new and old areas of the generational Java heap in separate areas of memory. Resizing of the new and old memory areas is disabled. This option can be used only with Java SE version 8 runtime environments. This option is deprecated in Version 8 and will be removed from future versions. Syntax -Xgc:splitheap Explanation Use -Xgc:splitheap for applications that must run on the 32-bit VM because of 32-bit JNI libraries, a 32-bit operating system, or 32-bit hardware, but need large Java heaps. By using a larger heap, you can allocate more objects before incurring a garbage collection and you can increase the number of live objects that you can use before an OutOfMemoryError exception occurs. With a split heap, the old area is committed to its maximum size (set with -Xmox ) in a lower region of memory and the new area is committed to its maximum size (set with -Xmnx ) in a higher region of memory. This option is not recommended if your application works in the any of the following ways: Performs poorly under the gencon garbage collection policy. Loads a very large number of classes. Uses large amounts of native system memory in JNI libraries; the increased size Java heap might reserve too much of the application's address space.","title":"-Xgc:splitheap"},{"location":"xgcsplitheap/#-xgcsplitheap","text":"(Windows\u2122 32-bit only) By default, the VM uses a contiguous Java\u2122 heap to store Java objects. However, on Windows 32-bit systems, there are restrictions in the 32-bit memory space that prevents a process accessing more than 2GB of memory, even if there is more memory available. To increase the maximum allocatable heap size, OpenJ9 can split the heap, allowing memory use up to the 4GB limit. Restrictions: A split heap forces the Garbage Collector to use the gencon policy and allocates the new and old areas of the generational Java heap in separate areas of memory. Resizing of the new and old memory areas is disabled. This option can be used only with Java SE version 8 runtime environments. This option is deprecated in Version 8 and will be removed from future versions.","title":"-Xgc:splitheap"},{"location":"xgcsplitheap/#syntax","text":"-Xgc:splitheap","title":"Syntax"},{"location":"xgcsplitheap/#explanation","text":"Use -Xgc:splitheap for applications that must run on the 32-bit VM because of 32-bit JNI libraries, a 32-bit operating system, or 32-bit hardware, but need large Java heaps. By using a larger heap, you can allocate more objects before incurring a garbage collection and you can increase the number of live objects that you can use before an OutOfMemoryError exception occurs. With a split heap, the old area is committed to its maximum size (set with -Xmox ) in a lower region of memory and the new area is committed to its maximum size (set with -Xmnx ) in a higher region of memory. This option is not recommended if your application works in the any of the following ways: Performs poorly under the gencon garbage collection policy. Loads a very large number of classes. Uses large amounts of native system memory in JNI libraries; the increased size Java heap might reserve too much of the application's address space.","title":"Explanation"},{"location":"xgcthreads/","text":"-Xgcthreads Sets the number of threads that the Garbage Collector uses for parallel operations. Syntax -Xgcthreads<number> Explanation The total number of GC threads is composed of one application thread with the remainder being dedicated GC threads. By default, the number is set to n-1 , where n is the number of reported CPUs, up to a maximum of 64. Where SMT or hyperthreading is in place, the number of reported CPUs is larger than the number of physical CPUs. Likewise, where virtualization is in place, the number of reported CPUs is the number of virtual CPUs assigned to the operating system. To set it to a different number, for example 4, use -Xgcthreads4 . The minimum valid value is 1, which disables parallel operations, at the cost of performance. No advantage is gained if you increase the number of threads to more than the default setting. On systems running multiple VMs or in LPAR environments where multiple VMs can share the same physical CPUs, you might want to restrict the number of GC threads used by each VM. The restriction helps prevent the total number of parallel operation GC threads for all VMs exceeding the number of physical CPUs present, when multiple VMs perform garbage collection at the same time.","title":"-Xgcthreads"},{"location":"xgcthreads/#-xgcthreads","text":"Sets the number of threads that the Garbage Collector uses for parallel operations.","title":"-Xgcthreads"},{"location":"xgcthreads/#syntax","text":"-Xgcthreads<number>","title":"Syntax"},{"location":"xgcthreads/#explanation","text":"The total number of GC threads is composed of one application thread with the remainder being dedicated GC threads. By default, the number is set to n-1 , where n is the number of reported CPUs, up to a maximum of 64. Where SMT or hyperthreading is in place, the number of reported CPUs is larger than the number of physical CPUs. Likewise, where virtualization is in place, the number of reported CPUs is the number of virtual CPUs assigned to the operating system. To set it to a different number, for example 4, use -Xgcthreads4 . The minimum valid value is 1, which disables parallel operations, at the cost of performance. No advantage is gained if you increase the number of threads to more than the default setting. On systems running multiple VMs or in LPAR environments where multiple VMs can share the same physical CPUs, you might want to restrict the number of GC threads used by each VM. The restriction helps prevent the total number of parallel operation GC threads for all VMs exceeding the number of physical CPUs present, when multiple VMs perform garbage collection at the same time.","title":"Explanation"},{"location":"xgcworkpackets/","text":"-Xgcworkpackets Specifies the total number of work packets available in the global collector. Syntax -Xgcworkpackets<number> Explanation If you do not specify a value, the collector allocates a number of packets based on the maximum heap size.","title":"-Xgcworkpackets"},{"location":"xgcworkpackets/#-xgcworkpackets","text":"Specifies the total number of work packets available in the global collector.","title":"-Xgcworkpackets"},{"location":"xgcworkpackets/#syntax","text":"-Xgcworkpackets<number>","title":"Syntax"},{"location":"xgcworkpackets/#explanation","text":"If you do not specify a value, the collector allocates a number of packets based on the maximum heap size.","title":"Explanation"},{"location":"xifa/","text":"-Xifa (z/OS\u00ae only) Enables Java\u2122 applications to run on IFAs if they are available. z/OS V1R6 or later can run Java applications on a special-purpose assist processor called the System z\u2122 Application Assist Processor (zAAP). zAAPs operate asynchronously with the general purpose processors to execute Java programming under control of the VM. The zAAP is also known as an IFA (Integrated Facility for Applications). Only Java code and system native methods can be on IFA processors. Syntax Setting Value Default -Xifa:<value> on yes off force (obsolete) Note: The force option is obsolete and should not normally be used. This option is superseded by the SYS1.PARMLIB(IEAOPTxx) PROJECTCPU=YES parameter, which is available on all supported levels of z/OS. Xifa:force can be used for testing purposes when a zAAP is not available, but can have a negative performance impact.","title":"-Xifa"},{"location":"xifa/#-xifa","text":"(z/OS\u00ae only) Enables Java\u2122 applications to run on IFAs if they are available. z/OS V1R6 or later can run Java applications on a special-purpose assist processor called the System z\u2122 Application Assist Processor (zAAP). zAAPs operate asynchronously with the general purpose processors to execute Java programming under control of the VM. The zAAP is also known as an IFA (Integrated Facility for Applications). Only Java code and system native methods can be on IFA processors.","title":"-Xifa"},{"location":"xifa/#syntax","text":"Setting Value Default -Xifa:<value> on yes off force (obsolete) Note: The force option is obsolete and should not normally be used. This option is superseded by the SYS1.PARMLIB(IEAOPTxx) PROJECTCPU=YES parameter, which is available on all supported levels of z/OS. Xifa:force can be used for testing purposes when a zAAP is not available, but can have a negative performance impact.","title":"Syntax"},{"location":"xint/","text":"-Xint As described in the Oracle \"Non-Standard Options\" documentation , this VM option runs an application in interpreted-only mode. For compatibility, this option is also supported by the OpenJ9 VM. Syntax -Xint Explanation If you use this option, the OpenJ9 VM uses only the interpreter, disabling the OpenJ9 just-in-time (JIT) and ahead-of-time (AOT) compilers. By default, both these compilers are enabled, although the AOT compiler is not used by the VM unless shared classes are also enabled.","title":"-Xint"},{"location":"xint/#-xint","text":"As described in the Oracle \"Non-Standard Options\" documentation , this VM option runs an application in interpreted-only mode. For compatibility, this option is also supported by the OpenJ9 VM.","title":"-Xint"},{"location":"xint/#syntax","text":"-Xint","title":"Syntax"},{"location":"xint/#explanation","text":"If you use this option, the OpenJ9 VM uses only the interpreter, disabling the OpenJ9 just-in-time (JIT) and ahead-of-time (AOT) compilers. By default, both these compilers are enabled, although the AOT compiler is not used by the VM unless shared classes are also enabled.","title":"Explanation"},{"location":"xjit/","text":"-Xjit / -Xnojit Use this option to control the behavior of the JIT compiler. Specifying -Xjit with no parameters, has no effect as the JIT compiler is enabled by default. -Xnojit turns off the JIT compiler but does not affect the AOT compiler. Syntax Setting Action Default -Xjit Enable JIT yes -Xjit[:<parameter>=<value>{,<parameter>=<value>}] Enable JIT with options -Xnojit Disable JIT Parameters These parameters can be used to modify the behavior of -Xjit : Parameter Effect count Forces compilation of methods on first invocation. disableRMODE64 Allows the JIT to allocate executable code caches above the 2 GB memory bar. enableGPU Allows the JIT to offload certain processing tasks to a graphics processing unit (GPU) exclude Excludes the specified method from compilation. <limitFile> Compile methods that are listed in the limit file. optlevel Forces the JIT compiler to compile all methods at a specific optimization level. verbose Reports information about the JIT and AOT compiler configuration and method compilation. vlog Sends verbose output to a file. count -Xjit:count=<n> where <n> is the number of times a method is called before it is compiled. For example, setting count=0 forces the JIT compiler to compile everything on first execution, which is useful for problem determination. disableRMODE64 (z/OS\u00ae only) -Xjit:disableRMODE64 From z/OS V2R3, residency mode for 64-bit applications (RMODE64) is enabled by default. This feature allows the JIT to allocate executable code caches above the 2 GB memory bar, which is the default behavior. Use this option to turn off this JIT behavior. enableGPU (Windows (x86-64) or Linux (x86-64 and IBM POWER LE)) -Xjit:enableGPU Enables the JIT compiler to offload certain processing tasks to a graphics processing unit (GPU). The JIT determines which functions to offload based on performance heuristics. Systems must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0. To troubleshoot operations between the JIT compiler and the GPU, use -Xjit:enableGPU={verbose} , which provides output showing the processing tasks that are offloaded and their status. To send this output to a file ( output.txt ), run -Xjit:enableGPU={verbose},vlog=output.txt when you start your application. exclude -Xjit:exclude=<method> Excludes the specified method from compilation. limitFile -Xjit:limitFile=(<vlog_filename>, <m>, <n>) Compile only the methods that are listed on lines <m> to <n> in the specified limit file, where the limit file is a verbose log that you generated with the -Xjit:verbose,vlog=<vlog_filename> option. Methods that are not listed in the limit file and methods that are listed on lines outside the range are not compiled. optlevel -Xjit:optlevel=[noOpt|cold|warm|hot|veryHot|scorching] Forces the JIT compiler to compile all methods at a specific optimization level. Specifying optlevel might have an unexpected effect on performance, including reduced overall performance. verbose -Xjit:verbose Generates a JIT verbose log. The log provides a summary of which methods were compiled by the JIT and some of the compilation heurisic decisions that were taken while the JIT operates inside the OpenJ9 VM. -Xjit:verbose={compileStart} Prints out a line when the JIT is about to start compiling a method. -Xjit:verbose={compileEnd} Prints out a line when the JIT stops compiling a method. -Xjit:verbose={compilePerformance} Adds the values time (time taken to do the compilation) and mem (the amount of memory that was allocated during the compilation) into each line. This option includes the compileStart and compileEnd suboptions by default. -Xjit:verbose={disableInlining} Turns off inlining operations. -Xjit:verbose={inlining} Shows the methods that are inlined. Note: Suboptions can be chained together by using a | character. When used, you must enclose the full option name in single quotes (') to avoid the shell misinterpreting these characters as pipe commands. For example: java '-Xjit:verbose={compileStart|compileEnd|inlining}' -version vlog -Xjit:vlog=<vlog_filename> Sends verbose output to a file, of the format <vlog_filename>.<date>.<time>.<JVM_process_ID> , which is created in your current directory. Running the command multiple times produces multiple distinct versions of this file. If you do not specify this parameter, the output is sent to the standard error output stream (STDERR). This type of log file can be used with the limitFile suboption to target the compilation of specific methods. Examples Generating a JIT verbose log The following example requests a JIT verbose log of the java -version command: java -Xjit:verbose,vlog=vlogfile -version Analyzing JIT performance The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the following information to compilation entry: the amount of time taken to do the compilation. the amount of memory that was allocated during the compilation. Analyzing inlining operations The following example generates output that contains performance data and inlining operations. The suboptions count and -XcompilationThreads1 are used only to simplify the output. These options are not recommended for production because performance will be affected. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version See also Diagnosing a JIT or AOT problem","title":"-Xnojit"},{"location":"xjit/#-xjit-xnojit","text":"Use this option to control the behavior of the JIT compiler. Specifying -Xjit with no parameters, has no effect as the JIT compiler is enabled by default. -Xnojit turns off the JIT compiler but does not affect the AOT compiler.","title":"-Xjit / -Xnojit"},{"location":"xjit/#syntax","text":"Setting Action Default -Xjit Enable JIT yes -Xjit[:<parameter>=<value>{,<parameter>=<value>}] Enable JIT with options -Xnojit Disable JIT","title":"Syntax"},{"location":"xjit/#parameters","text":"These parameters can be used to modify the behavior of -Xjit : Parameter Effect count Forces compilation of methods on first invocation. disableRMODE64 Allows the JIT to allocate executable code caches above the 2 GB memory bar. enableGPU Allows the JIT to offload certain processing tasks to a graphics processing unit (GPU) exclude Excludes the specified method from compilation. <limitFile> Compile methods that are listed in the limit file. optlevel Forces the JIT compiler to compile all methods at a specific optimization level. verbose Reports information about the JIT and AOT compiler configuration and method compilation. vlog Sends verbose output to a file.","title":"Parameters"},{"location":"xjit/#count","text":"-Xjit:count=<n> where <n> is the number of times a method is called before it is compiled. For example, setting count=0 forces the JIT compiler to compile everything on first execution, which is useful for problem determination.","title":"count"},{"location":"xjit/#disablermode64","text":"(z/OS\u00ae only) -Xjit:disableRMODE64 From z/OS V2R3, residency mode for 64-bit applications (RMODE64) is enabled by default. This feature allows the JIT to allocate executable code caches above the 2 GB memory bar, which is the default behavior. Use this option to turn off this JIT behavior.","title":"disableRMODE64"},{"location":"xjit/#enablegpu","text":"(Windows (x86-64) or Linux (x86-64 and IBM POWER LE)) -Xjit:enableGPU Enables the JIT compiler to offload certain processing tasks to a graphics processing unit (GPU). The JIT determines which functions to offload based on performance heuristics. Systems must support NVIDIA Compute Unified Device Architecture (CUDA). The JIT requires the CUDA Toolkit 7.5 and your GPU device must have a minimum compute capability of 3.0. To troubleshoot operations between the JIT compiler and the GPU, use -Xjit:enableGPU={verbose} , which provides output showing the processing tasks that are offloaded and their status. To send this output to a file ( output.txt ), run -Xjit:enableGPU={verbose},vlog=output.txt when you start your application.","title":"enableGPU"},{"location":"xjit/#exclude","text":"-Xjit:exclude=<method> Excludes the specified method from compilation.","title":"exclude"},{"location":"xjit/#limitfile","text":"-Xjit:limitFile=(<vlog_filename>, <m>, <n>) Compile only the methods that are listed on lines <m> to <n> in the specified limit file, where the limit file is a verbose log that you generated with the -Xjit:verbose,vlog=<vlog_filename> option. Methods that are not listed in the limit file and methods that are listed on lines outside the range are not compiled.","title":"limitFile"},{"location":"xjit/#optlevel","text":"-Xjit:optlevel=[noOpt|cold|warm|hot|veryHot|scorching] Forces the JIT compiler to compile all methods at a specific optimization level. Specifying optlevel might have an unexpected effect on performance, including reduced overall performance.","title":"optlevel"},{"location":"xjit/#verbose","text":"-Xjit:verbose Generates a JIT verbose log. The log provides a summary of which methods were compiled by the JIT and some of the compilation heurisic decisions that were taken while the JIT operates inside the OpenJ9 VM. -Xjit:verbose={compileStart} Prints out a line when the JIT is about to start compiling a method. -Xjit:verbose={compileEnd} Prints out a line when the JIT stops compiling a method. -Xjit:verbose={compilePerformance} Adds the values time (time taken to do the compilation) and mem (the amount of memory that was allocated during the compilation) into each line. This option includes the compileStart and compileEnd suboptions by default. -Xjit:verbose={disableInlining} Turns off inlining operations. -Xjit:verbose={inlining} Shows the methods that are inlined. Note: Suboptions can be chained together by using a | character. When used, you must enclose the full option name in single quotes (') to avoid the shell misinterpreting these characters as pipe commands. For example: java '-Xjit:verbose={compileStart|compileEnd|inlining}' -version","title":"verbose"},{"location":"xjit/#vlog","text":"-Xjit:vlog=<vlog_filename> Sends verbose output to a file, of the format <vlog_filename>.<date>.<time>.<JVM_process_ID> , which is created in your current directory. Running the command multiple times produces multiple distinct versions of this file. If you do not specify this parameter, the output is sent to the standard error output stream (STDERR). This type of log file can be used with the limitFile suboption to target the compilation of specific methods.","title":"vlog"},{"location":"xjit/#examples","text":"","title":"Examples"},{"location":"xjit/#generating-a-jit-verbose-log","text":"The following example requests a JIT verbose log of the java -version command: java -Xjit:verbose,vlog=vlogfile -version","title":"Generating a JIT verbose log"},{"location":"xjit/#analyzing-jit-performance","text":"The following example requests information about the performance of JIT compiler threads, with output written to vlogfile . java -Xjit:verbose={compilePerformance},vlog=vlogfile -version The output generated by using this command adds the following information to compilation entry: the amount of time taken to do the compilation. the amount of memory that was allocated during the compilation.","title":"Analyzing JIT performance"},{"location":"xjit/#analyzing-inlining-operations","text":"The following example generates output that contains performance data and inlining operations. The suboptions count and -XcompilationThreads1 are used only to simplify the output. These options are not recommended for production because performance will be affected. java '-Xjit:verbose={compileStart|compileEnd|inlining},count=5,vlog=vlogfile' -XcompilationThreads1 -version","title":"Analyzing inlining operations"},{"location":"xjit/#see-also","text":"Diagnosing a JIT or AOT problem","title":"See also"},{"location":"xjni/","text":"-Xjni Sets JNI options. Syntax -Xjni:<parameter> Parameters arrayCacheMax -Xjni:arrayCacheMax=<size in bytes> -Xjni:arrayCacheMax=unlimited Sets the maximum size of the array cache. The default size is 128 KB ( -Xjni:arrayCacheMax=131072 ).","title":"-Xjni"},{"location":"xjni/#-xjni","text":"Sets JNI options.","title":"-Xjni"},{"location":"xjni/#syntax","text":"-Xjni:<parameter>","title":"Syntax"},{"location":"xjni/#parameters","text":"","title":"Parameters"},{"location":"xjni/#arraycachemax","text":"-Xjni:arrayCacheMax=<size in bytes> -Xjni:arrayCacheMax=unlimited Sets the maximum size of the array cache. The default size is 128 KB ( -Xjni:arrayCacheMax=131072 ).","title":"arrayCacheMax"},{"location":"xlinenumbers/","text":"-Xlinenumbers / -Xnolinenumbers Enables or disables line numbers in stack traces for debugging. Syntax Setting Effect Default -Xlinenumbers Enable yes -Xnolinenumbers Disable Explanation If you start the OpenJ9 VM with -Xnolinenumbers when creating a new shared classes cache, the Class Debug Area is not created. The option -Xnolinenumbers advises the VM not to load any class debug information, so there is no need for this region. If -Xscdmx is also used on the command line to specify a non zero debug area size, then a debug area is created despite the use of -Xnolinenumbers .","title":"-Xnolinenumbers"},{"location":"xlinenumbers/#-xlinenumbers-xnolinenumbers","text":"Enables or disables line numbers in stack traces for debugging.","title":"-Xlinenumbers / -Xnolinenumbers"},{"location":"xlinenumbers/#syntax","text":"Setting Effect Default -Xlinenumbers Enable yes -Xnolinenumbers Disable","title":"Syntax"},{"location":"xlinenumbers/#explanation","text":"If you start the OpenJ9 VM with -Xnolinenumbers when creating a new shared classes cache, the Class Debug Area is not created. The option -Xnolinenumbers advises the VM not to load any class debug information, so there is no need for this region. If -Xscdmx is also used on the command line to specify a non zero debug area size, then a debug area is created despite the use of -Xnolinenumbers .","title":"Explanation"},{"location":"xloa/","text":"-Xloa / -Xnoloa This option enables or prevents allocation of a large object area (LOA) during garbage collection. Syntax Setting Effect Default -Xloa Enable LOA yes (see Default behavior) -Xnoloa Disable LOA Default behavior By default, allocations are made in the small object area (SOA). If there is no room in the SOA, and an object is larger than 64KB, the object is allocated in the LOA. If the LOA is not used, it is shrunk to zero after a few collections. You can disable it explicitly by specifying the -Xnoloa option. Explanation The LOA is an area of the tenure area of the heap set used solely to satisfy allocations for large objects. The LOA is used when the allocation request cannot be satisfied in the main area (the SOA of the tenure heap. As objects are allocated and freed, the heap can become fragmented in such a way that allocation can be met only by time-consuming compactions. This problem is more pronounced if an application allocates large objects. In an attempt to alleviate this problem, the LOA is allocated. A large object in this context is considered to be any object 64 KB or greater in size. Allocations for new TLH objects are not considered to be large objects. Note: The Balanced Garbage Collection policy does not use the LOA. Therefore, when specifying - Xgcpolicy:balanced , any LOA options passed on the command line are ignored. The policy addresses the issues of LOA by reorganizing object layout with the VM to reduce heap fragmentation and compaction requirements. See also -Xloainitial / -Xloaminimum / -Xloamaximum","title":"-Xnoloa"},{"location":"xloa/#-xloa-xnoloa","text":"This option enables or prevents allocation of a large object area (LOA) during garbage collection.","title":"-Xloa / -Xnoloa"},{"location":"xloa/#syntax","text":"Setting Effect Default -Xloa Enable LOA yes (see Default behavior) -Xnoloa Disable LOA","title":"Syntax"},{"location":"xloa/#default-behavior","text":"By default, allocations are made in the small object area (SOA). If there is no room in the SOA, and an object is larger than 64KB, the object is allocated in the LOA. If the LOA is not used, it is shrunk to zero after a few collections. You can disable it explicitly by specifying the -Xnoloa option.","title":"Default behavior"},{"location":"xloa/#explanation","text":"The LOA is an area of the tenure area of the heap set used solely to satisfy allocations for large objects. The LOA is used when the allocation request cannot be satisfied in the main area (the SOA of the tenure heap. As objects are allocated and freed, the heap can become fragmented in such a way that allocation can be met only by time-consuming compactions. This problem is more pronounced if an application allocates large objects. In an attempt to alleviate this problem, the LOA is allocated. A large object in this context is considered to be any object 64 KB or greater in size. Allocations for new TLH objects are not considered to be large objects. Note: The Balanced Garbage Collection policy does not use the LOA. Therefore, when specifying - Xgcpolicy:balanced , any LOA options passed on the command line are ignored. The policy addresses the issues of LOA by reorganizing object layout with the VM to reduce heap fragmentation and compaction requirements.","title":"Explanation"},{"location":"xloa/#see-also","text":"-Xloainitial / -Xloaminimum / -Xloamaximum","title":"See also"},{"location":"xloaminimum/","text":"-Xloainitial / -Xloaminimum / -Xloamaximum Specifies the initial, minimum, and maximum proportion of the current tenure space allocated to the large object area (LOA). The LOA does not shrink to less than the minimum value. Syntax Setting Effect Default -Xloainitial<value> Set initial space 0.05 -Xloaminimum<value> Set minimum space 0.01 -Xloamaximum<value> Set minimum space 0.5 See also -Xloa / Xnoloa","title":"-Xloaminimum"},{"location":"xloaminimum/#-xloainitial-xloaminimum-xloamaximum","text":"Specifies the initial, minimum, and maximum proportion of the current tenure space allocated to the large object area (LOA). The LOA does not shrink to less than the minimum value.","title":"-Xloainitial / -Xloaminimum / -Xloamaximum"},{"location":"xloaminimum/#syntax","text":"Setting Effect Default -Xloainitial<value> Set initial space 0.05 -Xloaminimum<value> Set minimum space 0.01 -Xloamaximum<value> Set minimum space 0.5","title":"Syntax"},{"location":"xloaminimum/#see-also","text":"-Xloa / Xnoloa","title":"See also"},{"location":"xlockreservation/","text":"-XlockReservation Enables an optimization that presumes a monitor is owned by the thread that last acquired it. This optimization minimizes the runtime cost of acquiring and releasing a monitor for a single thread if the monitor is rarely acquired by multiple threads. Syntax -XlockReservation","title":"-XlockReservation"},{"location":"xlockreservation/#-xlockreservation","text":"Enables an optimization that presumes a monitor is owned by the thread that last acquired it. This optimization minimizes the runtime cost of acquiring and releasing a monitor for a single thread if the monitor is rarely acquired by multiple threads.","title":"-XlockReservation"},{"location":"xlockreservation/#syntax","text":"-XlockReservation","title":"Syntax"},{"location":"xlockword/","text":"-Xlockword Test whether performance optimizations are negatively impacting an application. Syntax -Xlockword:<parameters> Parameters mode -Xlockword:mode=all -Xlockword:mode=default Locking optimizations typically reduce memory usage and improve performance. However, there might be some situations where a smaller heap size is achieved for an application, but overall application performance decreases. For example, if your application synchronizes on objects that are not typically synchronized on, such as Java.lang.String , run the following test: Use the following command-line option to revert to behavior that is closer to earlier versions and monitor application performance: -Xlockword:mode=all If performance does not improve, remove the previous command-line options or use the following command-line option to reestablish the new behavior: -Xlockword:mode=default nolockword -Xlockword:nolockword=<class_name> Removes the lockword from object instances of the class <class_name> , reducing the space required for these objects. However, this action might have an adverse effect on synchronization for those objects. You should only use this option for troubleshooting. what -Xlockword:what Shows the current lockword configuration.","title":"-Xlockword"},{"location":"xlockword/#-xlockword","text":"Test whether performance optimizations are negatively impacting an application.","title":"-Xlockword"},{"location":"xlockword/#syntax","text":"-Xlockword:<parameters>","title":"Syntax"},{"location":"xlockword/#parameters","text":"","title":"Parameters"},{"location":"xlockword/#mode","text":"-Xlockword:mode=all -Xlockword:mode=default Locking optimizations typically reduce memory usage and improve performance. However, there might be some situations where a smaller heap size is achieved for an application, but overall application performance decreases. For example, if your application synchronizes on objects that are not typically synchronized on, such as Java.lang.String , run the following test: Use the following command-line option to revert to behavior that is closer to earlier versions and monitor application performance: -Xlockword:mode=all If performance does not improve, remove the previous command-line options or use the following command-line option to reestablish the new behavior: -Xlockword:mode=default","title":"mode"},{"location":"xlockword/#nolockword","text":"-Xlockword:nolockword=<class_name> Removes the lockword from object instances of the class <class_name> , reducing the space required for these objects. However, this action might have an adverse effect on synchronization for those objects. You should only use this option for troubleshooting.","title":"nolockword"},{"location":"xlockword/#what","text":"-Xlockword:what Shows the current lockword configuration.","title":"what"},{"location":"xlog/","text":"-Xlog Enables message logging. Note: Changes made to message logging using the -Xlog option do not affect messages written to the standard error stream ( stderr ). Syntax -Xlog:<parameter>{,<parameter>} Parameters Restriction: The parameters all , none and help must be used on their own and cannot be combined. However, the other parameters can be grouped. For example, to include error, vital and warning messages use -Xlog:error,vital,warn . For message details see OpenJ9 VM messages . help -Xlog:help Gives details the available parameters. (This parameter cannot be combined with others.) error -Xlog:error Turns on logging for all OpenJ9 VM error messages (default). vital -Xlog:vital Turns on logging for selected information messages JVMDUMP006I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the OpenJ9 VM (default). info -Xlog:info Turns on logging for all OpenJ9 VM information messages. warn -Xlog:warn Turns on logging for all OpenJ9 VM warning messages. config -Xlog:config Turns on logging for all OpenJ9 VM configuration messages. all -Xlog:all Turns on logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.) none -Xlog:none Turns off logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.)","title":"-Xlog"},{"location":"xlog/#-xlog","text":"Enables message logging. Note: Changes made to message logging using the -Xlog option do not affect messages written to the standard error stream ( stderr ).","title":"-Xlog"},{"location":"xlog/#syntax","text":"-Xlog:<parameter>{,<parameter>}","title":"Syntax"},{"location":"xlog/#parameters","text":"Restriction: The parameters all , none and help must be used on their own and cannot be combined. However, the other parameters can be grouped. For example, to include error, vital and warning messages use -Xlog:error,vital,warn . For message details see OpenJ9 VM messages .","title":"Parameters"},{"location":"xlog/#help","text":"-Xlog:help Gives details the available parameters. (This parameter cannot be combined with others.)","title":"help"},{"location":"xlog/#error","text":"-Xlog:error Turns on logging for all OpenJ9 VM error messages (default).","title":"error"},{"location":"xlog/#vital","text":"-Xlog:vital Turns on logging for selected information messages JVMDUMP006I , JVMDUMP032I , and JVMDUMP033I , which provide valuable additional information about dumps produced by the OpenJ9 VM (default).","title":"vital"},{"location":"xlog/#info","text":"-Xlog:info Turns on logging for all OpenJ9 VM information messages.","title":"info"},{"location":"xlog/#warn","text":"-Xlog:warn Turns on logging for all OpenJ9 VM warning messages.","title":"warn"},{"location":"xlog/#config","text":"-Xlog:config Turns on logging for all OpenJ9 VM configuration messages.","title":"config"},{"location":"xlog/#all","text":"-Xlog:all Turns on logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.)","title":"all"},{"location":"xlog/#none","text":"-Xlog:none Turns off logging for all OpenJ9 VM messages. (This parameter cannot be combined with others.)","title":"none"},{"location":"xlp/","text":"-Xlp Requests the OpenJ9 VM to allocate the Java\u2122 object heap and JIT code cache memory with large pages. Note: This option is deprecated in all versions later than Java 8. Use the -Xlp:codecache and -Xlp:objectheap options instead. Restriction: This option does not work on macOS\u00ae. If you use the -Xgc:preferredHeapBase option with -Xlp , the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output. Syntax -Xlp[<size>] See Using -X command-line options for more information about the <size> parameter. Explanation AIX\u00ae If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If a size is not specified, this option requests the VM to allocate the Java object heap (the heap from which Java objects are allocated) with large (16 MB) pages. If large pages are not available, the Java object heap is allocated with the next smaller page size that is supported by the system. AIX requires special configuration to enable large pages. The VM supports the use of large pages only to back the Java object heap shared memory segments. The VM uses shmget() with the SHM_LGPG and SHM_PIN flags to allocate large pages. The -Xlp option replaces the environment variable IBM_JAVA_LARGE_PAGE_SIZE , which is now ignored if set. For more information about configuring AIX support for large pages, see Large pages in the AIX product documentation. Linux\u00ae If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If large pages are not available, the VM does not start and produces an error message. The VM uses shmget() to allocate large pages for the heap. Large pages are supported by systems that have Linux kernels v2.6 or higher. Note: Linux for IBM Z\u00ae supports only a large page size of 1 M. Depending on the architecture, 1 MB or 2 MB large pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap . Windows\u2122 If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. z/OS\u00ae If <size> is specified but unsuccessful, or if executable pages of that size are not supported, 1 M pageable is attempted. If 1 M pageable is not available, the JIT code cache memory is allocated by using the default or smallest available executable page size. If <size> is not specified, the 1 M nonpageable size is used. If large pages are not supported by the hardware, or enabled in RACF\u00ae, the VM does not start and produces an error message. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 31-bit VM. The -Xlp[<size>] option supports only a large page size of 2 G and 1 M (nonpageable). 1 M pageable pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap . Specifying -Xlp1M uses a 1 M pageable size for the code cache, when available. Specifying -Xlp2G sets the object heap size, but generates a warning that 2 G nonpageable pages cannot be used for the code cache. Use the -Xlp:objectheap:pagesize=2G,nonpageable option to avoid the warning. Limitation and workaround The VM ends if insufficient operating system resources are available to satisfy the request. However, an error message is not issued. There are a number of reasons why the VM cannot honor a large page request. For example, there might be insufficient large pages available on the system at the time of the request. To check whether the -Xlp request was honored, you can review the output from -verbose:gc . Look for the attributes requestedPageSize and pageSize in the -verbose:gc log file. The attribute requestedPageSize contains the value specified by -Xlp . The attribute pageSize is the actual page size used by the VM. See also Configuring large page memory allocation .","title":"-Xlp"},{"location":"xlp/#-xlp","text":"Requests the OpenJ9 VM to allocate the Java\u2122 object heap and JIT code cache memory with large pages. Note: This option is deprecated in all versions later than Java 8. Use the -Xlp:codecache and -Xlp:objectheap options instead. Restriction: This option does not work on macOS\u00ae. If you use the -Xgc:preferredHeapBase option with -Xlp , the preferredHeapBase address must be a multiple of the large page size. If you specify an inaccurate heap base address, the heap is allocated with the default page size. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output.","title":"-Xlp"},{"location":"xlp/#syntax","text":"-Xlp[<size>] See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xlp/#explanation","text":"","title":"Explanation"},{"location":"xlp/#aix","text":"If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If a size is not specified, this option requests the VM to allocate the Java object heap (the heap from which Java objects are allocated) with large (16 MB) pages. If large pages are not available, the Java object heap is allocated with the next smaller page size that is supported by the system. AIX requires special configuration to enable large pages. The VM supports the use of large pages only to back the Java object heap shared memory segments. The VM uses shmget() with the SHM_LGPG and SHM_PIN flags to allocate large pages. The -Xlp option replaces the environment variable IBM_JAVA_LARGE_PAGE_SIZE , which is now ignored if set. For more information about configuring AIX support for large pages, see Large pages in the AIX product documentation.","title":"AIX&reg;"},{"location":"xlp/#linux","text":"If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM. If large pages are not available, the VM does not start and produces an error message. The VM uses shmget() to allocate large pages for the heap. Large pages are supported by systems that have Linux kernels v2.6 or higher. Note: Linux for IBM Z\u00ae supports only a large page size of 1 M. Depending on the architecture, 1 MB or 2 MB large pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap .","title":"Linux&reg;"},{"location":"xlp/#windows","text":"If <size> is specified, the VM attempts to allocate the JIT code cache memory by using pages of that size. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 32-bit VM.","title":"Windows&trade;"},{"location":"xlp/#zos","text":"If <size> is specified but unsuccessful, or if executable pages of that size are not supported, 1 M pageable is attempted. If 1 M pageable is not available, the JIT code cache memory is allocated by using the default or smallest available executable page size. If <size> is not specified, the 1 M nonpageable size is used. If large pages are not supported by the hardware, or enabled in RACF\u00ae, the VM does not start and produces an error message. Allocating large pages by using -Xlp is supported only on the 64-bit VM, not the 31-bit VM. The -Xlp[<size>] option supports only a large page size of 2 G and 1 M (nonpageable). 1 M pageable pages, when available, are the default size for the object heap and the code cache. The options that control these sizes are Xlp:codecache and -Xlp:objectheap . Specifying -Xlp1M uses a 1 M pageable size for the code cache, when available. Specifying -Xlp2G sets the object heap size, but generates a warning that 2 G nonpageable pages cannot be used for the code cache. Use the -Xlp:objectheap:pagesize=2G,nonpageable option to avoid the warning.","title":"z/OS&reg;"},{"location":"xlp/#limitation-and-workaround","text":"The VM ends if insufficient operating system resources are available to satisfy the request. However, an error message is not issued. There are a number of reasons why the VM cannot honor a large page request. For example, there might be insufficient large pages available on the system at the time of the request. To check whether the -Xlp request was honored, you can review the output from -verbose:gc . Look for the attributes requestedPageSize and pageSize in the -verbose:gc log file. The attribute requestedPageSize contains the value specified by -Xlp . The attribute pageSize is the actual page size used by the VM.","title":"Limitation and workaround"},{"location":"xlp/#see-also","text":"Configuring large page memory allocation .","title":"See also"},{"location":"xlpcodecache/","text":"-Xlp:codecache Requests the OpenJ9 VM to allocate the JIT code cache by using large page sizes. If the requested large page size is not available, the VM starts, but the JIT code cache is allocated by using a platform-defined size. A warning is displayed when the requested page size is not available. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output. Syntax AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:codecache:pagesize=<size> z/OS\u00ae: -Xlp:codecache:pagesize=<size>,pageable See Using -X command-line options for more information about the <size> parameter. Default values AIX The code cache page size is controlled by the DATAPSIZE setting of the LDR_CNTRL environment variable. The page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. For more information about the LDR_CNTRL environment variable, see Working with the LDR_CNTRL environment variable . Linux The default size for the code cache depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages Linux on Power Systems\u2122: The code cache page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. On other architectures, the VM uses the default operating system page size. macOS The default size for the code cache is 4 KB large pages. z/OS 1 MB pageable pages, when available, are the default size for the code cache. The -Xlp:codecache:pagesize=<size>,pageable option supports only a large page size of 1 MB pageable large pages. The use of 1 MB pageable large pages for the JIT code cache can improve the runtime performance of some Java\u2122 applications. A page size of 4 KB can also be used. See also Configuring large page memory allocation .","title":"-Xlp:codecache"},{"location":"xlpcodecache/#-xlpcodecache","text":"Requests the OpenJ9 VM to allocate the JIT code cache by using large page sizes. If the requested large page size is not available, the VM starts, but the JIT code cache is allocated by using a platform-defined size. A warning is displayed when the requested page size is not available. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output.","title":"-Xlp:codecache"},{"location":"xlpcodecache/#syntax","text":"AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:codecache:pagesize=<size> z/OS\u00ae: -Xlp:codecache:pagesize=<size>,pageable See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xlpcodecache/#default-values","text":"","title":"Default values"},{"location":"xlpcodecache/#aix","text":"The code cache page size is controlled by the DATAPSIZE setting of the LDR_CNTRL environment variable. The page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. For more information about the LDR_CNTRL environment variable, see Working with the LDR_CNTRL environment variable .","title":"AIX"},{"location":"xlpcodecache/#linux","text":"The default size for the code cache depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages Linux on Power Systems\u2122: The code cache page size cannot be controlled by the -Xlp:codecache:pagesize=<size> option. Specifying any other page size results in a warning that the page size is not available. The -verbose:sizes output reflects the current operating system setting. On other architectures, the VM uses the default operating system page size.","title":"Linux"},{"location":"xlpcodecache/#macos","text":"The default size for the code cache is 4 KB large pages.","title":"macOS"},{"location":"xlpcodecache/#zos","text":"1 MB pageable pages, when available, are the default size for the code cache. The -Xlp:codecache:pagesize=<size>,pageable option supports only a large page size of 1 MB pageable large pages. The use of 1 MB pageable large pages for the JIT code cache can improve the runtime performance of some Java\u2122 applications. A page size of 4 KB can also be used.","title":"z/OS"},{"location":"xlpcodecache/#see-also","text":"Configuring large page memory allocation .","title":"See also"},{"location":"xlpobjectheap/","text":"-Xlp:objectheap Requests the OpenJ9 VM to allocate the Java\u2122 object heap by using large page sizes. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output. Syntax AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:objectheap:pagesize=<size>[,strict|warn] z/OS\u00ae: -Xlp:objectheap:pagesize=<size>[,strict|warn][,pageable|nonpageable] See Using -X command-line options for more information about the <size> parameter. Parameters pagesize -Xlp:objectheap:pagesize=<size> The large page size that you require. If the operating system does not have sufficient resources to satisfy the request, the page size you requested might not be available when the VM starts up. By default, the VM starts and the Java object heap is allocated by using a different platform-defined page size. Alternatively, you can use the strict or warn suboptions to customize behavior. Default page sizes On Linux systems, the default size for the object heap depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages On other architectures, the VM uses the default operating system page size. On macOS, the default page size is 4 KB. strict | warn -Xlp:objectheap:strict -Xlp:objectheap:warn strict causes an error message to be generated if large pages are requested but cannot be obtained. This option causes the VM to end. warn causes a warning message to be generated if large pages are requested but cannot be obtained. This option allows the VM to continue. Note: If both strict and warn are specified, strict takes precedence. pageable | nonpageable -Xlp:objectheap:pageable -Xlp:objectheap:nonpageable On z/OS systems, defines the type of memory to allocate for the Java object heap. 1 MB pageable pages, when available, are the default size for the object heap. Supported large page sizes are 2 GB nonpageable, 1 MB nonpageable, and 1 MB pageable. A page size of 4 KB can also be used. See also Configuring large page memory allocation .","title":"-Xlp:objectheap"},{"location":"xlpobjectheap/#-xlpobjectheap","text":"Requests the OpenJ9 VM to allocate the Java\u2122 object heap by using large page sizes. To find out the large page sizes available and the current setting, use the -verbose:sizes option. Note that the current settings are the requested sizes and not the sizes obtained. For object heap size information, check the -verbose:gc output.","title":"-Xlp:objectheap"},{"location":"xlpobjectheap/#syntax","text":"AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122: -Xlp:objectheap:pagesize=<size>[,strict|warn] z/OS\u00ae: -Xlp:objectheap:pagesize=<size>[,strict|warn][,pageable|nonpageable] See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xlpobjectheap/#parameters","text":"","title":"Parameters"},{"location":"xlpobjectheap/#pagesize","text":"-Xlp:objectheap:pagesize=<size> The large page size that you require. If the operating system does not have sufficient resources to satisfy the request, the page size you requested might not be available when the VM starts up. By default, the VM starts and the Java object heap is allocated by using a different platform-defined page size. Alternatively, you can use the strict or warn suboptions to customize behavior.","title":"pagesize"},{"location":"xlpobjectheap/#default-page-sizes","text":"On Linux systems, the default size for the object heap depends on the architecture: Linux on x86 and AMD64/EM64T systems: 2 MB large pages Linux on IBM Z\u00ae: 1 MB large pages On other architectures, the VM uses the default operating system page size. On macOS, the default page size is 4 KB.","title":"Default page sizes"},{"location":"xlpobjectheap/#strict-warn","text":"-Xlp:objectheap:strict -Xlp:objectheap:warn strict causes an error message to be generated if large pages are requested but cannot be obtained. This option causes the VM to end. warn causes a warning message to be generated if large pages are requested but cannot be obtained. This option allows the VM to continue. Note: If both strict and warn are specified, strict takes precedence.","title":"strict | warn"},{"location":"xlpobjectheap/#pageablenonpageable","text":"-Xlp:objectheap:pageable -Xlp:objectheap:nonpageable On z/OS systems, defines the type of memory to allocate for the Java object heap. 1 MB pageable pages, when available, are the default size for the object heap. Supported large page sizes are 2 GB nonpageable, 1 MB nonpageable, and 1 MB pageable. A page size of 4 KB can also be used.","title":"pageable|nonpageable"},{"location":"xlpobjectheap/#see-also","text":"Configuring large page memory allocation .","title":"See also"},{"location":"xmca/","text":"-Xmca / -Xmco Sets the expansion step for the memory allocated to store the RAM ( -Xmca ) and ROM ( -Xmco ) portions of loaded classes. Each time more memory is required to store classes in RAM or ROM, the allocated memory is increased by the amount set. If the expansion step size you choose is too large, OutOfMemoryError is reported. The exact value of a \"too large\" expansion step size varies according to the platform and the specific machine configuration. You can use the -verbose:sizes option to find out the value that is being used by the VM. Syntax Setting Effect Default -Xmca<size> Set expansion step for RAM 32 KB -Xmco<size> Set expansion step for ROM 128 KB See Using -X command-line options for more information about the <size> parameter.","title":"-Xmco"},{"location":"xmca/#-xmca-xmco","text":"Sets the expansion step for the memory allocated to store the RAM ( -Xmca ) and ROM ( -Xmco ) portions of loaded classes. Each time more memory is required to store classes in RAM or ROM, the allocated memory is increased by the amount set. If the expansion step size you choose is too large, OutOfMemoryError is reported. The exact value of a \"too large\" expansion step size varies according to the platform and the specific machine configuration. You can use the -verbose:sizes option to find out the value that is being used by the VM.","title":"-Xmca / -Xmco"},{"location":"xmca/#syntax","text":"Setting Effect Default -Xmca<size> Set expansion step for RAM 32 KB -Xmco<size> Set expansion step for ROM 128 KB See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmcrs/","text":"-Xmcrs Sets an initial size for an area in memory that is reserved for any native classes, monitors, and threads that are used by compressed references within the lowest 4 GB memory area. You can use the -verbose:sizes option to find out the value that is being used by the VM. Notes: Native memory OutOfMemoryError exceptions might occur when using compressed references if the lowest 4 GB of address space becomes full, particularly when loading classes, starting threads, or using monitors. If you are not using compressed references and this option is set, the option is ignored and the output of -verbose:sizes shows -Xmcrs0 . Syntax -Xmcrs<size> See Using -X command-line options for more information about the <size> parameter.","title":"-Xmcrs"},{"location":"xmcrs/#-xmcrs","text":"Sets an initial size for an area in memory that is reserved for any native classes, monitors, and threads that are used by compressed references within the lowest 4 GB memory area. You can use the -verbose:sizes option to find out the value that is being used by the VM. Notes: Native memory OutOfMemoryError exceptions might occur when using compressed references if the lowest 4 GB of address space becomes full, particularly when loading classes, starting threads, or using monitors. If you are not using compressed references and this option is set, the option is ignored and the output of -verbose:sizes shows -Xmcrs0 .","title":"-Xmcrs"},{"location":"xmcrs/#syntax","text":"-Xmcrs<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmine/","text":"-Xmine / -Xmaxe Set the minimum and maximum amounts by which the garbage collector expands the heap. Syntax Setting Default -Xmine<size> 1 MB -Xmaxe<size> 0 (unlimited expansion) See Using -X command-line options for more information about the <size> parameter. Explanation Typically, the garbage collector expands the heap by the amount required to restore the free space to 30% (or the amount specified by -Xminf ). If heap expansion is required: -Xmine forces the expansion to be at least the specified value. For example, -Xmine10M sets the expansion size to a minimum of 10 MB. -Xmaxe limits the expansion to the specified value. For example -Xmaxe50M prevents expansion by more than 50 MB. ( -Xmaxe0 allows unlimited expansion.) See also Heap shrinkage Heap expansion","title":"-Xmine"},{"location":"xmine/#-xmine-xmaxe","text":"Set the minimum and maximum amounts by which the garbage collector expands the heap.","title":"-Xmine / -Xmaxe"},{"location":"xmine/#syntax","text":"Setting Default -Xmine<size> 1 MB -Xmaxe<size> 0 (unlimited expansion) See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmine/#explanation","text":"Typically, the garbage collector expands the heap by the amount required to restore the free space to 30% (or the amount specified by -Xminf ). If heap expansion is required: -Xmine forces the expansion to be at least the specified value. For example, -Xmine10M sets the expansion size to a minimum of 10 MB. -Xmaxe limits the expansion to the specified value. For example -Xmaxe50M prevents expansion by more than 50 MB. ( -Xmaxe0 allows unlimited expansion.)","title":"Explanation"},{"location":"xmine/#see-also","text":"Heap shrinkage Heap expansion","title":"See also"},{"location":"xminf/","text":"-Xminf / -Xmaxf Specifies the minimum and maximum proportion of the heap that must remain free after a global garbage collection (GC) cycle. If the free space is above or below these limits, the OpenJ9 VM attempts to adjust the heap size so that: -Xminf \u2264 free space \u2264 -Xmaxf . Syntax Setting Effect Default -Xminf<value> Set minimum free space 0.3 -Xmaxf<value> Set maximum free space 0.6 The value range is 0.0 - 1.0. For the gencon GC policy, the values apply only to the Tenure part of the heap and only at global GC points. For the optthruput and optavgpause GC policies, these values apply to the whole heap at every GC point. See also Heap shrinkage Heap expansion","title":"-Xminf"},{"location":"xminf/#-xminf-xmaxf","text":"Specifies the minimum and maximum proportion of the heap that must remain free after a global garbage collection (GC) cycle. If the free space is above or below these limits, the OpenJ9 VM attempts to adjust the heap size so that: -Xminf \u2264 free space \u2264 -Xmaxf .","title":"-Xminf / -Xmaxf"},{"location":"xminf/#syntax","text":"Setting Effect Default -Xminf<value> Set minimum free space 0.3 -Xmaxf<value> Set maximum free space 0.6 The value range is 0.0 - 1.0. For the gencon GC policy, the values apply only to the Tenure part of the heap and only at global GC points. For the optthruput and optavgpause GC policies, these values apply to the whole heap at every GC point.","title":"Syntax"},{"location":"xminf/#see-also","text":"Heap shrinkage Heap expansion","title":"See also"},{"location":"xmint/","text":"-Xmint / -Xmaxt Sets the minimum and maximum proportion of time to spend in the garbage collection (GC) process as a percentage of the overall running time that included the last three GC runs. If the percentage of time drops to less than the minimum, the OpenJ9 VM tries to shrink the heap. If the percentage of time exceeds the maximum, the OpenJ9 VM tries to expand the heap. Restrictions: This option applies only to GC policies that include stop-the-world (STW) operations, such as -Xgcpolicy:optthruput . Syntax Setting Effect Default -Xmint<value> Set minimum time in GC 5 -Xmaxt<value> Set maximum time in GC 13","title":"-Xmint"},{"location":"xmint/#-xmint-xmaxt","text":"Sets the minimum and maximum proportion of time to spend in the garbage collection (GC) process as a percentage of the overall running time that included the last three GC runs. If the percentage of time drops to less than the minimum, the OpenJ9 VM tries to shrink the heap. If the percentage of time exceeds the maximum, the OpenJ9 VM tries to expand the heap. Restrictions: This option applies only to GC policies that include stop-the-world (STW) operations, such as -Xgcpolicy:optthruput .","title":"-Xmint / -Xmaxt"},{"location":"xmint/#syntax","text":"Setting Effect Default -Xmint<value> Set minimum time in GC 5 -Xmaxt<value> Set maximum time in GC 13","title":"Syntax"},{"location":"xmn/","text":"-Xmn / -Xmns / -Xmnx Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon . If the scavenger is disabled, this option is ignored. You can use the -verbose:sizes option to find out the value that is being used by the VM. Syntax Setting Effect Default -Xmn<size> Equivalent to setting both -Xmns and -Xmnx Not set -Xmns<size> Set initial size 25% of -Xms -Xmnx<size> Set maximum size 25% of -Xmx See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmn with either -Xmns or -Xmnx , the VM does not start, returning an error.","title":"-Xmnx"},{"location":"xmn/#-xmn-xmns-xmnx","text":"Sets the initial and maximum size of the new area when using -Xgcpolicy:gencon . If the scavenger is disabled, this option is ignored. You can use the -verbose:sizes option to find out the value that is being used by the VM.","title":"-Xmn / -Xmns / -Xmnx"},{"location":"xmn/#syntax","text":"Setting Effect Default -Xmn<size> Equivalent to setting both -Xmns and -Xmnx Not set -Xmns<size> Set initial size 25% of -Xms -Xmnx<size> Set maximum size 25% of -Xmx See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmn with either -Xmns or -Xmnx , the VM does not start, returning an error.","title":"Syntax"},{"location":"xmo/","text":"-Xmo / -Xmoi / -Xmos / -Xmox Sets the size and behavior of the old (tenure) heap when using -Xgcpolicy:gencon . You can use the -verbose:sizes option to find out the values that the VM is currently using. Syntax Setting Effect Default -Xmo<size> Equivalent to setting both -Xmos and -Xmox not set -Xmoi<size> Set increment size of old (tenure) heap See Note -Xmos<size> Set initial size of old (tenure) heap 75% of -Xms -Xmox<size> Set maximum size of old (tenure) heap Same as -Xmx Note: By default, the increment size ( -Xmoi ) is calculated on the expansion size, set by -Xmine and -Xminf . If you set -Xmoi to zero, no expansion is allowed. See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmo with either -Xmos or -Xmox , the VM does not start, returning an error.","title":"-Xmox"},{"location":"xmo/#-xmo-xmoi-xmos-xmox","text":"Sets the size and behavior of the old (tenure) heap when using -Xgcpolicy:gencon . You can use the -verbose:sizes option to find out the values that the VM is currently using.","title":"-Xmo / -Xmoi / -Xmos / -Xmox"},{"location":"xmo/#syntax","text":"Setting Effect Default -Xmo<size> Equivalent to setting both -Xmos and -Xmox not set -Xmoi<size> Set increment size of old (tenure) heap See Note -Xmos<size> Set initial size of old (tenure) heap 75% of -Xms -Xmox<size> Set maximum size of old (tenure) heap Same as -Xmx Note: By default, the increment size ( -Xmoi ) is calculated on the expansion size, set by -Xmine and -Xminf . If you set -Xmoi to zero, no expansion is allowed. See Using -X command-line options for more information about the <size> parameter. Restriction: If you try to set -Xmo with either -Xmos or -Xmox , the VM does not start, returning an error.","title":"Syntax"},{"location":"xmr/","text":"-Xmr / -Xmrx Sets the initial and maximum size of the the garbage collection \"remembered set\", which is a list of objects in the old (tenured) heap that have references to objects in the new area. Syntax Setting Effect Default -Xmr<size> Set initial size 16 K -Xmrx<size> Set maximium size See Using -X command-line options for more information about the <size> parameter.","title":"-Xmrx"},{"location":"xmr/#-xmr-xmrx","text":"Sets the initial and maximum size of the the garbage collection \"remembered set\", which is a list of objects in the old (tenured) heap that have references to objects in the new area.","title":"-Xmr / &nbsp; -Xmrx"},{"location":"xmr/#syntax","text":"Setting Effect Default -Xmr<size> Set initial size 16 K -Xmrx<size> Set maximium size See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xms/","text":"-Xms / -Xmx These Oracle\u00ae Hotspot\u2122 options set the initial/minimum Java\u2122 heap size, and the maximum heap size respectively. These options are recognized by the OpenJ9 VM. Notes: If you set -Xms > -Xmx , the OpenJ9 VM fails with the message -Xms too large for -Xmx . If you exceed the limit set by the -Xmx option, the OpenJ9 VM generates an OutofMemoryError . If you are allocating the Java heap with large pages, see also -Xlp and More effective heap usage using compressed references . You can also use the -Xmo option (not supported by the balanced garbage collection policy): If the scavenger is enabled, -Xms \u2265 -Xmn + -Xmo If the scavenger is disabled, -Xms \u2265 -Xmo Syntax Setting Effect Default -Xms<size> Set initial heap size 8 MB -Xmx<size> Set maximum heap size 25% of available memory (25 GB maximum) See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values. Examples -Xms2m -Xmx64m Heap starts at 2 MB and grows to a maximum of 64 MB. -Xms100m -Xmx100m Heap starts at 100 MB and never grows. -Xms50m Heap starts at 50 MB and grows to the default maximum. -Xmx256m Heap starts at default initial value and grows to a maximum of 256 MB. See also -Xsoftmx (Set \"soft\" maximum Java heap size)","title":"-Xmx"},{"location":"xms/#-xms-xmx","text":"These Oracle\u00ae Hotspot\u2122 options set the initial/minimum Java\u2122 heap size, and the maximum heap size respectively. These options are recognized by the OpenJ9 VM. Notes: If you set -Xms > -Xmx , the OpenJ9 VM fails with the message -Xms too large for -Xmx . If you exceed the limit set by the -Xmx option, the OpenJ9 VM generates an OutofMemoryError . If you are allocating the Java heap with large pages, see also -Xlp and More effective heap usage using compressed references . You can also use the -Xmo option (not supported by the balanced garbage collection policy): If the scavenger is enabled, -Xms \u2265 -Xmn + -Xmo If the scavenger is disabled, -Xms \u2265 -Xmo","title":"-Xms / -Xmx"},{"location":"xms/#syntax","text":"Setting Effect Default -Xms<size> Set initial heap size 8 MB -Xmx<size> Set maximum heap size 25% of available memory (25 GB maximum) See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values.","title":"Syntax"},{"location":"xms/#examples","text":"-Xms2m -Xmx64m Heap starts at 2 MB and grows to a maximum of 64 MB. -Xms100m -Xmx100m Heap starts at 100 MB and never grows. -Xms50m Heap starts at 50 MB and grows to the default maximum. -Xmx256m Heap starts at default initial value and grows to a maximum of 256 MB.","title":"Examples"},{"location":"xms/#see-also","text":"-Xsoftmx (Set \"soft\" maximum Java heap size)","title":"See also"},{"location":"xmso/","text":"-Xmso Sets the native stack size for operating system threads. You can use the -verbose:sizes option to find out the values that the VM is currently using. When a native method makes a call into the VM, the VM calculates whether the memory required for the call will exceed the -Xmso value. If so, a java/lang/StackOverflowError error is thrown. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; this option applies to the native stack only. For the Java stack option, see the link in the See also section. Syntax -Xmso<size> See Using -X command-line options for more information about the <size> parameter. Default setting Default values vary by platform. See Default settings for the OpenJ9 VM . See also -Xiss/-Xss/-Xssi (stack size and increment for Java\u2122 threads)","title":"-Xmso"},{"location":"xmso/#-xmso","text":"Sets the native stack size for operating system threads. You can use the -verbose:sizes option to find out the values that the VM is currently using. When a native method makes a call into the VM, the VM calculates whether the memory required for the call will exceed the -Xmso value. If so, a java/lang/StackOverflowError error is thrown. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; this option applies to the native stack only. For the Java stack option, see the link in the See also section.","title":"-Xmso"},{"location":"xmso/#syntax","text":"-Xmso<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xmso/#default-setting","text":"Default values vary by platform. See Default settings for the OpenJ9 VM .","title":"Default setting"},{"location":"xmso/#see-also","text":"-Xiss/-Xss/-Xssi (stack size and increment for Java\u2122 threads)","title":"See also"},{"location":"xnumanone/","text":"-Xnuma:none (AIX\u00ae, Linux\u00ae, and Windows\u2122 only) Use this option to turn off non-uniform memory architecture (NUMA) awareness when using the balanced garbage collection policy. For workloads that do most of their work in one thread, or workloads that maintain a full heap, turning off NUMA awareness can improve performance. Syntax -Xnuma:none Default behavior NUMA awareness is enabled by default.","title":"-Xnuma:none"},{"location":"xnumanone/#-xnumanone","text":"(AIX\u00ae, Linux\u00ae, and Windows\u2122 only) Use this option to turn off non-uniform memory architecture (NUMA) awareness when using the balanced garbage collection policy. For workloads that do most of their work in one thread, or workloads that maintain a full heap, turning off NUMA awareness can improve performance.","title":"-Xnuma:none"},{"location":"xnumanone/#syntax","text":"-Xnuma:none","title":"Syntax"},{"location":"xnumanone/#default-behavior","text":"NUMA awareness is enabled by default.","title":"Default behavior"},{"location":"xoptionsfile/","text":"-Xoptionsfile Specifies a file that contains VM options and definitions. The contents of the options file are recorded in the ENVINFO section of a Java\u2122 dump. Syntax -Xoptionsfile=<file_name> where <file_name> specifies a file that contains options that are processed as if they had been entered directly as command-line options. Explanation At startup, the VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. <path> is the VM directory, as show in Directory conventions . <path> is the <java_home>/lib directory, where <java_home> is the directory for your runtime environment. The file options.default is empty but can be updated with any options that you want to specify at run time. The options file does not support these options: -assert -fullversion -help -showversion -version -Xcompressedrefs -Xcheck:memory -Xoptionsfile Although you cannot use -Xoptionsfile recursively within an options file, you can use -Xoptionsfile multiple times on the same command line to load more than one options files. Some options use quoted strings as parameters. Do not split quoted strings over multiple lines using the forward slash line continuation character (\\). The Yen symbol (\u00a5) is not supported as a line continuation character. For example, the following example is not valid in an options file: :::java -Xevents=vmstop,exec=\"cmd /c \\ echo %pid has finished.\" The following example is valid in an options file: :::java -Xevents=vmstop, \\ exec=\"cmd /c echo %pid has finished.\" Example Here is an example of an options file: :::java #My options file -X<option1> -X<option2>=\\ <value1>,\\ <value2> -D<sysprop1>=<value1> See also Specifying command-line options Javadump: TITLE, GPINFO, and ENVINFO sections","title":"-Xoptionsfile"},{"location":"xoptionsfile/#-xoptionsfile","text":"Specifies a file that contains VM options and definitions. The contents of the options file are recorded in the ENVINFO section of a Java\u2122 dump.","title":"-Xoptionsfile"},{"location":"xoptionsfile/#syntax","text":"-Xoptionsfile=<file_name> where <file_name> specifies a file that contains options that are processed as if they had been entered directly as command-line options.","title":"Syntax"},{"location":"xoptionsfile/#explanation","text":"At startup, the VM automatically adds -Xoptionsfile=<path>/options.default at the beginning of the command line, where <path> is the path to the VM directory. <path> is the VM directory, as show in Directory conventions . <path> is the <java_home>/lib directory, where <java_home> is the directory for your runtime environment. The file options.default is empty but can be updated with any options that you want to specify at run time. The options file does not support these options: -assert -fullversion -help -showversion -version -Xcompressedrefs -Xcheck:memory -Xoptionsfile Although you cannot use -Xoptionsfile recursively within an options file, you can use -Xoptionsfile multiple times on the same command line to load more than one options files. Some options use quoted strings as parameters. Do not split quoted strings over multiple lines using the forward slash line continuation character (\\). The Yen symbol (\u00a5) is not supported as a line continuation character. For example, the following example is not valid in an options file: :::java -Xevents=vmstop,exec=\"cmd /c \\ echo %pid has finished.\" The following example is valid in an options file: :::java -Xevents=vmstop, \\ exec=\"cmd /c echo %pid has finished.\"","title":"Explanation"},{"location":"xoptionsfile/#example","text":"Here is an example of an options file: :::java #My options file -X<option1> -X<option2>=\\ <value1>,\\ <value2> -D<sysprop1>=<value1>","title":"Example"},{"location":"xoptionsfile/#see-also","text":"Specifying command-line options Javadump: TITLE, GPINFO, and ENVINFO sections","title":"See also"},{"location":"xquickstart/","text":"-Xquickstart This option causes the JIT compiler to run with a subset of optimizations, which can improve the performance of short-running applications. Note: For compatibility with other Java\u2122 virtual machines, you can also specify the -client option, which results in identical behavior to -Xquickstart . Syntax -Xquickstart Default behavior By default, -Xquickstart is disabled. Explanation The JIT compiler is tuned for long-running applications typically used on a server. When you specify this option, the compiler uses a subset of optimizations, which results in faster compilation times that improve startup time. However, longer running applications might run more slowly, especially applications that contain hot methods and other methods using a large amount of processing resource. When the AOT compiler is active (both shared classes and AOT compilation enabled), -Xquickstart causes all methods to be AOT compiled. The AOT compilation improves the startup time of subsequent runs, but might reduce performance for longer running applications, especially those that contain hot methods. Note: The implementation of -Xquickstart is subject to change in future releases.","title":"-Xquickstart"},{"location":"xquickstart/#-xquickstart","text":"This option causes the JIT compiler to run with a subset of optimizations, which can improve the performance of short-running applications. Note: For compatibility with other Java\u2122 virtual machines, you can also specify the -client option, which results in identical behavior to -Xquickstart .","title":"-Xquickstart"},{"location":"xquickstart/#syntax","text":"-Xquickstart","title":"Syntax"},{"location":"xquickstart/#default-behavior","text":"By default, -Xquickstart is disabled.","title":"Default behavior"},{"location":"xquickstart/#explanation","text":"The JIT compiler is tuned for long-running applications typically used on a server. When you specify this option, the compiler uses a subset of optimizations, which results in faster compilation times that improve startup time. However, longer running applications might run more slowly, especially applications that contain hot methods and other methods using a large amount of processing resource. When the AOT compiler is active (both shared classes and AOT compilation enabled), -Xquickstart causes all methods to be AOT compiled. The AOT compilation improves the startup time of subsequent runs, but might reduce performance for longer running applications, especially those that contain hot methods. Note: The implementation of -Xquickstart is subject to change in future releases.","title":"Explanation"},{"location":"xrs/","text":"-Xrs Prevents the OpenJ9 runtime environment from handling any internally or externally generated signals such as SIGSEGV and SIGABRT . Any signals that are raised are handled by the default operating system handlers, which you might want if you are using a debugger such as GDB or WinDbg to diagnose problems in JNI code. Disabling signal handling in the OpenJ9 VM reduces performance by approximately 2-4%, depending on the application. Note: Setting this option prevents dumps being generated by the OpenJ9 VM for signals such as SIGSEGV and SIGABRT , because the VM is no longer intercepting these signals. Syntax -Xrs -Xrs:sync Parameters If you specify the sync parameter: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: Disables signal handling in the VM for SIGSEGV , SIGFPE , SIGBUS , SIGILL , SIGTRAP , and SIGABRT signals. However, the VM still handles the SIGQUIT and SIGTERM signals, among others. On Windows\u2122 systems: Hardware exceptions are not handled by the OpenJ9 VM when this option is specified. However, the Windows CTRL_BREAK_EVENT signal, triggered by the Ctrl-Break key combination, is still handled by the VM. Linux and macOS systems always use the SIGUSR1 signal.","title":"-Xrs"},{"location":"xrs/#-xrs","text":"Prevents the OpenJ9 runtime environment from handling any internally or externally generated signals such as SIGSEGV and SIGABRT . Any signals that are raised are handled by the default operating system handlers, which you might want if you are using a debugger such as GDB or WinDbg to diagnose problems in JNI code. Disabling signal handling in the OpenJ9 VM reduces performance by approximately 2-4%, depending on the application. Note: Setting this option prevents dumps being generated by the OpenJ9 VM for signals such as SIGSEGV and SIGABRT , because the VM is no longer intercepting these signals.","title":"-Xrs"},{"location":"xrs/#syntax","text":"-Xrs -Xrs:sync","title":"Syntax"},{"location":"xrs/#parameters","text":"If you specify the sync parameter: On AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae systems: Disables signal handling in the VM for SIGSEGV , SIGFPE , SIGBUS , SIGILL , SIGTRAP , and SIGABRT signals. However, the VM still handles the SIGQUIT and SIGTERM signals, among others. On Windows\u2122 systems: Hardware exceptions are not handled by the OpenJ9 VM when this option is specified. However, the Windows CTRL_BREAK_EVENT signal, triggered by the Ctrl-Break key combination, is still handled by the VM. Linux and macOS systems always use the SIGUSR1 signal.","title":"Parameters"},{"location":"xsamplingexpirationtime/","text":"-XsamplingExpirationTime Disables JIT sampling after a specified amount of time. When the JIT sampling thread is disabled, no processor cycles are used by an idle OpenJ9 VM. Use this option with care; after the sampling thread is disabled, you cannot reactivate it. However, because the profiling frequency is automatically reduced, you should not have to use this option. Allow the sampling thread to run for long enough to identify important optimizations. Syntax -XsamplingExpirationTime<time> where <time> is specified in seconds. Explanation The JIT sampling thread profiles the running Java\u2122 application to discover commonly used methods. The memory and processor usage of the sampling thread is negligible, and the frequency of profiling is automatically reduced when the OpenJ9 VM is idle, to once per second instead of once every 10ms, or once every 100 seconds if the idle state lasts more than 50 seconds.","title":"-XsamplingExpirationTime"},{"location":"xsamplingexpirationtime/#-xsamplingexpirationtime","text":"Disables JIT sampling after a specified amount of time. When the JIT sampling thread is disabled, no processor cycles are used by an idle OpenJ9 VM. Use this option with care; after the sampling thread is disabled, you cannot reactivate it. However, because the profiling frequency is automatically reduced, you should not have to use this option. Allow the sampling thread to run for long enough to identify important optimizations.","title":"-XsamplingExpirationTime"},{"location":"xsamplingexpirationtime/#syntax","text":"-XsamplingExpirationTime<time> where <time> is specified in seconds.","title":"Syntax"},{"location":"xsamplingexpirationtime/#explanation","text":"The JIT sampling thread profiles the running Java\u2122 application to discover commonly used methods. The memory and processor usage of the sampling thread is negligible, and the frequency of profiling is automatically reduced when the OpenJ9 VM is idle, to once per second instead of once every 10ms, or once every 100 seconds if the idle state lasts more than 50 seconds.","title":"Explanation"},{"location":"xscdmx/","text":"-Xscdmx Use the -Xscdmx option to control the size of the class debug area when you create a shared class cache. Syntax -Xscdmx<size> See Using -X command-line options for more information about the <size> parameter. Explanation The -Xscdmx option works in a similar way to the -Xscmx option, which is used to control the overall size of the shared class cache. The size of -Xscdmx must be smaller than the size of -Xscmx . By default, the size of the class debug area is a percentage of the free class data bytes in a newly created or empty cache. A class debug area is still created if you use the -Xnolinenumbers option with the -Xscdmx option on the command line.","title":"-Xscdmx"},{"location":"xscdmx/#-xscdmx","text":"Use the -Xscdmx option to control the size of the class debug area when you create a shared class cache.","title":"-Xscdmx"},{"location":"xscdmx/#syntax","text":"-Xscdmx<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscdmx/#explanation","text":"The -Xscdmx option works in a similar way to the -Xscmx option, which is used to control the overall size of the shared class cache. The size of -Xscdmx must be smaller than the size of -Xscmx . By default, the size of the class debug area is a percentage of the free class data bytes in a newly created or empty cache. A class debug area is still created if you use the -Xnolinenumbers option with the -Xscdmx option on the command line.","title":"Explanation"},{"location":"xscminaot/","text":"-Xscminaot / -Xscmaxaot When you create a shared classes cache, you can use these options to set the minimum and maximum number of bytes in the class cache to reserve for AOT data. Setting -Xscmaxaot is useful if you want a certain amount of cache space guaranteed for non-AOT data. Syntax Setting Effect Default -Xscminaot<size> Set minimum size for AOT class cache 0 -Xscmaxaot<size> Set maximum size for AOT class cache The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter. -Xscminaot If -Xscminaot is not specified, no space is reserved for AOT data. However, AOT data is still written to the cache until the cache is full or the -Xscmaxaot limit is reached. The value of -Xscminaot must not exceed the value of -Xscmx or -Xscmaxaot and should be considerably less than the total cache size, because AOT data can be created only for cached classes. If the value of -Xscminaot equals the value of -Xscmx , no class data or AOT data can be stored. You can also adjust the -Xscminaot value by using: -Xshareclasses:adjustminaot=<size> option MemoryMXBean.setSharedClassCacheMinAotBytes() method in the com.ibm.lang.management API You can also adjust the -Xscmaxaot value by using: -Xshareclasses:adjustmaxaot=<size> option MemoryMXBean.setSharedClassCacheMaxAotBytes() method in the com.ibm.lang.management API. -Xscmaxaot The value of this option must not be smaller than the value of -Xscminaot and must not be larger than the value of -Xscmx . When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of AOT data that is not stored due to the current setting of the maximum AOT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxAotUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum AOT data space size accordingly if you want to add the unstored AOT data to the shared cache. See also -Xshareclasses","title":"-Xscminaot"},{"location":"xscminaot/#-xscminaot-xscmaxaot","text":"When you create a shared classes cache, you can use these options to set the minimum and maximum number of bytes in the class cache to reserve for AOT data. Setting -Xscmaxaot is useful if you want a certain amount of cache space guaranteed for non-AOT data.","title":"-Xscminaot / -Xscmaxaot"},{"location":"xscminaot/#syntax","text":"Setting Effect Default -Xscminaot<size> Set minimum size for AOT class cache 0 -Xscmaxaot<size> Set maximum size for AOT class cache The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscminaot/#-xscminaot","text":"If -Xscminaot is not specified, no space is reserved for AOT data. However, AOT data is still written to the cache until the cache is full or the -Xscmaxaot limit is reached. The value of -Xscminaot must not exceed the value of -Xscmx or -Xscmaxaot and should be considerably less than the total cache size, because AOT data can be created only for cached classes. If the value of -Xscminaot equals the value of -Xscmx , no class data or AOT data can be stored. You can also adjust the -Xscminaot value by using: -Xshareclasses:adjustminaot=<size> option MemoryMXBean.setSharedClassCacheMinAotBytes() method in the com.ibm.lang.management API You can also adjust the -Xscmaxaot value by using: -Xshareclasses:adjustmaxaot=<size> option MemoryMXBean.setSharedClassCacheMaxAotBytes() method in the com.ibm.lang.management API.","title":"-Xscminaot"},{"location":"xscminaot/#-xscmaxaot","text":"The value of this option must not be smaller than the value of -Xscminaot and must not be larger than the value of -Xscmx . When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of AOT data that is not stored due to the current setting of the maximum AOT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxAotUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum AOT data space size accordingly if you want to add the unstored AOT data to the shared cache.","title":"-Xscmaxaot"},{"location":"xscminaot/#see-also","text":"-Xshareclasses","title":"See also"},{"location":"xscminjitdata/","text":"-Xscminjitdata / -Xscmaxjitdata When you create a shared classes cache, you can use these options to set a minimum and maximum number of bytes in the class cache that can be used for JIT data. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of JIT data that is not stored due to the current setting of the the maximum JIT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxJitDataUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum JIT data space size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store the JIT data. Subsequent VMs can store JIT data in the shared cache. Syntax Setting Effect Default -Xscminjitdata<size> Set minimum size for JIT data 0 (See Default behavior ) -Xscmaxjitdata<size> Set maximum size for JIT data The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter. Default behavior If -Xscminjitdata is not specified, no space is reserved for JIT data, although JIT data is still written to the cache until the cache is full or the -Xscmaxjitdata limit is reached. Explanation -Xscminjitdata The value of -Xscminjitdata must not exceed the value of -Xscmx or -Xscmaxjitdata . The value of -Xscminjitdata must always be considerably less than the total cache size, because JIT data can be created only for cached classes. If the value of -Xscminjitdata equals the value of -Xscmx , no class data or JIT data can be stored. You can also adjust the -Xscminjitdata value by using: -Xshareclasses:adjustminjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API. -Xscmaxjitdata Setting -Xscmaxjitdata is useful if you want a certain amount of cache space guaranteed for non-JIT data. If this option is not specified, the maximum limit for JIT data is the amount of free space in the cache. The value of this option must not be smaller than the value of -Xscminjitdata , and must not be larger than the value of -Xscmx . You can also adjust the -Xscmaxjitdata value by using: -Xshareclasses:adjustmaxjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API. See also -Xscmx","title":"-Xscminjitdata"},{"location":"xscminjitdata/#-xscminjitdata-xscmaxjitdata","text":"When you create a shared classes cache, you can use these options to set a minimum and maximum number of bytes in the class cache that can be used for JIT data. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the amount of JIT data that is not stored due to the current setting of the the maximum JIT data space. You can also get this information by using the MemoryMXBean.getSharedClassCacheMaxJitDataUnstoredBytes() method in the com.ibm.lang.management API. You can increase the maximum JIT data space size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store the JIT data. Subsequent VMs can store JIT data in the shared cache.","title":"-Xscminjitdata / -Xscmaxjitdata"},{"location":"xscminjitdata/#syntax","text":"Setting Effect Default -Xscminjitdata<size> Set minimum size for JIT data 0 (See Default behavior ) -Xscmaxjitdata<size> Set maximum size for JIT data The amount of free space in the cache See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscminjitdata/#default-behavior","text":"If -Xscminjitdata is not specified, no space is reserved for JIT data, although JIT data is still written to the cache until the cache is full or the -Xscmaxjitdata limit is reached.","title":"Default behavior"},{"location":"xscminjitdata/#explanation","text":"","title":"Explanation"},{"location":"xscminjitdata/#-xscminjitdata","text":"The value of -Xscminjitdata must not exceed the value of -Xscmx or -Xscmaxjitdata . The value of -Xscminjitdata must always be considerably less than the total cache size, because JIT data can be created only for cached classes. If the value of -Xscminjitdata equals the value of -Xscmx , no class data or JIT data can be stored. You can also adjust the -Xscminjitdata value by using: -Xshareclasses:adjustminjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API.","title":"-Xscminjitdata"},{"location":"xscminjitdata/#-xscmaxjitdata","text":"Setting -Xscmaxjitdata is useful if you want a certain amount of cache space guaranteed for non-JIT data. If this option is not specified, the maximum limit for JIT data is the amount of free space in the cache. The value of this option must not be smaller than the value of -Xscminjitdata , and must not be larger than the value of -Xscmx . You can also adjust the -Xscmaxjitdata value by using: -Xshareclasses:adjustmaxjitdata=<size> option MemoryMXBean.setSharedClassCacheMinJitDataBytes() method in the com.ibm.lang.management API.","title":"-Xscmaxjitdata"},{"location":"xscminjitdata/#see-also","text":"-Xscmx","title":"See also"},{"location":"xscmx/","text":"-Xscmx For a new shared class cache, specifies either: the actual size of the cache, if the -XX:SharedCacheHardLimit option is not present the soft maximum size of the cache, if used with the -XX:SharedCacheHardLimit option (See -XX:SharedCacheHardLimit ) This option applies only if a cache is being created and no cache of the same name exists. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. You can also get this information by using the MemoryMXBean.getSharedClassCacheSoftmxUnstoredBytes() method in the com.ibm.lang.management API. You can increase the soft maximum size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store that data. Therefore, increasing the soft maximum size does not necessarily cause any more data to be stored in the shared cache by the current VM, but subsequent VMs can add data to the shared cache. Syntax -Xscmx<size> See Using -X command-line options for more information about the <size> parameter. Explanation Setting a soft maximum size If you specify the -Xscmx option with the -XX:SharedCacheHardLimit option, the -Xscmx option sets the soft maximum size of a new shared class cache, and the -XX:SharedCacheHardLimit option sets the actual maximum size. The value of the -Xscmx option must therefore not exceed the value of -XX:SharedCacheHardLimit . When the soft maximum limit is reached, no more data can be added into the shared cache, unless there is reserved AOT or JIT data space. If such reserved space exists, AOT or JIT data can still be added into the reserved space. The reserved AOT and JIT data spaces are counted as used space within the soft maximum size, so the soft maximum size should not be less than the minimum reserved space for AOT and JIT data if you specify the -Xscminaot or -Xscminjitdata options. You can change the soft maximum size by using the -Xshareclasses:adjustsoftmx=<size> option or the MemoryMXBean.setSharedClassCacheSoftmxBytes() method in the com.ibm.lang.management API. By using this API, Java\u2122 applications can dynamically monitor and adjust the cache soft maximum size as required. This function can be useful in virtualized or cloud environments, for example, where the shared cache size might change dynamically to meet business needs. For example, you might create a 64 MB shared cache and set a smaller value, such as 16 MB, for the -Xscmx option, to limit the data stored in the cache: :::java -XX:SharedCacheHardLimit=64m -Xscmx16m You can then use the com.ibm.lang.management API from within a Java application to increase the soft maximum value during run time, as load increases. This change allows the application to use more shared cache space than you specified initially. You can increase the soft maximum size if it is currently less than the actual cache size. If you attempt to reduce the soft maximum size to a value that is less than the number of bytes already used in the cache, the number of used bytes is set as the new soft maximum size. For more information about cache sizes, see Cache size limits . See also -Xscdmx (control the size of the class debug area)","title":"-Xscmx"},{"location":"xscmx/#-xscmx","text":"For a new shared class cache, specifies either: the actual size of the cache, if the -XX:SharedCacheHardLimit option is not present the soft maximum size of the cache, if used with the -XX:SharedCacheHardLimit option (See -XX:SharedCacheHardLimit ) This option applies only if a cache is being created and no cache of the same name exists. When you run an application with the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. You can also get this information by using the MemoryMXBean.getSharedClassCacheSoftmxUnstoredBytes() method in the com.ibm.lang.management API. You can increase the soft maximum size accordingly if you want to add the unstored data to the shared cache. However, the VM that provided the information no longer has the opportunity to store that data. Therefore, increasing the soft maximum size does not necessarily cause any more data to be stored in the shared cache by the current VM, but subsequent VMs can add data to the shared cache.","title":"-Xscmx"},{"location":"xscmx/#syntax","text":"-Xscmx<size> See Using -X command-line options for more information about the <size> parameter.","title":"Syntax"},{"location":"xscmx/#explanation","text":"","title":"Explanation"},{"location":"xscmx/#setting-a-soft-maximum-size","text":"If you specify the -Xscmx option with the -XX:SharedCacheHardLimit option, the -Xscmx option sets the soft maximum size of a new shared class cache, and the -XX:SharedCacheHardLimit option sets the actual maximum size. The value of the -Xscmx option must therefore not exceed the value of -XX:SharedCacheHardLimit . When the soft maximum limit is reached, no more data can be added into the shared cache, unless there is reserved AOT or JIT data space. If such reserved space exists, AOT or JIT data can still be added into the reserved space. The reserved AOT and JIT data spaces are counted as used space within the soft maximum size, so the soft maximum size should not be less than the minimum reserved space for AOT and JIT data if you specify the -Xscminaot or -Xscminjitdata options. You can change the soft maximum size by using the -Xshareclasses:adjustsoftmx=<size> option or the MemoryMXBean.setSharedClassCacheSoftmxBytes() method in the com.ibm.lang.management API. By using this API, Java\u2122 applications can dynamically monitor and adjust the cache soft maximum size as required. This function can be useful in virtualized or cloud environments, for example, where the shared cache size might change dynamically to meet business needs. For example, you might create a 64 MB shared cache and set a smaller value, such as 16 MB, for the -Xscmx option, to limit the data stored in the cache: :::java -XX:SharedCacheHardLimit=64m -Xscmx16m You can then use the com.ibm.lang.management API from within a Java application to increase the soft maximum value during run time, as load increases. This change allows the application to use more shared cache space than you specified initially. You can increase the soft maximum size if it is currently less than the actual cache size. If you attempt to reduce the soft maximum size to a value that is less than the number of bytes already used in the cache, the number of used bytes is set as the new soft maximum size. For more information about cache sizes, see Cache size limits .","title":"Setting a soft maximum size"},{"location":"xscmx/#see-also","text":"-Xscdmx (control the size of the class debug area)","title":"See also"},{"location":"xshareclasses/","text":"-Xshareclasses Use the -Xshareclasses option to enable, disable, or modify class sharing behavior. Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. This option can take a number of parameters, some of which are cache utilities. Cache utilities perform the required operation on the specified cache, without starting the VM. You can combine multiple suboptions, which are separated by commas, but the cache utilities are mutually exclusive. When you are running cache utilities, the message Could not create the Java virtual machine is expected. Cache utilities do not create the virtual machine. Some cache utilities can work with caches from previous Java\u2122 versions or caches that are created by virtual machines (VMs) with different bit-widths. These caches are referred to as \"incompatible\" caches. See also the Class data sharing topic, which includes some best practices for using -Xshareclasses . Syntax -Xshareclasses:<parameter> When you specify -Xshareclasses without any parameters and without specifying either the -Xscmx or -XX:SharedCacheHardLimit options, a shared classes cache is created with a default size, as follows: For 64-bit platforms, the default size is 300 MB, with a \"soft\" maximum limit for the initial size of the cache ( -Xscmx ) of 64MB, with the following exceptions: For a persistent cache, if the free disk space is less than 6 GB, the default size is set to 64 MB and an -Xscmx size is not set. For a non-persistent cache on Linux\u00ae or macOS\u00ae systems, the cache size is limited by the maximum amount of memory that can be reserved by a process ( SHMMAX ). If SHMMAX is less than 300MB, the default shared cache size is set to equal SHMMAX . If SHMMAX is greater than 80 MB, -Xscmx is set to 64 MB. If SHMMAX is less than 80MB an -Xscmx size is not set. For other platforms, the default size is 16MB. Parameters adjustmaxaot (Cache utility) -Xshareclasses:adjustmaxaot=<size> Adjusts the maximum shared classes cache space that is allowed for AOT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxaot option. adjustminaot (Cache utility) -Xshareclasses:adjustminaot=<size> Adjusts the minimum shared classes cache space that is reserved for AOT data. Use the -Xscminaot option to set the initial minimum size. adjustmaxjitdata (Cache utility) -Xshareclasses:adjustmaxjitdata=<size> Adjusts the maximum shared classes cache space that is allowed for JIT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxjitdata option. adjustminjitdata (Cache utility) -Xshareclasses:adjustminjitdata=<size> Adjusts the minimum shared classes cache space that is reserved for JIT data. Use the -Xscminjitdata option to set the initial minimum size. adjustsoftmx (Cache utility) -Xshareclasses:adjustsoftmx=<size> Adjusts the soft maximum size of the cache. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. For more information about the soft maximum size, see -Xscmx . allowClasspaths -Xshareclasses:allowClasspaths Allows a VM to store classpaths into an existing shared cache that was created by using the restrictClasspaths option. bootClassesOnly -Xshareclasses:bootClassesOnly Disables caching of classes that are loaded by class loaders other than the bootstrap class loader. If you use this suboption, the nonfatal suboption is also set, so this suboption is the equivalent of specifying -Xshareclasses:bootClassesOnly,nonfatal . cacheDir -Xshareclasses:cacheDir=<directory> Sets the directory in which cache data is read and written. The following defaults apply: On Windows\u2122 systems, <directory> is the user's C:\\Documents and Settings\\<username>\\Local Settings\\Application Data\\javasharedresources directory. On other operating systems, <directory> is the user's home directory, unless the groupAccess parameter is specified, in which case it is /tmp/javasharedresources , because some members of the group might not have access to the user's home directory. You must have sufficient permissions in <directory> . On AIX\u00ae, Linux, macOS, and Windows systems, the VM writes persistent cache files directly into the directory specified. Persistent cache files can be safely moved and deleted from the file system. For persistent caches, the directory must not be on an NFS mount. Nonpersistent caches are stored in shared memory and have control files that describe the location of the memory. Control files are stored in a javasharedresources subdirectory of the cacheDir specified. Do not move or delete control files in this directory. The listAllCaches utility, the destroyAll utility, and the expire suboption work only in the scope of a given cacheDir . On AIX, Linux, and macOS systems, if you specify the cacheDir=<directory> option, persistent caches are created with the following permissions ( -rw-r--r-- ): User: read/write Group: read (read/write if you also specify -Xshareclasses:groupAccess ) Other: read only Otherwise, persistent caches are created with the same permissions as non-persistent caches. The permissions for non-persistent caches are -rw-r----- , or -rw-rw---- if you also specify -Xshareclasses:groupAccess . Note: It is good practice to set an application-specific cache directory to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory, and means that your application is therefore unaffected by a user running java -Xshareclasses:destroyAll . See Class data sharing: Best practices for using -Xshareclasses . cacheDirPerm (Not Windows) -Xshareclasses:cacheDirPerm=<permission> Sets Unix-style permissions when you are creating a cache directory. <permission> must be an octal number in the ranges 0700 - 0777 or 1700 - 1777. If <permission> is not valid, the VM ends with an appropriate error message. The permissions that are specified by this suboption are used only when you are creating a new cache directory. If the cache directory already exists, this suboption is ignored and the cache directory permissions are not changed. If you set this suboption to 0000, the default directory permissions are used. If you set this suboption to 1000, the machine default directory permissions are used, but the sticky bit is enabled. If the cache directory is the platform default directory, /tmp/javasharedresources , this suboption is ignored and the cache directory permissions are set to 0777. If you do not set this suboption, the default permissions are used according to the following conditions: Condition Permissions The cache directory is /tmp/javasharedresources . If this directory already exists with different permissions, the permissions are changed when the cache is opened.\u2020 0777 The cache directory is a new directory and you also specify the groupAcess suboption 0770 The cache directory is a new directory and you do not specify the groupAccess suboption 0700 The cache directory already exists and is not /tmp/javasharedresources Unchanged \u2020On z/OS\u00ae systems, permissions for existing cache directories are unchanged, to avoid generating RACF\u00ae errors, which generate log messages. Note: It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. See Class data sharing: Best practices for using -Xshareclasses . cacheRetransformed -Xshareclasses:cacheRetransformed Enables caching of classes that are transformed by using the JVMTI RetransformClasses function. For more information, see JVMTI redefinition and retransformation of classes . The option enableBCI is enabled by default. However, if you use the cacheRetransformed option, this option forces cache creation into -Xshareclasses:disableBCI mode. checkURLTimestamps -Xshareclasses:checkURLTimestamps Causes timestamps of jar or zip files to be checked every time a class is loaded. If a timestamp has changed, the class is loaded from the jar or zip file and not from the shared cache. This suboption is not enabled by default and reflects the legacy behavior of the shared classes cache. Note: The timestamp of a bootstrap jar or zip file is checked once when it is used for the first time to load a class. createLayer (Experimental, 64-bit only) -Xshareclasses:createLayer Creates layered caches. This suboption is experimental; do not use it in a production environment. If there are multiple VMs in a race condition while creating a layered cache, more than one new layered cache can be created. To avoid this situation, use the -Xshareclasses:layer=<number> suboption to create a new layered cache with a specific layer number. See layer for more information about layered caches. destroy (Cache utility) -Xshareclasses:destroy Destroys a cache that is specified by the name , cacheDir , and nonpersistent suboptions. A cache can be destroyed only if all VMs that are using it have ended and the user has sufficient permissions. destroyAll (Cache utility) -Xshareclasses:destroyAll Tries to destroy all the caches that are specified by the cacheDir and nonpersistent suboptions. On Windows and z/OS systems, a cache can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Note: On z/OS, when the destroyAll option is invoked from a 31-bit VM, 64-bit caches are not destroyed. Similarly, when the destroyAll option is invoked from a 64-bit VM, 31-bit caches are not destroyed. The following message is displayed: JVMSHRC735I: Use a nn-bit VM to perform the requested operation on the nn-bit shared cache \"cachename\" as the nn-bit VM cannot verify that the shared memory was created by the VM. On AIX, Linux, and macOS systems: Non-persistent caches can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Persistent caches that are still in use continue to exist even when you use this option, but they are unlinked from the file system so they are not visible to new VM invocations. If you update the VM then restart an application for which a persistent shared cache already exists, the VM unlinks the existing cache and creates a new cache. Because the unlinked caches are not visible to new VMs, you cannot find them by using the -Xshareclasses:listAllCaches option, and you cannot use the -Xshareclasses:printStats option on them. You can therefore have multiple unlinked caches that consume file system space until they are no longer in use. destroyAllLayers (Experimental, 64-bit only) -Xshareclasses:destroyAllLayers Destroys all shared cache layers that are specified by the name suboption. For example, -Xshareclasses:name=Cache1,destroyAllLayers destroys all layers of the cache called Cache1 . If you use the destroy suboption on a layered cache, for example -Xshareclasses:name=Cache1,destroy , only the top layer of the cache is destroyed. For more information about layered caches, see the layer suboption. destroyAllSnapshots (Cache utility) (Not Windows) -Xshareclasses:destroyAllSnapshots Destroys all shared cache snapshots that are available as a result of the specified cacheDir suboption. destroySnapshot (Cache utility) (Not Windows) -Xshareclasses:destroySnapshot Destroys a snapshot that is specified by the name and cacheDir suboptions. disableBCI -Xshareclasses:disableBCI Turns off BCI support. This option can be used to override -XXShareClassesEnableBCI . enableBCI -Xshareclasses:enableBCI This option is enabled by default. Allows a JVMTI ClassFileLoadHook event to be triggered every time, for classes that are loaded from the cache. This mode also prevents caching of classes that are modified by JVMTI agents. For more information about this option, see Using the JVMTI ClassFileLoadHook with cached classes . This option is incompatible with the cacheRetransformed option. Using the two options together causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created without the enableBCI suboption cannot be reused with the enableBCI suboption. Attempting to do so causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created with the enableBCI suboption can be reused without specifying this suboption. In this case, the VM detects that the cache was created with the enableBCI suboption and uses the cache in this mode. expire (Cache utility) -Xshareclasses:expire=<time_in_minutes> Destroys all caches that are unused for the time that is specified before loading shared classes. This option is not a utility option because it does not cause the VM to exit. On Windows systems, which have NTFS file systems, the expire option is accurate to the nearest hour. fatal -Xshareclasses:fatal The VM does not start if class data sharing fails, for example because there was an error when accessing the cache directory. An error message is generated. This suboption is specified by default unless you use the bootClassesOnly suboption, which is equivalent to -Xshareclasses:bootClassesOnly,nonfatal . You can override this behavior by specifying -Xshareclasses:bootClassesOnly,fatal . See also nonfatal . findAotMethods (Cache utility) -Xshareclasses:findAotMethods=<method_specification> -Xshareclasses:findAotMethods=help Print the AOT methods in the shared cache that match the method specifications. Methods that are already invalidated are indicated in the output. Use this suboption to check which AOT methods in the shared class cache would be invalidated by using the same method specifications with the invalidateAotMethods suboption. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax . groupAccess (Not Windows) -Xshareclasses:groupAccess Sets operating system permissions on a new cache to allow group access to the cache. Group access can be set only when permitted by the operating system umask setting. The default is user access only. On AIX, Linux, and macOS systems, if a user creates a cache by specifying the groupAccess suboption, other users in the same group must also specify this suboption to be granted access to the same cache. In certain situations, warning messages might be generated when the groupAccess suboption is used. This message can occur when persistent caches are used: JVMSHRC756W Failed to set group access permission on the shared cache file as requested by the 'groupAccess' sub-option These messages can occur when non-persistent caches are used: JVMSHRC759W Failed to set group access permission as requested by the 'groupAccess' sub-option on the semaphore control file associated with shared class cache. JVMSHRC760W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared memory control file associated with shared class cache. This message can occur in combination with the snapshotCache suboption: JVMSHRC761W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared cache snapshot file. All of these warning messages mean that the user's umask setting does not allow either, or both, of the group read and write permission to be set on the file. The typical umask setting restricts only the write permission. To resolve the warning, either change the umask setting or remove the groupAccess suboption. help -Xshareclasses:help Lists all the command-line options. invalidateAotMethods (Cache utility) -Xshareclasses:invalidateAotMethods=<method_specification> -Xshareclasses:invalidateAotMethods=help Modify the existing shared cache to invalidate the AOT methods that match the method specifications. Use this suboption to invalidate AOT methods that cause a failure in the application, without having to destroy the shared cache. Invalidated AOT methods remain in the shared cache, but are then excluded from being loaded. VMs that have not processed the methods, or new VMs that use the cache are not affected by the invalidated methods. The AOT methods are invalidated for the lifetime of the cache, but do not prevent the AOT methods from being compiled again if a new shared cache is created. To prevent AOT method compilation into a new shared cache, use the -Xaot:exclude option. For more information, see -Xaot . To identify AOT problems, see Diagnosing a JIT or AOT problem . To revalidate an AOT method, see the revalidateAotMethods suboption. Use the findAotMethod suboption to determine which AOT methods match the method specifications. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax . layer (Experimental, 64-bit only) -Xshareclasses:layer=<number> Creates layered caches. This suboption is experimental; do not use it in production. This suboption has the same effect as the createLayer suboption, but with the added ability to specify the layer number. One scenario where you might want to use a layered cache is if you are building a Docker image. Normally, writing to an existing shared cache in a lower image layer results in Docker duplicating the shared cache to the top layer (following the Docker copy-on-write strategy ). With a layered cache, you can instead write into a new cache in the top layer. The new cache builds on the existing cache, so space is saved in the image. The following example shows a Docker container with four layers: The lowest layer is a Ubuntu Docker image. The next layer is an OpenJ9 Docker image that is built on the Ubuntu image. As part of this image, the -Xshareclasses:name=Cache1 suboption is used to create a cache called Cache1 . The layer number assigned to this cache is 0. The listAllCaches suboption shows the cache and the layer number: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 The next Docker layer up is an Open Liberty image that is built on the OpenJ9 image. As part of this image, the -Xshareclasses:name=Cache1,layer=1 suboption is used to create another cache called Cache1. Because the layer=1 suboption is specified, this new cache is a layered cache, which builds on Cache1 in the previous container layer. (Open Liberty starts two VMs, so if you instead use the createLayer suboption here, two layered caches are created, with layer numbers of 1 and 2.) Note that cache layers are different from, and independent of, container layers. In the same way, another Docker layer is added for an Open Liberty Java application, and another layered cache is created to add to Cache1 . The listAllCaches suboption now shows all the caches and their layers: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 Cache1 Java8 64-bit persistent cr 1 Mon Sep 23 11:46:25 2019 Cache1 Java8 64-bit persistent cr 2 In use The caches are created in the same directory. When you use the -Xshareclasses:name=Cache1 suboption in future Java commands, all the caches are started. The top-layer cache is started in read/write mode, and lower-layer caches are started in read-only mode. Modifying a lower-layer cache would invalidate all the caches in the layers above. Restriction: The jvmtiSharedCacheInfo.isCorrupt field and the SharedClassCacheInfo.isCacheCorrupt() method cannot detect a corrupted cache that has a layer number other than 0 . However, when a VM starts a layered cache directly, for example when you specify the -Xshareclasses:name=<cache_name> option on the command line, the VM detects any corruption and generates an error message as usual, regardless of the layer number of the cache. listAllCaches (Cache utility) -Xshareclasses:listAllCaches Lists all the compatible and incompatible caches, and snapshots that exist in the specified cache directory. If you do not specify cacheDir , the default directory is used. Summary information, such as Java version and current usage, is displayed for each cache. mprotect AIX, z/OS 31-bit: -Xshareclasses:mprotect=[default|all|none] Linux, Windows, macOS: -Xshareclasses:mprotect=[default|all|partialpagesonstartup|onfind|nopartialpages|none] where: default : By default, the memory pages that contain the cache are always protected, unless a specific page is being updated. This protection helps prevent accidental or deliberate corruption to the cache. The cache header is not protected by default because this protection has a performance cost. On Linux, macOS, and Windows systems, after the startup phase, the Java virtual machine (VM) protects partially filled pages whenever new data is added to the shared class cache in the following sequence: The VM changes the memory protection of any partially filled pages to read/write. The VM adds the data to the cache. The VM changes the memory protection of any partially filled pages to read only. all : This value ensures that all the cache pages are protected, including the header. See Note. partialpagesonstartup : This value causes the VM to protect partially filled pages during startup as well as after the startup phase. This value is available only on Linux, macOS, and Windows systems. onfind : When this option is specified, the VM protects partially filled pages when it reads new data in the cache that is added by another VM. This option is available only on Linux, macOS, and Windows systems. nopartialpages : Use this value to turn off the protection of partially filled pages. This value is available only on Linux, macOS, and Windows systems. none : Specifying this value disables the page protection. Note: Specifying all has a negative impact on performance. You should specify all only for problem diagnosis and not for production. Specifying values partialpagesonstartup or onfind can also have a negative impact on performance when the cache is being populated. There is no further impact when the cache is full or no longer being modified. modified -Xshareclasses:modified=<modified_context> Used when a JVMTI agent is installed that might modify bytecode at run time. If you do not specify this suboption and a bytecode modification agent is installed, classes are safely shared with an extra performance cost. The <modified context> is a descriptor that is chosen by the user; for example, myModification1 . This option partitions the cache so that only VMs that are using context myModification1 can share the same classes. So if, for example, you run an application with a modification context and then run it again with a different modification context, all classes are stored twice in the cache. For more information, see Dealing with runtime bytecode modification . If you are migrating from IBM\u00ae SDK, Java Technology Edition, Version 7, or earlier releases, you must set -Xshareclasses:disableBCI when you use this option to retain the same behavior. name -Xshareclasses:name=<name> Connects to a cache of a given name, creating the cache if it does not exist. This option is also used to indicate the cache that is to be modified by cache utilities; for example, destroy . Use the listAllCaches utility to show which named caches are currently available. If you do not specify a name, the default name \"sharedcc_%u\" is used. \"%u\" in the cache name inserts the current user name. On operating systems other than Windows, you can specify \"%g\" in the cache name to insert the current group name. Note: It is good practice to explicitly specify a cache for your application. This avoids the application sharing a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note that you cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. See Class data sharing: Best practices for using -Xshareclasses . noaot -Xshareclasses:noaot Disables caching and loading of AOT code. AOT code already in the shared data cache can be loaded. noBootclasspath -Xshareclasses:noBootclasspath Disables the storage of classes that are loaded by the bootstrap class loader in the shared classes cache. Often used with the SharedClassURLFilter API to control exactly which classes are cached. For more information about shared class filtering, see Using the SharedClassHelper API . nocheckURLTimestamps -Xshareclasses:nocheckURLTimestamps Timestamps of jar or zip files are checked only when they are added to a class loader and used for the first time to look up a class. This is the default behavior, which can improve the performance of class loading from the shared classes cache, especially on Windows systems. To revert to the behavior of the shared classes cache in earlier releases, use the CheckURLTimeStamps suboption. Restriction: When the nocheckURLTimestamps suboption is used (default), if jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. If this scenario occurs, use the checkURLTimestamps option. nojitdata -Xshareclasses:nojitdata Disables caching of JIT data. JIT data already in the shared data cache can be loaded. none -Xshareclasses:none Added to the end of a command line, disables class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption disables the shared class utility APIs. To disable class data sharing without disabling the utility APIs, use the utilities suboption. For more information about the shared class utility APIs, see Obtaining information about shared caches . nonfatal -Xshareclasses:nonfatal Allows the VM to start even if class data sharing fails. Normal behavior for the VM is to refuse to start if class data sharing fails. If you select nonfatal and the shared classes cache fails to initialize, the VM attempts to connect to the cache in read-only mode. If this attempt fails, the VM starts without class data sharing. See also fatal . Note: Unless it is important that your application runs with class data sharing, it is good practice to set this parameter. See Class data sharing: Best practices for using -Xshareclasses . nonpersistent -Xshareclasses:nonpersistent Uses a nonpersistent cache. The cache is lost when the operating system shuts down. Nonpersistent and persistent caches can have the same name. On Linux, macOS, and Windows systems, you must always use the nonpersistent suboption when you run utilities such as destroy on a nonpersistent cache. z/OS supports only nonpersistent caches. Note: On macOS systems, you must set kern.sysv.shmmax and kern.sysv.shmall when using a nonpersistent cache. noPersistentDiskSpaceCheck -Xshareclasses:noPersistentDiskSpaceCheck Instructs the VM not to check for available storage on the file system before creating a persistent shared classes cache. This option prevents an error on file systems that do not support the checking of free space, where a value of 0 is returned and a shared cache cannot be created. Regardless of whether you choose to set this option, if there isn't enough disk space available when the VM writes to the shared cache memory, a SIGBUS or SIGSEGV signal occurs and the VM ends. If you are using the readonly suboption, the VM does not check the available disk space, so you do not need to set the noPersistentDiskSpaceCheck suboption. persistent -Xshareclasses:persistent Uses a persistent cache. The cache is created on disk, which persists beyond operating system restarts. Nonpersistent and persistent caches can have the same name. On AIX, you must always use the persistent suboption when you run utilities such as destroy on a persistent cache. Note: Persisent caches are not supported on z/OS systems. z/OS supports only nonpersistent caches. printAllStats (Cache utility) -Xshareclasses:printAllStats Displays detailed information about the contents of the cache that is specified in the name suboption. If the name is not specified, statistics are displayed about the default cache. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats=all ). Every class is listed in chronological order with a reference to the location from which it was loaded. For more information, see Diagnostic cache utilities . printStats (Cache utility) -Xshareclasses:printStats=<data_type>[+<data_type>] Displays summary information for the cache that is specified by the name , cacheDir , and nonpersistent suboptions. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats ). The most useful information that is displayed is how full the cache is and how many classes it contains. Stale classes are classes that are updated on the file system and which the cache has therefore marked as \"stale\". Stale classes are not purged from the cache and can be reused. Use the printStats=stale option to list all the stale entries and stale bytes. Specify one or more data types, which are separated by a plus symbol (+), to see more detailed information about the cache content. Data types include AOT data, class paths, and ROMMethods. For more information and for a full list of data types, see Diagnostic cache utilities . printTopLayerStats (Cache utility) -Xshareclasses:printTopLayerStats=<data_type>[+<data_type>] Equivalent to printStats but for the top layer cache only. readonly -Xshareclasses:readonly Opens an existing cache with read-only permissions. The Java virtual machine does not create a new cache with this suboption. Opening a cache read-only prevents the VM from making any updates to the cache. If you specify this suboption, the VM can connect to caches that were created by other users or groups without requiring write access. On AIX, Linux, and macOS systems, this access is permitted only if the cache was created by using the -Xshareclasses:cacheDir option to specify a directory with appropriate permissions. If you do not use the -Xshareclasses:cacheDir option, the cache is created with default permissions, which do not permit access by other users or groups. By default, this suboption is not specified. reset -Xshareclasses:reset Causes a cache to be destroyed and then re-created when the VM starts up. This option can be added to the end of a command line as -Xshareclasses:reset . restoreFromSnapshot (Cache utility) (Not Windows) -Xshareclasses:restoreFromSnapshot Restores a new non-persistent shared cache from a snapshot file. The snapshot and shared cache have the same name and location, as specified by the name and cacheDir suboptions. The non-persistent cache cannot already exist when the snapshot is restored. Restoring a snapshot does not remove the snapshot file; it can be restored multiple times. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to restore a snapshot. restrictClasspaths -Xshareclasses:restrictClasspaths Allows only the first VM that is initializing a shared cache to store classpaths in the cache. Subsequent VMs are not allowed to store classpaths in the cache unless the allowClasspaths option is specified. Use the restrictClasspaths option only if the application is designed to create class loaders of type java.net.URLClassloader or its subclass, such that their classpaths are unique to the instance of the application, but the classes that are loaded from these classpaths are the same. In such cases application classpaths that are stored by one VM cannot be used by another VM. For example, consider two VMs, VM1 and VM2, that are using class paths CP1 and CP2 respectively, where: CP1: url1;url2;url3;tempurl1;url4;url5 CP2: url1;url2;url3;tempurl2;url4;url5 These class paths differ only by one entry, which is the tempurl . The url1 , url2 , url3 , url4 , and url5 entries never change from run to run, whereas the tempurl entry is always different. This difference means that a class that is loaded from url4 or url5 , and stored into the shared cache by VM1, cannot be located by VM2. Therefore, an attempt by VM2 to load a class from url4 or url5 would cause it to store its own classpath CP2 into the shared cache, and also add new metadata for classes that are loaded from url4 or url5 . Addition of such unique class paths into the shared cache is not useful. Moreover, the additional metadata might adversely affect the performance of other VMs that connect to the shared cache. Because classes loaded from url4 or url5 are not loaded from the shared cache when the tempurl differs from the original, it is good practice to put the tempurl as the last entry in the class path. In situations such as that described in the example, the restrictClasspaths option can be used to restrict the addition of classpaths by ensuring that the first VM initializes the shared cache, and then prevents the addition of unique classpaths by subsequent VMs that attach to the shared cache. Note that use of the restrictClasspaths option in any other scenario is likely to negatively impact a VM's performance when it is using an existing cache. revalidateAotMethods (Cache utility) -Xshareclasses:revalidateAotMethods=<method_specification> -Xshareclasses:revalidateAotMethods=help Modify the shared cache to revalidate the AOT methods that match the method specifications. Use this suboption to revalidate AOT methods that were invalidated by using the invalidateAotMethods suboption. Revalidated AOT methods are then eligible for loading into a VM, but do not affect VMs where the methods have already been processed. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax . silent -Xshareclasses:silent Disables all shared class messages, including error messages. Unrecoverable error messages, which prevent the VM from initializing, are displayed. snapshotCache (Cache utility) (Not Windows) -Xshareclasses:snapshotCache Creates a snapshot file of an existing non-persistent shared cache. The snapshot has the same name and location as the shared cache, as specified by the name and cacheDir suboptions. The shared cache can be in use when the snapshot is taken, but VMs are blocked when they try to write to the shared cache, while the cache data is copied to the file. Typically, after a system is reinitialized, the snapshot file is used to restore the copy of the non-persistent cache into shared memory, via the restoreFromSnapshot suboption. Since this process removes all non-persistent caches from shared memory, restoring the cache from the snapshot file can result in better VM startup performance, because the contents of the shared cache, including classes and AOT code, do not have to be re-created. A snapshot can be created only if the user has sufficient permissions to create the destination snapshot file. If a snapshot of the same name exists already, it is overwritten. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to create a snapshot. For information about removing snapshot files, see the destroySnapshot and destroyAllSnapshots suboptions. utilities -Xshareclasses:utilities Can be added to the end of a command line to disable class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption is like none , but does not disable the shared class utility APIs. For more information about the shared class utility APIs, see Obtaining information about shared caches . verbose -Xshareclasses:verbose Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders ask their parents for a class if they can't find it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy. The standard option -verbose:class also enables class sharing verbose output if class sharing is enabled. verboseAOT -Xshareclasses:verboseAOT Enables verbose output when compiled AOT code is being found or stored in the cache. AOT code is generated heuristically. You might not see any AOT code that is generated at all for a small application. You can disable AOT caching by using the noaot suboption. See the Messages Guide for a list of the messages produced. verboseHelper -Xshareclasses:verboseHelper Enables verbose output for the Java Helper API. This output shows you how the Helper API is used by your class loader. verboseIO -Xshareclasses:verboseIO Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders must ask their parents for a class before they can load it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy. Method specification syntax The following examples show how to specify more than one method specification when you are using the findAotMethods , invalidateAotMethods , or revalidateAotMethods suboptions. Each method specification is defined as follows: <packagename>/<classname>[.<methodname>[(<parameters>)]] If you want to include more than one method specification in a single option, separate the specifications with a comma and enclose all the specifications in {braces}. For example: {<packagename/classname>}[.{<methodname>}[({<parameters>})]] You can use an asterisk (*) in most places as a wildcard. You can use an exclamation point (!) before the specification to mean \"everything except this\". Parameters are optional, but if specified, should be enclosed in parentheses and the following native signature formats must be used: B for byte C for char D for double F for float I for int J for long S for short Z for Boolean L<classname>; for objects [ before the signature means array If you want to specify parameters to distinguish between methods, you can use -Xshareclasses:findAotMethods=* (with a wildcard) to list all the parameter variations. Copy the signature for the method that you want from the output. For example, the signature for the parameters (byte[] bytes, int offset, int length, Charset charset) is ([BIILjava/nio/charset/Charset;) Here are some examples: Method signature Matches... * All AOT methods. java/lang/Object All AOT methods in the java.lang.Object class java/util/* All AOT classes and methods in the java.util package java/util/HashMap.putVal All putVal methods in the java.util.HashMap class java/util/HashMap.hash(Ljava/lang/Object;) The private java.util.HashMap.hash(java.lang.Object) method *.equals All equals methods in all classes {java/lang/Object,!java/lang/Object.clone} All methods in java.lang.Object except clone {java/util/*.*(),java/lang/Object.*(*)} All classes or methods with no input parameter in the java.util package, and all methods in java.lang.Object {java/util/*.*(),!java/util/*.*()} Nothing. See also -Xscmx -XX:SharedCacheHardLimit Class data sharing","title":"-Xshareclasses"},{"location":"xshareclasses/#-xshareclasses","text":"Use the -Xshareclasses option to enable, disable, or modify class sharing behavior. Class data sharing is enabled by default for bootstrap classes only (the equivalent of specifying -Xshareclasses:bootClassesOnly,nonFatal,silent ), unless your application is running in a container. This option can take a number of parameters, some of which are cache utilities. Cache utilities perform the required operation on the specified cache, without starting the VM. You can combine multiple suboptions, which are separated by commas, but the cache utilities are mutually exclusive. When you are running cache utilities, the message Could not create the Java virtual machine is expected. Cache utilities do not create the virtual machine. Some cache utilities can work with caches from previous Java\u2122 versions or caches that are created by virtual machines (VMs) with different bit-widths. These caches are referred to as \"incompatible\" caches. See also the Class data sharing topic, which includes some best practices for using -Xshareclasses .","title":"-Xshareclasses"},{"location":"xshareclasses/#syntax","text":"-Xshareclasses:<parameter> When you specify -Xshareclasses without any parameters and without specifying either the -Xscmx or -XX:SharedCacheHardLimit options, a shared classes cache is created with a default size, as follows: For 64-bit platforms, the default size is 300 MB, with a \"soft\" maximum limit for the initial size of the cache ( -Xscmx ) of 64MB, with the following exceptions: For a persistent cache, if the free disk space is less than 6 GB, the default size is set to 64 MB and an -Xscmx size is not set. For a non-persistent cache on Linux\u00ae or macOS\u00ae systems, the cache size is limited by the maximum amount of memory that can be reserved by a process ( SHMMAX ). If SHMMAX is less than 300MB, the default shared cache size is set to equal SHMMAX . If SHMMAX is greater than 80 MB, -Xscmx is set to 64 MB. If SHMMAX is less than 80MB an -Xscmx size is not set. For other platforms, the default size is 16MB.","title":"Syntax"},{"location":"xshareclasses/#parameters","text":"","title":"Parameters"},{"location":"xshareclasses/#adjustmaxaot-cache-utility","text":"-Xshareclasses:adjustmaxaot=<size> Adjusts the maximum shared classes cache space that is allowed for AOT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxaot option.","title":"adjustmaxaot (Cache utility)"},{"location":"xshareclasses/#adjustminaot-cache-utility","text":"-Xshareclasses:adjustminaot=<size> Adjusts the minimum shared classes cache space that is reserved for AOT data. Use the -Xscminaot option to set the initial minimum size.","title":"adjustminaot (Cache utility)"},{"location":"xshareclasses/#adjustmaxjitdata-cache-utility","text":"-Xshareclasses:adjustmaxjitdata=<size> Adjusts the maximum shared classes cache space that is allowed for JIT data. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the -Xscmaxjitdata option.","title":"adjustmaxjitdata (Cache utility)"},{"location":"xshareclasses/#adjustminjitdata-cache-utility","text":"-Xshareclasses:adjustminjitdata=<size> Adjusts the minimum shared classes cache space that is reserved for JIT data. Use the -Xscminjitdata option to set the initial minimum size.","title":"adjustminjitdata (Cache utility)"},{"location":"xshareclasses/#adjustsoftmx-cache-utility","text":"-Xshareclasses:adjustsoftmx=<size> Adjusts the soft maximum size of the cache. When you use the -Xshareclasses:verbose option, the VM writes to the console the number of bytes that are not stored due to the current setting of the soft maximum size. For more information about the soft maximum size, see -Xscmx .","title":"adjustsoftmx (Cache utility)"},{"location":"xshareclasses/#allowclasspaths","text":"-Xshareclasses:allowClasspaths Allows a VM to store classpaths into an existing shared cache that was created by using the restrictClasspaths option.","title":"allowClasspaths"},{"location":"xshareclasses/#bootclassesonly","text":"-Xshareclasses:bootClassesOnly Disables caching of classes that are loaded by class loaders other than the bootstrap class loader. If you use this suboption, the nonfatal suboption is also set, so this suboption is the equivalent of specifying -Xshareclasses:bootClassesOnly,nonfatal .","title":"bootClassesOnly"},{"location":"xshareclasses/#cachedir","text":"-Xshareclasses:cacheDir=<directory> Sets the directory in which cache data is read and written. The following defaults apply: On Windows\u2122 systems, <directory> is the user's C:\\Documents and Settings\\<username>\\Local Settings\\Application Data\\javasharedresources directory. On other operating systems, <directory> is the user's home directory, unless the groupAccess parameter is specified, in which case it is /tmp/javasharedresources , because some members of the group might not have access to the user's home directory. You must have sufficient permissions in <directory> . On AIX\u00ae, Linux, macOS, and Windows systems, the VM writes persistent cache files directly into the directory specified. Persistent cache files can be safely moved and deleted from the file system. For persistent caches, the directory must not be on an NFS mount. Nonpersistent caches are stored in shared memory and have control files that describe the location of the memory. Control files are stored in a javasharedresources subdirectory of the cacheDir specified. Do not move or delete control files in this directory. The listAllCaches utility, the destroyAll utility, and the expire suboption work only in the scope of a given cacheDir . On AIX, Linux, and macOS systems, if you specify the cacheDir=<directory> option, persistent caches are created with the following permissions ( -rw-r--r-- ): User: read/write Group: read (read/write if you also specify -Xshareclasses:groupAccess ) Other: read only Otherwise, persistent caches are created with the same permissions as non-persistent caches. The permissions for non-persistent caches are -rw-r----- , or -rw-rw---- if you also specify -Xshareclasses:groupAccess . Note: It is good practice to set an application-specific cache directory to avoid sharing the default cache directory with the default cache, or other application caches that don't set a cache directory, and means that your application is therefore unaffected by a user running java -Xshareclasses:destroyAll . See Class data sharing: Best practices for using -Xshareclasses .","title":"cacheDir"},{"location":"xshareclasses/#cachedirperm","text":"(Not Windows) -Xshareclasses:cacheDirPerm=<permission> Sets Unix-style permissions when you are creating a cache directory. <permission> must be an octal number in the ranges 0700 - 0777 or 1700 - 1777. If <permission> is not valid, the VM ends with an appropriate error message. The permissions that are specified by this suboption are used only when you are creating a new cache directory. If the cache directory already exists, this suboption is ignored and the cache directory permissions are not changed. If you set this suboption to 0000, the default directory permissions are used. If you set this suboption to 1000, the machine default directory permissions are used, but the sticky bit is enabled. If the cache directory is the platform default directory, /tmp/javasharedresources , this suboption is ignored and the cache directory permissions are set to 0777. If you do not set this suboption, the default permissions are used according to the following conditions: Condition Permissions The cache directory is /tmp/javasharedresources . If this directory already exists with different permissions, the permissions are changed when the cache is opened.\u2020 0777 The cache directory is a new directory and you also specify the groupAcess suboption 0770 The cache directory is a new directory and you do not specify the groupAccess suboption 0700 The cache directory already exists and is not /tmp/javasharedresources Unchanged \u2020On z/OS\u00ae systems, permissions for existing cache directories are unchanged, to avoid generating RACF\u00ae errors, which generate log messages. Note: It is good practice to explicitly set permissions for the cache directory when the defaults are not appropriate. See Class data sharing: Best practices for using -Xshareclasses .","title":"cacheDirPerm"},{"location":"xshareclasses/#cacheretransformed","text":"-Xshareclasses:cacheRetransformed Enables caching of classes that are transformed by using the JVMTI RetransformClasses function. For more information, see JVMTI redefinition and retransformation of classes . The option enableBCI is enabled by default. However, if you use the cacheRetransformed option, this option forces cache creation into -Xshareclasses:disableBCI mode.","title":"cacheRetransformed"},{"location":"xshareclasses/#checkurltimestamps","text":"-Xshareclasses:checkURLTimestamps Causes timestamps of jar or zip files to be checked every time a class is loaded. If a timestamp has changed, the class is loaded from the jar or zip file and not from the shared cache. This suboption is not enabled by default and reflects the legacy behavior of the shared classes cache. Note: The timestamp of a bootstrap jar or zip file is checked once when it is used for the first time to load a class.","title":"checkURLTimestamps"},{"location":"xshareclasses/#createlayer","text":"(Experimental, 64-bit only) -Xshareclasses:createLayer Creates layered caches. This suboption is experimental; do not use it in a production environment. If there are multiple VMs in a race condition while creating a layered cache, more than one new layered cache can be created. To avoid this situation, use the -Xshareclasses:layer=<number> suboption to create a new layered cache with a specific layer number. See layer for more information about layered caches.","title":"createLayer"},{"location":"xshareclasses/#destroy-cache-utility","text":"-Xshareclasses:destroy Destroys a cache that is specified by the name , cacheDir , and nonpersistent suboptions. A cache can be destroyed only if all VMs that are using it have ended and the user has sufficient permissions.","title":"destroy (Cache utility)"},{"location":"xshareclasses/#destroyall-cache-utility","text":"-Xshareclasses:destroyAll Tries to destroy all the caches that are specified by the cacheDir and nonpersistent suboptions. On Windows and z/OS systems, a cache can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Note: On z/OS, when the destroyAll option is invoked from a 31-bit VM, 64-bit caches are not destroyed. Similarly, when the destroyAll option is invoked from a 64-bit VM, 31-bit caches are not destroyed. The following message is displayed: JVMSHRC735I: Use a nn-bit VM to perform the requested operation on the nn-bit shared cache \"cachename\" as the nn-bit VM cannot verify that the shared memory was created by the VM. On AIX, Linux, and macOS systems: Non-persistent caches can be destroyed only if all VMs that are using it have shut down and the user has sufficient permissions. Persistent caches that are still in use continue to exist even when you use this option, but they are unlinked from the file system so they are not visible to new VM invocations. If you update the VM then restart an application for which a persistent shared cache already exists, the VM unlinks the existing cache and creates a new cache. Because the unlinked caches are not visible to new VMs, you cannot find them by using the -Xshareclasses:listAllCaches option, and you cannot use the -Xshareclasses:printStats option on them. You can therefore have multiple unlinked caches that consume file system space until they are no longer in use.","title":"destroyAll (Cache utility)"},{"location":"xshareclasses/#destroyalllayers","text":"(Experimental, 64-bit only) -Xshareclasses:destroyAllLayers Destroys all shared cache layers that are specified by the name suboption. For example, -Xshareclasses:name=Cache1,destroyAllLayers destroys all layers of the cache called Cache1 . If you use the destroy suboption on a layered cache, for example -Xshareclasses:name=Cache1,destroy , only the top layer of the cache is destroyed. For more information about layered caches, see the layer suboption.","title":"destroyAllLayers"},{"location":"xshareclasses/#destroyallsnapshots-cache-utility","text":"(Not Windows) -Xshareclasses:destroyAllSnapshots Destroys all shared cache snapshots that are available as a result of the specified cacheDir suboption.","title":"destroyAllSnapshots (Cache utility)"},{"location":"xshareclasses/#destroysnapshot-cache-utility","text":"(Not Windows) -Xshareclasses:destroySnapshot Destroys a snapshot that is specified by the name and cacheDir suboptions.","title":"destroySnapshot (Cache utility)"},{"location":"xshareclasses/#disablebci","text":"-Xshareclasses:disableBCI Turns off BCI support. This option can be used to override -XXShareClassesEnableBCI .","title":"disableBCI"},{"location":"xshareclasses/#enablebci","text":"-Xshareclasses:enableBCI This option is enabled by default. Allows a JVMTI ClassFileLoadHook event to be triggered every time, for classes that are loaded from the cache. This mode also prevents caching of classes that are modified by JVMTI agents. For more information about this option, see Using the JVMTI ClassFileLoadHook with cached classes . This option is incompatible with the cacheRetransformed option. Using the two options together causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created without the enableBCI suboption cannot be reused with the enableBCI suboption. Attempting to do so causes the VM to end with an error message, unless -Xshareclasses:nonfatal is specified. In this case, the VM continues without using shared classes. A cache that is created with the enableBCI suboption can be reused without specifying this suboption. In this case, the VM detects that the cache was created with the enableBCI suboption and uses the cache in this mode.","title":"enableBCI"},{"location":"xshareclasses/#expire-cache-utility","text":"-Xshareclasses:expire=<time_in_minutes> Destroys all caches that are unused for the time that is specified before loading shared classes. This option is not a utility option because it does not cause the VM to exit. On Windows systems, which have NTFS file systems, the expire option is accurate to the nearest hour.","title":"expire (Cache utility)"},{"location":"xshareclasses/#fatal","text":"-Xshareclasses:fatal The VM does not start if class data sharing fails, for example because there was an error when accessing the cache directory. An error message is generated. This suboption is specified by default unless you use the bootClassesOnly suboption, which is equivalent to -Xshareclasses:bootClassesOnly,nonfatal . You can override this behavior by specifying -Xshareclasses:bootClassesOnly,fatal . See also nonfatal .","title":"fatal"},{"location":"xshareclasses/#findaotmethods-cache-utility","text":"-Xshareclasses:findAotMethods=<method_specification> -Xshareclasses:findAotMethods=help Print the AOT methods in the shared cache that match the method specifications. Methods that are already invalidated are indicated in the output. Use this suboption to check which AOT methods in the shared class cache would be invalidated by using the same method specifications with the invalidateAotMethods suboption. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax .","title":"findAotMethods (Cache utility)"},{"location":"xshareclasses/#groupaccess","text":"(Not Windows) -Xshareclasses:groupAccess Sets operating system permissions on a new cache to allow group access to the cache. Group access can be set only when permitted by the operating system umask setting. The default is user access only. On AIX, Linux, and macOS systems, if a user creates a cache by specifying the groupAccess suboption, other users in the same group must also specify this suboption to be granted access to the same cache. In certain situations, warning messages might be generated when the groupAccess suboption is used. This message can occur when persistent caches are used: JVMSHRC756W Failed to set group access permission on the shared cache file as requested by the 'groupAccess' sub-option These messages can occur when non-persistent caches are used: JVMSHRC759W Failed to set group access permission as requested by the 'groupAccess' sub-option on the semaphore control file associated with shared class cache. JVMSHRC760W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared memory control file associated with shared class cache. This message can occur in combination with the snapshotCache suboption: JVMSHRC761W Failed to set group access permission as requested by the 'groupAccess' sub-option on the shared cache snapshot file. All of these warning messages mean that the user's umask setting does not allow either, or both, of the group read and write permission to be set on the file. The typical umask setting restricts only the write permission. To resolve the warning, either change the umask setting or remove the groupAccess suboption.","title":"groupAccess"},{"location":"xshareclasses/#help","text":"-Xshareclasses:help Lists all the command-line options.","title":"help"},{"location":"xshareclasses/#invalidateaotmethods-cache-utility","text":"-Xshareclasses:invalidateAotMethods=<method_specification> -Xshareclasses:invalidateAotMethods=help Modify the existing shared cache to invalidate the AOT methods that match the method specifications. Use this suboption to invalidate AOT methods that cause a failure in the application, without having to destroy the shared cache. Invalidated AOT methods remain in the shared cache, but are then excluded from being loaded. VMs that have not processed the methods, or new VMs that use the cache are not affected by the invalidated methods. The AOT methods are invalidated for the lifetime of the cache, but do not prevent the AOT methods from being compiled again if a new shared cache is created. To prevent AOT method compilation into a new shared cache, use the -Xaot:exclude option. For more information, see -Xaot . To identify AOT problems, see Diagnosing a JIT or AOT problem . To revalidate an AOT method, see the revalidateAotMethods suboption. Use the findAotMethod suboption to determine which AOT methods match the method specifications. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax .","title":"invalidateAotMethods (Cache utility)"},{"location":"xshareclasses/#layer","text":"(Experimental, 64-bit only) -Xshareclasses:layer=<number> Creates layered caches. This suboption is experimental; do not use it in production. This suboption has the same effect as the createLayer suboption, but with the added ability to specify the layer number. One scenario where you might want to use a layered cache is if you are building a Docker image. Normally, writing to an existing shared cache in a lower image layer results in Docker duplicating the shared cache to the top layer (following the Docker copy-on-write strategy ). With a layered cache, you can instead write into a new cache in the top layer. The new cache builds on the existing cache, so space is saved in the image. The following example shows a Docker container with four layers: The lowest layer is a Ubuntu Docker image. The next layer is an OpenJ9 Docker image that is built on the Ubuntu image. As part of this image, the -Xshareclasses:name=Cache1 suboption is used to create a cache called Cache1 . The layer number assigned to this cache is 0. The listAllCaches suboption shows the cache and the layer number: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 The next Docker layer up is an Open Liberty image that is built on the OpenJ9 image. As part of this image, the -Xshareclasses:name=Cache1,layer=1 suboption is used to create another cache called Cache1. Because the layer=1 suboption is specified, this new cache is a layered cache, which builds on Cache1 in the previous container layer. (Open Liberty starts two VMs, so if you instead use the createLayer suboption here, two layered caches are created, with layer numbers of 1 and 2.) Note that cache layers are different from, and independent of, container layers. In the same way, another Docker layer is added for an Open Liberty Java application, and another layered cache is created to add to Cache1 . The listAllCaches suboption now shows all the caches and their layers: java -Xshareclasses:listAllCaches ... Cache name level cache-type feature layer OS shmid OS semid last detach time Compatible shared caches Cache1 Java8 64-bit persistent cr 0 Mon Sep 23 11:41:04 2019 Cache1 Java8 64-bit persistent cr 1 Mon Sep 23 11:46:25 2019 Cache1 Java8 64-bit persistent cr 2 In use The caches are created in the same directory. When you use the -Xshareclasses:name=Cache1 suboption in future Java commands, all the caches are started. The top-layer cache is started in read/write mode, and lower-layer caches are started in read-only mode. Modifying a lower-layer cache would invalidate all the caches in the layers above. Restriction: The jvmtiSharedCacheInfo.isCorrupt field and the SharedClassCacheInfo.isCacheCorrupt() method cannot detect a corrupted cache that has a layer number other than 0 . However, when a VM starts a layered cache directly, for example when you specify the -Xshareclasses:name=<cache_name> option on the command line, the VM detects any corruption and generates an error message as usual, regardless of the layer number of the cache.","title":"layer"},{"location":"xshareclasses/#listallcaches-cache-utility","text":"-Xshareclasses:listAllCaches Lists all the compatible and incompatible caches, and snapshots that exist in the specified cache directory. If you do not specify cacheDir , the default directory is used. Summary information, such as Java version and current usage, is displayed for each cache.","title":"listAllCaches (Cache utility)"},{"location":"xshareclasses/#mprotect","text":"AIX, z/OS 31-bit: -Xshareclasses:mprotect=[default|all|none] Linux, Windows, macOS: -Xshareclasses:mprotect=[default|all|partialpagesonstartup|onfind|nopartialpages|none] where: default : By default, the memory pages that contain the cache are always protected, unless a specific page is being updated. This protection helps prevent accidental or deliberate corruption to the cache. The cache header is not protected by default because this protection has a performance cost. On Linux, macOS, and Windows systems, after the startup phase, the Java virtual machine (VM) protects partially filled pages whenever new data is added to the shared class cache in the following sequence: The VM changes the memory protection of any partially filled pages to read/write. The VM adds the data to the cache. The VM changes the memory protection of any partially filled pages to read only. all : This value ensures that all the cache pages are protected, including the header. See Note. partialpagesonstartup : This value causes the VM to protect partially filled pages during startup as well as after the startup phase. This value is available only on Linux, macOS, and Windows systems. onfind : When this option is specified, the VM protects partially filled pages when it reads new data in the cache that is added by another VM. This option is available only on Linux, macOS, and Windows systems. nopartialpages : Use this value to turn off the protection of partially filled pages. This value is available only on Linux, macOS, and Windows systems. none : Specifying this value disables the page protection. Note: Specifying all has a negative impact on performance. You should specify all only for problem diagnosis and not for production. Specifying values partialpagesonstartup or onfind can also have a negative impact on performance when the cache is being populated. There is no further impact when the cache is full or no longer being modified.","title":"mprotect"},{"location":"xshareclasses/#modified","text":"-Xshareclasses:modified=<modified_context> Used when a JVMTI agent is installed that might modify bytecode at run time. If you do not specify this suboption and a bytecode modification agent is installed, classes are safely shared with an extra performance cost. The <modified context> is a descriptor that is chosen by the user; for example, myModification1 . This option partitions the cache so that only VMs that are using context myModification1 can share the same classes. So if, for example, you run an application with a modification context and then run it again with a different modification context, all classes are stored twice in the cache. For more information, see Dealing with runtime bytecode modification . If you are migrating from IBM\u00ae SDK, Java Technology Edition, Version 7, or earlier releases, you must set -Xshareclasses:disableBCI when you use this option to retain the same behavior.","title":"modified"},{"location":"xshareclasses/#name","text":"-Xshareclasses:name=<name> Connects to a cache of a given name, creating the cache if it does not exist. This option is also used to indicate the cache that is to be modified by cache utilities; for example, destroy . Use the listAllCaches utility to show which named caches are currently available. If you do not specify a name, the default name \"sharedcc_%u\" is used. \"%u\" in the cache name inserts the current user name. On operating systems other than Windows, you can specify \"%g\" in the cache name to insert the current group name. Note: It is good practice to explicitly specify a cache for your application. This avoids the application sharing a cache that is enabled by default or with another application that doesn't set a name, and ensures that the size of your application cache can be set appropriately and that cache space is used exclusively for your application. Note that you cannot change the size of a default cache that already exists by using the -Xscmx option, as that option has no effect on a pre-existing cache. See Class data sharing: Best practices for using -Xshareclasses .","title":"name"},{"location":"xshareclasses/#noaot","text":"-Xshareclasses:noaot Disables caching and loading of AOT code. AOT code already in the shared data cache can be loaded.","title":"noaot"},{"location":"xshareclasses/#nobootclasspath","text":"-Xshareclasses:noBootclasspath Disables the storage of classes that are loaded by the bootstrap class loader in the shared classes cache. Often used with the SharedClassURLFilter API to control exactly which classes are cached. For more information about shared class filtering, see Using the SharedClassHelper API .","title":"noBootclasspath"},{"location":"xshareclasses/#nocheckurltimestamps","text":"-Xshareclasses:nocheckURLTimestamps Timestamps of jar or zip files are checked only when they are added to a class loader and used for the first time to look up a class. This is the default behavior, which can improve the performance of class loading from the shared classes cache, especially on Windows systems. To revert to the behavior of the shared classes cache in earlier releases, use the CheckURLTimeStamps suboption. Restriction: When the nocheckURLTimestamps suboption is used (default), if jar or zip files are updated after a class loader starts loading classes from them, an older version of the class might be loaded from the shared classes cache. If this scenario occurs, use the checkURLTimestamps option.","title":"nocheckURLTimestamps"},{"location":"xshareclasses/#nojitdata","text":"-Xshareclasses:nojitdata Disables caching of JIT data. JIT data already in the shared data cache can be loaded.","title":"nojitdata"},{"location":"xshareclasses/#none","text":"-Xshareclasses:none Added to the end of a command line, disables class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption disables the shared class utility APIs. To disable class data sharing without disabling the utility APIs, use the utilities suboption. For more information about the shared class utility APIs, see Obtaining information about shared caches .","title":"none"},{"location":"xshareclasses/#nonfatal","text":"-Xshareclasses:nonfatal Allows the VM to start even if class data sharing fails. Normal behavior for the VM is to refuse to start if class data sharing fails. If you select nonfatal and the shared classes cache fails to initialize, the VM attempts to connect to the cache in read-only mode. If this attempt fails, the VM starts without class data sharing. See also fatal . Note: Unless it is important that your application runs with class data sharing, it is good practice to set this parameter. See Class data sharing: Best practices for using -Xshareclasses .","title":"nonfatal"},{"location":"xshareclasses/#nonpersistent","text":"-Xshareclasses:nonpersistent Uses a nonpersistent cache. The cache is lost when the operating system shuts down. Nonpersistent and persistent caches can have the same name. On Linux, macOS, and Windows systems, you must always use the nonpersistent suboption when you run utilities such as destroy on a nonpersistent cache. z/OS supports only nonpersistent caches. Note: On macOS systems, you must set kern.sysv.shmmax and kern.sysv.shmall when using a nonpersistent cache.","title":"nonpersistent"},{"location":"xshareclasses/#nopersistentdiskspacecheck","text":"-Xshareclasses:noPersistentDiskSpaceCheck Instructs the VM not to check for available storage on the file system before creating a persistent shared classes cache. This option prevents an error on file systems that do not support the checking of free space, where a value of 0 is returned and a shared cache cannot be created. Regardless of whether you choose to set this option, if there isn't enough disk space available when the VM writes to the shared cache memory, a SIGBUS or SIGSEGV signal occurs and the VM ends. If you are using the readonly suboption, the VM does not check the available disk space, so you do not need to set the noPersistentDiskSpaceCheck suboption.","title":"noPersistentDiskSpaceCheck"},{"location":"xshareclasses/#persistent","text":"-Xshareclasses:persistent Uses a persistent cache. The cache is created on disk, which persists beyond operating system restarts. Nonpersistent and persistent caches can have the same name. On AIX, you must always use the persistent suboption when you run utilities such as destroy on a persistent cache. Note: Persisent caches are not supported on z/OS systems. z/OS supports only nonpersistent caches.","title":"persistent"},{"location":"xshareclasses/#printallstats-cache-utility","text":"-Xshareclasses:printAllStats Displays detailed information about the contents of the cache that is specified in the name suboption. If the name is not specified, statistics are displayed about the default cache. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats=all ). Every class is listed in chronological order with a reference to the location from which it was loaded. For more information, see Diagnostic cache utilities .","title":"printAllStats (Cache utility)"},{"location":"xshareclasses/#printstats-cache-utility","text":"-Xshareclasses:printStats=<data_type>[+<data_type>] Displays summary information for the cache that is specified by the name , cacheDir , and nonpersistent suboptions. For layered caches, information is shown for all layers (to see information for the top layer cache only, use printTopLayerStats ). The most useful information that is displayed is how full the cache is and how many classes it contains. Stale classes are classes that are updated on the file system and which the cache has therefore marked as \"stale\". Stale classes are not purged from the cache and can be reused. Use the printStats=stale option to list all the stale entries and stale bytes. Specify one or more data types, which are separated by a plus symbol (+), to see more detailed information about the cache content. Data types include AOT data, class paths, and ROMMethods. For more information and for a full list of data types, see Diagnostic cache utilities .","title":"printStats (Cache utility)"},{"location":"xshareclasses/#printtoplayerstats-cache-utility","text":"-Xshareclasses:printTopLayerStats=<data_type>[+<data_type>] Equivalent to printStats but for the top layer cache only.","title":"printTopLayerStats (Cache utility)"},{"location":"xshareclasses/#readonly","text":"-Xshareclasses:readonly Opens an existing cache with read-only permissions. The Java virtual machine does not create a new cache with this suboption. Opening a cache read-only prevents the VM from making any updates to the cache. If you specify this suboption, the VM can connect to caches that were created by other users or groups without requiring write access. On AIX, Linux, and macOS systems, this access is permitted only if the cache was created by using the -Xshareclasses:cacheDir option to specify a directory with appropriate permissions. If you do not use the -Xshareclasses:cacheDir option, the cache is created with default permissions, which do not permit access by other users or groups. By default, this suboption is not specified.","title":"readonly"},{"location":"xshareclasses/#reset","text":"-Xshareclasses:reset Causes a cache to be destroyed and then re-created when the VM starts up. This option can be added to the end of a command line as -Xshareclasses:reset .","title":"reset"},{"location":"xshareclasses/#restorefromsnapshot-cache-utility","text":"(Not Windows) -Xshareclasses:restoreFromSnapshot Restores a new non-persistent shared cache from a snapshot file. The snapshot and shared cache have the same name and location, as specified by the name and cacheDir suboptions. The non-persistent cache cannot already exist when the snapshot is restored. Restoring a snapshot does not remove the snapshot file; it can be restored multiple times. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to restore a snapshot.","title":"restoreFromSnapshot (Cache utility)"},{"location":"xshareclasses/#restrictclasspaths","text":"-Xshareclasses:restrictClasspaths Allows only the first VM that is initializing a shared cache to store classpaths in the cache. Subsequent VMs are not allowed to store classpaths in the cache unless the allowClasspaths option is specified. Use the restrictClasspaths option only if the application is designed to create class loaders of type java.net.URLClassloader or its subclass, such that their classpaths are unique to the instance of the application, but the classes that are loaded from these classpaths are the same. In such cases application classpaths that are stored by one VM cannot be used by another VM. For example, consider two VMs, VM1 and VM2, that are using class paths CP1 and CP2 respectively, where: CP1: url1;url2;url3;tempurl1;url4;url5 CP2: url1;url2;url3;tempurl2;url4;url5 These class paths differ only by one entry, which is the tempurl . The url1 , url2 , url3 , url4 , and url5 entries never change from run to run, whereas the tempurl entry is always different. This difference means that a class that is loaded from url4 or url5 , and stored into the shared cache by VM1, cannot be located by VM2. Therefore, an attempt by VM2 to load a class from url4 or url5 would cause it to store its own classpath CP2 into the shared cache, and also add new metadata for classes that are loaded from url4 or url5 . Addition of such unique class paths into the shared cache is not useful. Moreover, the additional metadata might adversely affect the performance of other VMs that connect to the shared cache. Because classes loaded from url4 or url5 are not loaded from the shared cache when the tempurl differs from the original, it is good practice to put the tempurl as the last entry in the class path. In situations such as that described in the example, the restrictClasspaths option can be used to restrict the addition of classpaths by ensuring that the first VM initializes the shared cache, and then prevents the addition of unique classpaths by subsequent VMs that attach to the shared cache. Note that use of the restrictClasspaths option in any other scenario is likely to negatively impact a VM's performance when it is using an existing cache.","title":"restrictClasspaths"},{"location":"xshareclasses/#revalidateaotmethods-cache-utility","text":"-Xshareclasses:revalidateAotMethods=<method_specification> -Xshareclasses:revalidateAotMethods=help Modify the shared cache to revalidate the AOT methods that match the method specifications. Use this suboption to revalidate AOT methods that were invalidated by using the invalidateAotMethods suboption. Revalidated AOT methods are then eligible for loading into a VM, but do not affect VMs where the methods have already been processed. To learn more about the syntax to use for <method_specification> , including how to specify more than one method, see Method specification syntax .","title":"revalidateAotMethods (Cache utility)"},{"location":"xshareclasses/#silent","text":"-Xshareclasses:silent Disables all shared class messages, including error messages. Unrecoverable error messages, which prevent the VM from initializing, are displayed.","title":"silent"},{"location":"xshareclasses/#snapshotcache-cache-utility","text":"(Not Windows) -Xshareclasses:snapshotCache Creates a snapshot file of an existing non-persistent shared cache. The snapshot has the same name and location as the shared cache, as specified by the name and cacheDir suboptions. The shared cache can be in use when the snapshot is taken, but VMs are blocked when they try to write to the shared cache, while the cache data is copied to the file. Typically, after a system is reinitialized, the snapshot file is used to restore the copy of the non-persistent cache into shared memory, via the restoreFromSnapshot suboption. Since this process removes all non-persistent caches from shared memory, restoring the cache from the snapshot file can result in better VM startup performance, because the contents of the shared cache, including classes and AOT code, do not have to be re-created. A snapshot can be created only if the user has sufficient permissions to create the destination snapshot file. If a snapshot of the same name exists already, it is overwritten. On platforms that support persistent caches, the nonpersistent suboption must be specified in order to create a snapshot. For information about removing snapshot files, see the destroySnapshot and destroyAllSnapshots suboptions.","title":"snapshotCache (Cache utility)"},{"location":"xshareclasses/#utilities","text":"-Xshareclasses:utilities Can be added to the end of a command line to disable class data sharing. This suboption overrides class sharing arguments found earlier on the command line. This suboption is like none , but does not disable the shared class utility APIs. For more information about the shared class utility APIs, see Obtaining information about shared caches .","title":"utilities"},{"location":"xshareclasses/#verbose","text":"-Xshareclasses:verbose Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders ask their parents for a class if they can't find it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy. The standard option -verbose:class also enables class sharing verbose output if class sharing is enabled.","title":"verbose"},{"location":"xshareclasses/#verboseaot","text":"-Xshareclasses:verboseAOT Enables verbose output when compiled AOT code is being found or stored in the cache. AOT code is generated heuristically. You might not see any AOT code that is generated at all for a small application. You can disable AOT caching by using the noaot suboption. See the Messages Guide for a list of the messages produced.","title":"verboseAOT"},{"location":"xshareclasses/#verbosehelper","text":"-Xshareclasses:verboseHelper Enables verbose output for the Java Helper API. This output shows you how the Helper API is used by your class loader.","title":"verboseHelper"},{"location":"xshareclasses/#verboseio","text":"-Xshareclasses:verboseIO Gives detailed output on the cache I/O activity, listing information about classes that are stored and found. Each class loader is given a unique ID (the bootstrap loader is always 0) and the output shows the class loader hierarchy at work, where class loaders must ask their parents for a class before they can load it themselves. It is typical to see many failed requests; this behavior is expected for the class loader hierarchy.","title":"verboseIO"},{"location":"xshareclasses/#method-specification-syntax","text":"The following examples show how to specify more than one method specification when you are using the findAotMethods , invalidateAotMethods , or revalidateAotMethods suboptions. Each method specification is defined as follows: <packagename>/<classname>[.<methodname>[(<parameters>)]] If you want to include more than one method specification in a single option, separate the specifications with a comma and enclose all the specifications in {braces}. For example: {<packagename/classname>}[.{<methodname>}[({<parameters>})]] You can use an asterisk (*) in most places as a wildcard. You can use an exclamation point (!) before the specification to mean \"everything except this\". Parameters are optional, but if specified, should be enclosed in parentheses and the following native signature formats must be used: B for byte C for char D for double F for float I for int J for long S for short Z for Boolean L<classname>; for objects [ before the signature means array If you want to specify parameters to distinguish between methods, you can use -Xshareclasses:findAotMethods=* (with a wildcard) to list all the parameter variations. Copy the signature for the method that you want from the output. For example, the signature for the parameters (byte[] bytes, int offset, int length, Charset charset) is ([BIILjava/nio/charset/Charset;) Here are some examples: Method signature Matches... * All AOT methods. java/lang/Object All AOT methods in the java.lang.Object class java/util/* All AOT classes and methods in the java.util package java/util/HashMap.putVal All putVal methods in the java.util.HashMap class java/util/HashMap.hash(Ljava/lang/Object;) The private java.util.HashMap.hash(java.lang.Object) method *.equals All equals methods in all classes {java/lang/Object,!java/lang/Object.clone} All methods in java.lang.Object except clone {java/util/*.*(),java/lang/Object.*(*)} All classes or methods with no input parameter in the java.util package, and all methods in java.lang.Object {java/util/*.*(),!java/util/*.*()} Nothing.","title":"Method specification syntax"},{"location":"xshareclasses/#see-also","text":"-Xscmx -XX:SharedCacheHardLimit Class data sharing","title":"See also"},{"location":"xsigcatch/","text":"-Xsigcatch / -Xnosigcatch Enables and disables VM signal handling code. Syntax Setting Effect Default -Xsigcatch Enable yes -Xnosigcatch Disable","title":"-Xsigcatch"},{"location":"xsigcatch/#-xsigcatch-xnosigcatch","text":"Enables and disables VM signal handling code.","title":"-Xsigcatch / -Xnosigcatch"},{"location":"xsigcatch/#syntax","text":"Setting Effect Default -Xsigcatch Enable yes -Xnosigcatch Disable","title":"Syntax"},{"location":"xsigchain/","text":"-Xsigchain / -Xnosigchain Enables and disables signal handler chaining. Syntax Setting Effect Default -Xsigchain Enable yes (except on z/OS\u00ae) -Xnosigchain Disable","title":"-Xsigchain"},{"location":"xsigchain/#-xsigchain-xnosigchain","text":"Enables and disables signal handler chaining.","title":"-Xsigchain / -Xnosigchain"},{"location":"xsigchain/#syntax","text":"Setting Effect Default -Xsigchain Enable yes (except on z/OS\u00ae) -Xnosigchain Disable","title":"Syntax"},{"location":"xsignal/","text":"-Xsignal (z/OS\u00ae only) This option controls the behavior of OpenJ9 VM signal handlers. Syntax -Xsignal:<parameter>=<value> Parameters Restriction: You cannot use these parameters together. posixSignalHandler -Xsignal:posixSignalHandler=cooperativeShutdown When the VM signal handlers for SIGSEGV, SIGILL, SIGBUS, SIGFPE, SIGTRAP, and SIGABRT end a process, they call exit() , by default. In this case, the z/OS\u2122 Language Environment\u00ae is not aware that the VM ended abnormally. With -Xsignal:posixSignalHandler=cooperativeShutdown , the VM no longer uses exit() to end the process from the signal handlers. Instead, the VM behaves in one of the following ways: In response to a z/OS hardware exception, the VM uses return() . In response to signals raised or injected by software, the VM ends the enclave with abend 3565 . Language Environment detects that the VM is ending abnormally and initiates Resource Recovery Services. userConditionHandler (31-bit z/OS only) -Xsignal:userConditionHandler=percolate This option results in similar behavior to the -XCEEHDLR option: the VM registers user condition handlers to handle the z/OS exceptions that would otherwise be handled by the VM POSIX signal handlers for the SIGBUS, SIGFPE, SIGILL, SIGSEGV, and SIGTRAP signals. As with the -XCEEHDLR option, the VM does not install POSIX signal handlers for these signals. This option differs from the -XCEEHDLR option in that the VM percolates all Language Environment\u00ae conditions that were not triggered and expected by the VM during normal running, including conditions that are severity 2 or greater. The VM generates its own diagnostic information before percolating severity 2 or greater conditions. The VM is in an undefined state after percolating a severity 2 or greater condition. Applications cannot resume running then call back into, or return to, the VM. See also -XCEEHDLR Signals used by the VM .","title":"-Xsignal"},{"location":"xsignal/#-xsignal","text":"(z/OS\u00ae only) This option controls the behavior of OpenJ9 VM signal handlers.","title":"-Xsignal"},{"location":"xsignal/#syntax","text":"-Xsignal:<parameter>=<value>","title":"Syntax"},{"location":"xsignal/#parameters","text":"Restriction: You cannot use these parameters together.","title":"Parameters"},{"location":"xsignal/#posixsignalhandler","text":"-Xsignal:posixSignalHandler=cooperativeShutdown When the VM signal handlers for SIGSEGV, SIGILL, SIGBUS, SIGFPE, SIGTRAP, and SIGABRT end a process, they call exit() , by default. In this case, the z/OS\u2122 Language Environment\u00ae is not aware that the VM ended abnormally. With -Xsignal:posixSignalHandler=cooperativeShutdown , the VM no longer uses exit() to end the process from the signal handlers. Instead, the VM behaves in one of the following ways: In response to a z/OS hardware exception, the VM uses return() . In response to signals raised or injected by software, the VM ends the enclave with abend 3565 . Language Environment detects that the VM is ending abnormally and initiates Resource Recovery Services.","title":"posixSignalHandler"},{"location":"xsignal/#userconditionhandler","text":"(31-bit z/OS only) -Xsignal:userConditionHandler=percolate This option results in similar behavior to the -XCEEHDLR option: the VM registers user condition handlers to handle the z/OS exceptions that would otherwise be handled by the VM POSIX signal handlers for the SIGBUS, SIGFPE, SIGILL, SIGSEGV, and SIGTRAP signals. As with the -XCEEHDLR option, the VM does not install POSIX signal handlers for these signals. This option differs from the -XCEEHDLR option in that the VM percolates all Language Environment\u00ae conditions that were not triggered and expected by the VM during normal running, including conditions that are severity 2 or greater. The VM generates its own diagnostic information before percolating severity 2 or greater conditions. The VM is in an undefined state after percolating a severity 2 or greater condition. Applications cannot resume running then call back into, or return to, the VM.","title":"userConditionHandler"},{"location":"xsignal/#see-also","text":"-XCEEHDLR Signals used by the VM .","title":"See also"},{"location":"xsoftmx/","text":"-Xsoftmx This option sets a \"soft\" maximum limit for the initial size of the Java\u2122 heap. Syntax -Xsoftmx<size> Explanation Use the -Xmx option to set a \"hard\" limit for the maximum size of the heap. By default, -Xsoftmx is set to the same value as -Xmx . The value of -Xms must be less than, or equal to, the value of -Xsoftmx . See the introduction to this topic for more information about specifying <size> parameters. You can set this option on the command line, then modify it at run time by using the MemoryMXBean.setMaxHeapSize() method in the com.ibm.lang.management API. By using this API, Java applications can dynamically monitor and adjust the heap size as required. This function can be useful in virtualized or cloud environments, for example, where the available memory might change dynamically to meet business needs. When you use the API, you must specify the value in bytes, such as 2147483648 instead of 2g . For example, you might set the initial heap size to 1 GB and the maximum heap size to 8 GB. You might set a smaller value, such as 2 GB, for -Xsoftmx , to limit the heap size that is used initially: :::java -Xms1g -Xsoftmx2g -Xmx8g You can then use the com.ibm.lang.management API from within a Java application to increase the -Xsoftmx value during run time, as load increases. This change allows the application to use more memory than you specified initially. If you reduce the -Xsoftmx value, the garbage collector attempts to respect the new limit. However, the ability to shrink the heap depends on a number of factors. There is no guarantee that a decrease in the heap size will occur. If or when the heap shrinks to less than the new limit, the heap will not grow beyond that limit. When the heap shrinks, the garbage collector might release memory. The ability of the operating system to reclaim and use this memory varies based on the capabilities of the operating system. Notes: When using -Xgcpolicy:gencon , -Xsoftmx applies only to the non-nursery portion of the heap. In some cases the heap grows to greater than the -Xsoftmx value because the nursery portion grows, making the heap size exceed the limit that is set. See -Xmn for limiting the nursery size. When using -Xgcpolicy:metronome , -Xsoftmx is ignored because the Metronome garbage collector does not support contraction or expansion of the heap. There might be little benefit in reducing the -Xsoftmx value when the Java heap is using large pages. Large pages are pinned in memory and are not reclaimed by the operating system, with the exception of 1M pageable pages on z/OS\u00ae. On certain platforms and processors the VM starts with large pages enabled by default for the Java heap when the operating system is configured to provide large pages. For more information, see Configuring large page memory allocation . A future version of the Java virtual machine might provide a hint to the operating system when large pages are no longer in use.","title":"-Xsoftmx"},{"location":"xsoftmx/#-xsoftmx","text":"This option sets a \"soft\" maximum limit for the initial size of the Java\u2122 heap.","title":"-Xsoftmx"},{"location":"xsoftmx/#syntax","text":"-Xsoftmx<size>","title":"Syntax"},{"location":"xsoftmx/#explanation","text":"Use the -Xmx option to set a \"hard\" limit for the maximum size of the heap. By default, -Xsoftmx is set to the same value as -Xmx . The value of -Xms must be less than, or equal to, the value of -Xsoftmx . See the introduction to this topic for more information about specifying <size> parameters. You can set this option on the command line, then modify it at run time by using the MemoryMXBean.setMaxHeapSize() method in the com.ibm.lang.management API. By using this API, Java applications can dynamically monitor and adjust the heap size as required. This function can be useful in virtualized or cloud environments, for example, where the available memory might change dynamically to meet business needs. When you use the API, you must specify the value in bytes, such as 2147483648 instead of 2g . For example, you might set the initial heap size to 1 GB and the maximum heap size to 8 GB. You might set a smaller value, such as 2 GB, for -Xsoftmx , to limit the heap size that is used initially: :::java -Xms1g -Xsoftmx2g -Xmx8g You can then use the com.ibm.lang.management API from within a Java application to increase the -Xsoftmx value during run time, as load increases. This change allows the application to use more memory than you specified initially. If you reduce the -Xsoftmx value, the garbage collector attempts to respect the new limit. However, the ability to shrink the heap depends on a number of factors. There is no guarantee that a decrease in the heap size will occur. If or when the heap shrinks to less than the new limit, the heap will not grow beyond that limit. When the heap shrinks, the garbage collector might release memory. The ability of the operating system to reclaim and use this memory varies based on the capabilities of the operating system. Notes: When using -Xgcpolicy:gencon , -Xsoftmx applies only to the non-nursery portion of the heap. In some cases the heap grows to greater than the -Xsoftmx value because the nursery portion grows, making the heap size exceed the limit that is set. See -Xmn for limiting the nursery size. When using -Xgcpolicy:metronome , -Xsoftmx is ignored because the Metronome garbage collector does not support contraction or expansion of the heap. There might be little benefit in reducing the -Xsoftmx value when the Java heap is using large pages. Large pages are pinned in memory and are not reclaimed by the operating system, with the exception of 1M pageable pages on z/OS\u00ae. On certain platforms and processors the VM starts with large pages enabled by default for the Java heap when the operating system is configured to provide large pages. For more information, see Configuring large page memory allocation . A future version of the Java virtual machine might provide a hint to the operating system when large pages are no longer in use.","title":"Explanation"},{"location":"xsoftrefthreshold/","text":"-Xsoftrefthreshold Sets the value used by the garbage collector to determine the number of garbage collections after which a soft reference is cleared if its referent has not been marked. Syntax -Xsoftrefthreshold<value> Default behavior The default value is 32. Explanation A soft reference (where its referent is not marked) is cleared after a number of garbage collection cycles calculated as: <value> * (proportion of free heap space) For example, if -Xsoftrefthreshold is set to 32, and the heap is 25% free, soft references are cleared after 8 garbage collection cycles.","title":"-Xsoftrefthreshold"},{"location":"xsoftrefthreshold/#-xsoftrefthreshold","text":"Sets the value used by the garbage collector to determine the number of garbage collections after which a soft reference is cleared if its referent has not been marked.","title":"-Xsoftrefthreshold"},{"location":"xsoftrefthreshold/#syntax","text":"-Xsoftrefthreshold<value>","title":"Syntax"},{"location":"xsoftrefthreshold/#default-behavior","text":"The default value is 32.","title":"Default behavior"},{"location":"xsoftrefthreshold/#explanation","text":"A soft reference (where its referent is not marked) is cleared after a number of garbage collection cycles calculated as: <value> * (proportion of free heap space) For example, if -Xsoftrefthreshold is set to 32, and the heap is 25% free, soft references are cleared after 8 garbage collection cycles.","title":"Explanation"},{"location":"xss/","text":"-Xiss / -Xss / -Xssi Sets the stack size and increment for Java\u2122 threads. If you exceed the maximum Java thread stack size, a java/lang/OutOfMemoryError message is reported. You can use the -verbose:sizes option to find out the values that the VM is currently using. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; these options apply to the Java stack only. For the native stack option, see the link in the See also section. Syntax Setting Effect Default -Xiss<size> Set initial Java thread stack size 2 KB -Xss<size> Set maximum Java thread stack size 320 KB (31/32-bit); 1024 KB (64-bit) -Xssi<size> Set Java thread stack size increment 16 KB See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values. See also -Xmso (Native stack size for operating system threads)","title":"-Xssi"},{"location":"xss/#-xiss-xss-xssi","text":"Sets the stack size and increment for Java\u2122 threads. If you exceed the maximum Java thread stack size, a java/lang/OutOfMemoryError message is reported. You can use the -verbose:sizes option to find out the values that the VM is currently using. Note: Java methods and native methods run on two different stacks and the VM handles switching between them for JNI calls. Each stack is sized using separate options; these options apply to the Java stack only. For the native stack option, see the link in the See also section.","title":"-Xiss / -Xss / -Xssi"},{"location":"xss/#syntax","text":"Setting Effect Default -Xiss<size> Set initial Java thread stack size 2 KB -Xss<size> Set maximum Java thread stack size 320 KB (31/32-bit); 1024 KB (64-bit) -Xssi<size> Set Java thread stack size increment 16 KB See Using -X command-line options for more information about the <size> parameter. See Default settings for the OpenJ9 VM for more about default values.","title":"Syntax"},{"location":"xss/#see-also","text":"-Xmso (Native stack size for operating system threads)","title":"See also"},{"location":"xtgc/","text":"-Xtgc Provides garbage collection tracing options. Syntax -Xtgc:<parameter>{,<parameter>} Parameters Specify one one or more of the following parameters in a comma-separated list: backtrace -Xtgc:backtrace Before a garbage collection, a single line is printed containing the name of the master thread for garbage collection, as well as the value of the osThread slot in the J9VMThread structure. compaction -Xtgc:compaction Prints extra information showing the relative time spent by threads in the \"move\" and \"fixup\" phases of compaction concurrent -Xtgc:concurrent Prints extra information showing the activity of the concurrent mark background thread dump -Xtgc:dump Prints a line of output for every free chunk of memory in the system, including \"dark matter\" (free chunks that are not on the free list for some reason, typically because they are too small). Each line contains the base address and the size in bytes of the chunk. If the chunk is followed in the heap by an object, the size and class name of the object is also printed. This argument has a similar effect to the terse argument. freeList -Xtgc:freeList Before a garbage collection, prints information about the free list and allocation statistics since the last garbage collection. Prints the number of items on the free list, including \"deferred\" entries (with the scavenger, the unused space is a deferred free list entry). For TLH and non-TLH allocations, prints the total number of allocations, the average allocation size, and the total number of bytes discarded during allocation. For non-TLH allocations, also included is the average number of entries that were searched before a sufficiently large entry was found. parallel -Xtgc:parallel Produces statistics on the activity of the parallel threads during the mark and sweep phases of a global garbage collection. scavenger -Xtgc:scavenger Prints extra information after each scavenger collection. A histogram is produced showing the number of instances of each class, and their relative ages, present in the survivor space. The information is obtained by performing a linear walk-through of the space. terse -Xtgc:terse Dumps the contents of the entire heap before and after a garbage collection. For each object or free chunk in the heap, a line of trace output is produced. Each line contains the base address, \"a\" if it is an allocated object, and \"f\" if it is a free chunk, the size of the chunk in bytes, and, if it is an object, its class name.","title":"-Xtgc"},{"location":"xtgc/#-xtgc","text":"Provides garbage collection tracing options.","title":"-Xtgc"},{"location":"xtgc/#syntax","text":"-Xtgc:<parameter>{,<parameter>}","title":"Syntax"},{"location":"xtgc/#parameters","text":"Specify one one or more of the following parameters in a comma-separated list:","title":"Parameters"},{"location":"xtgc/#backtrace","text":"-Xtgc:backtrace Before a garbage collection, a single line is printed containing the name of the master thread for garbage collection, as well as the value of the osThread slot in the J9VMThread structure.","title":"backtrace"},{"location":"xtgc/#compaction","text":"-Xtgc:compaction Prints extra information showing the relative time spent by threads in the \"move\" and \"fixup\" phases of compaction","title":"compaction"},{"location":"xtgc/#concurrent","text":"-Xtgc:concurrent Prints extra information showing the activity of the concurrent mark background thread","title":"concurrent"},{"location":"xtgc/#dump","text":"-Xtgc:dump Prints a line of output for every free chunk of memory in the system, including \"dark matter\" (free chunks that are not on the free list for some reason, typically because they are too small). Each line contains the base address and the size in bytes of the chunk. If the chunk is followed in the heap by an object, the size and class name of the object is also printed. This argument has a similar effect to the terse argument.","title":"dump"},{"location":"xtgc/#freelist","text":"-Xtgc:freeList Before a garbage collection, prints information about the free list and allocation statistics since the last garbage collection. Prints the number of items on the free list, including \"deferred\" entries (with the scavenger, the unused space is a deferred free list entry). For TLH and non-TLH allocations, prints the total number of allocations, the average allocation size, and the total number of bytes discarded during allocation. For non-TLH allocations, also included is the average number of entries that were searched before a sufficiently large entry was found.","title":"freeList"},{"location":"xtgc/#parallel","text":"-Xtgc:parallel Produces statistics on the activity of the parallel threads during the mark and sweep phases of a global garbage collection.","title":"parallel"},{"location":"xtgc/#scavenger","text":"-Xtgc:scavenger Prints extra information after each scavenger collection. A histogram is produced showing the number of instances of each class, and their relative ages, present in the survivor space. The information is obtained by performing a linear walk-through of the space.","title":"scavenger"},{"location":"xtgc/#terse","text":"-Xtgc:terse Dumps the contents of the entire heap before and after a garbage collection. For each object or free chunk in the heap, a line of trace output is produced. Each line contains the base address, \"a\" if it is an allocated object, and \"f\" if it is a free chunk, the size of the chunk in bytes, and, if it is an object, its class name.","title":"terse"},{"location":"xthr/","text":"-Xthr Syntax -Xthr:<parameter> Parameters AdaptSpin | noAdaptSpin -Xthr:AdaptSpin -Xthr:noAdaptSpin This tuning option is available to test whether performance optimizations are negatively impacting an application. fastNotify | noFastNotify -Xthr:fastNotify -Xthr:noFastNotify When a large number of threads try to acquire a Java\u2122 monitor, throughput of an application can be reduced. This issue is known as high contention. If high contention occurs when the Java wait and notify features are regularly used, you can use -Xthr:fastNotify to increase throughput. However, -Xthr:noFastNotify is the default setting, because it is faster in all other scenarios. cfsYield | noCfsYield (Linux\u00ae only) -Xthr:cfsYield -Xthr:noCfsYield The default value, cfsYield , enables threading optimizations for running on Linux with the Completely Fair Scheduler (CFS) in the default mode ( sched_compat_yield=0 ). The noCfsYield value disables these threading optimizations. You might want to use the noCfsYield value if your application uses the Thread.yield() method extensively, because otherwise you might see a performance decrease in cases where yielding is not beneficial. minimizeUserCPU -Xthr:minimizeUserCPU Minimizes user-mode CPU usage in thread synchronization where possible. The reduction in CPU usage might be a trade-off in exchange for decreased performance. secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors -Xthr:secondarySpinForObjectMonitors -Xthr:noSecondarySpinForObjectMonitors This tuning option is available to test whether performance optimizations are negatively impacting an application.","title":"-Xthr"},{"location":"xthr/#-xthr","text":"","title":"-Xthr"},{"location":"xthr/#syntax","text":"-Xthr:<parameter>","title":"Syntax"},{"location":"xthr/#parameters","text":"","title":"Parameters"},{"location":"xthr/#adaptspin-noadaptspin","text":"-Xthr:AdaptSpin -Xthr:noAdaptSpin This tuning option is available to test whether performance optimizations are negatively impacting an application.","title":"AdaptSpin | noAdaptSpin"},{"location":"xthr/#fastnotify-nofastnotify","text":"-Xthr:fastNotify -Xthr:noFastNotify When a large number of threads try to acquire a Java\u2122 monitor, throughput of an application can be reduced. This issue is known as high contention. If high contention occurs when the Java wait and notify features are regularly used, you can use -Xthr:fastNotify to increase throughput. However, -Xthr:noFastNotify is the default setting, because it is faster in all other scenarios.","title":"fastNotify | noFastNotify"},{"location":"xthr/#cfsyield-nocfsyield-linux-only","text":"-Xthr:cfsYield -Xthr:noCfsYield The default value, cfsYield , enables threading optimizations for running on Linux with the Completely Fair Scheduler (CFS) in the default mode ( sched_compat_yield=0 ). The noCfsYield value disables these threading optimizations. You might want to use the noCfsYield value if your application uses the Thread.yield() method extensively, because otherwise you might see a performance decrease in cases where yielding is not beneficial.","title":"cfsYield | noCfsYield (Linux&reg; only)"},{"location":"xthr/#minimizeusercpu","text":"-Xthr:minimizeUserCPU Minimizes user-mode CPU usage in thread synchronization where possible. The reduction in CPU usage might be a trade-off in exchange for decreased performance.","title":"minimizeUserCPU"},{"location":"xthr/#secondaryspinforobjectmonitors-nosecondaryspinforobjectmonitors","text":"-Xthr:secondarySpinForObjectMonitors -Xthr:noSecondarySpinForObjectMonitors This tuning option is available to test whether performance optimizations are negatively impacting an application.","title":"secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors"},{"location":"xtlhprefetch/","text":"-XtlhPrefetch (AIX\u00ae, Windows\u2122 only) Speculatively prefetches bytes in the thread local heap (TLH) ahead of the current allocation pointer during object allocation. This option helps reduce the performance cost of subsequent allocations. Syntax -XtlhPrefetch","title":"-XtlhPrefetch"},{"location":"xtlhprefetch/#-xtlhprefetch","text":"(AIX\u00ae, Windows\u2122 only) Speculatively prefetches bytes in the thread local heap (TLH) ahead of the current allocation pointer during object allocation. This option helps reduce the performance cost of subsequent allocations.","title":"-XtlhPrefetch"},{"location":"xtlhprefetch/#syntax","text":"-XtlhPrefetch","title":"Syntax"},{"location":"xtrace/","text":"-Xtrace OpenJ9 VM tracing is a powerful feature to help you diagnose problems with minimal effect on performance. Tracing is enabled by default, together with a small set of trace points going to memory buffers. You can enable tracepoints at run time by using levels, components, group names, or individual tracepoint identifiers to trace VM internal operations and instrumented Java\u2122 applications. You can also trace Java methods. See the About trace section that follows for more detail. Trace data can be output in human-readable or in compressed binary formats. The VM provides a tool to process and convert the compressed binary data into a readable format. See Trace formatter . Note: You can also control trace by using the com.ibm.jvm.Trace API or by using JVMTI from an external agent. Xtrace Option Builder Use the Xtrace Option Builder tool to help you specify the correct options and avoid incompatibilities. Syntax -Xtrace:<parameter> You can get help with -Xtrace by using the folowing options: -Xtrace:help Displays general trace help -Xtrace:what Shows the current trace settings Configuring trace The following parameters can be used to configure trace. (Follow links for more information about individual options.) Command Result -Xtrace:properties[=<filename>] Configures trace options based on a file -Xtrace:buffers=<size>[dynamic\\|nodynamic] Modifies the size of buffers that are used to store trace data -Xtrace:exception.output=<filename>[,<size>] Redirects exceptions trace data to a file. -Xtrace:methods=<method_specification> Traces methods -Xtrace:output=<filename>[,<size>[,<generations>]] Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:resume Resumes tracing globally. -Xtrace:resumecount=<count> Enables tracing at a thread level after a specified count. -Xtrace:sleeptime=<time> Pauses trace operations for a specified length of time. -Xtrace:stackdepth=<n> Limits the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:suspend Suspends tracing globally. -Xtrace:suspendcount=<count> Suspends tracing at a thread level after a specified count. -Xtrace:trigger=<clause> Determines when various triggered trace actions occur, including turning trace on or off. Note: If an option value contains commas, it must be enclosed in braces. For example: methods={java/lang/*,com/ibm/*} Controlling tracepoint activation The following parameters can be used to control tracepoint activation. (Follow links for more information about individual options.) Command Result -Xtrace:maximal=<tracepoint_specification> Records all associated data. -Xtrace:minimal=<tracepoint_specification> Records only the time stamp and tracepoint identifier. -Xtrace:count=<tracepoint_specification> Counts the tracepoints that are used in a trace configuration. -Xtrace:print=<tracepoint_specification> Prints the specified tracepoints to stderr in real time. -Xtrace:iprint=<tracepoint_specification> Prints the specified tracepoints to stderr in real time with indentation. -Xtrace:exception=<tracepoint_specification> Enables exception tracing. -Xtrace:external<tracepoint_specification> Routes trace data to trace listeners, which are registered by using the JVMTI APIs. -Xtrace:none[=<tracepoint_specification>] Prevents the trace engine from loading if it is the only trace option specified. Note: These options control which individual tracepoints are activated at run time and the implicit destination of the trace data. All these properties are independent of each other and can be mixed and matched in any way that you choose. For more information, see Tracepoint activation . About trace With the OpenJ9 trace feature, you can trace VM internal operations, Java applications, and Java methods, or any combination of these. VM internal operations The OpenJ9 virtual machine (VM) is extensively instrumented with tracepoints for tracing operations. Interpreting this trace data requires detailed knowledge of the VM, and is intended to diagnose VM problems. No guarantee is given that tracepoints will not vary from release to release and from platform to platform. Applications VM trace contains an application trace facility that allows tracepoints to be placed in Java code, enabling you to combine trace data with the other forms of trace. This capability is supported by the com.ibm.jvm.Trace API. Note that an instrumented Java application runs only on an OpenJ9 VM. For more information, see Application trace . Java methods Use method trace to debug and trace application code and the system classes provided with the VM. You can trace entry to and exit from Java methods run by the VM. You can select method trace by classname, method name, or both. You can also use wildcards to create complex method selections. For more information about command syntax, see methods . Trace can produce large amounts of data in a very short time. Before running trace, think carefully about what information you need in order to solve the problem. Here are some considerations: If you need only the trace information that is produced shortly before the problem occurs, consider wrapping the file by using the output option. In many cases, just use internal trace with an increased buffer size and snap the trace when the problem occurs. If the problem results in a thread stack dump or operating system signal or exception, trace buffers are snapped automatically to a file that is in the current directory. The file is called: Snapnnnn. yyyymmdd.hhmmssth.process.trc . You must also think carefully about which components need to be traced and what level of tracing is required. For example, if you are tracing a suspected shared classes problem, it might be enough to trace all components at level 1, and j9shr at level 9, while maximal can be used to show parameters and other information for the failing component. Tracepoint components and trace levels are described in the following sections: Tracepoint specification and Trace levels . There are two types of tracepoints inside the VM: Regular tracepoints include method tracepoints, application tracepoints, data tracepoints inside the VM and data tracepoints inside class libraries. You can display regular tracepoint data on the screen or save the data to a file. You can also use command line options to trigger specific actions when regular tracepoints fire. Auxiliary tracepoints are a special type of tracepoint that can be fired only when another tracepoint is being processed. For example, the stack frame information produced by the jstacktrace -Xtrace:trigger command. You cannot control where auxiliary tracepoint data is sent and you cannot set triggers on auxiliary tracepoints. Auxiliary tracepoint data is sent to the same destination as the tracepoint that caused them to be generated. Trace data can be written to one of the following locations: Memory buffers that can be dumped or snapped when a problem occurs. Use the -Xtrace:buffers=<size> option to control the size of the buffer allocated to each thread. Buffers allocated to a thread are discarded when that thread terminates. To examine the trace data captured in these memory buffers, you must snap or dump the data, then format the buffers. One or more files that are using buffered I/O. Use the -Xtrace:output option. An external agent in real time, using the -Xtrace:external option. stderr in real time. Any combination of the other items in this list. Default tracing By default, the equivalent of the following trace command line is always available in the VM: -Xtrace:maximal=all{level1},exception=j9mm{gclogger} When startup is complete, the equivalent of the following command line is added to enable level 2 trace points: -Xtrace:maximal=all{level2} Level 2 is used for default tracing that would produce too much data during the startup of the VM. If you set other trace options on the command line, or before the VM finishes startup (through use of JVMTI or the com.ibm.jvm.Trace API), the level 2 trace points are enabled just before your trace options are processed. This behavior ensures that the default level 2 trace points do not override any changes that you specify. The data generated by the tracepoints is continuously captured in wrapping memory buffers for each thread. You can find tracepoint information in the following diagnostics data: System memory dumps, extracted by using jdmpview. Snap traces, generated when the VM encounters a problem or an output file is specified. Using dump agents describes more ways to create a snap trace. For exception trace only, in Javadumps. Default memory management tracing The default trace options are designed to ensure that Javadumps always contain a record of the most recent memory management history, regardless of how much work the VM has performed since the garbage collection cycle was last called. The exception=j9mm{gclogger} clause of the default trace set specifies that a history of garbage collection cycles that have occurred in the VM is continuously recorded. The gclogger group of tracepoints in the j9mm component constitutes a set of tracepoints that record a snapshot of each garbage collection cycle. These tracepoints are recorded in their own separate buffer, called the exception buffer. The effect is that the tracepoints are not overwritten by the higher frequency tracepoints of the VM. The GC History section of the Javadump is based on the information in the exception buffer. If a garbage collection cycle has occurred in a traced VM, the Java dump probably contains a GC History section. Default assertion tracing The VM includes assertions, implemented as special trace points. By default, internal assertions are detected and diagnostics logs are produced to help assess the error. Assertion failures often indicate a serious problem, and the VM usually stops immediately. In these circumstances, raise an issue, including the standard error output and any diagnostic files that are produced. When an assertion trace point is reached, a message like the following output is produced on the standard error stream: 16:43:48.671 0x10a4800 j9vm.209 * ** ASSERTION FAILED ** at jniinv.c:251: ((javaVM == ((void *)0))) This error stream is followed with information about the diagnostic logs produced: JVMDUMP007I JVM Requesting System Dump using 'core.20060426.124348.976.dmp' JVMDUMP010I System Dump written to core.20060426.124348.976.dmp JVMDUMP007I JVM Requesting Snap Dump using 'Snap0001.20060426.124648.976.trc' JVMDUMP010I Snap Dump written to Snap0001.20060426.124648.976.trc Assertions are special trace points. They can be enabled or disabled by using the standard trace command-line options. Assertion failures might occur early during VM startup, before trace is enabled. In this case, the assert message has a different format, and is not prefixed by a timestamp or thread ID. For example: ** ASSERTION FAILED ** j9vmutil.15 at thrinfo.c:371 Assert_VMUtil_true(( publicFlags & 0x200)) Assertion failures that occur early during startup cannot be disabled. These failures do not produce diagnostic dumps, and do not cause the VM to stop. Tracepoint activation The options that control which individual tracepoints are activated at run time and the implicit destination of the trace data are listed under Syntax: Controlling tracepoint activation In some cases, you must use them with other options. For example, if you specify maximal or minimal tracepoints, the trace data is put into memory buffers. If you are going to send the data to a file, you must use an output option to specify the destination file name. With the exception of none , all options require at least one <tracepoint_specification> , which is described in the following section. Multiple statements of each type of trace are allowed and their effect is cumulative. If you want to use multiple trace options of the same name, use a properties file. (See properties .) Tracepoint specification Tracepoints are enabled by specifying component and tracepoint . If no qualifier parameters are entered, all tracepoints are enabled, except for <exception.output> trace, where the default is all {exception}. The <tracepoint_specification> syntax can be further broken down as follows: [!]<component>[{<group>}] or [!]<component>[{<type>}] or [!]<tracepoint_id>[,<tracepoint_id>] Where: The ! symbol is a logical not . That is, the tracepoints that are in a specification starting with ! are turned off. <component> is a Java component. <group> is a tracepoint group, which is a set of tracepoints that are defined within a component. <type> is the tracepoint type: entry , exit , event , exception , and eem . <tracepoint_id> is the tracepoint identifier. The tracepoint identifier constitutes the component name of the tracepoint, followed by its integer number inside that component. For example, j9mm.49 , j9shr.20-29 , j9vm.15 . To understand these numbers, see Determining the tracepoint ID of a tracepoint. Some tracepoints can be both an exit and an exception ; that is, the function ended with an error. If you specify either exit or exception , these tracepoints are included. Lists of Java components and tracepoint groups can be found in the tables that follow. The following table lists the possible Java components ( <component> ). To include all Java components, specify all . Component name Description avl VM AVL tree support io Class library java.io native code j9bcu VM byte code utilities j9bcverify VM byte code verification j9codertvm VM byte code run time j9dmp VM dump j9jcl VM class libraries j9jit VM JIT interface j9jni VM JNI support j9jvmti VM JVMTI support j9mm VM memory management j9prt VM port library j9scar VM class library interface j9shr VM shared classes j9trc VM trace j9util VM utilities j9vm VM general j9vmutil VM utilities j9vrb VM verbose stack walker map VM mapped memory support mt Java methods (see Note ) net Class library TCP/IP networking native code pool VM storage pool support rpc VM RPC support simplepool VM storage pool support sunvmi VM class library interface Note: When specifying the mt component you must also specify the methods option. The following table lists all the tracepoint groups ( <group> ). Each group is associated with one or more Java components: Component name or names Group name Description j9mm gclogger A set of tracepoints that record each garbage collection cycle. Equivalent to -verbose:gc output j9prt nlsmessage A set of tracepoints that record each NLS message that is issued by the VM. j9jcl , j9vm verboseclass A set of tracepoints that record each class as it is loaded. Equivalent to -verbose:class output. j9jni , j9vm checkjni A set of tracepoints that record JNI function checks. Equivalent to -Xcheck:jni output. j9vm checkmemory A set of tracepoints that record memory checks. Equivalent to -Xcheck:memory output. j9vm checkvm A set of tracepoints that record VM checks. Equivalent to -Xcheck:vm output. j9jit verbose A set of tracepoints that record JIT compiler configuration and method compilation. Equivalent to -Xjit:verbose output. mt compiledMethods A set of tracepoints that record compiled Java methods. mt nativeMethods A set of tracepoints that record Java native methods. mt staticMethods A set of tracepoints that record Java static methods. Here are some examples: To trace all tracepoints, specify the following command: -Xtrace:maximal=all To trace all tracepoints except **j9vrb** and **j9trc**, specify the following command: -Xtrace:minimal={all},minimal={!j9vrb,j9trc} To trace all entry and exit tracepoints in j9bcu , specify the following command: -Xtrace:maximal={j9bcu{entry},j9bcu{exit}} To trace all tracepoints in **j9mm** except tracepoints 20-30, specify the following command: -Xtrace:maximal=j9mm,maximal=!j9mm.20-30 To trace tracepoints j9prt.5 through j9prt.15 , specify the following command: -Xtrace:print=j9prt.5-15 To trace all **j9trc** tracepoints, specify the following command: -Xtrace:count=j9trc To trace all entry and exit tracepoints, specify the following command: -Xtrace:external={all{entry},all{exit}} Trace levels Tracepoints have been assigned levels 0 through 9 that are based on the importance of the tracepoint. A level 0 tracepoint is the most important. It is reserved for extraordinary events and errors. A level 9 tracepoint is in-depth component detail. To specify a given level of tracing, the level0 through level9 keywords are used. You can abbreviate these keywords to l0 through l9. For example, if level5 is selected, all tracepoints that have levels 0 through 5 are included. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. The level is provided as a modifier to a component specification, for example: -Xtrace:maximal={all{level5}} or -Xtrace:maximal={j9mm{L2},j9trc,j9bcu{level9},all{level1}} In the first example, tracepoints that have a level of 5 or less are enabled for all components. In the second example, all level 1 tracepoints are enabled. All level 2 tracepoints in j9mm are enabled. All tracepoints up to level 9 are enabled in j9bcu . Note: The level applies only to the current component. If multiple trace selection components are found in a trace properties file, the level is reset to the default for each new component. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. When the not operator is specified, the level is inverted; that is, !j9mm{level5} disables all tracepoints of level 6 or greater for the j9mm component. The following example enables trace for all components at level 9 (the default), but disables level 6 and higher for the locking component, and level 7 and higher for the storage component: -Xtrace:print={all},print={!j9trc{l5},j9mm{l6}} Here are some examples: To count the level zero and level one tracepoints matched, specify the following command: -Xtrace:count=all{L1} To produce maximal trace of all components at level 5 and j9mm at level 9, specify the following command: -Xtrace:maximal={all{level5},j9mm{L9}} To trace all components at level 6, but do not trace j9vrb at all, and do not trace the entry and exit tracepoints in the j9trc component, specify the following command: -Xtrace:minimal={all{l6}},minimal={!j9vrb,j9trc{entry},j9trc{exit}} Parameters Parameters to use with the -Xtrace option: buffers You can modify the size of the buffers to change how much diagnostic output is provided in a snap dump. This buffer is allocated for each thread that makes trace entries. The following table shows how this parameter can be set: Command Effect -Xtrace:buffers=<size> Creates buffers of the specified <size> in k (KB) or m (MB), allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>dynamic Creates buffers of the specified <size> , allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>nodynamic Creates buffers of the specified <size> , with a maximum allocation of two buffers per thread. If external trace is enabled, the number of buffers is doubled; that is, each thread allocates two or more buffers. The same buffer size is used for state and exception tracing, but, in this case, buffers are allocated globally. The default is 8 KB per thread. The dynamic and nodynamic suboptions have meaning only when tracing to an output file. Note: If nodynamic is specified, you might lose trace data if the volume of trace data exceeds the bandwidth of the trace output file. Message UTE115 is issued when the first trace entry is lost, and message UTE018 is issued when the VM ends. Here are some command line examples: To set a buffer size of 2 MB per thread, with dynamic buffering, use: -Xtrace:buffers=2m To limit each thread to 2 trace buffers, each of 128 KB: -Xtrace:buffers={128k,nodynamic} count (tracepoint) -Xtrace:count=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The count option requests that only a count of the selected tracepoints is kept. When the VM ends, all nonzero totals of tracepoints (sorted by tracepoint id) are written to a file, called utTrcCounters , in the current directory. This information is useful if you want to determine the overhead of particular tracepoints, but do not want to produce a large amount (GB) of trace data. For example, to count the tracepoints that are used in the default trace configuration, use the following command: -Xtrace:count=all{level1},count=j9mm{gclogger} exception (tracepoint) -Xtrace:exception=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When exception trace is enabled, the trace data is collected in internal buffers that are separate from the normal buffers. These internal buffers can then be written to a snap file or written to the file that is specified in an exception.output option. The exception option allows low-volume tracing in buffers and files that are distinct from the higher-volume information that minimal and maximal tracing have provided. In most cases, this information is exception-type data, but you can use this option to capture any trace data that you want. This form of tracing is channeled through a single set of buffers, as opposed to the buffer-per-thread approach for normal trace. Buffer contention might occur if high volumes of trace data are collected. A difference exists in the <tracepoint_specification> defaults for exception tracing; see Tracepoint specification . Notes: The exception trace buffers are intended for low-volume tracing. By default, the exception trace buffers log garbage collection (GC) event tracepoints, see Default tracing. You can send additional tracepoints to the exception buffers or turn off the GC tracepoints. Changing the exception trace buffers alters the contents of the GC History section in any Javadumps. When exception trace is entered for an active tracepoint, the current thread ID is checked against the previous caller's thread ID. If it is a different thread, or this is the first call to exception trace, a context tracepoint is put into the trace buffer first. This context tracepoint consists only of the current thread ID, which is necessary because of the single set of buffers for exception trace. (The formatter identifies all trace entries as coming from the Exception trace pseudo thread when it formats exception trace files.) exception.output Use exception output to redirect exceptions trace data to a file. -Xtrace:exception.output=<filename>[,<size>] Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps nondestructively to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Here are some examples: Exception trace output goes to file /u/traces/exception.trc with no size limit: -Xtrace:exception.output=/u/traces/exception.trc,maximal Exception trace output goes to file except and wraps at 2 MB: -Xtrace:exception.output={except,2m},maximal Exception trace output goes to a file whose filename contains today's date in * yyyymmdd* format (for example, traceout.20181025.trc ): -Xtrace:exception.output=traceout.%d.trc,maximal Exception trace output goes to a file whose filename contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:exception.output=tracefrompid%p.trc,maximal Exception trace output goes to a file whose filename contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:exception.output=traceout.%t.trc,maximal external (tracepoint) -Xtrace:external<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The external option routes trace data to trace listeners, which are registered by using the JVMTI RegisterTracePointSubscriber() and DeregisterTracePointSubscriber() APIs. help -Xtrace:help Displays general trace help iprint (tracepoint) -Xtrace:iprint=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The iprint option is the same as the print option, but uses indenting to format the trace. maximal (tracepoint) -Xtrace:maximal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. All associated data is traced. minimal and maximal traces are independent from any types that follow them. For example, if the maximal option is specified, it does not affect a later option such as print . methods Using method trace provides a complete and potentially large diagnosis of code paths inside your application and the system classes. Use wild cards and filtering to control method trace so that you can focus on the sections of code that interest you. To specify one or more method specifications, use the following syntax: -Xtrace:methods=<method_specification>[,<method_specification>] The syntax for <method_specification> can be further broken down to the following suboptions: -Xtrace:methods={[!][*][<package>/]<class>[*],[[*]<method>[*]|[()]]} Where: The delimiter between parts of the package name is a forward slash, \"/\". The ! in the methods parameter is a NOT operator that allows you to tell the VM not to trace the specified method or methods. The parentheses, (), define whether or not to include method parameters in the trace. If a method specification includes any commas, the whole specification must be enclosed in braces, for example: -Xtrace:methods={java/lang/*,java/util/*},print=mt It might be necessary to enclose your command line in quotation marks to prevent the shell intercepting and fragmenting comma-separated command lines, for example: \"-Xtrace:methods={java/lang/*,java/util/*},print=mt\" To output all method trace information to stderr, use either the print or iprint suboptions: -Xtrace:print=mt,methods=*.* -Xtrace:iprint=mt,methods=*.* The iprint suboption prints to stderr with indentation. To output method trace information in binary format, see the output option. Here are some examples: Tracing entry and exit of all methods in a given class: To trace all method entry and exit of the ReaderMain class in the default package and the java.lang.String class, specify the following command: -Xtrace:methods={ReaderMain.*,java/lang/String.*},print=mt Tracing entry, exit and input parameters of all methods in a class: To trace all method entry, exit, and input of the ReaderMain class in the default package, specify the following command: -Xtrace:methods=ReaderMain.*(),print=mt Tracing all methods in a given package: To trace all method entry, exit, and input of all classes in the package com.ibm.socket , specify the following command: -Xtrace:methods=com/ibm/socket/*.*(),print=mt Multiple method trace: To trace all method entry, exit, and input in the Widget class in the default package and all method entry and exit in the common package, specify the following command: -Xtrace:methods={Widget.*(),common/*},print=mt Using the ! operator: To trace all methods in the ArticleUI class in the default package except those beginning with \"get\", specify the following command: -Xtrace:methods={ArticleUI.*,!ArticleUI.get*},print=mt Tracing a specific method in a class: This example traces entry and exit of the substring method of the java.lang.String class . If there is more than one method with the same name, they are all traced. You cannot filter method trace by the signature of the method. -Xtrace:print=mt,methods={java/lang/String.substring} Tracing the constructor of a class: This example traces entry and exit of the constructors of the java.lang.String class. -Xtrace:print=mt,methods={java/lang/String.<init>} Here is some example output: java \"-Xtrace:methods={java/lang*.*},iprint=mt\" HW 10:02:42.281*0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/String.<clinit>()V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method The output lines comprise of: 0x9e900 , the current execenv (execution environment). Because every VM thread has its own execenv , you can regard execenv as a thread-id . All trace with the same execenv relates to a single thread. The individual tracepoint ID in the mt component that collects and emits the data. The remaining fields show whether a method is being entered (>) or exited (<), followed by details of the method. minimal (tracepoint) -Xtrace:minimal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. Only the time stamp and tracepoint identifier are recorded. When the trace is formatted, missing trace data is replaced with the characters \"???\" in the output file. minimal and maximal traces are independent from any types that follow them. For example, if the minimal option is specified, it does not affect a later option such as print . none (tracepoint) -Xtrace:none[=<tracepoint_specification>] For further information about <tracepoint_specification> syntax, see Tracepoint specification . -Xtrace:none prevents the trace engine from loading if it is the only trace option specified. However, if other -Xtrace options are on the command line, it is treated as the equivalent of -Xtrace:none=all and the trace engine still loads. If you specify other tracepoints without specifying -Xtrace:none , the tracepoints are added to the default set. output Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:output=<filename>[,<size>[,<generations>]]` Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p% (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Optionally, <generations> is a value 2 through 36. These values cause up to 36 files to be used sequentially as each file reaches its <size> threshold. When a file needs to be reused, it is overwritten. If <generations> is specified, the filename must contain a # (hash, pound symbol), which will be substituted with its generation identifier, the sequence of which is 0 through 9 followed by A through Z. Note: When tracing to a file, buffers for each thread are written when the buffer is full or when the VM ends. If a thread has been inactive for a period of time before the VM ends, what seems to be 'old' trace data is written to the file. When formatted, it then seems that trace data is missing from the other threads, but this is an unavoidable side-effect of the buffer-per-thread design. This effect becomes especially noticeable when you use the generation facility, and format individual earlier generations. Here are some examples: Trace output goes to file /u/traces/gc.problem with no size limit: -Xtrace:output=/u/traces/gc.problem,maximal=j9gc Trace output goes to file trace , which will wrap at 2 MB: -Xtrace:output={trace,2m},maximal=j9gc Trace output goes to files gc0.trc , gc1.trc , and gc2.trc , each 10 MB in size: -Xtrace:output={gc#.trc,10m,3},maximal=j9gc Trace output goes to a file, where the filename contains today's date in * yyyymmdd* format (for example, traceout.20181025.trc ): -Xtrace:output=traceout.%d.trc,maximal=j9gc Trace output goes to a file whose name contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:output=tracefrompid%p.trc,maximal=j9gc Trace output goes to a file whose name contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:output=traceout.%t.trc,maximal=j9gc print (tracepoint) -Xtrace:print=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The print option causes the specified tracepoints to be routed to stderr in real time. The VM tracepoints are formatted by using J9TraceFormat.dat . The class library tracepoints are formatted by J9TraceFormat.dat and TraceFormat.dat . properties You can use properties files to control trace. A properties file saves typing and allows you to create a library of files that are tailored to solving problems in a particular area. -Xtrace:properties[=<filename>] If <filename> is not specified, the VM searches for a default name of IBMTRACE.properties in the current directory. All the options that are in the file are processed in the sequence in which they are stored in the file, before the next option that is obtained through the normal mechanism is processed. Therefore, a command-line property always overrides a property that is in the file. Here is an example of a properties file: minimal=all // maximal=j9mm maximal=j9shr buffers=128k,nodynamic output=c:\\traces\\classloader.trc print=tpnid(j9vm.23-25) The following restrictions apply to the file: The file must be a flat ASCII file. Nesting is not supported; that is, the file cannot contain a properties option. You cannot leave properties that have the form <name>=<value> to default if they are specified in the property file; that is, you must specify a value, for example maximal=all . Do not add white space before, after, or within the trace options. If any error is found when the file is accessed, VM initialization fails with an explanatory error message and return code. To use a file trace.props stored in the c:\\trc\\gc directory, specify the following command: -Xtrace:properties=c:\\trc\\gc\\trace.props resume The resume option resumes tracing globally. -Xtrace:resume The suspend and resume options are not recursive. That is, two suspends that are followed by a single resume cause trace to be resumed. resumecount This trace option determines whether tracing is enabled for each thread. -Xtrace:resumecount=<count> If <count> is greater than zero, each thread initially has its tracing disabled and must receive <count> resumethis actions before it starts tracing. This option is used with the trigger option. Note: You cannot use resumecount and suspendcount together because they use the same internal counter. The following example starts with all tracing turned off. Each thread starts tracing when it has had three resumethis actions performed on it: -Xtrace:resumecount=3 sleeptime You can specify how long the sleep lasts when using the sleep trigger action. -Xtrace:sleeptime=nnn|aaams|bbbs Where: nnn sleeps for nnn milliseconds. aaams sleeps for aaa milliseconds. bbbs sleeps for bbb seconds. The default length of time is 30 seconds. If no units are specified, the default time unit is milliseconds. stackdepth Use this option to limit the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:stackdepth=<n> Where <n> is the maximum number of stack frames reported. suspend -Xtrace:suspend Suspends tracing globally for all threads and all forms of tracing but leaves tracepoints activated. suspendcount This trace option determines whether tracing is enabled for each thread. -Xtrace:suspendcount=<count> If <count> is greater than zero, each thread initially has its tracing enabled and must receive <count> suspendthis actions before it stops tracing. You cannot use resumecount and suspendcount together because they both set the same internal counter. This trace option is for use with the trigger option. The following example starts with tracing turned on. Each thread stops tracing when it has had three suspendthis actions performed on it: -Xtrace:suspendcount=3 trigger The trigger parameter determines when various triggered trace actions occur. Supported actions include turning tracing on and off for all threads, turning tracing on or off for the current thread, or producing various dumps. -Xtrace:trigger=<clause>[,<clause>] This trace option does not control what is traced. It controls only whether the information that has been selected by the other trace options is produced as normal or is blocked. Types Each clause of the trigger parameter can be one of the following types: a method ( -Xtrace:trigger=method{...} ) a tracepoint ID ( -Xtrace:trigger=tpnid{...} ) a group ( -Xtrace:trigger=group{...} ) You can specify multiple clauses of the same type if required, but you do not need to specify all types. method -Xtrace:trigger=method{<methodspec>[,<entryAction>[,<exitAction>[,<delayCount>[,<matchcount>]]]]} On entering a method that matches <methodspec> , the specified <entryAction> is run. On leaving a method that matches <methodspec> , the specified <exitAction> is run. If you specify a <delayCount> , the actions are performed only after a matching <methodspec> has been entered that many times. If you specify a <matchCount> , <entryAction> and <exitAction> are performed at most that many times. <methodspec> is the specification of a Java method, consisting of a class and a method name separated by a dot. For example, specify HelloWorld.main . If the class is in a package, the package name must be included, separated by slashes. For example, specify java/lang/String.getBytes . A wildcard \"*\" can be used at the start or end of the class and method names, or both. For example, you can specify */String.get* . To specify a constructor method, use <init> as the method name. Method signatures cannot be specified, so a method specification applies to all overloaded methods. tracepoint ID -Xtrace:trigger=tpnid{<tpnid>|<tpnidRange>,<action>[,<delayCount>[,<matchcount>]]} On finding the specified active tracepoint ID ( <tpnid> ) or a tracepoint ID) that falls inside the specified <tpnidRange> , the specified action is run . If you specify a <delayCount> , the action is performed only after the VM finds such an active <tpnid> that many times. If you specify a <matchCount> , <action> is performed at most that many times. group -Xtrace:trigger=group{<groupname>,<action>[,<delayCount>[,<matchcount>]]} On finding any active tracepoint that is defined as being in trace group <groupname> , for example Entry or Exit , the specified action is run . If you specify a <delayCount> , the action is performed only after that many active tracepoints from group <groupname> have been found. If you specify a <matchCount> , <action> is performed at most that many times. Actions Wherever an action ( <action> , <entryAction> , or <exitAction> ) must be specified in one of the trigger parameter clauses, you must select from these options: <action> Effect abort Halt the VM. ceedump This action is applicable to z/OS\u00ae only. For more information, see z/OS LE CEEDUMPs. coredump See sysdump . heapdump Produce a Heapdump. See Using Heapdump . javadump Produce a Javadump. See Using Javadump . jstacktrace Examine the Java stack of the current thread and generate auxiliary tracepoints for each stack frame. The auxiliary tracepoints are written to the same destination as the tracepoint or method trace that triggered the action. You can control the number of stack frames examined with the stackdepth=n option. See the stackdepth option. resume Resume all tracing (except for threads that are suspended by the action of the resumecount property and Trace.suspendThis() calls). resumethis Decrement the suspend count for this thread. If the suspend count is zero or less, resume tracing for this thread. sigsev Cause a segmentation violation. (Intended for use in debugging.) sleep Delay the current thread for a length of time controlled by the sleeptime option. The default is 30 seconds. See sleeptime option. snap Snap all active trace buffers to a file in the current working directory. The file name has the format: Snapnnnn.yyyymmdd.hhmmssth.ppppp.trc , where nnnn is the sequence number of the snap file since VM startup, yyyymmdd is the date, hhmmssth is the time, and ppppp is the process ID in decimal with leading zeros removed. suspend Suspend all tracing (except for special trace points). suspendthis Increment the suspend count for this thread. If the suspend-count is greater than zero, prevent all tracing for this thread. sysdump (or coredump ) Produce a system dump. See Dump agents( -Xdump:system ) . Here are some examples of using the trigger option: To produce a Java dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump} To produce a system dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,sysdump} To produce a Java dump when a class constructor is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<init>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a class static initializer is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<clinit>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a method is entered 1000 times and 1001 times, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump,,1000,2} To start tracing this thread when it enters any method in java/lang/String , and to stop tracing the thread after exiting the method, specify the following command: -Xtrace:resumecount=1 -Xtrace:trigger=method{java/lang/String.*,resumethis,suspendthis} To resume all tracing when any thread enters a method in any class that starts with error , specify the following command: -Xtrace:trigger=method{*.error*,resume} To trace (all threads) while the application is active; that is, not starting or shut down. (The application name is HelloWorld ), specify the following command: -Xtrace:suspend,trigger=method{HelloWorld.main,resume,suspend} To print a Java stack trace to the console when the mycomponent.1 tracepoint is reached, specify the following command: -Xtrace:print=mycomponent.1,trigger=tpnid{mycomponent.1,jstacktrace} To write a Java stack trace to the trace output file when the Sample.code() method is called, specify the following command: -Xtrace:maximal=mt,output=trc.out,methods={mycompany/mypackage/Sample.code},trigger=method{mycompany/mypackage/Sample.code,jstacktrace} what -Xtrace:what Shows the current trace settings See also Application trace Using Heapdump Using Javadump Dump viewer","title":"-Xtrace"},{"location":"xtrace/#-xtrace","text":"OpenJ9 VM tracing is a powerful feature to help you diagnose problems with minimal effect on performance. Tracing is enabled by default, together with a small set of trace points going to memory buffers. You can enable tracepoints at run time by using levels, components, group names, or individual tracepoint identifiers to trace VM internal operations and instrumented Java\u2122 applications. You can also trace Java methods. See the About trace section that follows for more detail. Trace data can be output in human-readable or in compressed binary formats. The VM provides a tool to process and convert the compressed binary data into a readable format. See Trace formatter . Note: You can also control trace by using the com.ibm.jvm.Trace API or by using JVMTI from an external agent.","title":"-Xtrace"},{"location":"xtrace/#xtrace-option-builder","text":"Use the Xtrace Option Builder tool to help you specify the correct options and avoid incompatibilities.","title":"Xtrace Option Builder"},{"location":"xtrace/#syntax","text":"-Xtrace:<parameter> You can get help with -Xtrace by using the folowing options: -Xtrace:help Displays general trace help -Xtrace:what Shows the current trace settings","title":"Syntax"},{"location":"xtrace/#configuring-trace","text":"The following parameters can be used to configure trace. (Follow links for more information about individual options.) Command Result -Xtrace:properties[=<filename>] Configures trace options based on a file -Xtrace:buffers=<size>[dynamic\\|nodynamic] Modifies the size of buffers that are used to store trace data -Xtrace:exception.output=<filename>[,<size>] Redirects exceptions trace data to a file. -Xtrace:methods=<method_specification> Traces methods -Xtrace:output=<filename>[,<size>[,<generations>]] Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:resume Resumes tracing globally. -Xtrace:resumecount=<count> Enables tracing at a thread level after a specified count. -Xtrace:sleeptime=<time> Pauses trace operations for a specified length of time. -Xtrace:stackdepth=<n> Limits the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:suspend Suspends tracing globally. -Xtrace:suspendcount=<count> Suspends tracing at a thread level after a specified count. -Xtrace:trigger=<clause> Determines when various triggered trace actions occur, including turning trace on or off. Note: If an option value contains commas, it must be enclosed in braces. For example: methods={java/lang/*,com/ibm/*}","title":"Configuring trace"},{"location":"xtrace/#controlling-tracepoint-activation","text":"The following parameters can be used to control tracepoint activation. (Follow links for more information about individual options.) Command Result -Xtrace:maximal=<tracepoint_specification> Records all associated data. -Xtrace:minimal=<tracepoint_specification> Records only the time stamp and tracepoint identifier. -Xtrace:count=<tracepoint_specification> Counts the tracepoints that are used in a trace configuration. -Xtrace:print=<tracepoint_specification> Prints the specified tracepoints to stderr in real time. -Xtrace:iprint=<tracepoint_specification> Prints the specified tracepoints to stderr in real time with indentation. -Xtrace:exception=<tracepoint_specification> Enables exception tracing. -Xtrace:external<tracepoint_specification> Routes trace data to trace listeners, which are registered by using the JVMTI APIs. -Xtrace:none[=<tracepoint_specification>] Prevents the trace engine from loading if it is the only trace option specified. Note: These options control which individual tracepoints are activated at run time and the implicit destination of the trace data. All these properties are independent of each other and can be mixed and matched in any way that you choose. For more information, see Tracepoint activation .","title":"Controlling tracepoint activation"},{"location":"xtrace/#about-trace","text":"With the OpenJ9 trace feature, you can trace VM internal operations, Java applications, and Java methods, or any combination of these. VM internal operations The OpenJ9 virtual machine (VM) is extensively instrumented with tracepoints for tracing operations. Interpreting this trace data requires detailed knowledge of the VM, and is intended to diagnose VM problems. No guarantee is given that tracepoints will not vary from release to release and from platform to platform. Applications VM trace contains an application trace facility that allows tracepoints to be placed in Java code, enabling you to combine trace data with the other forms of trace. This capability is supported by the com.ibm.jvm.Trace API. Note that an instrumented Java application runs only on an OpenJ9 VM. For more information, see Application trace . Java methods Use method trace to debug and trace application code and the system classes provided with the VM. You can trace entry to and exit from Java methods run by the VM. You can select method trace by classname, method name, or both. You can also use wildcards to create complex method selections. For more information about command syntax, see methods . Trace can produce large amounts of data in a very short time. Before running trace, think carefully about what information you need in order to solve the problem. Here are some considerations: If you need only the trace information that is produced shortly before the problem occurs, consider wrapping the file by using the output option. In many cases, just use internal trace with an increased buffer size and snap the trace when the problem occurs. If the problem results in a thread stack dump or operating system signal or exception, trace buffers are snapped automatically to a file that is in the current directory. The file is called: Snapnnnn. yyyymmdd.hhmmssth.process.trc . You must also think carefully about which components need to be traced and what level of tracing is required. For example, if you are tracing a suspected shared classes problem, it might be enough to trace all components at level 1, and j9shr at level 9, while maximal can be used to show parameters and other information for the failing component. Tracepoint components and trace levels are described in the following sections: Tracepoint specification and Trace levels . There are two types of tracepoints inside the VM: Regular tracepoints include method tracepoints, application tracepoints, data tracepoints inside the VM and data tracepoints inside class libraries. You can display regular tracepoint data on the screen or save the data to a file. You can also use command line options to trigger specific actions when regular tracepoints fire. Auxiliary tracepoints are a special type of tracepoint that can be fired only when another tracepoint is being processed. For example, the stack frame information produced by the jstacktrace -Xtrace:trigger command. You cannot control where auxiliary tracepoint data is sent and you cannot set triggers on auxiliary tracepoints. Auxiliary tracepoint data is sent to the same destination as the tracepoint that caused them to be generated. Trace data can be written to one of the following locations: Memory buffers that can be dumped or snapped when a problem occurs. Use the -Xtrace:buffers=<size> option to control the size of the buffer allocated to each thread. Buffers allocated to a thread are discarded when that thread terminates. To examine the trace data captured in these memory buffers, you must snap or dump the data, then format the buffers. One or more files that are using buffered I/O. Use the -Xtrace:output option. An external agent in real time, using the -Xtrace:external option. stderr in real time. Any combination of the other items in this list.","title":"About trace"},{"location":"xtrace/#default-tracing","text":"By default, the equivalent of the following trace command line is always available in the VM: -Xtrace:maximal=all{level1},exception=j9mm{gclogger} When startup is complete, the equivalent of the following command line is added to enable level 2 trace points: -Xtrace:maximal=all{level2} Level 2 is used for default tracing that would produce too much data during the startup of the VM. If you set other trace options on the command line, or before the VM finishes startup (through use of JVMTI or the com.ibm.jvm.Trace API), the level 2 trace points are enabled just before your trace options are processed. This behavior ensures that the default level 2 trace points do not override any changes that you specify. The data generated by the tracepoints is continuously captured in wrapping memory buffers for each thread. You can find tracepoint information in the following diagnostics data: System memory dumps, extracted by using jdmpview. Snap traces, generated when the VM encounters a problem or an output file is specified. Using dump agents describes more ways to create a snap trace. For exception trace only, in Javadumps.","title":"Default tracing"},{"location":"xtrace/#default-memory-management-tracing","text":"The default trace options are designed to ensure that Javadumps always contain a record of the most recent memory management history, regardless of how much work the VM has performed since the garbage collection cycle was last called. The exception=j9mm{gclogger} clause of the default trace set specifies that a history of garbage collection cycles that have occurred in the VM is continuously recorded. The gclogger group of tracepoints in the j9mm component constitutes a set of tracepoints that record a snapshot of each garbage collection cycle. These tracepoints are recorded in their own separate buffer, called the exception buffer. The effect is that the tracepoints are not overwritten by the higher frequency tracepoints of the VM. The GC History section of the Javadump is based on the information in the exception buffer. If a garbage collection cycle has occurred in a traced VM, the Java dump probably contains a GC History section.","title":"Default memory management tracing"},{"location":"xtrace/#default-assertion-tracing","text":"The VM includes assertions, implemented as special trace points. By default, internal assertions are detected and diagnostics logs are produced to help assess the error. Assertion failures often indicate a serious problem, and the VM usually stops immediately. In these circumstances, raise an issue, including the standard error output and any diagnostic files that are produced. When an assertion trace point is reached, a message like the following output is produced on the standard error stream: 16:43:48.671 0x10a4800 j9vm.209 * ** ASSERTION FAILED ** at jniinv.c:251: ((javaVM == ((void *)0))) This error stream is followed with information about the diagnostic logs produced: JVMDUMP007I JVM Requesting System Dump using 'core.20060426.124348.976.dmp' JVMDUMP010I System Dump written to core.20060426.124348.976.dmp JVMDUMP007I JVM Requesting Snap Dump using 'Snap0001.20060426.124648.976.trc' JVMDUMP010I Snap Dump written to Snap0001.20060426.124648.976.trc Assertions are special trace points. They can be enabled or disabled by using the standard trace command-line options. Assertion failures might occur early during VM startup, before trace is enabled. In this case, the assert message has a different format, and is not prefixed by a timestamp or thread ID. For example: ** ASSERTION FAILED ** j9vmutil.15 at thrinfo.c:371 Assert_VMUtil_true(( publicFlags & 0x200)) Assertion failures that occur early during startup cannot be disabled. These failures do not produce diagnostic dumps, and do not cause the VM to stop.","title":"Default assertion tracing"},{"location":"xtrace/#tracepoint-activation","text":"The options that control which individual tracepoints are activated at run time and the implicit destination of the trace data are listed under Syntax: Controlling tracepoint activation In some cases, you must use them with other options. For example, if you specify maximal or minimal tracepoints, the trace data is put into memory buffers. If you are going to send the data to a file, you must use an output option to specify the destination file name. With the exception of none , all options require at least one <tracepoint_specification> , which is described in the following section. Multiple statements of each type of trace are allowed and their effect is cumulative. If you want to use multiple trace options of the same name, use a properties file. (See properties .)","title":"Tracepoint activation"},{"location":"xtrace/#tracepoint-specification","text":"Tracepoints are enabled by specifying component and tracepoint . If no qualifier parameters are entered, all tracepoints are enabled, except for <exception.output> trace, where the default is all {exception}. The <tracepoint_specification> syntax can be further broken down as follows: [!]<component>[{<group>}] or [!]<component>[{<type>}] or [!]<tracepoint_id>[,<tracepoint_id>] Where: The ! symbol is a logical not . That is, the tracepoints that are in a specification starting with ! are turned off. <component> is a Java component. <group> is a tracepoint group, which is a set of tracepoints that are defined within a component. <type> is the tracepoint type: entry , exit , event , exception , and eem . <tracepoint_id> is the tracepoint identifier. The tracepoint identifier constitutes the component name of the tracepoint, followed by its integer number inside that component. For example, j9mm.49 , j9shr.20-29 , j9vm.15 . To understand these numbers, see Determining the tracepoint ID of a tracepoint. Some tracepoints can be both an exit and an exception ; that is, the function ended with an error. If you specify either exit or exception , these tracepoints are included. Lists of Java components and tracepoint groups can be found in the tables that follow. The following table lists the possible Java components ( <component> ). To include all Java components, specify all . Component name Description avl VM AVL tree support io Class library java.io native code j9bcu VM byte code utilities j9bcverify VM byte code verification j9codertvm VM byte code run time j9dmp VM dump j9jcl VM class libraries j9jit VM JIT interface j9jni VM JNI support j9jvmti VM JVMTI support j9mm VM memory management j9prt VM port library j9scar VM class library interface j9shr VM shared classes j9trc VM trace j9util VM utilities j9vm VM general j9vmutil VM utilities j9vrb VM verbose stack walker map VM mapped memory support mt Java methods (see Note ) net Class library TCP/IP networking native code pool VM storage pool support rpc VM RPC support simplepool VM storage pool support sunvmi VM class library interface Note: When specifying the mt component you must also specify the methods option. The following table lists all the tracepoint groups ( <group> ). Each group is associated with one or more Java components: Component name or names Group name Description j9mm gclogger A set of tracepoints that record each garbage collection cycle. Equivalent to -verbose:gc output j9prt nlsmessage A set of tracepoints that record each NLS message that is issued by the VM. j9jcl , j9vm verboseclass A set of tracepoints that record each class as it is loaded. Equivalent to -verbose:class output. j9jni , j9vm checkjni A set of tracepoints that record JNI function checks. Equivalent to -Xcheck:jni output. j9vm checkmemory A set of tracepoints that record memory checks. Equivalent to -Xcheck:memory output. j9vm checkvm A set of tracepoints that record VM checks. Equivalent to -Xcheck:vm output. j9jit verbose A set of tracepoints that record JIT compiler configuration and method compilation. Equivalent to -Xjit:verbose output. mt compiledMethods A set of tracepoints that record compiled Java methods. mt nativeMethods A set of tracepoints that record Java native methods. mt staticMethods A set of tracepoints that record Java static methods. Here are some examples: To trace all tracepoints, specify the following command: -Xtrace:maximal=all To trace all tracepoints except **j9vrb** and **j9trc**, specify the following command: -Xtrace:minimal={all},minimal={!j9vrb,j9trc} To trace all entry and exit tracepoints in j9bcu , specify the following command: -Xtrace:maximal={j9bcu{entry},j9bcu{exit}} To trace all tracepoints in **j9mm** except tracepoints 20-30, specify the following command: -Xtrace:maximal=j9mm,maximal=!j9mm.20-30 To trace tracepoints j9prt.5 through j9prt.15 , specify the following command: -Xtrace:print=j9prt.5-15 To trace all **j9trc** tracepoints, specify the following command: -Xtrace:count=j9trc To trace all entry and exit tracepoints, specify the following command: -Xtrace:external={all{entry},all{exit}}","title":"Tracepoint specification"},{"location":"xtrace/#trace-levels","text":"Tracepoints have been assigned levels 0 through 9 that are based on the importance of the tracepoint. A level 0 tracepoint is the most important. It is reserved for extraordinary events and errors. A level 9 tracepoint is in-depth component detail. To specify a given level of tracing, the level0 through level9 keywords are used. You can abbreviate these keywords to l0 through l9. For example, if level5 is selected, all tracepoints that have levels 0 through 5 are included. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. The level is provided as a modifier to a component specification, for example: -Xtrace:maximal={all{level5}} or -Xtrace:maximal={j9mm{L2},j9trc,j9bcu{level9},all{level1}} In the first example, tracepoints that have a level of 5 or less are enabled for all components. In the second example, all level 1 tracepoints are enabled. All level 2 tracepoints in j9mm are enabled. All tracepoints up to level 9 are enabled in j9bcu . Note: The level applies only to the current component. If multiple trace selection components are found in a trace properties file, the level is reset to the default for each new component. Level specifications do not apply to explicit tracepoint specifications that use the TPNID keyword. When the not operator is specified, the level is inverted; that is, !j9mm{level5} disables all tracepoints of level 6 or greater for the j9mm component. The following example enables trace for all components at level 9 (the default), but disables level 6 and higher for the locking component, and level 7 and higher for the storage component: -Xtrace:print={all},print={!j9trc{l5},j9mm{l6}} Here are some examples: To count the level zero and level one tracepoints matched, specify the following command: -Xtrace:count=all{L1} To produce maximal trace of all components at level 5 and j9mm at level 9, specify the following command: -Xtrace:maximal={all{level5},j9mm{L9}} To trace all components at level 6, but do not trace j9vrb at all, and do not trace the entry and exit tracepoints in the j9trc component, specify the following command: -Xtrace:minimal={all{l6}},minimal={!j9vrb,j9trc{entry},j9trc{exit}}","title":"Trace levels"},{"location":"xtrace/#parameters","text":"Parameters to use with the -Xtrace option:","title":"Parameters"},{"location":"xtrace/#buffers","text":"You can modify the size of the buffers to change how much diagnostic output is provided in a snap dump. This buffer is allocated for each thread that makes trace entries. The following table shows how this parameter can be set: Command Effect -Xtrace:buffers=<size> Creates buffers of the specified <size> in k (KB) or m (MB), allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>dynamic Creates buffers of the specified <size> , allocated as needed to match the rate of trace data generation to the output media. -Xtrace:buffers=<size>nodynamic Creates buffers of the specified <size> , with a maximum allocation of two buffers per thread. If external trace is enabled, the number of buffers is doubled; that is, each thread allocates two or more buffers. The same buffer size is used for state and exception tracing, but, in this case, buffers are allocated globally. The default is 8 KB per thread. The dynamic and nodynamic suboptions have meaning only when tracing to an output file. Note: If nodynamic is specified, you might lose trace data if the volume of trace data exceeds the bandwidth of the trace output file. Message UTE115 is issued when the first trace entry is lost, and message UTE018 is issued when the VM ends. Here are some command line examples: To set a buffer size of 2 MB per thread, with dynamic buffering, use: -Xtrace:buffers=2m To limit each thread to 2 trace buffers, each of 128 KB: -Xtrace:buffers={128k,nodynamic}","title":"buffers"},{"location":"xtrace/#count-tracepoint","text":"-Xtrace:count=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The count option requests that only a count of the selected tracepoints is kept. When the VM ends, all nonzero totals of tracepoints (sorted by tracepoint id) are written to a file, called utTrcCounters , in the current directory. This information is useful if you want to determine the overhead of particular tracepoints, but do not want to produce a large amount (GB) of trace data. For example, to count the tracepoints that are used in the default trace configuration, use the following command: -Xtrace:count=all{level1},count=j9mm{gclogger}","title":"count (tracepoint)"},{"location":"xtrace/#exception-tracepoint","text":"-Xtrace:exception=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When exception trace is enabled, the trace data is collected in internal buffers that are separate from the normal buffers. These internal buffers can then be written to a snap file or written to the file that is specified in an exception.output option. The exception option allows low-volume tracing in buffers and files that are distinct from the higher-volume information that minimal and maximal tracing have provided. In most cases, this information is exception-type data, but you can use this option to capture any trace data that you want. This form of tracing is channeled through a single set of buffers, as opposed to the buffer-per-thread approach for normal trace. Buffer contention might occur if high volumes of trace data are collected. A difference exists in the <tracepoint_specification> defaults for exception tracing; see Tracepoint specification . Notes: The exception trace buffers are intended for low-volume tracing. By default, the exception trace buffers log garbage collection (GC) event tracepoints, see Default tracing. You can send additional tracepoints to the exception buffers or turn off the GC tracepoints. Changing the exception trace buffers alters the contents of the GC History section in any Javadumps. When exception trace is entered for an active tracepoint, the current thread ID is checked against the previous caller's thread ID. If it is a different thread, or this is the first call to exception trace, a context tracepoint is put into the trace buffer first. This context tracepoint consists only of the current thread ID, which is necessary because of the single set of buffers for exception trace. (The formatter identifies all trace entries as coming from the Exception trace pseudo thread when it formats exception trace files.)","title":"exception (tracepoint)"},{"location":"xtrace/#exceptionoutput","text":"Use exception output to redirect exceptions trace data to a file. -Xtrace:exception.output=<filename>[,<size>] Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps nondestructively to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Here are some examples: Exception trace output goes to file /u/traces/exception.trc with no size limit: -Xtrace:exception.output=/u/traces/exception.trc,maximal Exception trace output goes to file except and wraps at 2 MB: -Xtrace:exception.output={except,2m},maximal Exception trace output goes to a file whose filename contains today's date in * yyyymmdd* format (for example, traceout.20181025.trc ): -Xtrace:exception.output=traceout.%d.trc,maximal Exception trace output goes to a file whose filename contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:exception.output=tracefrompid%p.trc,maximal Exception trace output goes to a file whose filename contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:exception.output=traceout.%t.trc,maximal","title":"exception.output"},{"location":"xtrace/#external-tracepoint","text":"-Xtrace:external<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The external option routes trace data to trace listeners, which are registered by using the JVMTI RegisterTracePointSubscriber() and DeregisterTracePointSubscriber() APIs.","title":"external (tracepoint)"},{"location":"xtrace/#help","text":"-Xtrace:help Displays general trace help","title":"help"},{"location":"xtrace/#iprint-tracepoint","text":"-Xtrace:iprint=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The iprint option is the same as the print option, but uses indenting to format the trace.","title":"iprint (tracepoint)"},{"location":"xtrace/#maximal-tracepoint","text":"-Xtrace:maximal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. All associated data is traced. minimal and maximal traces are independent from any types that follow them. For example, if the maximal option is specified, it does not affect a later option such as print .","title":"maximal (tracepoint)"},{"location":"xtrace/#methods","text":"Using method trace provides a complete and potentially large diagnosis of code paths inside your application and the system classes. Use wild cards and filtering to control method trace so that you can focus on the sections of code that interest you. To specify one or more method specifications, use the following syntax: -Xtrace:methods=<method_specification>[,<method_specification>] The syntax for <method_specification> can be further broken down to the following suboptions: -Xtrace:methods={[!][*][<package>/]<class>[*],[[*]<method>[*]|[()]]} Where: The delimiter between parts of the package name is a forward slash, \"/\". The ! in the methods parameter is a NOT operator that allows you to tell the VM not to trace the specified method or methods. The parentheses, (), define whether or not to include method parameters in the trace. If a method specification includes any commas, the whole specification must be enclosed in braces, for example: -Xtrace:methods={java/lang/*,java/util/*},print=mt It might be necessary to enclose your command line in quotation marks to prevent the shell intercepting and fragmenting comma-separated command lines, for example: \"-Xtrace:methods={java/lang/*,java/util/*},print=mt\" To output all method trace information to stderr, use either the print or iprint suboptions: -Xtrace:print=mt,methods=*.* -Xtrace:iprint=mt,methods=*.* The iprint suboption prints to stderr with indentation. To output method trace information in binary format, see the output option. Here are some examples: Tracing entry and exit of all methods in a given class: To trace all method entry and exit of the ReaderMain class in the default package and the java.lang.String class, specify the following command: -Xtrace:methods={ReaderMain.*,java/lang/String.*},print=mt Tracing entry, exit and input parameters of all methods in a class: To trace all method entry, exit, and input of the ReaderMain class in the default package, specify the following command: -Xtrace:methods=ReaderMain.*(),print=mt Tracing all methods in a given package: To trace all method entry, exit, and input of all classes in the package com.ibm.socket , specify the following command: -Xtrace:methods=com/ibm/socket/*.*(),print=mt Multiple method trace: To trace all method entry, exit, and input in the Widget class in the default package and all method entry and exit in the common package, specify the following command: -Xtrace:methods={Widget.*(),common/*},print=mt Using the ! operator: To trace all methods in the ArticleUI class in the default package except those beginning with \"get\", specify the following command: -Xtrace:methods={ArticleUI.*,!ArticleUI.get*},print=mt Tracing a specific method in a class: This example traces entry and exit of the substring method of the java.lang.String class . If there is more than one method with the same name, they are all traced. You cannot filter method trace by the signature of the method. -Xtrace:print=mt,methods={java/lang/String.substring} Tracing the constructor of a class: This example traces entry and exit of the constructors of the java.lang.String class. -Xtrace:print=mt,methods={java/lang/String.<init>} Here is some example output: java \"-Xtrace:methods={java/lang*.*},iprint=mt\" HW 10:02:42.281*0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.281 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.281 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/String.<clinit>()V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.296 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.verify(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method 10:02:42.328 0x9e900 mt.4 > java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.setInitStatus(Ljava/lang/Class;I) V Compiled static method 10:02:42.328 0x9e900 mt.10 < java/lang/J9VMInternals.initialize(Ljava/lang/Class;) V Compiled static method The output lines comprise of: 0x9e900 , the current execenv (execution environment). Because every VM thread has its own execenv , you can regard execenv as a thread-id . All trace with the same execenv relates to a single thread. The individual tracepoint ID in the mt component that collects and emits the data. The remaining fields show whether a method is being entered (>) or exited (<), followed by details of the method.","title":"methods"},{"location":"xtrace/#minimal-tracepoint","text":"-Xtrace:minimal=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . When specified, trace data is placed into internal trace buffers that can then be written to a snap file or written to the files that are specified in an output trace option. Only the time stamp and tracepoint identifier are recorded. When the trace is formatted, missing trace data is replaced with the characters \"???\" in the output file. minimal and maximal traces are independent from any types that follow them. For example, if the minimal option is specified, it does not affect a later option such as print .","title":"minimal (tracepoint)"},{"location":"xtrace/#none-tracepoint","text":"-Xtrace:none[=<tracepoint_specification>] For further information about <tracepoint_specification> syntax, see Tracepoint specification . -Xtrace:none prevents the trace engine from loading if it is the only trace option specified. However, if other -Xtrace options are on the command line, it is treated as the equivalent of -Xtrace:none=all and the trace engine still loads. If you specify other tracepoints without specifying -Xtrace:none , the tracepoints are added to the default set.","title":"none (tracepoint)"},{"location":"xtrace/#output","text":"Sends trace data to a file, optionally of a specific size and number of generations. -Xtrace:output=<filename>[,<size>[,<generations>]]` Where: <filename> is a file name, which is created automatically if it does not exist. Otherwise, it is overwritten. To embed specific values in the file name use any of the following variables: %d% (today's date in \" yyyymmdd\" format), %p% (process ID number of the process generating the trace), or %t% (time in 24-hour hhmmss format). Optionally, <size> is a value in megabytes (MB), for example, use 4m to specify 4 MB. When full, it wraps to the beginning. If you do not limit the file, it grows indefinitely, until limited by disk space. Optionally, <generations> is a value 2 through 36. These values cause up to 36 files to be used sequentially as each file reaches its <size> threshold. When a file needs to be reused, it is overwritten. If <generations> is specified, the filename must contain a # (hash, pound symbol), which will be substituted with its generation identifier, the sequence of which is 0 through 9 followed by A through Z. Note: When tracing to a file, buffers for each thread are written when the buffer is full or when the VM ends. If a thread has been inactive for a period of time before the VM ends, what seems to be 'old' trace data is written to the file. When formatted, it then seems that trace data is missing from the other threads, but this is an unavoidable side-effect of the buffer-per-thread design. This effect becomes especially noticeable when you use the generation facility, and format individual earlier generations. Here are some examples: Trace output goes to file /u/traces/gc.problem with no size limit: -Xtrace:output=/u/traces/gc.problem,maximal=j9gc Trace output goes to file trace , which will wrap at 2 MB: -Xtrace:output={trace,2m},maximal=j9gc Trace output goes to files gc0.trc , gc1.trc , and gc2.trc , each 10 MB in size: -Xtrace:output={gc#.trc,10m,3},maximal=j9gc Trace output goes to a file, where the filename contains today's date in * yyyymmdd* format (for example, traceout.20181025.trc ): -Xtrace:output=traceout.%d.trc,maximal=j9gc Trace output goes to a file whose name contains the number of the process (the PID number) that generated it (for example, tracefrompid2112.trc ): -Xtrace:output=tracefrompid%p.trc,maximal=j9gc Trace output goes to a file whose name contains the time in hhmmss format (for example, traceout.080312.trc ): -Xtrace:output=traceout.%t.trc,maximal=j9gc","title":"output"},{"location":"xtrace/#print-tracepoint","text":"-Xtrace:print=<tracepoint_specification> For further information about <tracepoint_specification> syntax, see Tracepoint specification . The print option causes the specified tracepoints to be routed to stderr in real time. The VM tracepoints are formatted by using J9TraceFormat.dat . The class library tracepoints are formatted by J9TraceFormat.dat and TraceFormat.dat .","title":"print (tracepoint)"},{"location":"xtrace/#properties","text":"You can use properties files to control trace. A properties file saves typing and allows you to create a library of files that are tailored to solving problems in a particular area. -Xtrace:properties[=<filename>] If <filename> is not specified, the VM searches for a default name of IBMTRACE.properties in the current directory. All the options that are in the file are processed in the sequence in which they are stored in the file, before the next option that is obtained through the normal mechanism is processed. Therefore, a command-line property always overrides a property that is in the file. Here is an example of a properties file: minimal=all // maximal=j9mm maximal=j9shr buffers=128k,nodynamic output=c:\\traces\\classloader.trc print=tpnid(j9vm.23-25) The following restrictions apply to the file: The file must be a flat ASCII file. Nesting is not supported; that is, the file cannot contain a properties option. You cannot leave properties that have the form <name>=<value> to default if they are specified in the property file; that is, you must specify a value, for example maximal=all . Do not add white space before, after, or within the trace options. If any error is found when the file is accessed, VM initialization fails with an explanatory error message and return code. To use a file trace.props stored in the c:\\trc\\gc directory, specify the following command: -Xtrace:properties=c:\\trc\\gc\\trace.props","title":"properties"},{"location":"xtrace/#resume","text":"The resume option resumes tracing globally. -Xtrace:resume The suspend and resume options are not recursive. That is, two suspends that are followed by a single resume cause trace to be resumed.","title":"resume"},{"location":"xtrace/#resumecount","text":"This trace option determines whether tracing is enabled for each thread. -Xtrace:resumecount=<count> If <count> is greater than zero, each thread initially has its tracing disabled and must receive <count> resumethis actions before it starts tracing. This option is used with the trigger option. Note: You cannot use resumecount and suspendcount together because they use the same internal counter. The following example starts with all tracing turned off. Each thread starts tracing when it has had three resumethis actions performed on it: -Xtrace:resumecount=3","title":"resumecount"},{"location":"xtrace/#sleeptime","text":"You can specify how long the sleep lasts when using the sleep trigger action. -Xtrace:sleeptime=nnn|aaams|bbbs Where: nnn sleeps for nnn milliseconds. aaams sleeps for aaa milliseconds. bbbs sleeps for bbb seconds. The default length of time is 30 seconds. If no units are specified, the default time unit is milliseconds.","title":"sleeptime"},{"location":"xtrace/#stackdepth","text":"Use this option to limit the maximum number of stack frames reported by the jstacktrace trace trigger action. -Xtrace:stackdepth=<n> Where <n> is the maximum number of stack frames reported.","title":"stackdepth"},{"location":"xtrace/#suspend","text":"-Xtrace:suspend Suspends tracing globally for all threads and all forms of tracing but leaves tracepoints activated.","title":"suspend"},{"location":"xtrace/#suspendcount","text":"This trace option determines whether tracing is enabled for each thread. -Xtrace:suspendcount=<count> If <count> is greater than zero, each thread initially has its tracing enabled and must receive <count> suspendthis actions before it stops tracing. You cannot use resumecount and suspendcount together because they both set the same internal counter. This trace option is for use with the trigger option. The following example starts with tracing turned on. Each thread stops tracing when it has had three suspendthis actions performed on it: -Xtrace:suspendcount=3","title":"suspendcount"},{"location":"xtrace/#trigger","text":"The trigger parameter determines when various triggered trace actions occur. Supported actions include turning tracing on and off for all threads, turning tracing on or off for the current thread, or producing various dumps. -Xtrace:trigger=<clause>[,<clause>] This trace option does not control what is traced. It controls only whether the information that has been selected by the other trace options is produced as normal or is blocked.","title":"trigger"},{"location":"xtrace/#types","text":"Each clause of the trigger parameter can be one of the following types: a method ( -Xtrace:trigger=method{...} ) a tracepoint ID ( -Xtrace:trigger=tpnid{...} ) a group ( -Xtrace:trigger=group{...} ) You can specify multiple clauses of the same type if required, but you do not need to specify all types. method -Xtrace:trigger=method{<methodspec>[,<entryAction>[,<exitAction>[,<delayCount>[,<matchcount>]]]]} On entering a method that matches <methodspec> , the specified <entryAction> is run. On leaving a method that matches <methodspec> , the specified <exitAction> is run. If you specify a <delayCount> , the actions are performed only after a matching <methodspec> has been entered that many times. If you specify a <matchCount> , <entryAction> and <exitAction> are performed at most that many times. <methodspec> is the specification of a Java method, consisting of a class and a method name separated by a dot. For example, specify HelloWorld.main . If the class is in a package, the package name must be included, separated by slashes. For example, specify java/lang/String.getBytes . A wildcard \"*\" can be used at the start or end of the class and method names, or both. For example, you can specify */String.get* . To specify a constructor method, use <init> as the method name. Method signatures cannot be specified, so a method specification applies to all overloaded methods. tracepoint ID -Xtrace:trigger=tpnid{<tpnid>|<tpnidRange>,<action>[,<delayCount>[,<matchcount>]]} On finding the specified active tracepoint ID ( <tpnid> ) or a tracepoint ID) that falls inside the specified <tpnidRange> , the specified action is run . If you specify a <delayCount> , the action is performed only after the VM finds such an active <tpnid> that many times. If you specify a <matchCount> , <action> is performed at most that many times. group -Xtrace:trigger=group{<groupname>,<action>[,<delayCount>[,<matchcount>]]} On finding any active tracepoint that is defined as being in trace group <groupname> , for example Entry or Exit , the specified action is run . If you specify a <delayCount> , the action is performed only after that many active tracepoints from group <groupname> have been found. If you specify a <matchCount> , <action> is performed at most that many times.","title":"Types"},{"location":"xtrace/#actions","text":"Wherever an action ( <action> , <entryAction> , or <exitAction> ) must be specified in one of the trigger parameter clauses, you must select from these options: <action> Effect abort Halt the VM. ceedump This action is applicable to z/OS\u00ae only. For more information, see z/OS LE CEEDUMPs. coredump See sysdump . heapdump Produce a Heapdump. See Using Heapdump . javadump Produce a Javadump. See Using Javadump . jstacktrace Examine the Java stack of the current thread and generate auxiliary tracepoints for each stack frame. The auxiliary tracepoints are written to the same destination as the tracepoint or method trace that triggered the action. You can control the number of stack frames examined with the stackdepth=n option. See the stackdepth option. resume Resume all tracing (except for threads that are suspended by the action of the resumecount property and Trace.suspendThis() calls). resumethis Decrement the suspend count for this thread. If the suspend count is zero or less, resume tracing for this thread. sigsev Cause a segmentation violation. (Intended for use in debugging.) sleep Delay the current thread for a length of time controlled by the sleeptime option. The default is 30 seconds. See sleeptime option. snap Snap all active trace buffers to a file in the current working directory. The file name has the format: Snapnnnn.yyyymmdd.hhmmssth.ppppp.trc , where nnnn is the sequence number of the snap file since VM startup, yyyymmdd is the date, hhmmssth is the time, and ppppp is the process ID in decimal with leading zeros removed. suspend Suspend all tracing (except for special trace points). suspendthis Increment the suspend count for this thread. If the suspend-count is greater than zero, prevent all tracing for this thread. sysdump (or coredump ) Produce a system dump. See Dump agents( -Xdump:system ) . Here are some examples of using the trigger option: To produce a Java dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump} To produce a system dump when a method is entered, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,sysdump} To produce a Java dump when a class constructor is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<init>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a class static initializer is called, specify the following command: \"-Xtrace:trigger=method{java/lang/Thread.<clinit>,javadump}\" Note: This trace option is enclosed in quotation marks to avoid unwanted shell expansion of some of the characters. To produce a Java dump when a method is entered 1000 times and 1001 times, specify the following command: -Xtrace:trigger=method{java/lang/String.getBytes,javadump,,1000,2} To start tracing this thread when it enters any method in java/lang/String , and to stop tracing the thread after exiting the method, specify the following command: -Xtrace:resumecount=1 -Xtrace:trigger=method{java/lang/String.*,resumethis,suspendthis} To resume all tracing when any thread enters a method in any class that starts with error , specify the following command: -Xtrace:trigger=method{*.error*,resume} To trace (all threads) while the application is active; that is, not starting or shut down. (The application name is HelloWorld ), specify the following command: -Xtrace:suspend,trigger=method{HelloWorld.main,resume,suspend} To print a Java stack trace to the console when the mycomponent.1 tracepoint is reached, specify the following command: -Xtrace:print=mycomponent.1,trigger=tpnid{mycomponent.1,jstacktrace} To write a Java stack trace to the trace output file when the Sample.code() method is called, specify the following command: -Xtrace:maximal=mt,output=trc.out,methods={mycompany/mypackage/Sample.code},trigger=method{mycompany/mypackage/Sample.code,jstacktrace}","title":"Actions"},{"location":"xtrace/#what","text":"-Xtrace:what Shows the current trace settings","title":"what"},{"location":"xtrace/#see-also","text":"Application trace Using Heapdump Using Javadump Dump viewer","title":"See also"},{"location":"xtunevirtualized/","text":"-Xtune:virtualized Optimizes OpenJ9 VM function for virtualized environments, such as a cloud, by reducing OpenJ9 VM CPU consumption when idle. Note: Performance is optimized if there is a large shared class cache (SCC) and AOT space in the SCC is not capped. Syntax -Xtune:virtualized This option is recommended for CPU-constrained environments, such as those found in cloud deployments that use containers. Internally, the option makes the JIT compiler more conservative with inlining and recompilation decisions, which saves CPU resources. The Garbage Collector also reduces the rate of heap expansion, which reduces the memory footprint. These changes to reduce the amount of CPU that is consumed are at the expense of a small loss in throughput. When -Xtune:virtualized is used in conjunction with the -Xshareclasses option, the JIT compiler is more aggressive with its use of AOT-compiled code compared to setting only -Xshareclasses . This action provides additional CPU savings during application start-up and ramp-up, but comes at the expense of an additional small loss in throughput. See also For an example of the effect of using this option, see: Measuring the strengths of OpenJDK with Eclipse OpenJ9","title":"-Xtune:virtualized"},{"location":"xtunevirtualized/#-xtunevirtualized","text":"Optimizes OpenJ9 VM function for virtualized environments, such as a cloud, by reducing OpenJ9 VM CPU consumption when idle. Note: Performance is optimized if there is a large shared class cache (SCC) and AOT space in the SCC is not capped.","title":"-Xtune:virtualized"},{"location":"xtunevirtualized/#syntax","text":"-Xtune:virtualized This option is recommended for CPU-constrained environments, such as those found in cloud deployments that use containers. Internally, the option makes the JIT compiler more conservative with inlining and recompilation decisions, which saves CPU resources. The Garbage Collector also reduces the rate of heap expansion, which reduces the memory footprint. These changes to reduce the amount of CPU that is consumed are at the expense of a small loss in throughput. When -Xtune:virtualized is used in conjunction with the -Xshareclasses option, the JIT compiler is more aggressive with its use of AOT-compiled code compared to setting only -Xshareclasses . This action provides additional CPU savings during application start-up and ramp-up, but comes at the expense of an additional small loss in throughput.","title":"Syntax"},{"location":"xtunevirtualized/#see-also","text":"For an example of the effect of using this option, see: Measuring the strengths of OpenJDK with Eclipse OpenJ9","title":"See also"},{"location":"xverbosegclog/","text":"-Xverbosegclog Causes garbage collection (GC) output from the -verbose:gc option to be written to a specified file. Syntax -Xverbosegclog[:<filename>[,<x>,<y>]] where <filename> is the name of the file to which output is written. Dump agent tokens can be used in the filename. If the file cannot be found, the file is created, and output is written to the new file. If the file cannot be created (for example, if an invalid filename is specified), output is redirected to stderr . If you do not specify a file name, verbosegc.%Y%m%d.%H%M%S.%pid.txt is used (for example, verbosegc.20180124.093210.1234.txt ). If you specify <x> and <y> , output is redirected to x files, each containing y GC cycles. Default behavior By default, no verbose GC logging occurs. See also Dump agent tokens for more information.","title":"-Xverbosegclog"},{"location":"xverbosegclog/#-xverbosegclog","text":"Causes garbage collection (GC) output from the -verbose:gc option to be written to a specified file.","title":"-Xverbosegclog"},{"location":"xverbosegclog/#syntax","text":"-Xverbosegclog[:<filename>[,<x>,<y>]] where <filename> is the name of the file to which output is written. Dump agent tokens can be used in the filename. If the file cannot be found, the file is created, and output is written to the new file. If the file cannot be created (for example, if an invalid filename is specified), output is redirected to stderr . If you do not specify a file name, verbosegc.%Y%m%d.%H%M%S.%pid.txt is used (for example, verbosegc.20180124.093210.1234.txt ). If you specify <x> and <y> , output is redirected to x files, each containing y GC cycles.","title":"Syntax"},{"location":"xverbosegclog/#default-behavior","text":"By default, no verbose GC logging occurs.","title":"Default behavior"},{"location":"xverbosegclog/#see-also","text":"Dump agent tokens for more information.","title":"See also"},{"location":"xverify/","text":"-Xverify As described in the Oracle documentation , this Hotspot option enables or disables the verifier. For compatibility, this option is also supported by the OpenJ9 VM. Syntax Setting Effect Default -Xverify Enables verification for all non-bootstrap classes. -Xfuture verification is not enabled. yes -Xverify:all Enables verification for all classes and enables -Xfuture verification. You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier . Note: This setting might have an impact on performance. -Xverify:remote For compatibility, this parameter is accepted, but is equivalent to the default -Xverify . -Xverify:none Disables the verifier. Note: This is not a supported configuration and, as noted, is deprecated in Java 13 and later versions. If you encounter problems with the verifier turned off, remove this option and try to reproduce the problem. Note: The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions.","title":"-Xverify"},{"location":"xverify/#-xverify","text":"As described in the Oracle documentation , this Hotspot option enables or disables the verifier. For compatibility, this option is also supported by the OpenJ9 VM.","title":"-Xverify"},{"location":"xverify/#syntax","text":"Setting Effect Default -Xverify Enables verification for all non-bootstrap classes. -Xfuture verification is not enabled. yes -Xverify:all Enables verification for all classes and enables -Xfuture verification. You cannot use this setting in conjunction with -XX:+ClassRelationshipVerifier . Note: This setting might have an impact on performance. -Xverify:remote For compatibility, this parameter is accepted, but is equivalent to the default -Xverify . -Xverify:none Disables the verifier. Note: This is not a supported configuration and, as noted, is deprecated in Java 13 and later versions. If you encounter problems with the verifier turned off, remove this option and try to reproduce the problem. Note: The option -Xverify:none (and its equivalent -noverify ) is deprecated in Java 13. Both options might be removed in a future release. OpenJ9 issues a warning if these options are used in Java 13 and later versions.","title":"Syntax"},{"location":"xx_jvm_commands/","text":"Using -XX command-line options Java\u2122 VM command-line options that are specified with -XX: are not checked for validity. If the VM does not recognize the option, the option is ignored. These options can therefore be used across different VM versions without ensuring a particular level of the VM. If you want to turn off this behavior to test whether your -XX options are valid, use the -XX:-IgnoreUnrecognizedXXColonOptions option. For options that take a <size> parameter, add a suffix to the size value: \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , or Xmx16384k on the command line.","title":"Using -XX options"},{"location":"xx_jvm_commands/#using-xx-command-line-options","text":"Java\u2122 VM command-line options that are specified with -XX: are not checked for validity. If the VM does not recognize the option, the option is ignored. These options can therefore be used across different VM versions without ensuring a particular level of the VM. If you want to turn off this behavior to test whether your -XX options are valid, use the -XX:-IgnoreUnrecognizedXXColonOptions option. For options that take a <size> parameter, add a suffix to the size value: \"k\" or \"K\" to indicate kilobytes, \"m\" or \"M\" to indicate megabytes, or \"g\" or \"G\" to indicate gigabytes. For example, to set the -Xmx value to 16 MB, you can specify -Xmx16M , -Xmx16m , -Xmx16384K , or Xmx16384k on the command line.","title":"Using -XX command-line options"},{"location":"xxactiveprocessorcount/","text":"-XX:ActiveProcessorCount This Hotspot option is recognized by OpenJ9 for compatibility. Use this option to override the number of CPUs that the VM automatically detects and uses when creating threads for various subsystems. Syntax -XX:ActiveProcessorCount=<n> Where <n> is the number of CPUs. Setting Value Default <n> 1 or greater There is no default value. This option is not enabled by default. If set to 0 , there is no effect. When you set this option the following line in a Java dump file is updated to indicate the number of CPUs specified: 2CIACTIVECPU Active CPUs If this option is not set, the value for this line is 0 Active CPUs.","title":"-XXActiveProcessorCount"},{"location":"xxactiveprocessorcount/#-xxactiveprocessorcount","text":"This Hotspot option is recognized by OpenJ9 for compatibility. Use this option to override the number of CPUs that the VM automatically detects and uses when creating threads for various subsystems.","title":"-XX:ActiveProcessorCount"},{"location":"xxactiveprocessorcount/#syntax","text":"-XX:ActiveProcessorCount=<n> Where <n> is the number of CPUs. Setting Value Default <n> 1 or greater There is no default value. This option is not enabled by default. If set to 0 , there is no effect. When you set this option the following line in a Java dump file is updated to indicate the number of CPUs specified: 2CIACTIVECPU Active CPUs If this option is not set, the value for this line is 0 Active CPUs.","title":"Syntax"},{"location":"xxallowvmshutdown/","text":"-XXallowvmshutdown This option is provided as a workaround for applications that cannot shut down cleanly, as described in APAR IZ59734 . Syntax -XX:allowvmshutdown:[false|true] Setting Effect Default false Disable true Enable yes","title":"-XXallowvmshutdown"},{"location":"xxallowvmshutdown/#-xxallowvmshutdown","text":"This option is provided as a workaround for applications that cannot shut down cleanly, as described in APAR IZ59734 .","title":"-XXallowvmshutdown"},{"location":"xxallowvmshutdown/#syntax","text":"-XX:allowvmshutdown:[false|true] Setting Effect Default false Disable true Enable yes","title":"Syntax"},{"location":"xxclassrelationshipverifier/","text":"-XX:[+|-]ClassRelationshipVerifier This option enables and disables the recording of class relationships in the verifier to delay validation until triggered by class loading. Note: You cannot use this setting in conjunction with -Xfuture or -Xverify:all , which itself enables -Xfuture . Syntax -XX:[+|-]ClassRelationshipVerifier Setting Effect Default -XX:+ClassRelationshipVerifier Enable -XX:-ClassRelationshipVerifier Disable yes Explanation When enabled, this option delays validating the relationships between classes until the classes are required to be loaded during program execution. In this way, classes that are not required, are never loaded thus reducing VM startup time. A verify error is thrown if validation fails.","title":"-XX:[+|-]ClassRelationshipVerifier"},{"location":"xxclassrelationshipverifier/#-xx-classrelationshipverifier","text":"This option enables and disables the recording of class relationships in the verifier to delay validation until triggered by class loading. Note: You cannot use this setting in conjunction with -Xfuture or -Xverify:all , which itself enables -Xfuture .","title":"-XX:[+|-]ClassRelationshipVerifier"},{"location":"xxclassrelationshipverifier/#syntax","text":"-XX:[+|-]ClassRelationshipVerifier Setting Effect Default -XX:+ClassRelationshipVerifier Enable -XX:-ClassRelationshipVerifier Disable yes","title":"Syntax"},{"location":"xxclassrelationshipverifier/#explanation","text":"When enabled, this option delays validating the relationships between classes until the classes are required to be loaded during program execution. In this way, classes that are not required, are never loaded thus reducing VM startup time. A verify error is thrown if validation fails.","title":"Explanation"},{"location":"xxcodecachetotal/","text":"-XX:codecachetotal This option is an alias for the -Xcodecachetotal option. Syntax -XX:codecachetotal=<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"-XX:codecachetotal"},{"location":"xxcodecachetotal/#-xxcodecachetotal","text":"This option is an alias for the -Xcodecachetotal option.","title":"-XX:codecachetotal"},{"location":"xxcodecachetotal/#syntax","text":"-XX:codecachetotal=<size> See Using -X command-line options for more information about specifying the <size> parameter.","title":"Syntax"},{"location":"xxcompactstrings/","text":"-XX:[+|-]CompactStrings This Hotspot option is reimplemented by OpenJ9 and when enabled causes an ISO8859-1 (also known as Latin-1) character representation to be used internally for String objects, while preserving full API compatibility. This feature provides heap space savings by using an 8-bit character set internally. Most benefit is gained when the majority of the String objects that your application uses can be encoded using the ISO8859-1 character encoding. If the option is not enabled, the JIT compiler is nevertheless optimized so that although there is no saving in heap space, there is also no performance penalty. Further details are available at JEP 254: Compact Strings . Note: With OpenJ9, this option is supported on OpenJDK version 8 and later versions, whereas HotSpot only supports it from Java version 9. Syntax Setting Effect Default -XX:+CompactStrings Enable String compression -XX:-CompactStrings Disable String compression yes","title":"-XX:[+|-]CompactStrings"},{"location":"xxcompactstrings/#-xx-compactstrings","text":"This Hotspot option is reimplemented by OpenJ9 and when enabled causes an ISO8859-1 (also known as Latin-1) character representation to be used internally for String objects, while preserving full API compatibility. This feature provides heap space savings by using an 8-bit character set internally. Most benefit is gained when the majority of the String objects that your application uses can be encoded using the ISO8859-1 character encoding. If the option is not enabled, the JIT compiler is nevertheless optimized so that although there is no saving in heap space, there is also no performance penalty. Further details are available at JEP 254: Compact Strings . Note: With OpenJ9, this option is supported on OpenJDK version 8 and later versions, whereas HotSpot only supports it from Java version 9.","title":"-XX:[+|-]CompactStrings"},{"location":"xxcompactstrings/#syntax","text":"Setting Effect Default -XX:+CompactStrings Enable String compression -XX:-CompactStrings Disable String compression yes","title":"Syntax"},{"location":"xxdisableexplicitgc/","text":"-XX:[+|-]DisableExplicitGC This Hotspot option is recognized by OpenJ9 for compatibility. See \u2011Xenableexplicitgc.md / \u2011Xdisableexplicitgc for details. Syntax Setting Effect Default -XX:+DisableExplicitGC Enable GC yes -XX:-DisableExplicitGC Disable GC","title":"-XX:[+|-]DisableExplicitGC"},{"location":"xxdisableexplicitgc/#-xx-disableexplicitgc","text":"This Hotspot option is recognized by OpenJ9 for compatibility. See \u2011Xenableexplicitgc.md / \u2011Xdisableexplicitgc for details.","title":"-XX:[+|-]DisableExplicitGC"},{"location":"xxdisableexplicitgc/#syntax","text":"Setting Effect Default -XX:+DisableExplicitGC Enable GC yes -XX:-DisableExplicitGC Disable GC","title":"Syntax"},{"location":"xxdisclaimjitscratch/","text":"-XX:[+|-]DisclaimJitScratch Restriction: This option is deprecated; the option is accepted but ignored. (Linux\u00ae only) The -XX:+DisclaimJitScratch option signals to the operating system to discard temporary physical memory that is consumed by the JIT compilation threads. Syntax -XX:[+|-]DisclaimJitScratch Setting Effect Default -XX:+DisclaimJitScratch Enable -XX:-DisclaimJitScratch Disable yes Explanation Discarding temporary physical memory can reduce the physical memory reported in use by the Java\u2122 application. The physical memory that is released is available to other processes without the operating system needing to search for the least recently used frames. The -XX:-DisclaimJitScratch option turns off a previously enabled -XX:+DisclaimJitScratch option.","title":"-XX:[+|-]DisclaimJitScratch"},{"location":"xxdisclaimjitscratch/#-xx91-93disclaimjitscratch","text":"Restriction: This option is deprecated; the option is accepted but ignored. (Linux\u00ae only) The -XX:+DisclaimJitScratch option signals to the operating system to discard temporary physical memory that is consumed by the JIT compilation threads.","title":"-XX:[+|-]DisclaimJitScratch"},{"location":"xxdisclaimjitscratch/#syntax","text":"-XX:[+|-]DisclaimJitScratch Setting Effect Default -XX:+DisclaimJitScratch Enable -XX:-DisclaimJitScratch Disable yes","title":"Syntax"},{"location":"xxdisclaimjitscratch/#explanation","text":"Discarding temporary physical memory can reduce the physical memory reported in use by the Java\u2122 application. The physical memory that is released is available to other processes without the operating system needing to search for the least recently used frames. The -XX:-DisclaimJitScratch option turns off a previously enabled -XX:+DisclaimJitScratch option.","title":"Explanation"},{"location":"xxenablecpumonitor/","text":"-XX:[+|-]EnableCPUMonitor This option relates to the information about the CPU usage of thread categories that is available with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. Restriction: This option might not be supported in subsequent releases. Syntax -XX:[+|-]EnableCPUMonitor Setting Effect Default -XX:+EnableCPUMonitor Enable yes -XX:-EnableCPUMonitor Disable Explanation The -XX:+EnableCPUMonitor option enables CPU monitoring, which allows a JMX bean to track CPU usage on a per thread basis and attributes the usage against different categories. For more information, see the JvmCpuMonitorMXBean interface in the com.ibm.lang.management API documentation. To turn off CPU monitoring, set the -XX:-EnableCPUMonitor option on the command line. See also -XX:[+|-]ReduceCPUMonitorOverhead","title":"-XX:[+|-]EnableCPUMonitor"},{"location":"xxenablecpumonitor/#-xx91-93enablecpumonitor","text":"This option relates to the information about the CPU usage of thread categories that is available with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. Restriction: This option might not be supported in subsequent releases.","title":"-XX:[+|-]EnableCPUMonitor"},{"location":"xxenablecpumonitor/#syntax","text":"-XX:[+|-]EnableCPUMonitor Setting Effect Default -XX:+EnableCPUMonitor Enable yes -XX:-EnableCPUMonitor Disable","title":"Syntax"},{"location":"xxenablecpumonitor/#explanation","text":"The -XX:+EnableCPUMonitor option enables CPU monitoring, which allows a JMX bean to track CPU usage on a per thread basis and attributes the usage against different categories. For more information, see the JvmCpuMonitorMXBean interface in the com.ibm.lang.management API documentation. To turn off CPU monitoring, set the -XX:-EnableCPUMonitor option on the command line.","title":"Explanation"},{"location":"xxenablecpumonitor/#see-also","text":"-XX:[+|-]ReduceCPUMonitorOverhead","title":"See also"},{"location":"xxhandlesigxfsz/","text":"-XX:[+|-]HandleSIGXFSZ (AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae only) This option affects the handling of the operating system signal SIGXFSZ . This signal is generated when a process attempts to write to a file that causes the maximum file size ulimit to be exceeded. Syntax -XX:[+|-]HandleSIGXFSZ Setting Effect Default -XX:+HandleSIGXFSZ Enable yes -XX:-HandleSIGXFSZ Disable Explanation When enabled, the VM handles the signal SIGXFSZ and continues, without ending. When a file is written from a Java\u2122 API class that exceeds the maximum file size ulimit , an exception is raised. Log files that are created by the VM are silently truncated when they reach the maximum file size ulimit . When the option is disabled, the VM does not handle the signal SIGXFSZ . In this situation, if the maximum file size ulimit for any file is reached, the operating system ends the process with a core dump.","title":"-XX:[+|-]handleSIGXFSZ"},{"location":"xxhandlesigxfsz/#-xx91-93handlesigxfsz","text":"(AIX\u00ae, Linux\u00ae, macOS\u00ae, and z/OS\u00ae only) This option affects the handling of the operating system signal SIGXFSZ . This signal is generated when a process attempts to write to a file that causes the maximum file size ulimit to be exceeded.","title":"-XX:[+|-]HandleSIGXFSZ"},{"location":"xxhandlesigxfsz/#syntax","text":"-XX:[+|-]HandleSIGXFSZ Setting Effect Default -XX:+HandleSIGXFSZ Enable yes -XX:-HandleSIGXFSZ Disable","title":"Syntax"},{"location":"xxhandlesigxfsz/#explanation","text":"When enabled, the VM handles the signal SIGXFSZ and continues, without ending. When a file is written from a Java\u2122 API class that exceeds the maximum file size ulimit , an exception is raised. Log files that are created by the VM are silently truncated when they reach the maximum file size ulimit . When the option is disabled, the VM does not handle the signal SIGXFSZ . In this situation, if the maximum file size ulimit for any file is reached, the operating system ends the process with a core dump.","title":"Explanation"},{"location":"xxheapdumponoutofmemory/","text":"-XX:[+|-]HeapDumpOnOutOfMemory This Hotspot option is recognized by OpenJ9. You can use the option to to disable Java\u2122, heap, snap, and system dumps on out-of-memory conditions, which are enabled by default. Syntax -XX:[+|-]HeapDumpOnOutOfMemory Setting Effect Default -XX:+HeapDumpOnOutOfMemory Enable yes -XX:-HeapDumpOnOutOfMemory Disable","title":"-XX:[+|-]HeapDumpOnOutOfMemory"},{"location":"xxheapdumponoutofmemory/#-xx91-93heapdumponoutofmemory","text":"This Hotspot option is recognized by OpenJ9. You can use the option to to disable Java\u2122, heap, snap, and system dumps on out-of-memory conditions, which are enabled by default.","title":"-XX:[+|-]HeapDumpOnOutOfMemory"},{"location":"xxheapdumponoutofmemory/#syntax","text":"-XX:[+|-]HeapDumpOnOutOfMemory Setting Effect Default -XX:+HeapDumpOnOutOfMemory Enable yes -XX:-HeapDumpOnOutOfMemory Disable","title":"Syntax"},{"location":"xxheapdumppath/","text":"-XX:HeapDumpPath This Hotspot option is recognized by OpenJ9 for compatibility, and you can use it as an alias for -Xdump:directory=<path> . This option sets the directory for all VM dumps including heap dumps, Java\u2122 dumps, and system dumps. Syntax -XX:HeapDumpPath=<path> where <path> is the directory to which all dump types are written. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents.","title":"-XX:HeapDumpPath"},{"location":"xxheapdumppath/#-xxheapdumppath","text":"This Hotspot option is recognized by OpenJ9 for compatibility, and you can use it as an alias for -Xdump:directory=<path> . This option sets the directory for all VM dumps including heap dumps, Java\u2122 dumps, and system dumps.","title":"-XX:HeapDumpPath"},{"location":"xxheapdumppath/#syntax","text":"-XX:HeapDumpPath=<path> where <path> is the directory to which all dump types are written. This directory path is prefixed to the path of all non-absolute dump file names, including the file names for the default dump agents.","title":"Syntax"},{"location":"xxheapmanagementmxbeancompatibility/","text":"-XX:[+|-]HeapManagementMXBeanCompatibility The MXBean interface now reports more detailed information about memory pools and garbage collectors for a garbage collection policy. In addition, the names of memory pools and garbage collectors are changed to match the naming convention that is used for verbose garbage collection logging. This option provides compatibility with earlier versions of the VM. Syntax -XX:[+|-]HeapManagementMXBeanCompatibility Setting Effect Default -XX:+HeapManagementMXBeanCompatibility Enable -XX:-HeapManagementMXBeanCompatibility Disable yes Setting -XX:+HeapManagementMXBeanCompatibility on the command line turns on compatibility with earlier versions of the VM. Information about memory pools and garbage collectors are reported in the older format. When compatibility is turned off, the VM reports more detailed information and matches the naming of memory pools and garbage collectors to the naming convention that is used for verbose garbage collection logging. Explanation The additional information that is available from the MXBean interface for later versions is shown in the following table: Garbage collection policy MemoryPool names GarbageCollector names gencon nursery-allocate, nursery-survivor, tenured-LOA, tenured-SOA, tenured scavenge, global optthruput or optavgpause tenured-LOA, tenured-SOA, tenured global balanced balanced-reserved, balanced-eden, balanced-survivor, balanced-old partial gc, global garbage collect metronome JavaHeap global The MemoryPoolMXBean API reports values for 4 detailed memory pools instead of a single value for the overall Java\u2122 heap. In some cases the total sum of the 4 pools is more than the maximum heap size. This irregularity can be caused if data for each pool is collected between garbage collection cycles, where objects have been moved or reclaimed. If you want to collect memory usage data that is synchronized across the memory pools, use the GarbageCollectionNotificationInfo or GarbageCollectorMXBean.getLastGcInfo extensions. Earlier releases included only the following names: MemoryPool pool name: Java heap GarbageCollector name: Copy and MarkSweepCompact . See also Verbose garbage collection logging . For more information about IBM\u00ae MXBeans, see the com.ibm.lang.management API documentation.","title":"-XX:[+|-]HeapManagementMXBeanCompatibility"},{"location":"xxheapmanagementmxbeancompatibility/#-xx91-93heapmanagementmxbeancompatibility","text":"The MXBean interface now reports more detailed information about memory pools and garbage collectors for a garbage collection policy. In addition, the names of memory pools and garbage collectors are changed to match the naming convention that is used for verbose garbage collection logging. This option provides compatibility with earlier versions of the VM.","title":"-XX:[+|-]HeapManagementMXBeanCompatibility"},{"location":"xxheapmanagementmxbeancompatibility/#syntax","text":"-XX:[+|-]HeapManagementMXBeanCompatibility Setting Effect Default -XX:+HeapManagementMXBeanCompatibility Enable -XX:-HeapManagementMXBeanCompatibility Disable yes Setting -XX:+HeapManagementMXBeanCompatibility on the command line turns on compatibility with earlier versions of the VM. Information about memory pools and garbage collectors are reported in the older format. When compatibility is turned off, the VM reports more detailed information and matches the naming of memory pools and garbage collectors to the naming convention that is used for verbose garbage collection logging.","title":"Syntax"},{"location":"xxheapmanagementmxbeancompatibility/#explanation","text":"The additional information that is available from the MXBean interface for later versions is shown in the following table: Garbage collection policy MemoryPool names GarbageCollector names gencon nursery-allocate, nursery-survivor, tenured-LOA, tenured-SOA, tenured scavenge, global optthruput or optavgpause tenured-LOA, tenured-SOA, tenured global balanced balanced-reserved, balanced-eden, balanced-survivor, balanced-old partial gc, global garbage collect metronome JavaHeap global The MemoryPoolMXBean API reports values for 4 detailed memory pools instead of a single value for the overall Java\u2122 heap. In some cases the total sum of the 4 pools is more than the maximum heap size. This irregularity can be caused if data for each pool is collected between garbage collection cycles, where objects have been moved or reclaimed. If you want to collect memory usage data that is synchronized across the memory pools, use the GarbageCollectionNotificationInfo or GarbageCollectorMXBean.getLastGcInfo extensions. Earlier releases included only the following names: MemoryPool pool name: Java heap GarbageCollector name: Copy and MarkSweepCompact .","title":"Explanation"},{"location":"xxheapmanagementmxbeancompatibility/#see-also","text":"Verbose garbage collection logging . For more information about IBM\u00ae MXBeans, see the com.ibm.lang.management API documentation.","title":"See also"},{"location":"xxidletuningcompactonidle/","text":"-XX:[+|-]IdleTuningCompactOnIdle (Linux\u00ae only) This option controls garbage collection processing with compaction when the state of the OpenJ9 VM is set to idle. Restrictions: This option was deprecated in release 0.15.0 and will be removed in the future. This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. This option is not effective if XX:+IdleTuningGcOnIdle is not specified. Syntax -XX:[+|-]IdleTuningCompactOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningCompactOnIdle Enable yes -XX:-IdleTuningCompactOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a container. As indicated in the table, when the VM is running in a container and the state is set to idle, the VM attempts to compact the object heap following a garbage collection cycle. The garbage collection cycle is controlled by the -XX:+IdleTuningGcOnIdle option, which is also enabled by default when the OpenJ9 VM is running inside a container. If your application is not running in a container and you want compaction to be attempted every time idle GC happens as part of the idle-tuning process, set the -XX:+IdleTuningCompactOnIdle option on the command line when you start your application. The -XX:+IdleTuningCompactOnIdle option can be used with the -XX:+IdleTuningMinIdleWaitTime , which controls the amount of time that the VM must be idle before an idle state is set. If a value for the -XX:+IdleTuningMinIdleWaitTime option is not explicitly specified, the VM sets a default value of 180 seconds. See also -XX:IdleTuningMinFreeHeapOnIdle -XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle","title":"-XX:[+|-]IdleTuningCompactOnIdle"},{"location":"xxidletuningcompactonidle/#-xx91-93idletuningcompactonidle","text":"(Linux\u00ae only) This option controls garbage collection processing with compaction when the state of the OpenJ9 VM is set to idle. Restrictions: This option was deprecated in release 0.15.0 and will be removed in the future. This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. This option is not effective if XX:+IdleTuningGcOnIdle is not specified.","title":"-XX:[+|-]IdleTuningCompactOnIdle"},{"location":"xxidletuningcompactonidle/#syntax","text":"-XX:[+|-]IdleTuningCompactOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningCompactOnIdle Enable yes -XX:-IdleTuningCompactOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a container. As indicated in the table, when the VM is running in a container and the state is set to idle, the VM attempts to compact the object heap following a garbage collection cycle. The garbage collection cycle is controlled by the -XX:+IdleTuningGcOnIdle option, which is also enabled by default when the OpenJ9 VM is running inside a container. If your application is not running in a container and you want compaction to be attempted every time idle GC happens as part of the idle-tuning process, set the -XX:+IdleTuningCompactOnIdle option on the command line when you start your application. The -XX:+IdleTuningCompactOnIdle option can be used with the -XX:+IdleTuningMinIdleWaitTime , which controls the amount of time that the VM must be idle before an idle state is set. If a value for the -XX:+IdleTuningMinIdleWaitTime option is not explicitly specified, the VM sets a default value of 180 seconds.","title":"Syntax"},{"location":"xxidletuningcompactonidle/#see-also","text":"-XX:IdleTuningMinFreeHeapOnIdle -XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle","title":"See also"},{"location":"xxidletuninggconidle/","text":"-XX:[+|-]IdleTuningGcOnIdle (Linux\u00ae only) This option controls whether a garbage collection cycle takes place when the state of the OpenJ9 VM is set to idle. Compaction of the heap is also attempted during the idle GC when certain triggers are met. Restrictions: This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. Syntax -XX:[+|-]IdleTuningGcOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningGcOnIdle Enable yes -XX:-IdleTuningGcOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a docker container. As indicated in the table, when the VM is running in a container and the state is set to idle, this option causes the VM to release free memory pages in the object heap without resizing the Java\u2122 heap and attempts to compact the heap after the garbage collection cycle if certain heuristics are triggered. The pages are reclaimed by the operating system, which reduces the physical memory footprint of the VM. If your application is not running in a container and you want to enable idle-tuning, set the -XX:+IdleTuningGcOnIdle option on the command line when you start your application. When enabled, the -XX:+IdleTuningGcOnIdle option is used with the -XX:IdleTuningMinIdleWaitTime and -XX:IdleTuningMinFreeHeapOnIdle options. If values for these options are not explicitly specified, the VM sets the following defaults: -XX:IdleTuningMinIdleWaitTime =180 -XX:IdleTuningMinFreeHeapOnIdle =0 See also -XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"-XX:[+|-]IdleTuningGcOnIdle"},{"location":"xxidletuninggconidle/#-xx91-93idletuninggconidle","text":"(Linux\u00ae only) This option controls whether a garbage collection cycle takes place when the state of the OpenJ9 VM is set to idle. Compaction of the heap is also attempted during the idle GC when certain triggers are met. Restrictions: This option applies only to Linux\u00ae architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages.","title":"-XX:[+|-]IdleTuningGcOnIdle"},{"location":"xxidletuninggconidle/#syntax","text":"-XX:[+|-]IdleTuningGcOnIdle Setting Effect Default Default when running in a docker container -XX:+IdleTuningGcOnIdle Enable yes -XX:-IdleTuningGcOnIdle Disable yes The default depends on whether or not the OpenJ9 VM is running in a docker container. As indicated in the table, when the VM is running in a container and the state is set to idle, this option causes the VM to release free memory pages in the object heap without resizing the Java\u2122 heap and attempts to compact the heap after the garbage collection cycle if certain heuristics are triggered. The pages are reclaimed by the operating system, which reduces the physical memory footprint of the VM. If your application is not running in a container and you want to enable idle-tuning, set the -XX:+IdleTuningGcOnIdle option on the command line when you start your application. When enabled, the -XX:+IdleTuningGcOnIdle option is used with the -XX:IdleTuningMinIdleWaitTime and -XX:IdleTuningMinFreeHeapOnIdle options. If values for these options are not explicitly specified, the VM sets the following defaults: -XX:IdleTuningMinIdleWaitTime =180 -XX:IdleTuningMinFreeHeapOnIdle =0","title":"Syntax"},{"location":"xxidletuninggconidle/#see-also","text":"-XX:IdleTuningMinIdleWaitTime -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"See also"},{"location":"xxidletuningminfreeheaponidle/","text":"-XX:IdleTuningMinFreeHeapOnIdle (Linux\u00ae only) This option controls the percentage of free memory pages in the object heap that can be released when the OpenJ9 VM is in an idle state. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. Syntax -XX:IdleTuningMinFreeHeapOnIdle=<percentage> Setting Value Default <percentage> [0 - 100] 0 When used with -XX:+IdleTuningGcOnIdle , this option can be used to place an upper bound on the percentage of free memory pages in the object heap that can be released when the VM is in an idle state. If -XX:IdleTuningMinFreeHeapOnIdle is not specified, the VM uses a default value of 0. Example If you set -XX:IdleTuningMinFreeHeapOnIdle=10 , no more than 90% of the free memory pages in the object heap can be released by the VM when it is in an idle state. See also -XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"-XX:IdleTuningMinFreeHeapOnIdle"},{"location":"xxidletuningminfreeheaponidle/#-xxidletuningminfreeheaponidle","text":"(Linux\u00ae only) This option controls the percentage of free memory pages in the object heap that can be released when the OpenJ9 VM is in an idle state. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages.","title":"-XX:IdleTuningMinFreeHeapOnIdle"},{"location":"xxidletuningminfreeheaponidle/#syntax","text":"-XX:IdleTuningMinFreeHeapOnIdle=<percentage> Setting Value Default <percentage> [0 - 100] 0 When used with -XX:+IdleTuningGcOnIdle , this option can be used to place an upper bound on the percentage of free memory pages in the object heap that can be released when the VM is in an idle state. If -XX:IdleTuningMinFreeHeapOnIdle is not specified, the VM uses a default value of 0.","title":"Syntax"},{"location":"xxidletuningminfreeheaponidle/#example","text":"If you set -XX:IdleTuningMinFreeHeapOnIdle=10 , no more than 90% of the free memory pages in the object heap can be released by the VM when it is in an idle state.","title":"Example"},{"location":"xxidletuningminfreeheaponidle/#see-also","text":"-XX:IdleTuningMinIdleWaitTime -XX:[+|-]IdleTuningGcOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"See also"},{"location":"xxidletuningminidlewaittime/","text":"-XX:IdleTuningMinIdleWaitTime (Linux\u00ae only) When the OpenJ9 VM is idle, this option controls the minimum length of time that the VM must be idle before the state of the VM is set to idle. When the state changes to idle, a garbage collection cycle runs, the object heap is compacted, and free memory pages are released back to the operating system, which reduces the footprint of the VM. Garbage collection and compaction are controlled by the -XX:+IdleTuningGcOnIdle and -XX:+IdleTuningCompactOnIdle options, which are enabled by default when the OpenJ9 VM is running inside a docker container. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages. Syntax -XX:IdleTuningMinIdleWaitTime=<secs> Setting Value Default Default when running in a docker container <secs> [0 or greater] 0 180 The value used for <secs> specifies the minimum length of time in seconds that the VM is idle before the state is set to idle. Idle tuning is enabled by default when the OpenJ9 VM is running in a docker container and the VM is detected as idle for 180 seconds. Setting the value to 0 disables this feature, which causes the following idle tuning options to have no effect: -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle See also -XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"-XX:IdleTuningMinIdleWaitTime"},{"location":"xxidletuningminidlewaittime/#-xxidletuningminidlewaittime","text":"(Linux\u00ae only) When the OpenJ9 VM is idle, this option controls the minimum length of time that the VM must be idle before the state of the VM is set to idle. When the state changes to idle, a garbage collection cycle runs, the object heap is compacted, and free memory pages are released back to the operating system, which reduces the footprint of the VM. Garbage collection and compaction are controlled by the -XX:+IdleTuningGcOnIdle and -XX:+IdleTuningCompactOnIdle options, which are enabled by default when the OpenJ9 VM is running inside a docker container. Restrictions: This option applies only to Linux architectures when the Generational Concurrent ( gencon ) garbage collection policy is in use. This option is not effective if the object heap is configured to use large pages.","title":"-XX:IdleTuningMinIdleWaitTime"},{"location":"xxidletuningminidlewaittime/#syntax","text":"-XX:IdleTuningMinIdleWaitTime=<secs> Setting Value Default Default when running in a docker container <secs> [0 or greater] 0 180 The value used for <secs> specifies the minimum length of time in seconds that the VM is idle before the state is set to idle. Idle tuning is enabled by default when the OpenJ9 VM is running in a docker container and the VM is detected as idle for 180 seconds. Setting the value to 0 disables this feature, which causes the following idle tuning options to have no effect: -XX:+IdleTuningCompactOnIdle -XX:+IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle","title":"Syntax"},{"location":"xxidletuningminidlewaittime/#see-also","text":"-XX:[+|-]IdleTuningGcOnIdle -XX:IdleTuningMinFreeHeapOnIdle -XX:[+|-]IdleTuningCompactOnIdle (deprecated)","title":"See also"},{"location":"xxignoreunrecognizedvmoptions/","text":"-XX:[+|-]IgnoreUnrecognizedVMOptions This Oracle option affects the behavior of the Hotspot JVM when it finds an unrecognized top-level option at startup. This option is implemented in the OpenJ9 VM for compatibility. Syntax -XX:[+|-]IgnoreUnrecognizedVMOptions Setting Effect Default -XX:+IgnoreUnrecognizedVMOptions Enable -XX:-IgnoreUnrecognizedVMOptions Disable yes","title":"-XX:[+|-]IgnoreUnrecognizedVMOptions"},{"location":"xxignoreunrecognizedvmoptions/#-xx91-93ignoreunrecognizedvmoptions","text":"This Oracle option affects the behavior of the Hotspot JVM when it finds an unrecognized top-level option at startup. This option is implemented in the OpenJ9 VM for compatibility.","title":"-XX:[+|-]IgnoreUnrecognizedVMOptions"},{"location":"xxignoreunrecognizedvmoptions/#syntax","text":"-XX:[+|-]IgnoreUnrecognizedVMOptions Setting Effect Default -XX:+IgnoreUnrecognizedVMOptions Enable -XX:-IgnoreUnrecognizedVMOptions Disable yes","title":"Syntax"},{"location":"xxignoreunrecognizedxxcolonoptions/","text":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions By default, any -XX: options that you specify on the command line are ignored if they are not recognized, which prevents an application failing to start. However, if you want to determine whether any of your -XX: options are unrecognized, you can turn off the behavior with this option. You might want to do this, for example, if you are switching to OpenJ9 from an alternative VM implementation where you are using -XX: options to tune the runtime environment. Syntax -XX:[+|-]IgnoreUnrecognizedXXColonOptions Setting Effect Default -XX:+IgnoreUnrecognizedXXColonOptions Enable yes -XX:-IgnoreUnrecognizedXXColonOptions Disable When you specify -XX:-IgnoreUnrecognizedXXColonOptions , if you also specify a -XX: option that is not recognized, that option is reported and the VM does not start. For example: JVMJ9VM007E Command-line option unrecognised: -XX:InvalidOption Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.","title":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions"},{"location":"xxignoreunrecognizedxxcolonoptions/#-xx91-93ignoreunrecognizedxxcolonoptions","text":"By default, any -XX: options that you specify on the command line are ignored if they are not recognized, which prevents an application failing to start. However, if you want to determine whether any of your -XX: options are unrecognized, you can turn off the behavior with this option. You might want to do this, for example, if you are switching to OpenJ9 from an alternative VM implementation where you are using -XX: options to tune the runtime environment.","title":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions"},{"location":"xxignoreunrecognizedxxcolonoptions/#syntax","text":"-XX:[+|-]IgnoreUnrecognizedXXColonOptions Setting Effect Default -XX:+IgnoreUnrecognizedXXColonOptions Enable yes -XX:-IgnoreUnrecognizedXXColonOptions Disable When you specify -XX:-IgnoreUnrecognizedXXColonOptions , if you also specify a -XX: option that is not recognized, that option is reported and the VM does not start. For example: JVMJ9VM007E Command-line option unrecognised: -XX:InvalidOption Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.","title":"Syntax"},{"location":"xxinitialheapsize/","text":"-XX:InitialHeapSize / -XX:MaxHeapSize These Hotspot options for specifying heap size are recognized by OpenJ9 for compatibility. See -Xms / -Xmx for details. Syntax Setting Effect -XX:InitialHeapSize<size> Set initial heap size -XX:MaxHeapSize<size> Set maximum heap size","title":"-XX:MaxHeapSize"},{"location":"xxinitialheapsize/#-xxinitialheapsize-xxmaxheapsize","text":"These Hotspot options for specifying heap size are recognized by OpenJ9 for compatibility. See -Xms / -Xmx for details.","title":"-XX:InitialHeapSize / -XX:MaxHeapSize"},{"location":"xxinitialheapsize/#syntax","text":"Setting Effect -XX:InitialHeapSize<size> Set initial heap size -XX:MaxHeapSize<size> Set maximum heap size","title":"Syntax"},{"location":"xxinitialrampercentage/","text":"-XX:InitialRAMPercentage / -XX:MaxRAMPercentage These Oracle Hotspot options can be used to specify the initial and maximum size of the Java heap as a percentage of the total memory available to the VM. The options are recognized by OpenJ9 and provided for compatibility. Syntax Setting Effect -XX:InitialRAMPercentage=N Set initial heap size as a percentage of total memory -XX:MaxRAMPercentage=N Set maximum heap size as a percentage of total memory Where N is a value between 0 and 100, which can be of type \"double\". For example, 12.3456. Note: If you set a value for -Xms , these options are ignored. If your application is running in a container and you have specified -XX:+UseContainerSupport , both the default heap size for containers, the -XX:InitialRAMPercentage option, and the -XX:MaxRAMPercentage option are based on the available container memory.","title":"-XX:MaxRAMPercentage"},{"location":"xxinitialrampercentage/#-xxinitialrampercentage-xxmaxrampercentage","text":"These Oracle Hotspot options can be used to specify the initial and maximum size of the Java heap as a percentage of the total memory available to the VM. The options are recognized by OpenJ9 and provided for compatibility.","title":"-XX:InitialRAMPercentage / -XX:MaxRAMPercentage"},{"location":"xxinitialrampercentage/#syntax","text":"Setting Effect -XX:InitialRAMPercentage=N Set initial heap size as a percentage of total memory -XX:MaxRAMPercentage=N Set maximum heap size as a percentage of total memory Where N is a value between 0 and 100, which can be of type \"double\". For example, 12.3456. Note: If you set a value for -Xms , these options are ignored. If your application is running in a container and you have specified -XX:+UseContainerSupport , both the default heap size for containers, the -XX:InitialRAMPercentage option, and the -XX:MaxRAMPercentage option are based on the available container memory.","title":"Syntax"},{"location":"xxinterleavememory/","text":"-XX:[+|-]InterleaveMemory (AIX\u00ae, Linux\u00ae, and Windows\u2122 only, but not Linux on IBM Z\u00ae) Use the -XX:+InterleaveMemory option to enable the interleaving of allocated memory across NUMA nodes. Syntax -XX:[+|-]InterleaveMemory Setting Effect Default -XX:+InterleaveMemory Enable -XX:-InterleaveMemory Disable yes","title":"-XX:[+|-]InterleaveMemory"},{"location":"xxinterleavememory/#-xx91-93interleavememory","text":"(AIX\u00ae, Linux\u00ae, and Windows\u2122 only, but not Linux on IBM Z\u00ae) Use the -XX:+InterleaveMemory option to enable the interleaving of allocated memory across NUMA nodes.","title":"-XX:[+|-]InterleaveMemory"},{"location":"xxinterleavememory/#syntax","text":"-XX:[+|-]InterleaveMemory Setting Effect Default -XX:+InterleaveMemory Enable -XX:-InterleaveMemory Disable yes","title":"Syntax"},{"location":"xxjitinlinewatches/","text":"-XX:[+|-]JITInlineWatches This option controls JIT operations that relate to JVMTI watched fields. Syntax -XX:[+|-]JITInlineWatches Setting Effect Default -XX:+JITInlineWatches Enable yes -XX:-JITInlineWatches Disable This option enables performance improvements relating to JVMTI watched fields.","title":"-XX:[+|-]JITInlineWatches"},{"location":"xxjitinlinewatches/#-xx91-93jitinlinewatches","text":"This option controls JIT operations that relate to JVMTI watched fields.","title":"-XX:[+|-]JITInlineWatches"},{"location":"xxjitinlinewatches/#syntax","text":"-XX:[+|-]JITInlineWatches Setting Effect Default -XX:+JITInlineWatches Enable yes -XX:-JITInlineWatches Disable This option enables performance improvements relating to JVMTI watched fields.","title":"Syntax"},{"location":"xxlazysymbolresolution/","text":"-XX:[+|-]LazySymbolResolution (Linux\u00ae and macOS\u00ae only) This option affects the timing of symbol resolution for functions in user native libraries. Syntax -XX:[+|-]LazySymbolResolution Setting Effect Default -XX:+LazySymbolResolution Enable yes -XX:-LazySymbolResolution Disable Explanation Enabling this option forces the VM to delay symbol resolution for each function in a user native library, until the function is called. The -XX:-LazySymbolResolution option forces the VM to immediately resolve symbols for all functions in a user native library when the library is loaded. These options apply only to functions; variable symbols are always resolved immediately when loaded. If you attempt to use these options on an operating system other than Linux or macOS, the options are accepted, but ignored.","title":"-XX:[+|-]LazySymbolResolution"},{"location":"xxlazysymbolresolution/#-xx91-93lazysymbolresolution","text":"(Linux\u00ae and macOS\u00ae only) This option affects the timing of symbol resolution for functions in user native libraries.","title":"-XX:[+|-]LazySymbolResolution"},{"location":"xxlazysymbolresolution/#syntax","text":"-XX:[+|-]LazySymbolResolution Setting Effect Default -XX:+LazySymbolResolution Enable yes -XX:-LazySymbolResolution Disable","title":"Syntax"},{"location":"xxlazysymbolresolution/#explanation","text":"Enabling this option forces the VM to delay symbol resolution for each function in a user native library, until the function is called. The -XX:-LazySymbolResolution option forces the VM to immediately resolve symbols for all functions in a user native library when the library is loaded. These options apply only to functions; variable symbols are always resolved immediately when loaded. If you attempt to use these options on an operating system other than Linux or macOS, the options are accepted, but ignored.","title":"Explanation"},{"location":"xxmaxdirectmemorysize/","text":"-XX:MaxDirectMemorySize This Oracle Hotspot option sets a limit on the amount of memory that can be reserved for all Direct Byte Buffers. Syntax -XX:MaxDirectMemorySize=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] Depends on maximum heap size The value you choose is the limit on memory that can be reserved for all Direct Byte Buffers. If a value is set for this option, the sum of all Direct Byte Buffer sizes cannot exceed the limit. After the limit is reached, a new Direct Byte Buffer can be allocated only when enough old buffers are freed to provide enough space to allocate the new buffer. By default, the VM limits the amount of heap memory used for Direct Byte Buffers to approximately 85% of the maximum heap size.","title":"-XX:MaxDirectMemorySize"},{"location":"xxmaxdirectmemorysize/#-xxmaxdirectmemorysize","text":"This Oracle Hotspot option sets a limit on the amount of memory that can be reserved for all Direct Byte Buffers.","title":"-XX:MaxDirectMemorySize"},{"location":"xxmaxdirectmemorysize/#syntax","text":"-XX:MaxDirectMemorySize=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] Depends on maximum heap size The value you choose is the limit on memory that can be reserved for all Direct Byte Buffers. If a value is set for this option, the sum of all Direct Byte Buffer sizes cannot exceed the limit. After the limit is reached, a new Direct Byte Buffer can be allocated only when enough old buffers are freed to provide enough space to allocate the new buffer. By default, the VM limits the amount of heap memory used for Direct Byte Buffers to approximately 85% of the maximum heap size.","title":"Syntax"},{"location":"xxnosuballoc32bitmem/","text":"-XXnosuballoc32bitmem (z/OS\u00ae only) When compressed references are used with a 64-bit OpenJ9 VM on z/OS\u00ae, this option forces the VM to use 31-bit memory allocation functions provided by z/OS. Syntax -XXnosuballoc32bitmem Setting Effect Default -XXnosuballoc32bitmem Enable No setting Disable yes Explanation This option is provided as a workaround for customers who need to use fewer pages of 31-bit virtual storage per VM invocation. Using this option might result in a small increase in the number of frames of central storage used by the VM. However, the option frees 31-bit pages for use by native code or other applications in the same address space. If this option is not specified, the VM uses an allocation strategy for 31-bit memory that reserves a region of 31-bit virtual memory.","title":"-XXnosuballoc32bitmem"},{"location":"xxnosuballoc32bitmem/#-xxnosuballoc32bitmem","text":"(z/OS\u00ae only) When compressed references are used with a 64-bit OpenJ9 VM on z/OS\u00ae, this option forces the VM to use 31-bit memory allocation functions provided by z/OS.","title":"-XXnosuballoc32bitmem"},{"location":"xxnosuballoc32bitmem/#syntax","text":"-XXnosuballoc32bitmem Setting Effect Default -XXnosuballoc32bitmem Enable No setting Disable yes","title":"Syntax"},{"location":"xxnosuballoc32bitmem/#explanation","text":"This option is provided as a workaround for customers who need to use fewer pages of 31-bit virtual storage per VM invocation. Using this option might result in a small increase in the number of frames of central storage used by the VM. However, the option frees 31-bit pages for use by native code or other applications in the same address space. If this option is not specified, the VM uses an allocation strategy for 31-bit memory that reserves a region of 31-bit virtual memory.","title":"Explanation"},{"location":"xxonoutofmemoryerror/","text":"-XX:OnOutOfMemoryError You can use this Oracle Hotspot option to run commands when a java.lang.OutOfMemoryError is thrown. This option is recognized by OpenJ9 and provided for compatibility. Syntax -XX:OnOutOfMemoryError=\"<command_string>\" where <command_string> is a command or list of commands to run when a java.lang.OutOfMemoryError occurs. For example, the following command specifies that the java -version command is run if the Test application throws a java.lang.OutOfMemoryError exception: java -XX:OnOutOfMemoryError=\"java -version\" Test If you want to run multiple commands, use semicolons to separate them within <command_string> . For example: -XX:OnOutOfMemoryError=\"<java_path> <java_program>; cat file.txt\" The -XX:OnOutOfMemoryError option is equivalent to the following -Xdump option: -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec=<command_string> For more information, see -Xdump .","title":"-XX:OnOutOfMemoryError"},{"location":"xxonoutofmemoryerror/#-xxonoutofmemoryerror","text":"You can use this Oracle Hotspot option to run commands when a java.lang.OutOfMemoryError is thrown. This option is recognized by OpenJ9 and provided for compatibility.","title":"-XX:OnOutOfMemoryError"},{"location":"xxonoutofmemoryerror/#syntax","text":"-XX:OnOutOfMemoryError=\"<command_string>\" where <command_string> is a command or list of commands to run when a java.lang.OutOfMemoryError occurs. For example, the following command specifies that the java -version command is run if the Test application throws a java.lang.OutOfMemoryError exception: java -XX:OnOutOfMemoryError=\"java -version\" Test If you want to run multiple commands, use semicolons to separate them within <command_string> . For example: -XX:OnOutOfMemoryError=\"<java_path> <java_program>; cat file.txt\" The -XX:OnOutOfMemoryError option is equivalent to the following -Xdump option: -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec=<command_string> For more information, see -Xdump .","title":"Syntax"},{"location":"xxpagealigndirectmemory/","text":"-XX:[+|-]PageAlignDirectMemory This Oracle Hotspot option affects the alignment of direct byte buffer allocation and is implemented by the OpenJ9 VM for compatibility. Syntax -XX:[+|-]PageAlignDirectMemory Setting Effect Default -XX:+PageAlignDirectMemory Enable -XX:-PageAlignDirectMemory Disable yes As discussed in the Oracle documentation, before Java\u2122 SE 7, direct buffers that were allocated using java.nio.ByteBuffer.allocateDirect(int) were aligned on a page boundary. This behavior changed in Java SE 7 and the -XX:+PageAlignDirectMemory option is provided to revert to the previous behavior. For more information about the changes, see RFE 4837564 , which was introduced in the Java SE 7 release notes .","title":"-XX:[+|-]PageAlignDirectMemory"},{"location":"xxpagealigndirectmemory/#-xx91-93pagealigndirectmemory","text":"This Oracle Hotspot option affects the alignment of direct byte buffer allocation and is implemented by the OpenJ9 VM for compatibility.","title":"-XX:[+|-]PageAlignDirectMemory"},{"location":"xxpagealigndirectmemory/#syntax","text":"-XX:[+|-]PageAlignDirectMemory Setting Effect Default -XX:+PageAlignDirectMemory Enable -XX:-PageAlignDirectMemory Disable yes As discussed in the Oracle documentation, before Java\u2122 SE 7, direct buffers that were allocated using java.nio.ByteBuffer.allocateDirect(int) were aligned on a page boundary. This behavior changed in Java SE 7 and the -XX:+PageAlignDirectMemory option is provided to revert to the previous behavior. For more information about the changes, see RFE 4837564 , which was introduced in the Java SE 7 release notes .","title":"Syntax"},{"location":"xxpositiveidentityhash/","text":"-XX:[+|-]PositiveIdentityHash OpenJ9 allows both positive and negative identity hashcodes ( System.identityHashCode / Object.hashCode ). This is problematic for programs that incorrectly assume hashcodes can only be positive. When enabled, this option limits identity hash codes to non-negative values. Because limiting identity hash codes to non-negative values can have an impact on the performance of hash-intensive operations, this option is not enabled by default. Syntax -XX:[+|-]PositiveIdentityHash Setting Effect Default -XX:+PositiveIdentityHash Enable -XX:-PositiveIdentityHash Disable yes","title":"-XX:[+|-]PositiveIdentityHash"},{"location":"xxpositiveidentityhash/#-xx91-93positiveidentityhash","text":"OpenJ9 allows both positive and negative identity hashcodes ( System.identityHashCode / Object.hashCode ). This is problematic for programs that incorrectly assume hashcodes can only be positive. When enabled, this option limits identity hash codes to non-negative values. Because limiting identity hash codes to non-negative values can have an impact on the performance of hash-intensive operations, this option is not enabled by default.","title":"-XX:[+|-]PositiveIdentityHash"},{"location":"xxpositiveidentityhash/#syntax","text":"-XX:[+|-]PositiveIdentityHash Setting Effect Default -XX:+PositiveIdentityHash Enable -XX:-PositiveIdentityHash Disable yes","title":"Syntax"},{"location":"xxreadipinfoforras/","text":"-XX:[+|-]ReadIPInfoForRAS Use this command-line option to enable and disable network queries from being used to determine the host name and IP address for RAS (reliability, availability, and serviceability) troubleshooting purposes. Syntax -XX:[+|-]ReadIPInfoForRAS Setting Effect Default -XX:+ReadIPInfoForRAS Enable yes -XX:-ReadIPInfoForRAS Disable OpenJ9 captures the host name and IP address by default, for use in diagnosing problems. But if a nameserver cannot be contacted when a network query is made, the program will wait until the resolver times out. You can avoid this situation by using the -XX:-ReadIPInfoForRAS command-line option to prevent the query from being performed.","title":"-XX:[+|-]ReadIPInfoForRAS"},{"location":"xxreadipinfoforras/#-xx91-93readipinfoforras","text":"Use this command-line option to enable and disable network queries from being used to determine the host name and IP address for RAS (reliability, availability, and serviceability) troubleshooting purposes.","title":"-XX:[+|-]ReadIPInfoForRAS"},{"location":"xxreadipinfoforras/#syntax","text":"-XX:[+|-]ReadIPInfoForRAS Setting Effect Default -XX:+ReadIPInfoForRAS Enable yes -XX:-ReadIPInfoForRAS Disable OpenJ9 captures the host name and IP address by default, for use in diagnosing problems. But if a nameserver cannot be contacted when a network query is made, the program will wait until the resolver times out. You can avoid this situation by using the -XX:-ReadIPInfoForRAS command-line option to prevent the query from being performed.","title":"Syntax"},{"location":"xxreducecpumonitoroverhead/","text":"-XX:[+|-]ReduceCPUMonitorOverhead (AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) This option relates to the CPU usage of thread categories that can be obtained with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. This option affects the way that the VM records the amount of CPU usage of non-Garbage Collection (GC) threads that do work on behalf of GC. Most GC policies require non-GC threads to do some GC housekeeping work in proportion to the amount of memory allocation that they do. Ideally the exact amount of CPU time that the thread spends doing this housekeeping work should be accounted for in the GC thread category. However there is an overhead that is associated with maintaining the CPU usage data in the correct thread category. Restriction: This option is not supported on z/OS\u00ae. If you attempt to use this option, the following message is generated: JVMJ9VM145E -XX:-ReduceCPUMonitorOverhead is unsupported on z/OS. Error: Could not create the Java Virtual Machine. Syntax -XX:[+|-]ReduceCPUMonitorOverhead Setting Effect Default -XX:+ReduceCPUMonitorOverhead Enable yes -XX:-ReduceCPUMonitorOverhead Disable When you enable this option, the VM does not maintain information on the amount of CPU usage that non-GC threads spend in doing work on behalf of GC. If you set -XX:-ReduceCPUMonitorOverhead , the OpenJ9 VM monitors the amount of GC work that a non-GC thread does and accounts for it in the GC category. This information is made available in the com.ibm.lang.management.JvmCpuMonitorMXBean . Setting this option results in a small increase in application startup time, which varies according to platform. See also -XX:[+|-]EnableCPUMonitor","title":"-XX:[+|-]ReduceCPUMonitorOverhead"},{"location":"xxreducecpumonitoroverhead/#-xx91-93reducecpumonitoroverhead","text":"(AIX\u00ae, Linux\u00ae, macOS\u00ae, and Windows\u2122 only) This option relates to the CPU usage of thread categories that can be obtained with the com.ibm.lang.management.JvmCpuMonitorMXBean application programming interface. This option affects the way that the VM records the amount of CPU usage of non-Garbage Collection (GC) threads that do work on behalf of GC. Most GC policies require non-GC threads to do some GC housekeeping work in proportion to the amount of memory allocation that they do. Ideally the exact amount of CPU time that the thread spends doing this housekeeping work should be accounted for in the GC thread category. However there is an overhead that is associated with maintaining the CPU usage data in the correct thread category. Restriction: This option is not supported on z/OS\u00ae. If you attempt to use this option, the following message is generated: JVMJ9VM145E -XX:-ReduceCPUMonitorOverhead is unsupported on z/OS. Error: Could not create the Java Virtual Machine.","title":"-XX:[+|-]ReduceCPUMonitorOverhead"},{"location":"xxreducecpumonitoroverhead/#syntax","text":"-XX:[+|-]ReduceCPUMonitorOverhead Setting Effect Default -XX:+ReduceCPUMonitorOverhead Enable yes -XX:-ReduceCPUMonitorOverhead Disable When you enable this option, the VM does not maintain information on the amount of CPU usage that non-GC threads spend in doing work on behalf of GC. If you set -XX:-ReduceCPUMonitorOverhead , the OpenJ9 VM monitors the amount of GC work that a non-GC thread does and accounts for it in the GC category. This information is made available in the com.ibm.lang.management.JvmCpuMonitorMXBean . Setting this option results in a small increase in application startup time, which varies according to platform.","title":"Syntax"},{"location":"xxreducecpumonitoroverhead/#see-also","text":"-XX:[+|-]EnableCPUMonitor","title":"See also"},{"location":"xxruntimeinstrumentation/","text":"-XX:[+|-]RuntimeInstrumentation (AIX\u00ae, Linux\u00ae, and z/OS\u00ae only) This option controls the use of the Runtime Instrumentation (RI) facility in the virtual machines that support it. The RI facility is a feature that is available in POWER8\u00ae, zEC12, and later processors that offers hardware support for collecting profiling information at run time. The process uses minimal resources. The use of the RI facility is not enabled by default. Syntax -XX:[+|-]RuntimeInstrumentation Setting Effect Default -XX:+RuntimeInstrumentation Enable -XX:-RuntimeInstrumentation Disable yes Note: On Linux, the RI facility on Power 8 and later processors uses the Performance Monitoring Unit (PMU) inside the processor. However, the PMU is also used by system profilers like oprofile or perf . Due to the current Linux kernel implementation, a user cannot reliably profile a Java\u2122 application when RI is enabled. Although this limitation might be addressed in future Linux kernels, for reliable profiling on Power systems that use Linux, the -XX:-RuntimeInstrumentation option must be used.","title":"-XX:[+|-]RuntimeInstrumentation"},{"location":"xxruntimeinstrumentation/#-xx91-93runtimeinstrumentation","text":"(AIX\u00ae, Linux\u00ae, and z/OS\u00ae only) This option controls the use of the Runtime Instrumentation (RI) facility in the virtual machines that support it. The RI facility is a feature that is available in POWER8\u00ae, zEC12, and later processors that offers hardware support for collecting profiling information at run time. The process uses minimal resources. The use of the RI facility is not enabled by default.","title":"-XX:[+|-]RuntimeInstrumentation"},{"location":"xxruntimeinstrumentation/#syntax","text":"-XX:[+|-]RuntimeInstrumentation Setting Effect Default -XX:+RuntimeInstrumentation Enable -XX:-RuntimeInstrumentation Disable yes Note: On Linux, the RI facility on Power 8 and later processors uses the Performance Monitoring Unit (PMU) inside the processor. However, the PMU is also used by system profilers like oprofile or perf . Due to the current Linux kernel implementation, a user cannot reliably profile a Java\u2122 application when RI is enabled. Although this limitation might be addressed in future Linux kernels, for reliable profiling on Power systems that use Linux, the -XX:-RuntimeInstrumentation option must be used.","title":"Syntax"},{"location":"xxsethwprefetch/","text":"-XXsetHWPrefetch (AIX\u00ae only) This option enables or disables hardware prefetch. Hardware prefetch can improve the performance of applications by prefetching memory. However, because of the workload characteristics of many Java\u2122 applications, prefetching often has an adverse effect on performance. Syntax -XXsetHWPrefetch=[none|os-default] Setting Effect Default none Disable yes os-default Enable The -XXsetHWPrefetch:none option disables hardware prefetch. Although you can disable hardware prefetch on AIX by issuing the command dscrctl -n -s 1 , this command disables hardware prefetch for all processes, and for all future processes, which might not be desirable in a mixed workload environment. The -XXsetHWPrefetch:none option allows hardware prefetch to be disabled for individual VMs. To enable hardware prefetch with the default value for the operating system, specify -XXsetHWPrefetch:os-default . Use this option only for applications that can obtain a performance gain from hardware prefetch.","title":"-XXsetHWPrefetch"},{"location":"xxsethwprefetch/#-xxsethwprefetch","text":"(AIX\u00ae only) This option enables or disables hardware prefetch. Hardware prefetch can improve the performance of applications by prefetching memory. However, because of the workload characteristics of many Java\u2122 applications, prefetching often has an adverse effect on performance.","title":"-XXsetHWPrefetch"},{"location":"xxsethwprefetch/#syntax","text":"-XXsetHWPrefetch=[none|os-default] Setting Effect Default none Disable yes os-default Enable The -XXsetHWPrefetch:none option disables hardware prefetch. Although you can disable hardware prefetch on AIX by issuing the command dscrctl -n -s 1 , this command disables hardware prefetch for all processes, and for all future processes, which might not be desirable in a mixed workload environment. The -XXsetHWPrefetch:none option allows hardware prefetch to be disabled for individual VMs. To enable hardware prefetch with the default value for the operating system, specify -XXsetHWPrefetch:os-default . Use this option only for applications that can obtain a performance gain from hardware prefetch.","title":"Syntax"},{"location":"xxshareanonymousclasses/","text":"-XX:[+|-]ShareAnonymousClasses This option enables and disables the storage of VM anonymous classes, those created by Unsafe.defineAnonymousClass , in the shared classes cache. The option is enabled by default, which means that anonymous classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance. Syntax -XX:[+|-]ShareAnonymousClasses Setting Effect Default -XX:+ShareAnonymousClasses Enable yes -XX:-ShareAnonymousClasses Disable See also AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareUnsafeClasses","title":"-XX:[+|-]ShareAnonymousClasses"},{"location":"xxshareanonymousclasses/#-xx-shareanonymousclasses","text":"This option enables and disables the storage of VM anonymous classes, those created by Unsafe.defineAnonymousClass , in the shared classes cache. The option is enabled by default, which means that anonymous classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance.","title":"-XX:[+|-]ShareAnonymousClasses"},{"location":"xxshareanonymousclasses/#syntax","text":"-XX:[+|-]ShareAnonymousClasses Setting Effect Default -XX:+ShareAnonymousClasses Enable yes -XX:-ShareAnonymousClasses Disable","title":"Syntax"},{"location":"xxshareanonymousclasses/#see-also","text":"AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareUnsafeClasses","title":"See also"},{"location":"xxshareclassesenablebci/","text":"-XX:ShareClassesDisableBCI / -XX:ShareClassesEnableBCI The option -Xshareclasses:enableBCI improves startup performance without using a modification context, when using JVMTI class modification. This suboption allows classes loaded from the shared cache to be modified using a JVMTI ClassFileLoadHook , or a java.lang.instrument agent, and prevents modified classes being stored in the shared classes cache. You can turn off this option by specifying -XX:ShareClassesDisableBCI when you start your Java\u2122 application. Syntax -XX:ShareClassesDisableBCI|ShareClassesEnableBCI Setting Effect Default -XX:ShareClassesDisableBCI Disable -XX:ShareClassesEnableBCI Enable yes These options are equivalent to -Xshareclasses:disableBCI and -Xshareclasses:enableBCI . For more information, see -Xshareclasses . See also Runtime bytecode modification","title":"-XX:ShareClassesEnableBCI"},{"location":"xxshareclassesenablebci/#-xxshareclassesdisablebci-xxshareclassesenablebci","text":"The option -Xshareclasses:enableBCI improves startup performance without using a modification context, when using JVMTI class modification. This suboption allows classes loaded from the shared cache to be modified using a JVMTI ClassFileLoadHook , or a java.lang.instrument agent, and prevents modified classes being stored in the shared classes cache. You can turn off this option by specifying -XX:ShareClassesDisableBCI when you start your Java\u2122 application.","title":"-XX:ShareClassesDisableBCI /  -XX:ShareClassesEnableBCI"},{"location":"xxshareclassesenablebci/#syntax","text":"-XX:ShareClassesDisableBCI|ShareClassesEnableBCI Setting Effect Default -XX:ShareClassesDisableBCI Disable -XX:ShareClassesEnableBCI Enable yes These options are equivalent to -Xshareclasses:disableBCI and -Xshareclasses:enableBCI . For more information, see -Xshareclasses .","title":"Syntax"},{"location":"xxshareclassesenablebci/#see-also","text":"Runtime bytecode modification","title":"See also"},{"location":"xxsharedcachehardlimit/","text":"-XX:SharedCacheHardLimit Specifies the size for a new shared class cache. Use this option together with the -Xscmx option to set actual and soft maximum size limits respectively. Syntax -XX:SharedCacheHardLimit=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] See Using -X command-line options for more information about the <size> parameter. When you use this option with the -Xscmx option, the -Xscmx option sets the soft maximum size, and the -XX:SharedCacheHardLimit option sets the actual size, of a new shared class cache. For more information, see -Xscmx . If you use this option without the -Xscmx option, the behavior is the same as using the -Xscmx option by itself; both options set the actual size of the shared class cache. For more information about cache sizes, see Cache size limits . Example The following settings, when used together, set the soft maximum size of the shared classes cache to 16 MB and the actual maximum cache size to 64 MB. -XX:SharedCacheHardLimit=64m -Xscmx16m See also -Xscmx","title":"-XX:SharedCacheHardLimit"},{"location":"xxsharedcachehardlimit/#-xxsharedcachehardlimit","text":"Specifies the size for a new shared class cache. Use this option together with the -Xscmx option to set actual and soft maximum size limits respectively.","title":"-XX:SharedCacheHardLimit"},{"location":"xxsharedcachehardlimit/#syntax","text":"-XX:SharedCacheHardLimit=<size> Setting Value Default <size> [1[k|K|m|M|g|G] or greater] See Using -X command-line options for more information about the <size> parameter. When you use this option with the -Xscmx option, the -Xscmx option sets the soft maximum size, and the -XX:SharedCacheHardLimit option sets the actual size, of a new shared class cache. For more information, see -Xscmx . If you use this option without the -Xscmx option, the behavior is the same as using the -Xscmx option by itself; both options set the actual size of the shared class cache. For more information about cache sizes, see Cache size limits .","title":"Syntax"},{"location":"xxsharedcachehardlimit/#example","text":"The following settings, when used together, set the soft maximum size of the shared classes cache to 16 MB and the actual maximum cache size to 64 MB. -XX:SharedCacheHardLimit=64m -Xscmx16m","title":"Example"},{"location":"xxsharedcachehardlimit/#see-also","text":"-Xscmx","title":"See also"},{"location":"xxshareunsafeclasses/","text":"-XX:[+|-]ShareUnsafeClasses This option enables and disables the storage of VM classes created through Unsafe.defineClass in the shared classes cache. The option is enabled by default, which means that unsafe classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance. Syntax -XX:[+|-]ShareUnsafeClasses Setting Effect Default -XX:[+]ShareUnsafeClasses Enable yes -XX:[-]ShareUnsafeClasses Disable See also AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareAnonymousClasses","title":"-XX:[+|-]ShareUnsafeClasses"},{"location":"xxshareunsafeclasses/#-xx-shareunsafeclasses","text":"This option enables and disables the storage of VM classes created through Unsafe.defineClass in the shared classes cache. The option is enabled by default, which means that unsafe classes are stored in the shared classes cache and are therefore available for ahead-of-time (AOT) compilation, potentially improving startup performance.","title":"-XX:[+|-]ShareUnsafeClasses"},{"location":"xxshareunsafeclasses/#syntax","text":"-XX:[+|-]ShareUnsafeClasses Setting Effect Default -XX:[+]ShareUnsafeClasses Enable yes -XX:[-]ShareUnsafeClasses Disable","title":"Syntax"},{"location":"xxshareunsafeclasses/#see-also","text":"AOT compiler Class data sharing -Xshareclasses -XX:[+|-]ShareAnonymousClasses","title":"See also"},{"location":"xxstacktraceinthrowable/","text":"-XX:-StackTraceInThrowable This option removes stack traces from exceptions. Syntax -XX:-StackTraceInThrowable Setting Effect Default -XX:-StackTraceInThrowable Disable No While stack traces are included in exceptions by default, recording them can have a negative impact on performance. Use this option if you want to remove stack traces, although this might cause difficulties with problem determination. When this option is enabled, Throwable.getStackTrace() returns an empty array and the stack trace is displayed when an uncaught exception occurs. Thread.getStackTrace() and Thread.getAllStackTraces() are not affected by this option.","title":"-XX:-StackTraceInThrowable"},{"location":"xxstacktraceinthrowable/#-xx-stacktraceinthrowable","text":"This option removes stack traces from exceptions.","title":"-XX:-StackTraceInThrowable"},{"location":"xxstacktraceinthrowable/#syntax","text":"-XX:-StackTraceInThrowable Setting Effect Default -XX:-StackTraceInThrowable Disable No While stack traces are included in exceptions by default, recording them can have a negative impact on performance. Use this option if you want to remove stack traces, although this might cause difficulties with problem determination. When this option is enabled, Throwable.getStackTrace() returns an empty array and the stack trace is displayed when an uncaught exception occurs. Thread.getStackTrace() and Thread.getAllStackTraces() are not affected by this option.","title":"Syntax"},{"location":"xxtransparenthugepage/","text":"-XX:[+|-]TransparentHugePage (Linux\u00ae systems only (x86, POWER\u00ae, and IBM Z\u00ae) If Transparent Huge Pages (THP) is set to madvise on your system, this option, when enabled, promotes all memory allocated to huge pages. On systems without THP, or if THP is set to always or never on your system, this option is ignored. Syntax Setting Effect Default -XX:+TransparentHugePage Enable yes (x86 systems) -XX:-TransparentHugePage Disable yes (POWER and IBM Z systems)","title":"-XX:[+|-]TransparentHugePage"},{"location":"xxtransparenthugepage/#-xx-transparenthugepage","text":"(Linux\u00ae systems only (x86, POWER\u00ae, and IBM Z\u00ae) If Transparent Huge Pages (THP) is set to madvise on your system, this option, when enabled, promotes all memory allocated to huge pages. On systems without THP, or if THP is set to always or never on your system, this option is ignored.","title":"-XX:[+|-]TransparentHugePage"},{"location":"xxtransparenthugepage/#syntax","text":"Setting Effect Default -XX:+TransparentHugePage Enable yes (x86 systems) -XX:-TransparentHugePage Disable yes (POWER and IBM Z systems)","title":"Syntax"},{"location":"xxusecompressedoops/","text":"-XX:[+|-]UseCompressedOops (64-bit only) This Oracle Hotspot option enables or disables compressed references in 64-bit JVMs. The option is recognized by the OpenJ9 VM and is provided to help when porting applications from the Hotspot JVM to the OpenJ9 VM. This option might not be supported in subsequent releases. Syntax -XX:[+|-]UseCompressedOops Setting Effect Default -XX:+UseCompressedOops Enable -XX:-UseCompressedOops Disable The -XX:+UseCompressedOops option is similar to specifying -Xcompressedrefs . Compressed references are used by default when the maximum memory size for an application is set above a platform-specific value. For more information, see -Xcompressedrefs .","title":"-XX:[+|-]UseCompressedOops"},{"location":"xxusecompressedoops/#-xx91-93usecompressedoops","text":"(64-bit only) This Oracle Hotspot option enables or disables compressed references in 64-bit JVMs. The option is recognized by the OpenJ9 VM and is provided to help when porting applications from the Hotspot JVM to the OpenJ9 VM. This option might not be supported in subsequent releases.","title":"-XX:[+|-]UseCompressedOops"},{"location":"xxusecompressedoops/#syntax","text":"-XX:[+|-]UseCompressedOops Setting Effect Default -XX:+UseCompressedOops Enable -XX:-UseCompressedOops Disable The -XX:+UseCompressedOops option is similar to specifying -Xcompressedrefs . Compressed references are used by default when the maximum memory size for an application is set above a platform-specific value. For more information, see -Xcompressedrefs .","title":"Syntax"},{"location":"xxusecontainersupport/","text":"-XX:[+|-]UseContainerSupport (Linux\u00ae only) If your application is running in a container that imposes a memory limit, the VM allocates a larger fraction of memory to the Java heap. To turn off this behavior, set the -XX:-UseContainerSupport option on the command line. Syntax -XX:[+|-]UseContainerSupport Setting Effect Default -XX:-UseContainerSupport Disable -XX:+UseContainerSupport Enable yes When using container technology, applications are typically run on their own and do not need to compete for memory. The OpenJ9 VM detects when it is running inside a container that imposes a memory limit, and adjusts the maximum Java heap size appropriately. The following table shows the values that are used when -XX:+UseContainerSupport is set: Container memory limit <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512 MB Greater than 2 GB 75% <size> The default heap size for containers takes affect only when the following conditions are met: The application is running in a container environment. The memory limit for the container is set. The -XX:+UseContainerSupport option is set, which is the default behavior. To prevent the VM adjusting the maximum heap size when running in a container, set -XX:-UseContainerSupport . When -XX:MaxRAMPercentage / -XX:InitialRAMPercentage are used with -XX:+UseContainerSupport , the corresponding heap setting is determined based on the memory limit of the container. For example, to set the maximum heap size to 80% of the container memory, specify the following options: -XX:+UseContainerSupport -XX:MaxRAMPercentage=80","title":"-XX:[+|-]UseContainerSupport"},{"location":"xxusecontainersupport/#-xx-usecontainersupport","text":"(Linux\u00ae only) If your application is running in a container that imposes a memory limit, the VM allocates a larger fraction of memory to the Java heap. To turn off this behavior, set the -XX:-UseContainerSupport option on the command line.","title":"-XX:[+|-]UseContainerSupport"},{"location":"xxusecontainersupport/#syntax","text":"-XX:[+|-]UseContainerSupport Setting Effect Default -XX:-UseContainerSupport Disable -XX:+UseContainerSupport Enable yes When using container technology, applications are typically run on their own and do not need to compete for memory. The OpenJ9 VM detects when it is running inside a container that imposes a memory limit, and adjusts the maximum Java heap size appropriately. The following table shows the values that are used when -XX:+UseContainerSupport is set: Container memory limit <size> Maximum Java heap size Less than 1 GB 50% <size> 1 GB - 2 GB <size> - 512 MB Greater than 2 GB 75% <size> The default heap size for containers takes affect only when the following conditions are met: The application is running in a container environment. The memory limit for the container is set. The -XX:+UseContainerSupport option is set, which is the default behavior. To prevent the VM adjusting the maximum heap size when running in a container, set -XX:-UseContainerSupport . When -XX:MaxRAMPercentage / -XX:InitialRAMPercentage are used with -XX:+UseContainerSupport , the corresponding heap setting is determined based on the memory limit of the container. For example, to set the maximum heap size to 80% of the container memory, specify the following options: -XX:+UseContainerSupport -XX:MaxRAMPercentage=80","title":"Syntax"},{"location":"xxusegcstartuphints/","text":"-XX:[+|-]UseGCStartupHints When this option is enabled, the VM calculates, over several application restarts, an appropriate startup heap size for your application. You can therefore use this option instead of calculating and setting an -Xms value yourself. Setting an initial size for the heap that is larger than the default helps to avoid frequent garbage collections during the startup phase of an application. Syntax -XX:[+|-]UseGCStartupHints Setting Effect Default -XX:+UseGCStartupHints Enable yes -XX:-UseGCStartupHints Disable When enabled, the VM records the heap size when a startup complete event occurs, storing the value into the shared classes cache. On subsequent restarts, the garbage collector (GC) reads this value early in startup processing and expands the heap to an appropriate value. For accuracy and stability, averages are taken over a few restarts to stabilize the value used. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. You can check the value used by the garbage collector for heap expansion by inspecting verbose GC output. The following example shows heap expansion based on hints from the previous run when using the gencon policy: <heap-resize id=\"2\" type=\"expand\" space=\"nursery\" amount=\"205258752\" count=\"1\" timems=\"0.328\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.021\" /> <heap-resize id=\"3\" type=\"expand\" space=\"tenure\" amount=\"692649984\" count=\"1\" timems=\"0.326\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.022\" /> The final value stored to the shared cache is not recorded in the verbose GC output. Notes: When enabled, this option overrides any initial heap size that is specified on the command line, for example by using the -Xms option. Because the shared classes cache is used to store heap size information, this option does not work if shared classes are disabled. Restriction: This feature is not currently available with the Balanced GC policy.","title":"-XX:[+|-]UseGCStartupHints"},{"location":"xxusegcstartuphints/#-xx91-93usegcstartuphints","text":"When this option is enabled, the VM calculates, over several application restarts, an appropriate startup heap size for your application. You can therefore use this option instead of calculating and setting an -Xms value yourself. Setting an initial size for the heap that is larger than the default helps to avoid frequent garbage collections during the startup phase of an application.","title":"-XX:[+|-]UseGCStartupHints"},{"location":"xxusegcstartuphints/#syntax","text":"-XX:[+|-]UseGCStartupHints Setting Effect Default -XX:+UseGCStartupHints Enable yes -XX:-UseGCStartupHints Disable When enabled, the VM records the heap size when a startup complete event occurs, storing the value into the shared classes cache. On subsequent restarts, the garbage collector (GC) reads this value early in startup processing and expands the heap to an appropriate value. For accuracy and stability, averages are taken over a few restarts to stabilize the value used. The heap size recorded is specific to the application command line, therefore a different hint is stored for every unique command line. You can check the value used by the garbage collector for heap expansion by inspecting verbose GC output. The following example shows heap expansion based on hints from the previous run when using the gencon policy: <heap-resize id=\"2\" type=\"expand\" space=\"nursery\" amount=\"205258752\" count=\"1\" timems=\"0.328\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.021\" /> <heap-resize id=\"3\" type=\"expand\" space=\"tenure\" amount=\"692649984\" count=\"1\" timems=\"0.326\" reason=\"hint from previous runs\" timestamp=\"2019-06-05T13:26:32.022\" /> The final value stored to the shared cache is not recorded in the verbose GC output. Notes: When enabled, this option overrides any initial heap size that is specified on the command line, for example by using the -Xms option. Because the shared classes cache is used to store heap size information, this option does not work if shared classes are disabled. Restriction: This feature is not currently available with the Balanced GC policy.","title":"Syntax"},{"location":"xxusenogc/","text":"-XX:[+|-]UseNoGC The -XX:+UseNoGC option enables a garbage collection policy that expands the Java object heap in the normal way until the limit is reached, but memory is not reclaimed through garbage collection. Syntax -XX:[+|-]UseNoGC Setting Effect Default -XX:+UseNoGC Enable -XX:-UseNoGC Disable yes Explanation This policy can be useful for test purposes and for short-lived applications. When the limit is reached an OutOfMemory error is generated and the VM shuts down. The -XX:-UseNoGC option turns off a previously enabled -XX:+UseNoGC option. This policy can also be enabled with the -Xgcpolicy:nogc option. See -Xgcpolicy:nogc for more details about this policy and when it is appropriate to use it.","title":"-XX:[+|-]UseNoGC"},{"location":"xxusenogc/#-xx91-93usenogc","text":"The -XX:+UseNoGC option enables a garbage collection policy that expands the Java object heap in the normal way until the limit is reached, but memory is not reclaimed through garbage collection.","title":"-XX:[+|-]UseNoGC"},{"location":"xxusenogc/#syntax","text":"-XX:[+|-]UseNoGC Setting Effect Default -XX:+UseNoGC Enable -XX:-UseNoGC Disable yes","title":"Syntax"},{"location":"xxusenogc/#explanation","text":"This policy can be useful for test purposes and for short-lived applications. When the limit is reached an OutOfMemory error is generated and the VM shuts down. The -XX:-UseNoGC option turns off a previously enabled -XX:+UseNoGC option. This policy can also be enabled with the -Xgcpolicy:nogc option. See -Xgcpolicy:nogc for more details about this policy and when it is appropriate to use it.","title":"Explanation"},{"location":"xxverboseverification/","text":"-XX:[+|-]VerboseVerification You can use this option to control the output of verbose diagnostic data that relates to verification. The Oracle documentation to support this option is no longer available, because it is no longer used by the Hotspot VM. An explanation is provided here. Syntax -XX:[+|-]VerboseVerification Setting Effect Default -XX:-VerboseVerification Disable yes -XX:+VerboseVerification Enable Use -XX:-VerboseVerification to enable the output of verbose diagnostic data to stderr that is generated during verification from the class file StackMapTable attribute. The data provides extra contextual information about bytecode verification, which helps diagnose bytecode or stackmap deficiencies in the field. Class files that have StackMapTable attributes (that is, class files that conform to version 50.0 or later of the class file format specification), are introduced in Java\u2122 V6. Class files with StackMapTable attributes are marked as new format in the verbose output, as shown in the example. Class files without the StackMapTable attributes are marked as old format . The StackMapTable diagnostic information is available only to classes verified with the new format. Here is an example of StackMapTable diagnostic output: Verifying class java.example.ibm.com with new format Verifying method java.example.ibm.com.foo(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;Ljava/io/PrintStream;)I StackMapTable: frame_count = 3 table = { bci: @37 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/ThreadDeath' } bci: @42 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/Throwable' } bci: @79 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class', 'java/lang/Throwable' } stack: { } } End class verification for: java.example.ibm.com","title":"-XX:[+|-]VerboseVerification"},{"location":"xxverboseverification/#-xx91-93verboseverification","text":"You can use this option to control the output of verbose diagnostic data that relates to verification. The Oracle documentation to support this option is no longer available, because it is no longer used by the Hotspot VM. An explanation is provided here.","title":"-XX:[+|-]VerboseVerification"},{"location":"xxverboseverification/#syntax","text":"-XX:[+|-]VerboseVerification Setting Effect Default -XX:-VerboseVerification Disable yes -XX:+VerboseVerification Enable Use -XX:-VerboseVerification to enable the output of verbose diagnostic data to stderr that is generated during verification from the class file StackMapTable attribute. The data provides extra contextual information about bytecode verification, which helps diagnose bytecode or stackmap deficiencies in the field. Class files that have StackMapTable attributes (that is, class files that conform to version 50.0 or later of the class file format specification), are introduced in Java\u2122 V6. Class files with StackMapTable attributes are marked as new format in the verbose output, as shown in the example. Class files without the StackMapTable attributes are marked as old format . The StackMapTable diagnostic information is available only to classes verified with the new format. Here is an example of StackMapTable diagnostic output: Verifying class java.example.ibm.com with new format Verifying method java.example.ibm.com.foo(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;Ljava/io/PrintStream;)I StackMapTable: frame_count = 3 table = { bci: @37 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/ThreadDeath' } bci: @42 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class' } stack: { 'java/lang/Throwable' } bci: @79 flags: { } locals: { 'java/lang/String', 'java/lang/Class', '[Ljava/lang/String;', 'java/io/PrintStream', 'java/lang/Class', 'java/lang/Throwable' } stack: { } } End class verification for: java.example.ibm.com","title":"Syntax"},{"location":"xxvmlockclassloader/","text":"-XX:[+|-]VMLockClassLoader This option affects synchronization on class loaders that are not parallel-capable class loaders, during class loading. Syntax -XX:[+|-]VMLockClassLoader Setting Effect Default -XX:+VMLockClassLoader Enable yes -XX:-VMLockClassLoader Disable The option, -XX:+VMLockClassLoader , causes the VM to force synchronization on a class loader that is not a parallel capable class loader during class loading. This action occurs even if the loadClass() method for that class loader is not synchronized. For information about parallel capable class loaders, see java.lang.ClassLoader.registerAsParallelCapable() . Note that this option might cause a deadlock if class loaders use non-hierarchical delegation. For example, setting the system property osgi.classloader.lock=classname with Equinox is known to cause a deadlock. This is the default option. When specifying the -XX:-VMLockClassLoader option, the VM does not force synchronization on a class loader during class loading. The class loader still conforms to class library synchronization, such as a synchronized loadClass() method.","title":"-XX:[+|-]VMLockClassLoader"},{"location":"xxvmlockclassloader/#-xx91-93vmlockclassloader","text":"This option affects synchronization on class loaders that are not parallel-capable class loaders, during class loading.","title":"-XX:[+|-]VMLockClassLoader"},{"location":"xxvmlockclassloader/#syntax","text":"-XX:[+|-]VMLockClassLoader Setting Effect Default -XX:+VMLockClassLoader Enable yes -XX:-VMLockClassLoader Disable The option, -XX:+VMLockClassLoader , causes the VM to force synchronization on a class loader that is not a parallel capable class loader during class loading. This action occurs even if the loadClass() method for that class loader is not synchronized. For information about parallel capable class loaders, see java.lang.ClassLoader.registerAsParallelCapable() . Note that this option might cause a deadlock if class loaders use non-hierarchical delegation. For example, setting the system property osgi.classloader.lock=classname with Equinox is known to cause a deadlock. This is the default option. When specifying the -XX:-VMLockClassLoader option, the VM does not force synchronization on a class loader during class loading. The class loader still conforms to class library synchronization, such as a synchronized loadClass() method.","title":"Syntax"},{"location":"xzero/","text":"-Xzero Enables reduction of the memory footprint of the Java\u2122 runtime environment when concurrently running multiple Java invocations. This option is deprecated and will be removed in a future release. This option can be used only with Java SE version 8 runtime environments. -Xzero might not be appropriate for all types of applications because it changes the implementation of java.util.ZipFile , which might cause extra memory usage. Syntax Setting Effect -Xzero:none Disable all sub options -Xzero:describe Prints the sub options in effect -Xzero:sharebootzip Enables the sharebootzip sub option -Xzero:nosharebootzip Disables the sharebootzip sub option The following parameters are no longer supported. The options are parsed but do nothing: Setting Effect -Xzero:j9zip Enables the j9zip sub option -Xzero:noj9zip Disables the j9zip sub option -Xzero:sharezip Enables the sharezip sub option -Xzero:nosharezip Disables the sharezip sub option","title":"-Xzero"},{"location":"xzero/#-xzero","text":"Enables reduction of the memory footprint of the Java\u2122 runtime environment when concurrently running multiple Java invocations. This option is deprecated and will be removed in a future release. This option can be used only with Java SE version 8 runtime environments. -Xzero might not be appropriate for all types of applications because it changes the implementation of java.util.ZipFile , which might cause extra memory usage.","title":"-Xzero"},{"location":"xzero/#syntax","text":"Setting Effect -Xzero:none Disable all sub options -Xzero:describe Prints the sub options in effect -Xzero:sharebootzip Enables the sharebootzip sub option -Xzero:nosharebootzip Disables the sharebootzip sub option The following parameters are no longer supported. The options are parsed but do nothing: Setting Effect -Xzero:j9zip Enables the j9zip sub option -Xzero:noj9zip Disables the j9zip sub option -Xzero:sharezip Enables the sharezip sub option -Xzero:nosharezip Disables the sharezip sub option","title":"Syntax"}]}
\ No newline at end of file
diff --git a/shrc/index.html b/shrc/index.html
index cb47bac..f6b2ca7 100644
--- a/shrc/index.html
+++ b/shrc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -596,35 +575,35 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#enabling-class-data-sharing" title="Enabling class data sharing" class="md-nav__link">
+  <a href="#enabling-class-data-sharing" class="md-nav__link">
     Enabling class data sharing
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#best-practices-for-using-xshareclasses" title="Best practices for using -Xshareclasses" class="md-nav__link">
+  <a href="#best-practices-for-using-xshareclasses" class="md-nav__link">
     Best practices for using -Xshareclasses
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#support-for-custom-class-loaders" title="Support for custom class loaders" class="md-nav__link">
+  <a href="#support-for-custom-class-loaders" class="md-nav__link">
     Support for custom class loaders
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#cache-utilities" title="Cache utilities" class="md-nav__link">
+  <a href="#cache-utilities" class="md-nav__link">
     Cache utilities
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3355,35 +3334,35 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#enabling-class-data-sharing" title="Enabling class data sharing" class="md-nav__link">
+  <a href="#enabling-class-data-sharing" class="md-nav__link">
     Enabling class data sharing
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#best-practices-for-using-xshareclasses" title="Best practices for using -Xshareclasses" class="md-nav__link">
+  <a href="#best-practices-for-using-xshareclasses" class="md-nav__link">
     Best practices for using -Xshareclasses
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#support-for-custom-class-loaders" title="Support for custom class loaders" class="md-nav__link">
+  <a href="#support-for-custom-class-loaders" class="md-nav__link">
     Support for custom class loaders
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#cache-utilities" title="Cache utilities" class="md-nav__link">
+  <a href="#cache-utilities" class="md-nav__link">
     Cache utilities
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3681,6 +3660,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/shrc_diag_util/index.html b/shrc_diag_util/index.html
index bac92a5..609325d 100644
--- a/shrc_diag_util/index.html
+++ b/shrc_diag_util/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -608,7 +587,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#printallstats" title="printAllStats" class="md-nav__link">
+  <a href="#printallstats" class="md-nav__link">
     printAllStats
   </a>
   
@@ -616,49 +595,49 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#class-paths" title="Class paths" class="md-nav__link">
+  <a href="#class-paths" class="md-nav__link">
     Class paths
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#romclasses" title="ROMClasses" class="md-nav__link">
+  <a href="#romclasses" class="md-nav__link">
     ROMClasses
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#aot-methods" title="AOT methods" class="md-nav__link">
+  <a href="#aot-methods" class="md-nav__link">
     AOT methods
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#urls-and-tokens" title="URLs and tokens" class="md-nav__link">
+  <a href="#urls-and-tokens" class="md-nav__link">
     URLs and tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zip-entry-caches" title="Zip entry caches" class="md-nav__link">
+  <a href="#zip-entry-caches" class="md-nav__link">
     Zip entry caches
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jit-data" title="JIT data" class="md-nav__link">
+  <a href="#jit-data" class="md-nav__link">
     JIT data
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#startup-hints" title="Startup hints" class="md-nav__link">
+  <a href="#startup-hints" class="md-nav__link">
     Startup hints
   </a>
   
@@ -670,7 +649,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#printstats" title="printStats" class="md-nav__link">
+  <a href="#printstats" class="md-nav__link">
     printStats
   </a>
   
@@ -678,210 +657,210 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#baseaddress-and-endaddress" title="baseAddress and endAddress" class="md-nav__link">
+  <a href="#baseaddress-and-endaddress" class="md-nav__link">
     baseAddress and endAddress
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#allocation-pointer" title="allocation pointer" class="md-nav__link">
+  <a href="#allocation-pointer" class="md-nav__link">
     allocation pointer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-layer" title="cache layer" class="md-nav__link">
+  <a href="#cache-layer" class="md-nav__link">
     cache layer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-size-and-free-bytes" title="cache size and free bytes" class="md-nav__link">
+  <a href="#cache-size-and-free-bytes" class="md-nav__link">
     cache size and free bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#softmx-bytes" title="softmx bytes" class="md-nav__link">
+  <a href="#softmx-bytes" class="md-nav__link">
     softmx bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#romclass-bytes" title="ROMClass bytes" class="md-nav__link">
+  <a href="#romclass-bytes" class="md-nav__link">
     ROMClass bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#aot-bytes" title="AOT bytes" class="md-nav__link">
+  <a href="#aot-bytes" class="md-nav__link">
     AOT bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#reserved-space-for-aot-bytes" title="Reserved space for AOT bytes" class="md-nav__link">
+  <a href="#reserved-space-for-aot-bytes" class="md-nav__link">
     Reserved space for AOT bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maximum-space-for-aot-bytes" title="Maximum space for AOT bytes" class="md-nav__link">
+  <a href="#maximum-space-for-aot-bytes" class="md-nav__link">
     Maximum space for AOT bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jit-data-bytes" title="JIT data bytes" class="md-nav__link">
+  <a href="#jit-data-bytes" class="md-nav__link">
     JIT data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#reserved-space-for-jit-data-bytes" title="Reserved space for JIT data bytes" class="md-nav__link">
+  <a href="#reserved-space-for-jit-data-bytes" class="md-nav__link">
     Reserved space for JIT data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maximum-space-for-jit-data-bytes" title="Maximum space for JIT data bytes" class="md-nav__link">
+  <a href="#maximum-space-for-jit-data-bytes" class="md-nav__link">
     Maximum space for JIT data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zip-cache-bytes" title="Zip cache bytes" class="md-nav__link">
+  <a href="#zip-cache-bytes" class="md-nav__link">
     Zip cache bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#startup-hint-bytes" title="Startup hint bytes" class="md-nav__link">
+  <a href="#startup-hint-bytes" class="md-nav__link">
     Startup hint bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#data-bytes" title="Data bytes" class="md-nav__link">
+  <a href="#data-bytes" class="md-nav__link">
     Data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#metadata-bytes" title="Metadata bytes" class="md-nav__link">
+  <a href="#metadata-bytes" class="md-nav__link">
     Metadata bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#metadata-used" title="Metadata % used" class="md-nav__link">
+  <a href="#metadata-used" class="md-nav__link">
     Metadata % used
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-debug-area-size" title="Class debug area size" class="md-nav__link">
+  <a href="#class-debug-area-size" class="md-nav__link">
     Class debug area size
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-debug-area-bytes-used" title="Class debug area bytes used" class="md-nav__link">
+  <a href="#class-debug-area-bytes-used" class="md-nav__link">
     Class debug area bytes used
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-debug-area-used" title="Class debug area % used" class="md-nav__link">
+  <a href="#class-debug-area-used" class="md-nav__link">
     Class debug area % used
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#romclasses_1" title="ROMClasses" class="md-nav__link">
+  <a href="#romclasses_1" class="md-nav__link">
     ROMClasses
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#aot-methods_1" title="AOT methods" class="md-nav__link">
+  <a href="#aot-methods_1" class="md-nav__link">
     AOT methods
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#classpaths-urls-and-tokens" title="Classpaths, URLs, and Tokens" class="md-nav__link">
+  <a href="#classpaths-urls-and-tokens" class="md-nav__link">
     Classpaths, URLs, and Tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zip-caches" title="Zip caches" class="md-nav__link">
+  <a href="#zip-caches" class="md-nav__link">
     Zip caches
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#startup-hints_1" title="Startup hints" class="md-nav__link">
+  <a href="#startup-hints_1" class="md-nav__link">
     Startup hints
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stale-classes" title="Stale classes" class="md-nav__link">
+  <a href="#stale-classes" class="md-nav__link">
     Stale classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stale-classes_1" title="% Stale classes" class="md-nav__link">
+  <a href="#stale-classes_1" class="md-nav__link">
     % Stale classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-is-xxx-full" title="Cache is XXX% full" class="md-nav__link">
+  <a href="#cache-is-xxx-full" class="md-nav__link">
     Cache is XXX% full
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-is-xxx-soft-full" title="Cache is XXX% soft full" class="md-nav__link">
+  <a href="#cache-is-xxx-soft-full" class="md-nav__link">
     Cache is XXX% soft full
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-is-accessible-to-current-user" title="Cache is accessible to current user" class="md-nav__link">
+  <a href="#cache-is-accessible-to-current-user" class="md-nav__link">
     Cache is accessible to current user
   </a>
   
@@ -893,7 +872,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#printtoplayerstats" title="printTopLayerStats" class="md-nav__link">
+  <a href="#printtoplayerstats" class="md-nav__link">
     printTopLayerStats
   </a>
   
@@ -3612,7 +3591,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#printallstats" title="printAllStats" class="md-nav__link">
+  <a href="#printallstats" class="md-nav__link">
     printAllStats
   </a>
   
@@ -3620,49 +3599,49 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#class-paths" title="Class paths" class="md-nav__link">
+  <a href="#class-paths" class="md-nav__link">
     Class paths
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#romclasses" title="ROMClasses" class="md-nav__link">
+  <a href="#romclasses" class="md-nav__link">
     ROMClasses
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#aot-methods" title="AOT methods" class="md-nav__link">
+  <a href="#aot-methods" class="md-nav__link">
     AOT methods
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#urls-and-tokens" title="URLs and tokens" class="md-nav__link">
+  <a href="#urls-and-tokens" class="md-nav__link">
     URLs and tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zip-entry-caches" title="Zip entry caches" class="md-nav__link">
+  <a href="#zip-entry-caches" class="md-nav__link">
     Zip entry caches
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jit-data" title="JIT data" class="md-nav__link">
+  <a href="#jit-data" class="md-nav__link">
     JIT data
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#startup-hints" title="Startup hints" class="md-nav__link">
+  <a href="#startup-hints" class="md-nav__link">
     Startup hints
   </a>
   
@@ -3674,7 +3653,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#printstats" title="printStats" class="md-nav__link">
+  <a href="#printstats" class="md-nav__link">
     printStats
   </a>
   
@@ -3682,210 +3661,210 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#baseaddress-and-endaddress" title="baseAddress and endAddress" class="md-nav__link">
+  <a href="#baseaddress-and-endaddress" class="md-nav__link">
     baseAddress and endAddress
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#allocation-pointer" title="allocation pointer" class="md-nav__link">
+  <a href="#allocation-pointer" class="md-nav__link">
     allocation pointer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-layer" title="cache layer" class="md-nav__link">
+  <a href="#cache-layer" class="md-nav__link">
     cache layer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-size-and-free-bytes" title="cache size and free bytes" class="md-nav__link">
+  <a href="#cache-size-and-free-bytes" class="md-nav__link">
     cache size and free bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#softmx-bytes" title="softmx bytes" class="md-nav__link">
+  <a href="#softmx-bytes" class="md-nav__link">
     softmx bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#romclass-bytes" title="ROMClass bytes" class="md-nav__link">
+  <a href="#romclass-bytes" class="md-nav__link">
     ROMClass bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#aot-bytes" title="AOT bytes" class="md-nav__link">
+  <a href="#aot-bytes" class="md-nav__link">
     AOT bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#reserved-space-for-aot-bytes" title="Reserved space for AOT bytes" class="md-nav__link">
+  <a href="#reserved-space-for-aot-bytes" class="md-nav__link">
     Reserved space for AOT bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maximum-space-for-aot-bytes" title="Maximum space for AOT bytes" class="md-nav__link">
+  <a href="#maximum-space-for-aot-bytes" class="md-nav__link">
     Maximum space for AOT bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jit-data-bytes" title="JIT data bytes" class="md-nav__link">
+  <a href="#jit-data-bytes" class="md-nav__link">
     JIT data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#reserved-space-for-jit-data-bytes" title="Reserved space for JIT data bytes" class="md-nav__link">
+  <a href="#reserved-space-for-jit-data-bytes" class="md-nav__link">
     Reserved space for JIT data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maximum-space-for-jit-data-bytes" title="Maximum space for JIT data bytes" class="md-nav__link">
+  <a href="#maximum-space-for-jit-data-bytes" class="md-nav__link">
     Maximum space for JIT data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zip-cache-bytes" title="Zip cache bytes" class="md-nav__link">
+  <a href="#zip-cache-bytes" class="md-nav__link">
     Zip cache bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#startup-hint-bytes" title="Startup hint bytes" class="md-nav__link">
+  <a href="#startup-hint-bytes" class="md-nav__link">
     Startup hint bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#data-bytes" title="Data bytes" class="md-nav__link">
+  <a href="#data-bytes" class="md-nav__link">
     Data bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#metadata-bytes" title="Metadata bytes" class="md-nav__link">
+  <a href="#metadata-bytes" class="md-nav__link">
     Metadata bytes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#metadata-used" title="Metadata % used" class="md-nav__link">
+  <a href="#metadata-used" class="md-nav__link">
     Metadata % used
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-debug-area-size" title="Class debug area size" class="md-nav__link">
+  <a href="#class-debug-area-size" class="md-nav__link">
     Class debug area size
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-debug-area-bytes-used" title="Class debug area bytes used" class="md-nav__link">
+  <a href="#class-debug-area-bytes-used" class="md-nav__link">
     Class debug area bytes used
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-debug-area-used" title="Class debug area % used" class="md-nav__link">
+  <a href="#class-debug-area-used" class="md-nav__link">
     Class debug area % used
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#romclasses_1" title="ROMClasses" class="md-nav__link">
+  <a href="#romclasses_1" class="md-nav__link">
     ROMClasses
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#aot-methods_1" title="AOT methods" class="md-nav__link">
+  <a href="#aot-methods_1" class="md-nav__link">
     AOT methods
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#classpaths-urls-and-tokens" title="Classpaths, URLs, and Tokens" class="md-nav__link">
+  <a href="#classpaths-urls-and-tokens" class="md-nav__link">
     Classpaths, URLs, and Tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zip-caches" title="Zip caches" class="md-nav__link">
+  <a href="#zip-caches" class="md-nav__link">
     Zip caches
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#startup-hints_1" title="Startup hints" class="md-nav__link">
+  <a href="#startup-hints_1" class="md-nav__link">
     Startup hints
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stale-classes" title="Stale classes" class="md-nav__link">
+  <a href="#stale-classes" class="md-nav__link">
     Stale classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stale-classes_1" title="% Stale classes" class="md-nav__link">
+  <a href="#stale-classes_1" class="md-nav__link">
     % Stale classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-is-xxx-full" title="Cache is XXX% full" class="md-nav__link">
+  <a href="#cache-is-xxx-full" class="md-nav__link">
     Cache is XXX% full
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-is-xxx-soft-full" title="Cache is XXX% soft full" class="md-nav__link">
+  <a href="#cache-is-xxx-soft-full" class="md-nav__link">
     Cache is XXX% soft full
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cache-is-accessible-to-current-user" title="Cache is accessible to current user" class="md-nav__link">
+  <a href="#cache-is-accessible-to-current-user" class="md-nav__link">
     Cache is accessible to current user
   </a>
   
@@ -3897,7 +3876,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#printtoplayerstats" title="printTopLayerStats" class="md-nav__link">
+  <a href="#printtoplayerstats" class="md-nav__link">
     printTopLayerStats
   </a>
   
@@ -4553,6 +4532,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
index c6976f8..f35e9f4 100644
--- a/sitemap.xml
+++ b/sitemap.xml
@@ -2,1122 +2,1122 @@
 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
     <url>
      <loc>https://www.eclipse.org/openj9/docs/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/adoptopenjdk/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/introduction/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/openj9_newuser/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.17/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.16/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.15/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.14/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.13/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.12/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.11/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.10/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.9/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/version0.8/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/gc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/jit/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/aot/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/shrc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/shrc_diag_util/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/diag_overview/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dump_javadump/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dump_heapdump/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dump_systemdump/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_jextract/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_jdmpview/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_traceformat/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_builder/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_jcmd/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_jmap/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_jps/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_jstack/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/tool_migration/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/interface_jvmti/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/interface_dtfj/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/cmdline_specifying/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/cmdline_general/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/cmdline_migration/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/d_jvm_commands/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmenableclasscaching/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmenablelegacydumpsecurity/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmenablelegacylogsecurity/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmenablelegacytracesecurity/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmgpudisable/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmgpuenable/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmgpuverbose/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmlangmanagementosmxbeaniscputime100ns/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmlangmanagementverbose/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmtoolsattachdirectory/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmtoolsattachdisplayname/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmtoolsattachenable/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmtoolsattachid/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dcomibmtoolsattachtimeout/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/dfileencoding/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/djavacompiler/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/djdknativecbc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/djdknativechacha20/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/djdknativecrypto/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/djdknativedigest/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/djdknativegcm/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/djdknativersa/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/x_jvm_commands/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/x/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xaggressive/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xalwaysclassgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xaot/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xargencoding/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xbootclasspath/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xceehdlr/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcheck/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xclassgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcodecache/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcodecachetotal/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcomp/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcompactexplicitgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcompactgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcompilationthreads/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcompressedrefs/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xconcurrentbackground/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xconcurrentlevel/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xconcurrentslack/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xconmeter/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xenableexcessivegc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xenableexplicitgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xdisablejavadump/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xenablestringconstantgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xdump/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xenableexcessivegc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xenableexplicitgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xenablestringconstantgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xfastresolve/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xfuture/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xgcsplitheap/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xgcpolicy/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xgcthreads/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xgcworkpackets/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xifa/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xint/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xss/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xjit/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xjni/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlinenumbers/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xloa/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xloaminimum/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xloaminimum/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xloaminimum/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlockreservation/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlockword/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlog/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlp/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlpcodecache/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlpobjectheap/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmine/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xminf/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmint/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmca/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmca/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmcrs/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmine/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xminf/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmint/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmn/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmn/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmn/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmo/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmo/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmo/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmo/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmr/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmr/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xms/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xmso/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xms/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xaot/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xclassgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcompactexplicitgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcompactgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xcompressedrefs/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xjit/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xlinenumbers/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xloa/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsigcatch/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsigchain/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xnumanone/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xoptionsfile/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xquickstart/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xrs/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsamplingexpirationtime/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xscdmx/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xscminaot/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xscminjitdata/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xscminaot/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xscminjitdata/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xscmx/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xshareclasses/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsigcatch/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsigchain/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsignal/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsoftmx/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xsoftrefthreshold/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xss/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xss/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xtgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xthr/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xtlhprefetch/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xtrace/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xtunevirtualized/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xverbosegclog/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xverify/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xzero/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xx_jvm_commands/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxactiveprocessorcount/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxallowvmshutdown/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxclassrelationshipverifier/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxcodecachetotal/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxcompactstrings/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxdisableexplicitgc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxdisclaimjitscratch/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxenablecpumonitor/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxhandlesigxfsz/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxheapdumponoutofmemory/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxheapdumppath/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxheapmanagementmxbeancompatibility/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxidletuningcompactonidle/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxidletuninggconidle/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxidletuningminfreeheaponidle/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxidletuningminidlewaittime/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxignoreunrecognizedvmoptions/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxignoreunrecognizedxxcolonoptions/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxinitialrampercentage/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxinitialheapsize/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxinterleavememory/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxjitinlinewatches/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxlazysymbolresolution/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxmaxdirectmemorysize/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxinitialheapsize/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxinitialrampercentage/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxonoutofmemoryerror/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxnosuballoc32bitmem/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxpagealigndirectmemory/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxpositiveidentityhash/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxreadipinfoforras/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxreducecpumonitoroverhead/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxruntimeinstrumentation/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxsethwprefetch/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxshareanonymousclasses/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxshareclassesenablebci/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxshareclassesenablebci/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxsharedcachehardlimit/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxshareunsafeclasses/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxstacktraceinthrowable/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxtransparenthugepage/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxusecompressedoops/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxusecontainersupport/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxusegcstartuphints/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxusenogc/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxverboseverification/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/xxvmlockclassloader/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/openj9_support/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/openj9_defaults/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/openj9_directories/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/messages_intro/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/env_var/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
     <url>
      <loc>https://www.eclipse.org/openj9/docs/legal/</loc>
-     <lastmod>2019-11-06</lastmod>
+     <lastmod>2019-12-05</lastmod>
      <changefreq>daily</changefreq>
     </url>
 </urlset>
\ No newline at end of file
diff --git a/sitemap.xml.gz b/sitemap.xml.gz
index 4c2a348..26ebbc3 100644
--- a/sitemap.xml.gz
+++ b/sitemap.xml.gz
Binary files differ
diff --git a/tool_builder/index.html b/tool_builder/index.html
index 9852d23..39eab75 100644
--- a/tool_builder/index.html
+++ b/tool_builder/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3533,6 +3512,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_jcmd/index.html b/tool_jcmd/index.html
index 7822186..6356dc6 100644
--- a/tool_jcmd/index.html
+++ b/tool_jcmd/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3562,6 +3541,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_jdmpview/index.html b/tool_jdmpview/index.html
index 13e8f5c..1510096 100644
--- a/tool_jdmpview/index.html
+++ b/tool_jdmpview/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -749,7 +728,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -757,21 +736,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#starting-the-dump-viewer" title="Starting the dump viewer" class="md-nav__link">
+  <a href="#starting-the-dump-viewer" class="md-nav__link">
     Starting the dump viewer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#starting-in-batch-mode" title="Starting in batch mode" class="md-nav__link">
+  <a href="#starting-in-batch-mode" class="md-nav__link">
     Starting in batch mode
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#processing-output" title="Processing output" class="md-nav__link">
+  <a href="#processing-output" class="md-nav__link">
     Processing output
   </a>
   
@@ -779,28 +758,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#using-charsfrom" title="Using CharsFrom" class="md-nav__link">
+  <a href="#using-charsfrom" class="md-nav__link">
     Using CharsFrom
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-charsto" title="Using CharsTo" class="md-nav__link">
+  <a href="#using-charsto" class="md-nav__link">
     Using CharsTo
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-grep" title="Using grep" class="md-nav__link">
+  <a href="#using-grep" class="md-nav__link">
     Using grep
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-tokens" title="Using tokens" class="md-nav__link">
+  <a href="#using-tokens" class="md-nav__link">
     Using tokens
   </a>
   
@@ -817,7 +796,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#session-parameters" title="Session parameters" class="md-nav__link">
+  <a href="#session-parameters" class="md-nav__link">
     Session parameters
   </a>
   
@@ -825,231 +804,231 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#j9help" title="!j9help" class="md-nav__link">
+  <a href="#j9help" class="md-nav__link">
     !j9help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cd" title="cd" class="md-nav__link">
+  <a href="#cd" class="md-nav__link">
     cd
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cmdfile" title="cmdfile" class="md-nav__link">
+  <a href="#cmdfile" class="md-nav__link">
     cmdfile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#deadlock" title="deadlock" class="md-nav__link">
+  <a href="#deadlock" class="md-nav__link">
     deadlock
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#find" title="find" class="md-nav__link">
+  <a href="#find" class="md-nav__link">
     find
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#findnext" title="findnext" class="md-nav__link">
+  <a href="#findnext" class="md-nav__link">
     findnext
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#history" title="history" class="md-nav__link">
+  <a href="#history" class="md-nav__link">
     history
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-thread" title="info thread" class="md-nav__link">
+  <a href="#info-thread" class="md-nav__link">
     info thread
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-system" title="info system" class="md-nav__link">
+  <a href="#info-system" class="md-nav__link">
     info system
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-class" title="info class" class="md-nav__link">
+  <a href="#info-class" class="md-nav__link">
     info class
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-proc" title="info proc" class="md-nav__link">
+  <a href="#info-proc" class="md-nav__link">
     info proc
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-jitm" title="info jitm" class="md-nav__link">
+  <a href="#info-jitm" class="md-nav__link">
     info jitm
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-lock" title="info lock" class="md-nav__link">
+  <a href="#info-lock" class="md-nav__link">
     info lock
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-sym" title="info sym" class="md-nav__link">
+  <a href="#info-sym" class="md-nav__link">
     info sym
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-mmap" title="info mmap" class="md-nav__link">
+  <a href="#info-mmap" class="md-nav__link">
     info mmap
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-heap" title="info heap" class="md-nav__link">
+  <a href="#info-heap" class="md-nav__link">
     info heap
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#heapdump" title="heapdump" class="md-nav__link">
+  <a href="#heapdump" class="md-nav__link">
     heapdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hexdump" title="hexdump" class="md-nav__link">
+  <a href="#hexdump" class="md-nav__link">
     hexdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#_1" title="+" class="md-nav__link">
+  <a href="#_1" class="md-nav__link">
     +
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#-" title="-" class="md-nav__link">
+  <a href="#-" class="md-nav__link">
     -
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#pwd" title="pwd" class="md-nav__link">
+  <a href="#pwd" class="md-nav__link">
     pwd
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#quit" title="quit" class="md-nav__link">
+  <a href="#quit" class="md-nav__link">
     quit
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#set-heapdump" title="set heapdump" class="md-nav__link">
+  <a href="#set-heapdump" class="md-nav__link">
     set heapdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#set-logging" title="set logging" class="md-nav__link">
+  <a href="#set-logging" class="md-nav__link">
     set logging
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#show-heapdump" title="show heapdump" class="md-nav__link">
+  <a href="#show-heapdump" class="md-nav__link">
     show heapdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#show-logging" title="show logging" class="md-nav__link">
+  <a href="#show-logging" class="md-nav__link">
     show logging
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#whatis-hex_address" title="whatis &lt;hex_address&gt;" class="md-nav__link">
+  <a href="#whatis-lthex_addressgt" class="md-nav__link">
     whatis &lt;hex_address&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#x-examine" title="x/ (examine)" class="md-nav__link">
+  <a href="#x-examine" class="md-nav__link">
     x/ (examine)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xj-class_name0xaddr" title="x/J [&lt;class_name&gt;|&lt;0xaddr&gt;]" class="md-nav__link">
+  <a href="#xj-ltclass_namegtlt0xaddrgt" class="md-nav__link">
     x/J [&lt;class_name&gt;|&lt;0xaddr&gt;]
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xd-0xaddr" title="x/D &lt;0xaddr&gt;" class="md-nav__link">
+  <a href="#xd-0xaddr" class="md-nav__link">
     x/D &lt;0xaddr&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xx-0xaddr" title="x/X &lt;0xaddr&gt;" class="md-nav__link">
+  <a href="#xx-0xaddr" class="md-nav__link">
     x/X &lt;0xaddr&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xk-0xaddr" title="x/K &lt;0xaddr&gt;" class="md-nav__link">
+  <a href="#xk-0xaddr" class="md-nav__link">
     x/K &lt;0xaddr&gt;
   </a>
   
@@ -1061,7 +1040,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
@@ -3641,7 +3620,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3649,21 +3628,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#starting-the-dump-viewer" title="Starting the dump viewer" class="md-nav__link">
+  <a href="#starting-the-dump-viewer" class="md-nav__link">
     Starting the dump viewer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#starting-in-batch-mode" title="Starting in batch mode" class="md-nav__link">
+  <a href="#starting-in-batch-mode" class="md-nav__link">
     Starting in batch mode
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#processing-output" title="Processing output" class="md-nav__link">
+  <a href="#processing-output" class="md-nav__link">
     Processing output
   </a>
   
@@ -3671,28 +3650,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#using-charsfrom" title="Using CharsFrom" class="md-nav__link">
+  <a href="#using-charsfrom" class="md-nav__link">
     Using CharsFrom
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-charsto" title="Using CharsTo" class="md-nav__link">
+  <a href="#using-charsto" class="md-nav__link">
     Using CharsTo
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-grep" title="Using grep" class="md-nav__link">
+  <a href="#using-grep" class="md-nav__link">
     Using grep
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#using-tokens" title="Using tokens" class="md-nav__link">
+  <a href="#using-tokens" class="md-nav__link">
     Using tokens
   </a>
   
@@ -3709,7 +3688,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#session-parameters" title="Session parameters" class="md-nav__link">
+  <a href="#session-parameters" class="md-nav__link">
     Session parameters
   </a>
   
@@ -3717,231 +3696,231 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#j9help" title="!j9help" class="md-nav__link">
+  <a href="#j9help" class="md-nav__link">
     !j9help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cd" title="cd" class="md-nav__link">
+  <a href="#cd" class="md-nav__link">
     cd
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cmdfile" title="cmdfile" class="md-nav__link">
+  <a href="#cmdfile" class="md-nav__link">
     cmdfile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#deadlock" title="deadlock" class="md-nav__link">
+  <a href="#deadlock" class="md-nav__link">
     deadlock
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#find" title="find" class="md-nav__link">
+  <a href="#find" class="md-nav__link">
     find
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#findnext" title="findnext" class="md-nav__link">
+  <a href="#findnext" class="md-nav__link">
     findnext
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#history" title="history" class="md-nav__link">
+  <a href="#history" class="md-nav__link">
     history
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-thread" title="info thread" class="md-nav__link">
+  <a href="#info-thread" class="md-nav__link">
     info thread
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-system" title="info system" class="md-nav__link">
+  <a href="#info-system" class="md-nav__link">
     info system
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-class" title="info class" class="md-nav__link">
+  <a href="#info-class" class="md-nav__link">
     info class
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-proc" title="info proc" class="md-nav__link">
+  <a href="#info-proc" class="md-nav__link">
     info proc
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-jitm" title="info jitm" class="md-nav__link">
+  <a href="#info-jitm" class="md-nav__link">
     info jitm
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-lock" title="info lock" class="md-nav__link">
+  <a href="#info-lock" class="md-nav__link">
     info lock
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-sym" title="info sym" class="md-nav__link">
+  <a href="#info-sym" class="md-nav__link">
     info sym
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-mmap" title="info mmap" class="md-nav__link">
+  <a href="#info-mmap" class="md-nav__link">
     info mmap
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info-heap" title="info heap" class="md-nav__link">
+  <a href="#info-heap" class="md-nav__link">
     info heap
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#heapdump" title="heapdump" class="md-nav__link">
+  <a href="#heapdump" class="md-nav__link">
     heapdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#hexdump" title="hexdump" class="md-nav__link">
+  <a href="#hexdump" class="md-nav__link">
     hexdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#_1" title="+" class="md-nav__link">
+  <a href="#_1" class="md-nav__link">
     +
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#-" title="-" class="md-nav__link">
+  <a href="#-" class="md-nav__link">
     -
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#pwd" title="pwd" class="md-nav__link">
+  <a href="#pwd" class="md-nav__link">
     pwd
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#quit" title="quit" class="md-nav__link">
+  <a href="#quit" class="md-nav__link">
     quit
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#set-heapdump" title="set heapdump" class="md-nav__link">
+  <a href="#set-heapdump" class="md-nav__link">
     set heapdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#set-logging" title="set logging" class="md-nav__link">
+  <a href="#set-logging" class="md-nav__link">
     set logging
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#show-heapdump" title="show heapdump" class="md-nav__link">
+  <a href="#show-heapdump" class="md-nav__link">
     show heapdump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#show-logging" title="show logging" class="md-nav__link">
+  <a href="#show-logging" class="md-nav__link">
     show logging
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#whatis-hex_address" title="whatis &lt;hex_address&gt;" class="md-nav__link">
+  <a href="#whatis-lthex_addressgt" class="md-nav__link">
     whatis &lt;hex_address&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#x-examine" title="x/ (examine)" class="md-nav__link">
+  <a href="#x-examine" class="md-nav__link">
     x/ (examine)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xj-class_name0xaddr" title="x/J [&lt;class_name&gt;|&lt;0xaddr&gt;]" class="md-nav__link">
+  <a href="#xj-ltclass_namegtlt0xaddrgt" class="md-nav__link">
     x/J [&lt;class_name&gt;|&lt;0xaddr&gt;]
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xd-0xaddr" title="x/D &lt;0xaddr&gt;" class="md-nav__link">
+  <a href="#xd-0xaddr" class="md-nav__link">
     x/D &lt;0xaddr&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xx-0xaddr" title="x/X &lt;0xaddr&gt;" class="md-nav__link">
+  <a href="#xx-0xaddr" class="md-nav__link">
     x/X &lt;0xaddr&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#xk-0xaddr" title="x/K &lt;0xaddr&gt;" class="md-nav__link">
+  <a href="#xk-0xaddr" class="md-nav__link">
     x/K &lt;0xaddr&gt;
   </a>
   
@@ -3953,7 +3932,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
@@ -4509,7 +4488,7 @@
 <p>The file that is currently being logged to might be different from set_logging_file, if that value was changed after logging was started.</p>
 </dd>
 </dl>
-<h3 id="whatis-hex_address">whatis <code>&lt;hex_address&gt;</code></h3>
+<h3 id="whatis-lthex_addressgt">whatis <code>&lt;hex_address&gt;</code></h3>
 <dl>
 <dd>Displays information about <code>whatis</code> stored at the given memory address, <code>&lt;hex_address&gt;</code>. This command examines the memory location at <code>&lt;hex_address&gt;</code> and tries to find out more information about this address. For example:<pre><code>&gt; whatis 0x8e76a8
 
@@ -4557,7 +4536,7 @@
 <p>This command is similar to the use of the <code>x/</code> command in gdb, including the use of defaults.</p>
 </dd>
 </dl>
-<h3 id="xj-class_name0xaddr">x/J [<code>&lt;class_name&gt;</code>|<code>&lt;0xaddr&gt;</code>]</h3>
+<h3 id="xj-ltclass_namegtlt0xaddrgt">x/J [<code>&lt;class_name&gt;</code>|<code>&lt;0xaddr&gt;</code>]</h3>
 <dl>
 <dd>
 <p>Displays information about a particular object, or all objects of a class. If <code>&lt;class_name&gt;</code> is supplied, all static fields with their values are shown, followed by all objects of that class with their fields and values. If an object address (in hex) is supplied, static fields for that object's class are not shown; the other fields and values of that object are printed along with its address.</p>
@@ -4985,6 +4964,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_jextract/index.html b/tool_jextract/index.html
index cd5ac65..8f6c4a0 100644
--- a/tool_jextract/index.html
+++ b/tool_jextract/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -737,14 +716,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3605,6 +3584,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_jmap/index.html b/tool_jmap/index.html
index 288cbad..9e952e6 100644
--- a/tool_jmap/index.html
+++ b/tool_jmap/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3557,6 +3536,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_jps/index.html b/tool_jps/index.html
index c865509..c8dd115 100644
--- a/tool_jps/index.html
+++ b/tool_jps/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3555,6 +3534,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_jstack/index.html b/tool_jstack/index.html
index 06fcb85..3eb07f1 100644
--- a/tool_jstack/index.html
+++ b/tool_jstack/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3539,6 +3518,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_migration/index.html b/tool_migration/index.html
index 6d8d95f..f9e99f0 100644
--- a/tool_migration/index.html
+++ b/tool_migration/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -833,28 +812,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#java-diagnostic-command-tool-jcmd" title="Java diagnostic command tool (jcmd)" class="md-nav__link">
+  <a href="#java-diagnostic-command-tool-jcmd" class="md-nav__link">
     Java diagnostic command tool (jcmd)
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-memory-map-tool-jmap" title="Java memory map tool (jmap)" class="md-nav__link">
+  <a href="#java-memory-map-tool-jmap" class="md-nav__link">
     Java memory map tool (jmap)
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-process-status-jps" title="Java process status (jps)" class="md-nav__link">
+  <a href="#java-process-status-jps" class="md-nav__link">
     Java process status (jps)
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-stack-jstack-tool" title="Java stack (jstack) tool" class="md-nav__link">
+  <a href="#java-stack-jstack-tool" class="md-nav__link">
     Java stack (jstack) tool
   </a>
   
@@ -3350,28 +3329,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#java-diagnostic-command-tool-jcmd" title="Java diagnostic command tool (jcmd)" class="md-nav__link">
+  <a href="#java-diagnostic-command-tool-jcmd" class="md-nav__link">
     Java diagnostic command tool (jcmd)
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-memory-map-tool-jmap" title="Java memory map tool (jmap)" class="md-nav__link">
+  <a href="#java-memory-map-tool-jmap" class="md-nav__link">
     Java memory map tool (jmap)
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-process-status-jps" title="Java process status (jps)" class="md-nav__link">
+  <a href="#java-process-status-jps" class="md-nav__link">
     Java process status (jps)
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#java-stack-jstack-tool" title="Java stack (jstack) tool" class="md-nav__link">
+  <a href="#java-stack-jstack-tool" class="md-nav__link">
     Java stack (jstack) tool
   </a>
   
@@ -3647,6 +3626,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/tool_traceformat/index.html b/tool_traceformat/index.html
index 661069b..558056a 100644
--- a/tool_traceformat/index.html
+++ b/tool_traceformat/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -761,21 +740,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#examples" title="Examples" class="md-nav__link">
+  <a href="#examples" class="md-nav__link">
     Examples
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#examples" title="Examples" class="md-nav__link">
+  <a href="#examples" class="md-nav__link">
     Examples
   </a>
   
@@ -3702,6 +3681,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.10/index.html b/version0.10/index.html
index 1e81383..4afee4e 100644
--- a/version0.10/index.html
+++ b/version0.10/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -497,7 +476,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -505,28 +484,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-to-the-default-shared-classes-cache-size" title="Change to the default shared classes cache size" class="md-nav__link">
+  <a href="#change-to-the-default-shared-classes-cache-size" class="md-nav__link">
     Change to the default shared classes cache size
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-information-for-the-shared-classes-section-of-a-java-dump-file" title="New information for the SHARED CLASSES section of a Java dump file" class="md-nav__link">
+  <a href="#new-information-for-the-shared-classes-section-of-a-java-dump-file" class="md-nav__link">
     New information for the SHARED CLASSES section of a Java dump file
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openjdk-hotspot-options" title="Support for OpenJDK HotSpot options" class="md-nav__link">
+  <a href="#support-for-openjdk-hotspot-options" class="md-nav__link">
     Support for OpenJDK HotSpot options
   </a>
   
@@ -538,7 +517,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3370,7 +3349,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3378,28 +3357,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-to-the-default-shared-classes-cache-size" title="Change to the default shared classes cache size" class="md-nav__link">
+  <a href="#change-to-the-default-shared-classes-cache-size" class="md-nav__link">
     Change to the default shared classes cache size
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-information-for-the-shared-classes-section-of-a-java-dump-file" title="New information for the SHARED CLASSES section of a Java dump file" class="md-nav__link">
+  <a href="#new-information-for-the-shared-classes-section-of-a-java-dump-file" class="md-nav__link">
     New information for the SHARED CLASSES section of a Java dump file
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openjdk-hotspot-options" title="Support for OpenJDK HotSpot options" class="md-nav__link">
+  <a href="#support-for-openjdk-hotspot-options" class="md-nav__link">
     Support for OpenJDK HotSpot options
   </a>
   
@@ -3411,7 +3390,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3678,6 +3657,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.11/index.html b/version0.11/index.html
index 70bd81b..e9bd3fa 100644
--- a/version0.11/index.html
+++ b/version0.11/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -485,7 +464,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -493,56 +472,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" title="OpenSSL is now supported for improved native cryptographic performance" class="md-nav__link">
+  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" class="md-nav__link">
     OpenSSL is now supported for improved native cryptographic performance
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-location-of-the-default-shared-cache-and-cache-snapshot-directory" title="Changes to the location of the default shared cache and cache snapshot directory" class="md-nav__link">
+  <a href="#changes-to-the-location-of-the-default-shared-cache-and-cache-snapshot-directory" class="md-nav__link">
     Changes to the location of the default shared cache and cache snapshot directory
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-class-data-sharing-suboptions" title="New class data sharing suboptions" class="md-nav__link">
+  <a href="#new-class-data-sharing-suboptions" class="md-nav__link">
     New class data sharing suboptions
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#container-awareness-in-the-openj9-vm-is-now-enabled-by-default" title="Container awareness in the OpenJ9 VM is now enabled by default" class="md-nav__link">
+  <a href="#container-awareness-in-the-openj9-vm-is-now-enabled-by-default" class="md-nav__link">
     Container awareness in the OpenJ9 VM is now enabled by default
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#pause-less-garbage-collection-mode-is-now-available-on-linux-x86-platforms" title="Pause-less garbage collection mode is now available on Linux x86 platforms" class="md-nav__link">
+  <a href="#pause-less-garbage-collection-mode-is-now-available-on-linux-x86-platforms" class="md-nav__link">
     Pause-less garbage collection mode is now available on Linux x86 platforms
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#you-can-now-restrict-identity-hash-codes-to-non-negative-values" title="You can now restrict identity hash codes to non-negative values" class="md-nav__link">
+  <a href="#you-can-now-restrict-identity-hash-codes-to-non-negative-values" class="md-nav__link">
     You can now restrict identity hash codes to non-negative values
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openjdk-hotspot-options" title="Support for OpenJDK HotSpot options" class="md-nav__link">
+  <a href="#support-for-openjdk-hotspot-options" class="md-nav__link">
     Support for OpenJDK HotSpot options
   </a>
   
@@ -554,7 +533,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3398,7 +3377,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3406,56 +3385,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" title="OpenSSL is now supported for improved native cryptographic performance" class="md-nav__link">
+  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" class="md-nav__link">
     OpenSSL is now supported for improved native cryptographic performance
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-location-of-the-default-shared-cache-and-cache-snapshot-directory" title="Changes to the location of the default shared cache and cache snapshot directory" class="md-nav__link">
+  <a href="#changes-to-the-location-of-the-default-shared-cache-and-cache-snapshot-directory" class="md-nav__link">
     Changes to the location of the default shared cache and cache snapshot directory
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-class-data-sharing-suboptions" title="New class data sharing suboptions" class="md-nav__link">
+  <a href="#new-class-data-sharing-suboptions" class="md-nav__link">
     New class data sharing suboptions
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#container-awareness-in-the-openj9-vm-is-now-enabled-by-default" title="Container awareness in the OpenJ9 VM is now enabled by default" class="md-nav__link">
+  <a href="#container-awareness-in-the-openj9-vm-is-now-enabled-by-default" class="md-nav__link">
     Container awareness in the OpenJ9 VM is now enabled by default
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#pause-less-garbage-collection-mode-is-now-available-on-linux-x86-platforms" title="Pause-less garbage collection mode is now available on Linux x86 platforms" class="md-nav__link">
+  <a href="#pause-less-garbage-collection-mode-is-now-available-on-linux-x86-platforms" class="md-nav__link">
     Pause-less garbage collection mode is now available on Linux x86 platforms
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#you-can-now-restrict-identity-hash-codes-to-non-negative-values" title="You can now restrict identity hash codes to non-negative values" class="md-nav__link">
+  <a href="#you-can-now-restrict-identity-hash-codes-to-non-negative-values" class="md-nav__link">
     You can now restrict identity hash codes to non-negative values
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openjdk-hotspot-options" title="Support for OpenJDK HotSpot options" class="md-nav__link">
+  <a href="#support-for-openjdk-hotspot-options" class="md-nav__link">
     Support for OpenJDK HotSpot options
   </a>
   
@@ -3467,7 +3446,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3766,6 +3745,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.12/index.html b/version0.12/index.html
index b96384f..b90cd07 100644
--- a/version0.12/index.html
+++ b/version0.12/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -473,7 +452,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#version-0120" title="Version 0.12.0" class="md-nav__link">
+  <a href="#version-0120" class="md-nav__link">
     Version 0.12.0
   </a>
   
@@ -481,7 +460,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -489,56 +468,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-flexibility-for-managing-the-size-of-the-jit-code-cache" title="Improved flexibility for managing the size of the JIT code cache" class="md-nav__link">
+  <a href="#improved-flexibility-for-managing-the-size-of-the-jit-code-cache" class="md-nav__link">
     Improved flexibility for managing the size of the JIT code cache
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#idle-tuning-is-enabled-by-default-when-openj9-runs-in-a-docker-container" title="Idle-tuning is enabled by default when OpenJ9 runs in a docker container" class="md-nav__link">
+  <a href="#idle-tuning-is-enabled-by-default-when-openj9-runs-in-a-docker-container" class="md-nav__link">
     Idle-tuning is enabled by default when OpenJ9 runs in a docker container
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-default-shared-classes-cache-directory-permissions-not-windows" title="Changes to default shared classes cache directory permissions (not Windows)" class="md-nav__link">
+  <a href="#changes-to-default-shared-classes-cache-directory-permissions-not-windows" class="md-nav__link">
     Changes to default shared classes cache directory permissions (not Windows)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" title="OpenSSL is now supported for improved native cryptographic performance" class="md-nav__link">
+  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" class="md-nav__link">
     OpenSSL is now supported for improved native cryptographic performance
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-support-for-pause-less-garbage-collection" title="Improved support for pause-less garbage collection" class="md-nav__link">
+  <a href="#improved-support-for-pause-less-garbage-collection" class="md-nav__link">
     Improved support for pause-less garbage collection
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#rsa-algorithm-support-for-openssl" title="RSA algorithm support for OpenSSL" class="md-nav__link">
+  <a href="#rsa-algorithm-support-for-openssl" class="md-nav__link">
     RSA algorithm support for OpenSSL
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#ibm_java_options-is-deprecated" title="IBM_JAVA_OPTIONS is deprecated" class="md-nav__link">
+  <a href="#ibm_java_options-is-deprecated" class="md-nav__link">
     IBM_JAVA_OPTIONS is deprecated
   </a>
   
@@ -550,7 +529,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -562,7 +541,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#version-0121" title="Version 0.12.1" class="md-nav__link">
+  <a href="#version-0121" class="md-nav__link">
     Version 0.12.1
   </a>
   
@@ -570,7 +549,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#full-release-information_1" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information_1" class="md-nav__link">
     Full release information
   </a>
   
@@ -3431,7 +3410,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#version-0120" title="Version 0.12.0" class="md-nav__link">
+  <a href="#version-0120" class="md-nav__link">
     Version 0.12.0
   </a>
   
@@ -3439,7 +3418,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3447,56 +3426,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-flexibility-for-managing-the-size-of-the-jit-code-cache" title="Improved flexibility for managing the size of the JIT code cache" class="md-nav__link">
+  <a href="#improved-flexibility-for-managing-the-size-of-the-jit-code-cache" class="md-nav__link">
     Improved flexibility for managing the size of the JIT code cache
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#idle-tuning-is-enabled-by-default-when-openj9-runs-in-a-docker-container" title="Idle-tuning is enabled by default when OpenJ9 runs in a docker container" class="md-nav__link">
+  <a href="#idle-tuning-is-enabled-by-default-when-openj9-runs-in-a-docker-container" class="md-nav__link">
     Idle-tuning is enabled by default when OpenJ9 runs in a docker container
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-default-shared-classes-cache-directory-permissions-not-windows" title="Changes to default shared classes cache directory permissions (not Windows)" class="md-nav__link">
+  <a href="#changes-to-default-shared-classes-cache-directory-permissions-not-windows" class="md-nav__link">
     Changes to default shared classes cache directory permissions (not Windows)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" title="OpenSSL is now supported for improved native cryptographic performance" class="md-nav__link">
+  <a href="#openssl-is-now-supported-for-improved-native-cryptographic-performance" class="md-nav__link">
     OpenSSL is now supported for improved native cryptographic performance
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-support-for-pause-less-garbage-collection" title="Improved support for pause-less garbage collection" class="md-nav__link">
+  <a href="#improved-support-for-pause-less-garbage-collection" class="md-nav__link">
     Improved support for pause-less garbage collection
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#rsa-algorithm-support-for-openssl" title="RSA algorithm support for OpenSSL" class="md-nav__link">
+  <a href="#rsa-algorithm-support-for-openssl" class="md-nav__link">
     RSA algorithm support for OpenSSL
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#ibm_java_options-is-deprecated" title="IBM_JAVA_OPTIONS is deprecated" class="md-nav__link">
+  <a href="#ibm_java_options-is-deprecated" class="md-nav__link">
     IBM_JAVA_OPTIONS is deprecated
   </a>
   
@@ -3508,7 +3487,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3520,7 +3499,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#version-0121" title="Version 0.12.1" class="md-nav__link">
+  <a href="#version-0121" class="md-nav__link">
     Version 0.12.1
   </a>
   
@@ -3528,7 +3507,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#full-release-information_1" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information_1" class="md-nav__link">
     Full release information
   </a>
   
@@ -3834,6 +3813,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.13/index.html b/version0.13/index.html
index bec312c..d494ba9 100644
--- a/version0.13/index.html
+++ b/version0.13/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -461,7 +440,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -469,42 +448,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openssl-102" title="Support for OpenSSL 1.0.2" class="md-nav__link">
+  <a href="#support-for-openssl-102" class="md-nav__link">
     Support for OpenSSL 1.0.2
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-java-process-status-tool" title="New Java process status tool" class="md-nav__link">
+  <a href="#new-java-process-status-tool" class="md-nav__link">
     New Java process status tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#writing-a-java-dump-to-stdout-or-stderr" title="Writing a Java dump to STDOUT or STDERR" class="md-nav__link">
+  <a href="#writing-a-java-dump-to-stdout-or-stderr" class="md-nav__link">
     Writing a Java dump to STDOUT or STDERR
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#better-diagnostic-information-for-linux-systems-that-implement-control-groups" title="Better diagnostic information for Linux systems that implement control groups" class="md-nav__link">
+  <a href="#better-diagnostic-information-for-linux-systems-that-implement-control-groups" class="md-nav__link">
     Better diagnostic information for Linux systems that implement control groups
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-support-for-pause-less-garbage-collection" title="Improved support for pause-less garbage collection" class="md-nav__link">
+  <a href="#improved-support-for-pause-less-garbage-collection" class="md-nav__link">
     Improved support for pause-less garbage collection
   </a>
   
@@ -516,7 +495,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3384,7 +3363,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3392,42 +3371,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openssl-102" title="Support for OpenSSL 1.0.2" class="md-nav__link">
+  <a href="#support-for-openssl-102" class="md-nav__link">
     Support for OpenSSL 1.0.2
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-java-process-status-tool" title="New Java process status tool" class="md-nav__link">
+  <a href="#new-java-process-status-tool" class="md-nav__link">
     New Java process status tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#writing-a-java-dump-to-stdout-or-stderr" title="Writing a Java dump to STDOUT or STDERR" class="md-nav__link">
+  <a href="#writing-a-java-dump-to-stdout-or-stderr" class="md-nav__link">
     Writing a Java dump to STDOUT or STDERR
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#better-diagnostic-information-for-linux-systems-that-implement-control-groups" title="Better diagnostic information for Linux systems that implement control groups" class="md-nav__link">
+  <a href="#better-diagnostic-information-for-linux-systems-that-implement-control-groups" class="md-nav__link">
     Better diagnostic information for Linux systems that implement control groups
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-support-for-pause-less-garbage-collection" title="Improved support for pause-less garbage collection" class="md-nav__link">
+  <a href="#improved-support-for-pause-less-garbage-collection" class="md-nav__link">
     Improved support for pause-less garbage collection
   </a>
   
@@ -3439,7 +3418,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3718,6 +3697,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.14/index.html b/version0.14/index.html
index f97cb2d..44994ce 100644
--- a/version0.14/index.html
+++ b/version0.14/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -428,7 +407,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#version-0140" title="Version 0.14.0" class="md-nav__link">
+  <a href="#version-0140" class="md-nav__link">
     Version 0.14.0
   </a>
   
@@ -436,7 +415,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -444,63 +423,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openssl-102" title="Support for OpenSSL 1.0.2" class="md-nav__link">
+  <a href="#support-for-openssl-102" class="md-nav__link">
     Support for OpenSSL 1.0.2
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-option-for-ignoring-or-reporting-unrecognized-xx-options" title="New option for ignoring or reporting unrecognized -XX: options" class="md-nav__link">
+  <a href="#new-option-for-ignoring-or-reporting-unrecognized-xx-options" class="md-nav__link">
     New option for ignoring or reporting unrecognized -XX: options
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-support-for-pause-less-garbage-collection" title="Improved support for pause-less garbage collection" class="md-nav__link">
+  <a href="#improved-support-for-pause-less-garbage-collection" class="md-nav__link">
     Improved support for pause-less garbage collection
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-jstack-tool-for-obtaining-stack-traces-and-thread-information" title="New jstack tool for obtaining stack traces and thread information" class="md-nav__link">
+  <a href="#new-jstack-tool-for-obtaining-stack-traces-and-thread-information" class="md-nav__link">
     New jstack tool for obtaining stack traces and thread information
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-jps-tool" title="New jps tool" class="md-nav__link">
+  <a href="#new-jps-tool" class="md-nav__link">
     New jps tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-experimental-option-to-improve-the-performance-of-jvmti-watched-fields" title="New experimental option to improve the performance of JVMTI watched fields" class="md-nav__link">
+  <a href="#new-experimental-option-to-improve-the-performance-of-jvmti-watched-fields" class="md-nav__link">
     New experimental option to improve the performance of JVMTI watched fields
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-option-to-prevent-a-network-query-being-used-to-determine-host-name-and-ip-address" title="New option to prevent a network query being used to determine host name and IP address" class="md-nav__link">
+  <a href="#new-option-to-prevent-a-network-query-being-used-to-determine-host-name-and-ip-address" class="md-nav__link">
     New option to prevent a network query being used to determine host name and IP address
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-shared-classes-cache-generation-number" title="Changes to the shared classes cache generation number" class="md-nav__link">
+  <a href="#changes-to-the-shared-classes-cache-generation-number" class="md-nav__link">
     Changes to the shared classes cache generation number
   </a>
   
@@ -512,14 +491,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-to-the-default-native-stack-size-on-64-bit-zos" title="Change to the default native stack size on 64-bit z/OS" class="md-nav__link">
+  <a href="#change-to-the-default-native-stack-size-on-64-bit-zos" class="md-nav__link">
     Change to the default native stack size on 64-bit z/OS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -531,7 +510,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#version-0142" title="Version 0.14.2" class="md-nav__link">
+  <a href="#version-0142" class="md-nav__link">
     Version 0.14.2
   </a>
   
@@ -539,7 +518,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#features-and-changes_1" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes_1" class="md-nav__link">
     Features and changes
   </a>
   
@@ -547,21 +526,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments_1" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments_1" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openssl-101" title="Support for OpenSSL 1.0.1" class="md-nav__link">
+  <a href="#support-for-openssl-101" class="md-nav__link">
     Support for OpenSSL 1.0.1
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-digest-algorithm-disabled" title="OpenSSL Digest algorithm disabled" class="md-nav__link">
+  <a href="#openssl-digest-algorithm-disabled" class="md-nav__link">
     OpenSSL Digest algorithm disabled
   </a>
   
@@ -3470,7 +3449,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#version-0140" title="Version 0.14.0" class="md-nav__link">
+  <a href="#version-0140" class="md-nav__link">
     Version 0.14.0
   </a>
   
@@ -3478,7 +3457,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3486,63 +3465,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openssl-102" title="Support for OpenSSL 1.0.2" class="md-nav__link">
+  <a href="#support-for-openssl-102" class="md-nav__link">
     Support for OpenSSL 1.0.2
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-option-for-ignoring-or-reporting-unrecognized-xx-options" title="New option for ignoring or reporting unrecognized -XX: options" class="md-nav__link">
+  <a href="#new-option-for-ignoring-or-reporting-unrecognized-xx-options" class="md-nav__link">
     New option for ignoring or reporting unrecognized -XX: options
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#improved-support-for-pause-less-garbage-collection" title="Improved support for pause-less garbage collection" class="md-nav__link">
+  <a href="#improved-support-for-pause-less-garbage-collection" class="md-nav__link">
     Improved support for pause-less garbage collection
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-jstack-tool-for-obtaining-stack-traces-and-thread-information" title="New jstack tool for obtaining stack traces and thread information" class="md-nav__link">
+  <a href="#new-jstack-tool-for-obtaining-stack-traces-and-thread-information" class="md-nav__link">
     New jstack tool for obtaining stack traces and thread information
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-jps-tool" title="New jps tool" class="md-nav__link">
+  <a href="#new-jps-tool" class="md-nav__link">
     New jps tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-experimental-option-to-improve-the-performance-of-jvmti-watched-fields" title="New experimental option to improve the performance of JVMTI watched fields" class="md-nav__link">
+  <a href="#new-experimental-option-to-improve-the-performance-of-jvmti-watched-fields" class="md-nav__link">
     New experimental option to improve the performance of JVMTI watched fields
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-option-to-prevent-a-network-query-being-used-to-determine-host-name-and-ip-address" title="New option to prevent a network query being used to determine host name and IP address" class="md-nav__link">
+  <a href="#new-option-to-prevent-a-network-query-being-used-to-determine-host-name-and-ip-address" class="md-nav__link">
     New option to prevent a network query being used to determine host name and IP address
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-shared-classes-cache-generation-number" title="Changes to the shared classes cache generation number" class="md-nav__link">
+  <a href="#changes-to-the-shared-classes-cache-generation-number" class="md-nav__link">
     Changes to the shared classes cache generation number
   </a>
   
@@ -3554,14 +3533,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-to-the-default-native-stack-size-on-64-bit-zos" title="Change to the default native stack size on 64-bit z/OS" class="md-nav__link">
+  <a href="#change-to-the-default-native-stack-size-on-64-bit-zos" class="md-nav__link">
     Change to the default native stack size on 64-bit z/OS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3573,7 +3552,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#version-0142" title="Version 0.14.2" class="md-nav__link">
+  <a href="#version-0142" class="md-nav__link">
     Version 0.14.2
   </a>
   
@@ -3581,7 +3560,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#features-and-changes_1" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes_1" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3589,21 +3568,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments_1" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments_1" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openssl-101" title="Support for OpenSSL 1.0.1" class="md-nav__link">
+  <a href="#support-for-openssl-101" class="md-nav__link">
     Support for OpenSSL 1.0.1
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-digest-algorithm-disabled" title="OpenSSL Digest algorithm disabled" class="md-nav__link">
+  <a href="#openssl-digest-algorithm-disabled" class="md-nav__link">
     OpenSSL Digest algorithm disabled
   </a>
   
@@ -3920,6 +3899,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.15/index.html b/version0.15/index.html
index dd8b14b..cd927a2 100644
--- a/version0.15/index.html
+++ b/version0.15/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -416,7 +395,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -424,98 +403,98 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#performance-improvements-for-jvmti-watched-fields" title="Performance improvements for JVMTI watched fields" class="md-nav__link">
+  <a href="#performance-improvements-for-jvmti-watched-fields" class="md-nav__link">
     Performance improvements for JVMTI watched fields
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-pause-less-garbage-collection-on-ibm-z-systems" title="Support for pause-less garbage collection on IBM Z systems" class="md-nav__link">
+  <a href="#support-for-pause-less-garbage-collection-on-ibm-z-systems" class="md-nav__link">
     Support for pause-less garbage collection on IBM Z systems
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#chacha20-algorithm-support-for-openssl" title="ChaCha20 algorithm support for OpenSSL" class="md-nav__link">
+  <a href="#chacha20-algorithm-support-for-openssl" class="md-nav__link">
     ChaCha20 algorithm support for OpenSSL
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-digest-algorithm-disabled" title="OpenSSL Digest algorithm disabled" class="md-nav__link">
+  <a href="#openssl-digest-algorithm-disabled" class="md-nav__link">
     OpenSSL Digest algorithm disabled
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openjdk-hotspot-options" title="Support for OpenJDK HotSpot options" class="md-nav__link">
+  <a href="#support-for-openjdk-hotspot-options" class="md-nav__link">
     Support for OpenJDK HotSpot options
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-transparent-huge-pages-thp" title="Support for Transparent Huge Pages (THP)" class="md-nav__link">
+  <a href="#support-for-transparent-huge-pages-thp" class="md-nav__link">
     Support for Transparent Huge Pages (THP)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-low-overhead-heap-profiling" title="Support for low-overhead heap profiling" class="md-nav__link">
+  <a href="#support-for-low-overhead-heap-profiling" class="md-nav__link">
     Support for low-overhead heap profiling
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-java-memory-map-tool" title="New Java memory map tool" class="md-nav__link">
+  <a href="#new-java-memory-map-tool" class="md-nav__link">
     New Java memory map tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#automatically-setting-an-initial-heap-size" title="Automatically setting an initial heap size" class="md-nav__link">
+  <a href="#automatically-setting-an-initial-heap-size" class="md-nav__link">
     Automatically setting an initial heap size
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#removal-of-xdiagnosticscollector-option" title="Removal of -Xdiagnosticscollector option" class="md-nav__link">
+  <a href="#removal-of-xdiagnosticscollector-option" class="md-nav__link">
     Removal of -Xdiagnosticscollector option
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-in-behaviour-of-xxidletuningcompactonidle" title="Change in behaviour of -XX:IdleTuningCompactOnIdle" class="md-nav__link">
+  <a href="#change-in-behaviour-of-xxidletuningcompactonidle" class="md-nav__link">
     Change in behaviour of -XX:IdleTuningCompactOnIdle
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#heuristics-for-compaction-during-idle-gc" title="Heuristics for compaction during idle GC" class="md-nav__link">
+  <a href="#heuristics-for-compaction-during-idle-gc" class="md-nav__link">
     Heuristics for compaction during idle GC
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-in-shared-classes-behavior-for-checking-timestamps-of-jar-or-zip-files" title="Change in shared classes behavior for checking timestamps of jar or zip files" class="md-nav__link">
+  <a href="#change-in-shared-classes-behavior-for-checking-timestamps-of-jar-or-zip-files" class="md-nav__link">
     Change in shared classes behavior for checking timestamps of jar or zip files
   </a>
   
@@ -527,7 +506,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3438,7 +3417,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3446,98 +3425,98 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#performance-improvements-for-jvmti-watched-fields" title="Performance improvements for JVMTI watched fields" class="md-nav__link">
+  <a href="#performance-improvements-for-jvmti-watched-fields" class="md-nav__link">
     Performance improvements for JVMTI watched fields
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-pause-less-garbage-collection-on-ibm-z-systems" title="Support for pause-less garbage collection on IBM Z systems" class="md-nav__link">
+  <a href="#support-for-pause-less-garbage-collection-on-ibm-z-systems" class="md-nav__link">
     Support for pause-less garbage collection on IBM Z systems
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#chacha20-algorithm-support-for-openssl" title="ChaCha20 algorithm support for OpenSSL" class="md-nav__link">
+  <a href="#chacha20-algorithm-support-for-openssl" class="md-nav__link">
     ChaCha20 algorithm support for OpenSSL
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#openssl-digest-algorithm-disabled" title="OpenSSL Digest algorithm disabled" class="md-nav__link">
+  <a href="#openssl-digest-algorithm-disabled" class="md-nav__link">
     OpenSSL Digest algorithm disabled
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-openjdk-hotspot-options" title="Support for OpenJDK HotSpot options" class="md-nav__link">
+  <a href="#support-for-openjdk-hotspot-options" class="md-nav__link">
     Support for OpenJDK HotSpot options
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-transparent-huge-pages-thp" title="Support for Transparent Huge Pages (THP)" class="md-nav__link">
+  <a href="#support-for-transparent-huge-pages-thp" class="md-nav__link">
     Support for Transparent Huge Pages (THP)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-low-overhead-heap-profiling" title="Support for low-overhead heap profiling" class="md-nav__link">
+  <a href="#support-for-low-overhead-heap-profiling" class="md-nav__link">
     Support for low-overhead heap profiling
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-java-memory-map-tool" title="New Java memory map tool" class="md-nav__link">
+  <a href="#new-java-memory-map-tool" class="md-nav__link">
     New Java memory map tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#automatically-setting-an-initial-heap-size" title="Automatically setting an initial heap size" class="md-nav__link">
+  <a href="#automatically-setting-an-initial-heap-size" class="md-nav__link">
     Automatically setting an initial heap size
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#removal-of-xdiagnosticscollector-option" title="Removal of -Xdiagnosticscollector option" class="md-nav__link">
+  <a href="#removal-of-xdiagnosticscollector-option" class="md-nav__link">
     Removal of -Xdiagnosticscollector option
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-in-behaviour-of-xxidletuningcompactonidle" title="Change in behaviour of -XX:IdleTuningCompactOnIdle" class="md-nav__link">
+  <a href="#change-in-behaviour-of-xxidletuningcompactonidle" class="md-nav__link">
     Change in behaviour of -XX:IdleTuningCompactOnIdle
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#heuristics-for-compaction-during-idle-gc" title="Heuristics for compaction during idle GC" class="md-nav__link">
+  <a href="#heuristics-for-compaction-during-idle-gc" class="md-nav__link">
     Heuristics for compaction during idle GC
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#change-in-shared-classes-behavior-for-checking-timestamps-of-jar-or-zip-files" title="Change in shared classes behavior for checking timestamps of jar or zip files" class="md-nav__link">
+  <a href="#change-in-shared-classes-behavior-for-checking-timestamps-of-jar-or-zip-files" class="md-nav__link">
     Change in shared classes behavior for checking timestamps of jar or zip files
   </a>
   
@@ -3549,7 +3528,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3852,6 +3831,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.16/index.html b/version0.16/index.html
index 90c561f..6e837a4 100644
--- a/version0.16/index.html
+++ b/version0.16/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -404,7 +383,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -412,63 +391,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#some-class-data-sharing-is-enabled-by-default" title="Some class data sharing is enabled by default" class="md-nav__link">
+  <a href="#some-class-data-sharing-is-enabled-by-default" class="md-nav__link">
     Some class data sharing is enabled by default
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#automatic-setting-of-initial-heap-size-is-enabled-by-default" title="Automatic setting of initial heap size is enabled by default" class="md-nav__link">
+  <a href="#automatic-setting-of-initial-heap-size-is-enabled-by-default" class="md-nav__link">
     Automatic setting of initial heap size is enabled by default
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-to-share-vm-anonymous-classes" title="Option to share VM anonymous classes" class="md-nav__link">
+  <a href="#option-to-share-vm-anonymous-classes" class="md-nav__link">
     Option to share VM anonymous classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#performance-improvements-for-jvmti-watched-fields-on-power-systems" title="Performance improvements for JVMTI watched fields on Power Systems" class="md-nav__link">
+  <a href="#performance-improvements-for-jvmti-watched-fields-on-power-systems" class="md-nav__link">
     Performance improvements for JVMTI watched fields on Power Systems
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#linux-on-x86-support-for-transparent-huge-pages-thp" title="Linux&reg; on x86: Support for Transparent Huge Pages (THP)" class="md-nav__link">
+  <a href="#linux-on-x86-support-for-transparent-huge-pages-thp" class="md-nav__link">
     Linux&reg; on x86: Support for Transparent Huge Pages (THP)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-jcmd-tool" title="New jcmd tool" class="md-nav__link">
+  <a href="#new-jcmd-tool" class="md-nav__link">
     New jcmd tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-shared-classes-cache-generation-number" title="Changes to the shared classes cache generation number" class="md-nav__link">
+  <a href="#changes-to-the-shared-classes-cache-generation-number" class="md-nav__link">
     Changes to the shared classes cache generation number
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#the-xverifynone-and-noverify-options-are-deprecated" title="The -Xverify:none and -noverify options are deprecated" class="md-nav__link">
+  <a href="#the-xverifynone-and-noverify-options-are-deprecated" class="md-nav__link">
     The -Xverify:none and -noverify options are deprecated
   </a>
   
@@ -480,7 +459,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3403,7 +3382,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3411,63 +3390,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#some-class-data-sharing-is-enabled-by-default" title="Some class data sharing is enabled by default" class="md-nav__link">
+  <a href="#some-class-data-sharing-is-enabled-by-default" class="md-nav__link">
     Some class data sharing is enabled by default
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#automatic-setting-of-initial-heap-size-is-enabled-by-default" title="Automatic setting of initial heap size is enabled by default" class="md-nav__link">
+  <a href="#automatic-setting-of-initial-heap-size-is-enabled-by-default" class="md-nav__link">
     Automatic setting of initial heap size is enabled by default
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-to-share-vm-anonymous-classes" title="Option to share VM anonymous classes" class="md-nav__link">
+  <a href="#option-to-share-vm-anonymous-classes" class="md-nav__link">
     Option to share VM anonymous classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#performance-improvements-for-jvmti-watched-fields-on-power-systems" title="Performance improvements for JVMTI watched fields on Power Systems" class="md-nav__link">
+  <a href="#performance-improvements-for-jvmti-watched-fields-on-power-systems" class="md-nav__link">
     Performance improvements for JVMTI watched fields on Power Systems
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#linux-on-x86-support-for-transparent-huge-pages-thp" title="Linux&reg; on x86: Support for Transparent Huge Pages (THP)" class="md-nav__link">
+  <a href="#linux-on-x86-support-for-transparent-huge-pages-thp" class="md-nav__link">
     Linux&reg; on x86: Support for Transparent Huge Pages (THP)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-jcmd-tool" title="New jcmd tool" class="md-nav__link">
+  <a href="#new-jcmd-tool" class="md-nav__link">
     New jcmd tool
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-shared-classes-cache-generation-number" title="Changes to the shared classes cache generation number" class="md-nav__link">
+  <a href="#changes-to-the-shared-classes-cache-generation-number" class="md-nav__link">
     Changes to the shared classes cache generation number
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#the-xverifynone-and-noverify-options-are-deprecated" title="The -Xverify:none and -noverify options are deprecated" class="md-nav__link">
+  <a href="#the-xverifynone-and-noverify-options-are-deprecated" class="md-nav__link">
     The -Xverify:none and -noverify options are deprecated
   </a>
   
@@ -3479,7 +3458,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3757,6 +3736,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.17/index.html b/version0.17/index.html
index cb957a6..9201480 100644
--- a/version0.17/index.html
+++ b/version0.17/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -392,7 +371,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -400,70 +379,70 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-shared-classes-cache-suboptions-for-layered-caches" title="New shared classes cache suboptions for layered caches" class="md-nav__link">
+  <a href="#new-shared-classes-cache-suboptions-for-layered-caches" class="md-nav__link">
     New shared classes cache suboptions for layered caches
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-shared-classes-cache-suboption-to-skip-disk-space-check" title="New shared classes cache suboption to skip disk space check" class="md-nav__link">
+  <a href="#new-shared-classes-cache-suboption-to-skip-disk-space-check" class="md-nav__link">
     New shared classes cache suboption to skip disk space check
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-to-share-unsafe-classes" title="Option to share 'Unsafe' classes" class="md-nav__link">
+  <a href="#option-to-share-unsafe-classes" class="md-nav__link">
     Option to share 'Unsafe' classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-to-record-class-relationships-in-the-verifier" title="Option to record class relationships in the verifier" class="md-nav__link">
+  <a href="#option-to-record-class-relationships-in-the-verifier" class="md-nav__link">
     Option to record class relationships in the verifier
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-the-ibm-z15-processor" title="Support for the IBM z15 processor" class="md-nav__link">
+  <a href="#support-for-the-ibm-z15-processor" class="md-nav__link">
     Support for the IBM z15 processor
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#digest-algorithm-is-re-enabled" title="Digest algorithm is re-enabled" class="md-nav__link">
+  <a href="#digest-algorithm-is-re-enabled" class="md-nav__link">
     Digest algorithm is re-enabled
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#direct-dump-reader-ddr-vm-restriction-removed" title="Direct Dump Reader (DDR) VM restriction removed" class="md-nav__link">
+  <a href="#direct-dump-reader-ddr-vm-restriction-removed" class="md-nav__link">
     Direct Dump Reader (DDR) VM restriction removed
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#the-format-of-the-hooks-section-of-a-java-dump-has-changed" title="The format of the HOOKS section of a Java dump has changed" class="md-nav__link">
+  <a href="#the-format-of-the-hooks-section-of-a-java-dump-has-changed" class="md-nav__link">
     The format of the HOOKS section of a Java dump has changed
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#ludcl-caching-disabled-by-default" title="LUDCL caching disabled by default" class="md-nav__link">
+  <a href="#ludcl-caching-disabled-by-default" class="md-nav__link">
     LUDCL caching disabled by default
   </a>
   
@@ -475,7 +454,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3410,7 +3389,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3418,70 +3397,70 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-environments" title="Binaries and supported environments" class="md-nav__link">
+  <a href="#binaries-and-supported-environments" class="md-nav__link">
     Binaries and supported environments
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-shared-classes-cache-suboptions-for-layered-caches" title="New shared classes cache suboptions for layered caches" class="md-nav__link">
+  <a href="#new-shared-classes-cache-suboptions-for-layered-caches" class="md-nav__link">
     New shared classes cache suboptions for layered caches
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-shared-classes-cache-suboption-to-skip-disk-space-check" title="New shared classes cache suboption to skip disk space check" class="md-nav__link">
+  <a href="#new-shared-classes-cache-suboption-to-skip-disk-space-check" class="md-nav__link">
     New shared classes cache suboption to skip disk space check
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-to-share-unsafe-classes" title="Option to share 'Unsafe' classes" class="md-nav__link">
+  <a href="#option-to-share-unsafe-classes" class="md-nav__link">
     Option to share 'Unsafe' classes
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#option-to-record-class-relationships-in-the-verifier" title="Option to record class relationships in the verifier" class="md-nav__link">
+  <a href="#option-to-record-class-relationships-in-the-verifier" class="md-nav__link">
     Option to record class relationships in the verifier
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#support-for-the-ibm-z15-processor" title="Support for the IBM z15 processor" class="md-nav__link">
+  <a href="#support-for-the-ibm-z15-processor" class="md-nav__link">
     Support for the IBM z15 processor
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#digest-algorithm-is-re-enabled" title="Digest algorithm is re-enabled" class="md-nav__link">
+  <a href="#digest-algorithm-is-re-enabled" class="md-nav__link">
     Digest algorithm is re-enabled
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#direct-dump-reader-ddr-vm-restriction-removed" title="Direct Dump Reader (DDR) VM restriction removed" class="md-nav__link">
+  <a href="#direct-dump-reader-ddr-vm-restriction-removed" class="md-nav__link">
     Direct Dump Reader (DDR) VM restriction removed
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#the-format-of-the-hooks-section-of-a-java-dump-has-changed" title="The format of the HOOKS section of a Java dump has changed" class="md-nav__link">
+  <a href="#the-format-of-the-hooks-section-of-a-java-dump-has-changed" class="md-nav__link">
     The format of the HOOKS section of a Java dump has changed
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#ludcl-caching-disabled-by-default" title="LUDCL caching disabled by default" class="md-nav__link">
+  <a href="#ludcl-caching-disabled-by-default" class="md-nav__link">
     LUDCL caching disabled by default
   </a>
   
@@ -3493,7 +3472,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3798,6 +3777,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.8/index.html b/version0.8/index.html
index 23639bb..d555cd9 100644
--- a/version0.8/index.html
+++ b/version0.8/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3525,6 +3504,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/version0.9/index.html b/version0.9/index.html
index 172873a..1324279 100644
--- a/version0.9/index.html
+++ b/version0.9/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -509,7 +488,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -517,63 +496,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-platforms" title="Binaries and supported platforms" class="md-nav__link">
+  <a href="#binaries-and-supported-platforms" class="md-nav__link">
     Binaries and supported platforms
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#idle-tuning-feature" title="Idle tuning feature" class="md-nav__link">
+  <a href="#idle-tuning-feature" class="md-nav__link">
     Idle tuning feature
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-gc-policy" title="New GC policy" class="md-nav__link">
+  <a href="#new-gc-policy" class="md-nav__link">
     New GC policy
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#modifying-the-default-java-heap-size-for-applications-that-run-in-containers" title="Modifying the default Java heap size for applications that run in containers" class="md-nav__link">
+  <a href="#modifying-the-default-java-heap-size-for-applications-that-run-in-containers" class="md-nav__link">
     Modifying the default Java heap size for applications that run in containers
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#specifying-the-maximum-java-heap-size-as-a-percentage-value" title="Specifying the maximum Java heap size as a percentage value" class="md-nav__link">
+  <a href="#specifying-the-maximum-java-heap-size-as-a-percentage-value" class="md-nav__link">
     Specifying the maximum Java heap size as a percentage value
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#shared-classes-support-for-nested-jar-files" title="Shared classes support for nested jar files" class="md-nav__link">
+  <a href="#shared-classes-support-for-nested-jar-files" class="md-nav__link">
     Shared classes support for nested jar files
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#direct-dump-reader-enabled-on-linux-and-windows" title="Direct Dump Reader enabled on Linux and Windows" class="md-nav__link">
+  <a href="#direct-dump-reader-enabled-on-linux-and-windows" class="md-nav__link">
     Direct Dump Reader enabled on Linux and Windows
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-javalangstring-class" title="Changes to the java.lang.String class" class="md-nav__link">
+  <a href="#changes-to-the-javalangstring-class" class="md-nav__link">
     Changes to the java.lang.String class
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-sharedclasscacheinfo-class" title="Changes to the SharedClassCacheInfo class" class="md-nav__link">
+  <a href="#changes-to-the-sharedclasscacheinfo-class" class="md-nav__link">
     Changes to the SharedClassCacheInfo class
   </a>
   
@@ -585,7 +564,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3405,7 +3384,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#features-and-changes" title="Features and changes" class="md-nav__link">
+  <a href="#features-and-changes" class="md-nav__link">
     Features and changes
   </a>
   
@@ -3413,63 +3392,63 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#binaries-and-supported-platforms" title="Binaries and supported platforms" class="md-nav__link">
+  <a href="#binaries-and-supported-platforms" class="md-nav__link">
     Binaries and supported platforms
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#idle-tuning-feature" title="Idle tuning feature" class="md-nav__link">
+  <a href="#idle-tuning-feature" class="md-nav__link">
     Idle tuning feature
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#new-gc-policy" title="New GC policy" class="md-nav__link">
+  <a href="#new-gc-policy" class="md-nav__link">
     New GC policy
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#modifying-the-default-java-heap-size-for-applications-that-run-in-containers" title="Modifying the default Java heap size for applications that run in containers" class="md-nav__link">
+  <a href="#modifying-the-default-java-heap-size-for-applications-that-run-in-containers" class="md-nav__link">
     Modifying the default Java heap size for applications that run in containers
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#specifying-the-maximum-java-heap-size-as-a-percentage-value" title="Specifying the maximum Java heap size as a percentage value" class="md-nav__link">
+  <a href="#specifying-the-maximum-java-heap-size-as-a-percentage-value" class="md-nav__link">
     Specifying the maximum Java heap size as a percentage value
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#shared-classes-support-for-nested-jar-files" title="Shared classes support for nested jar files" class="md-nav__link">
+  <a href="#shared-classes-support-for-nested-jar-files" class="md-nav__link">
     Shared classes support for nested jar files
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#direct-dump-reader-enabled-on-linux-and-windows" title="Direct Dump Reader enabled on Linux and Windows" class="md-nav__link">
+  <a href="#direct-dump-reader-enabled-on-linux-and-windows" class="md-nav__link">
     Direct Dump Reader enabled on Linux and Windows
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-javalangstring-class" title="Changes to the java.lang.String class" class="md-nav__link">
+  <a href="#changes-to-the-javalangstring-class" class="md-nav__link">
     Changes to the java.lang.String class
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#changes-to-the-sharedclasscacheinfo-class" title="Changes to the SharedClassCacheInfo class" class="md-nav__link">
+  <a href="#changes-to-the-sharedclasscacheinfo-class" class="md-nav__link">
     Changes to the SharedClassCacheInfo class
   </a>
   
@@ -3481,7 +3460,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#full-release-information" title="Full release information" class="md-nav__link">
+  <a href="#full-release-information" class="md-nav__link">
     Full release information
   </a>
   
@@ -3818,6 +3797,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/x/index.html b/x/index.html
index eb551bc..7078ffa 100644
--- a/x/index.html
+++ b/x/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1289,7 +1268,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3571,6 +3550,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/x_jvm_commands/index.html b/x_jvm_commands/index.html
index 97fe95e..252fb53 100644
--- a/x_jvm_commands/index.html
+++ b/x_jvm_commands/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3526,6 +3505,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xaggressive/index.html b/xaggressive/index.html
index 28294df..1226535 100644
--- a/xaggressive/index.html
+++ b/xaggressive/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1301,7 +1280,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3571,6 +3550,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xalwaysclassgc/index.html b/xalwaysclassgc/index.html
index a5f9f59..8408693 100644
--- a/xalwaysclassgc/index.html
+++ b/xalwaysclassgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1313,14 +1292,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3587,6 +3566,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xaot/index.html b/xaot/index.html
index 3c3559d..1b53e01 100644
--- a/xaot/index.html
+++ b/xaot/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2153,28 +2132,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#performance" title="Performance" class="md-nav__link">
+  <a href="#performance" class="md-nav__link">
     Performance
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters-for-xaot" title="Parameters for -Xaot" class="md-nav__link">
+  <a href="#parameters-for-xaot" class="md-nav__link">
     Parameters for -Xaot
   </a>
   
@@ -2182,49 +2161,49 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#count" title="count" class="md-nav__link">
+  <a href="#count" class="md-nav__link">
     count
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exclude" title="exclude" class="md-nav__link">
+  <a href="#exclude" class="md-nav__link">
     exclude
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#limitfile" title="limitFile" class="md-nav__link">
+  <a href="#limitfile" class="md-nav__link">
     limitFile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loadexclude" title="loadExclude" class="md-nav__link">
+  <a href="#loadexclude" class="md-nav__link">
     loadExclude
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loadlimit" title="loadLimit" class="md-nav__link">
+  <a href="#loadlimit" class="md-nav__link">
     loadLimit
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loadlimitfile" title="loadLimitFile" class="md-nav__link">
+  <a href="#loadlimitfile" class="md-nav__link">
     loadLimitFile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbose" title="verbose" class="md-nav__link">
+  <a href="#verbose" class="md-nav__link">
     verbose
   </a>
   
@@ -2236,7 +2215,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3412,28 +3391,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#performance" title="Performance" class="md-nav__link">
+  <a href="#performance" class="md-nav__link">
     Performance
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters-for-xaot" title="Parameters for -Xaot" class="md-nav__link">
+  <a href="#parameters-for-xaot" class="md-nav__link">
     Parameters for -Xaot
   </a>
   
@@ -3441,49 +3420,49 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#count" title="count" class="md-nav__link">
+  <a href="#count" class="md-nav__link">
     count
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exclude" title="exclude" class="md-nav__link">
+  <a href="#exclude" class="md-nav__link">
     exclude
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#limitfile" title="limitFile" class="md-nav__link">
+  <a href="#limitfile" class="md-nav__link">
     limitFile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loadexclude" title="loadExclude" class="md-nav__link">
+  <a href="#loadexclude" class="md-nav__link">
     loadExclude
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loadlimit" title="loadLimit" class="md-nav__link">
+  <a href="#loadlimit" class="md-nav__link">
     loadLimit
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loadlimitfile" title="loadLimitFile" class="md-nav__link">
+  <a href="#loadlimitfile" class="md-nav__link">
     loadLimitFile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbose" title="verbose" class="md-nav__link">
+  <a href="#verbose" class="md-nav__link">
     verbose
   </a>
   
@@ -3495,7 +3474,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3866,6 +3845,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xargencoding/index.html b/xargencoding/index.html
index 42a583c..4563d9e 100644
--- a/xargencoding/index.html
+++ b/xargencoding/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1337,14 +1316,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1352,21 +1331,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#no-parameter" title="No parameter" class="md-nav__link">
+  <a href="#no-parameter" class="md-nav__link">
     No parameter
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#utf8" title="utf8" class="md-nav__link">
+  <a href="#utf8" class="md-nav__link">
     utf8
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#latin" title="latin" class="md-nav__link">
+  <a href="#latin" class="md-nav__link">
     latin
   </a>
   
@@ -3363,14 +3342,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3378,21 +3357,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#no-parameter" title="No parameter" class="md-nav__link">
+  <a href="#no-parameter" class="md-nav__link">
     No parameter
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#utf8" title="utf8" class="md-nav__link">
+  <a href="#utf8" class="md-nav__link">
     utf8
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#latin" title="latin" class="md-nav__link">
+  <a href="#latin" class="md-nav__link">
     latin
   </a>
   
@@ -3662,6 +3641,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xbootclasspath/index.html b/xbootclasspath/index.html
index 3249959..8518ab5 100644
--- a/xbootclasspath/index.html
+++ b/xbootclasspath/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1349,7 +1328,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3599,6 +3578,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xceehdlr/index.html b/xceehdlr/index.html
index 5d254e2..38093a5 100644
--- a/xceehdlr/index.html
+++ b/xceehdlr/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1361,21 +1340,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3637,6 +3616,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcheck/index.html b/xcheck/index.html
index b71c70e..453bb9e 100644
--- a/xcheck/index.html
+++ b/xcheck/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1373,14 +1352,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1388,42 +1367,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#classpath" title="classpath" class="md-nav__link">
+  <a href="#classpath" class="md-nav__link">
     classpath
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump" title="dump" class="md-nav__link">
+  <a href="#dump" class="md-nav__link">
     dump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#gc" title="gc" class="md-nav__link">
+  <a href="#gc" class="md-nav__link">
     gc
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jni" title="jni" class="md-nav__link">
+  <a href="#jni" class="md-nav__link">
     jni
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#memory" title="memory" class="md-nav__link">
+  <a href="#memory" class="md-nav__link">
     memory
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vm" title="vm" class="md-nav__link">
+  <a href="#vm" class="md-nav__link">
     vm
   </a>
   
@@ -3384,14 +3363,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3399,42 +3378,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#classpath" title="classpath" class="md-nav__link">
+  <a href="#classpath" class="md-nav__link">
     classpath
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump" title="dump" class="md-nav__link">
+  <a href="#dump" class="md-nav__link">
     dump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#gc" title="gc" class="md-nav__link">
+  <a href="#gc" class="md-nav__link">
     gc
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#jni" title="jni" class="md-nav__link">
+  <a href="#jni" class="md-nav__link">
     jni
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#memory" title="memory" class="md-nav__link">
+  <a href="#memory" class="md-nav__link">
     memory
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vm" title="vm" class="md-nav__link">
+  <a href="#vm" class="md-nav__link">
     vm
   </a>
   
@@ -3834,6 +3813,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xclassgc/index.html b/xclassgc/index.html
index 416a59d..d2cfd67 100644
--- a/xclassgc/index.html
+++ b/xclassgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2165,7 +2144,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3594,6 +3573,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcodecache/index.html b/xcodecache/index.html
index 5dab4d5..5a78f27 100644
--- a/xcodecache/index.html
+++ b/xcodecache/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1397,7 +1376,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3576,6 +3555,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcodecachetotal/index.html b/xcodecachetotal/index.html
index e2f3fb9..e413ea7 100644
--- a/xcodecachetotal/index.html
+++ b/xcodecachetotal/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1409,21 +1388,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcomp/index.html b/xcomp/index.html
index 525e065..654d80e 100644
--- a/xcomp/index.html
+++ b/xcomp/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1421,7 +1400,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3571,6 +3550,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcompactexplicitgc/index.html b/xcompactexplicitgc/index.html
index 9df36e0..46864bd 100644
--- a/xcompactexplicitgc/index.html
+++ b/xcompactexplicitgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2177,14 +2156,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3611,6 +3590,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcompactgc/index.html b/xcompactgc/index.html
index b73ddf3..140d083 100644
--- a/xcompactgc/index.html
+++ b/xcompactgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2189,21 +2168,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3623,6 +3602,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcompilationthreads/index.html b/xcompilationthreads/index.html
index e11b867..5727cc6 100644
--- a/xcompilationthreads/index.html
+++ b/xcompilationthreads/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1457,14 +1436,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3602,6 +3581,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xcompressedrefs/index.html b/xcompressedrefs/index.html
index 63f2bb2..798498d 100644
--- a/xcompressedrefs/index.html
+++ b/xcompressedrefs/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2201,21 +2180,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3630,6 +3609,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xconcurrentbackground/index.html b/xconcurrentbackground/index.html
index e0732dc..08ce0f1 100644
--- a/xconcurrentbackground/index.html
+++ b/xconcurrentbackground/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1481,14 +1460,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3587,6 +3566,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xconcurrentlevel/index.html b/xconcurrentlevel/index.html
index 61b6333..39bee7b 100644
--- a/xconcurrentlevel/index.html
+++ b/xconcurrentlevel/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1493,14 +1472,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3587,6 +3566,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xconcurrentslack/index.html b/xconcurrentslack/index.html
index 6a1e564..15553ef 100644
--- a/xconcurrentslack/index.html
+++ b/xconcurrentslack/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1505,14 +1484,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3591,6 +3570,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xconmeter/index.html b/xconmeter/index.html
index 84b0601..36f1235 100644
--- a/xconmeter/index.html
+++ b/xconmeter/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1517,14 +1496,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1532,21 +1511,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#soa" title="soa" class="md-nav__link">
+  <a href="#soa" class="md-nav__link">
     soa
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loa" title="loa" class="md-nav__link">
+  <a href="#loa" class="md-nav__link">
     loa
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dynamic" title="dynamic" class="md-nav__link">
+  <a href="#dynamic" class="md-nav__link">
     dynamic
   </a>
   
@@ -1558,7 +1537,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3370,14 +3349,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3385,21 +3364,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#soa" title="soa" class="md-nav__link">
+  <a href="#soa" class="md-nav__link">
     soa
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#loa" title="loa" class="md-nav__link">
+  <a href="#loa" class="md-nav__link">
     loa
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dynamic" title="dynamic" class="md-nav__link">
+  <a href="#dynamic" class="md-nav__link">
     dynamic
   </a>
   
@@ -3411,7 +3390,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3674,6 +3653,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xdisablejavadump/index.html b/xdisablejavadump/index.html
index 4ffcb72..c0be6a9 100644
--- a/xdisablejavadump/index.html
+++ b/xdisablejavadump/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1553,21 +1532,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3605,6 +3584,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xdump/index.html b/xdump/index.html
index fb069fa..4f1c34b 100644
--- a/xdump/index.html
+++ b/xdump/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1577,21 +1556,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#xdump-option-builder" title="Xdump Option Builder" class="md-nav__link">
+  <a href="#xdump-option-builder" class="md-nav__link">
     Xdump Option Builder
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-agents" title="Dump agents" class="md-nav__link">
+  <a href="#dump-agents" class="md-nav__link">
     Dump agents
   </a>
   
@@ -1599,21 +1578,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#default-dump-agents" title="Default dump agents" class="md-nav__link">
+  <a href="#default-dump-agents" class="md-nav__link">
     Default dump agents
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump-agent-tokens" title="Dump agent tokens" class="md-nav__link">
+  <a href="#dump-agent-tokens" class="md-nav__link">
     Dump agent tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#merging-xdump-agents" title="Merging -Xdump agents" class="md-nav__link">
+  <a href="#merging-xdump-agents" class="md-nav__link">
     Merging -Xdump agents
   </a>
   
@@ -1625,14 +1604,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-events" title="Dump events" class="md-nav__link">
+  <a href="#dump-events" class="md-nav__link">
     Dump events
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1640,42 +1619,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#noneoptions" title="none:&lt;options&gt;" class="md-nav__link">
+  <a href="#noneltoptionsgt" class="md-nav__link">
     none:&lt;options&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#defaults" title="defaults" class="md-nav__link">
+  <a href="#defaults" class="md-nav__link">
     defaults
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#eventsevent" title="events=&lt;event&gt;" class="md-nav__link">
+  <a href="#eventslteventgt" class="md-nav__link">
     events=&lt;event&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#execcommand" title="exec=&lt;command&gt;" class="md-nav__link">
+  <a href="#execltcommandgt" class="md-nav__link">
     exec=&lt;command&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#filefilename" title="file=&lt;filename&gt;" class="md-nav__link">
+  <a href="#fileltfilenamegt" class="md-nav__link">
     file=&lt;filename&gt;
   </a>
   
@@ -1683,21 +1662,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#writing-to-stdoutstderr" title="Writing to STDOUT/STDERR" class="md-nav__link">
+  <a href="#writing-to-stdoutstderr" class="md-nav__link">
     Writing to STDOUT/STDERR
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tokens" title="Tokens" class="md-nav__link">
+  <a href="#tokens" class="md-nav__link">
     Tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#file-location" title="File location" class="md-nav__link">
+  <a href="#file-location" class="md-nav__link">
     File location
   </a>
   
@@ -1709,7 +1688,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#filterfilter" title="filter=&lt;filter&gt;" class="md-nav__link">
+  <a href="#filterltfiltergt" class="md-nav__link">
     filter=&lt;filter&gt;
   </a>
   
@@ -1717,42 +1696,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#wildcards" title="Wildcards" class="md-nav__link">
+  <a href="#wildcards" class="md-nav__link">
     Wildcards
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-loading-and-exception-events" title="Class loading and exception events" class="md-nav__link">
+  <a href="#class-loading-and-exception-events" class="md-nav__link">
     Class loading and exception events
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vmstop-event" title="vmstop event" class="md-nav__link">
+  <a href="#vmstop-event" class="md-nav__link">
     vmstop event
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#slow-event" title="slow event" class="md-nav__link">
+  <a href="#slow-event" class="md-nav__link">
     slow event
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#allocation-event" title="allocation event" class="md-nav__link">
+  <a href="#allocation-event" class="md-nav__link">
     allocation event
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#other-events" title="Other events" class="md-nav__link">
+  <a href="#other-events" class="md-nav__link">
     Other events
   </a>
   
@@ -1764,14 +1743,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#msg_filterfilter" title="msg_filter=&lt;filter&gt;" class="md-nav__link">
+  <a href="#msg_filterltfiltergt" class="md-nav__link">
     msg_filter=&lt;filter&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#optsoptions" title="opts=&lt;options&gt;" class="md-nav__link">
+  <a href="#optsltoptionsgt" class="md-nav__link">
     opts=&lt;options&gt;
   </a>
   
@@ -1779,21 +1758,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#heap-dumps" title="Heap dumps" class="md-nav__link">
+  <a href="#heap-dumps" class="md-nav__link">
     Heap dumps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zos-system-dumps" title="z/OS system dumps" class="md-nav__link">
+  <a href="#zos-system-dumps" class="md-nav__link">
     z/OS system dumps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tool-dumps" title="Tool dumps" class="md-nav__link">
+  <a href="#tool-dumps" class="md-nav__link">
     Tool dumps
   </a>
   
@@ -1805,21 +1784,21 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#priority0-999" title="priority=&lt;0-999&gt;" class="md-nav__link">
+  <a href="#prioritylt0-999gt" class="md-nav__link">
     priority=&lt;0-999&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#rangeranges" title="range=&lt;ranges&gt;" class="md-nav__link">
+  <a href="#rangeltrangesgt" class="md-nav__link">
     range=&lt;ranges&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#requestrequests" title="request=&lt;requests&gt;" class="md-nav__link">
+  <a href="#requestltrequestsgt" class="md-nav__link">
     request=&lt;requests&gt;
   </a>
   
@@ -1831,7 +1810,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-output" title="Dump output" class="md-nav__link">
+  <a href="#dump-output" class="md-nav__link">
     Dump output
   </a>
   
@@ -1839,7 +1818,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#system-dumps-on-linux" title="System dumps on Linux" class="md-nav__link">
+  <a href="#system-dumps-on-linux" class="md-nav__link">
     System dumps on Linux
   </a>
   
@@ -1851,7 +1830,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3603,21 +3582,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#xdump-option-builder" title="Xdump Option Builder" class="md-nav__link">
+  <a href="#xdump-option-builder" class="md-nav__link">
     Xdump Option Builder
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-agents" title="Dump agents" class="md-nav__link">
+  <a href="#dump-agents" class="md-nav__link">
     Dump agents
   </a>
   
@@ -3625,21 +3604,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#default-dump-agents" title="Default dump agents" class="md-nav__link">
+  <a href="#default-dump-agents" class="md-nav__link">
     Default dump agents
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump-agent-tokens" title="Dump agent tokens" class="md-nav__link">
+  <a href="#dump-agent-tokens" class="md-nav__link">
     Dump agent tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#merging-xdump-agents" title="Merging -Xdump agents" class="md-nav__link">
+  <a href="#merging-xdump-agents" class="md-nav__link">
     Merging -Xdump agents
   </a>
   
@@ -3651,14 +3630,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-events" title="Dump events" class="md-nav__link">
+  <a href="#dump-events" class="md-nav__link">
     Dump events
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3666,42 +3645,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#noneoptions" title="none:&lt;options&gt;" class="md-nav__link">
+  <a href="#noneltoptionsgt" class="md-nav__link">
     none:&lt;options&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#defaults" title="defaults" class="md-nav__link">
+  <a href="#defaults" class="md-nav__link">
     defaults
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#eventsevent" title="events=&lt;event&gt;" class="md-nav__link">
+  <a href="#eventslteventgt" class="md-nav__link">
     events=&lt;event&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#execcommand" title="exec=&lt;command&gt;" class="md-nav__link">
+  <a href="#execltcommandgt" class="md-nav__link">
     exec=&lt;command&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#filefilename" title="file=&lt;filename&gt;" class="md-nav__link">
+  <a href="#fileltfilenamegt" class="md-nav__link">
     file=&lt;filename&gt;
   </a>
   
@@ -3709,21 +3688,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#writing-to-stdoutstderr" title="Writing to STDOUT/STDERR" class="md-nav__link">
+  <a href="#writing-to-stdoutstderr" class="md-nav__link">
     Writing to STDOUT/STDERR
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tokens" title="Tokens" class="md-nav__link">
+  <a href="#tokens" class="md-nav__link">
     Tokens
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#file-location" title="File location" class="md-nav__link">
+  <a href="#file-location" class="md-nav__link">
     File location
   </a>
   
@@ -3735,7 +3714,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#filterfilter" title="filter=&lt;filter&gt;" class="md-nav__link">
+  <a href="#filterltfiltergt" class="md-nav__link">
     filter=&lt;filter&gt;
   </a>
   
@@ -3743,42 +3722,42 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#wildcards" title="Wildcards" class="md-nav__link">
+  <a href="#wildcards" class="md-nav__link">
     Wildcards
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#class-loading-and-exception-events" title="Class loading and exception events" class="md-nav__link">
+  <a href="#class-loading-and-exception-events" class="md-nav__link">
     Class loading and exception events
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vmstop-event" title="vmstop event" class="md-nav__link">
+  <a href="#vmstop-event" class="md-nav__link">
     vmstop event
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#slow-event" title="slow event" class="md-nav__link">
+  <a href="#slow-event" class="md-nav__link">
     slow event
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#allocation-event" title="allocation event" class="md-nav__link">
+  <a href="#allocation-event" class="md-nav__link">
     allocation event
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#other-events" title="Other events" class="md-nav__link">
+  <a href="#other-events" class="md-nav__link">
     Other events
   </a>
   
@@ -3790,14 +3769,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#msg_filterfilter" title="msg_filter=&lt;filter&gt;" class="md-nav__link">
+  <a href="#msg_filterltfiltergt" class="md-nav__link">
     msg_filter=&lt;filter&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#optsoptions" title="opts=&lt;options&gt;" class="md-nav__link">
+  <a href="#optsltoptionsgt" class="md-nav__link">
     opts=&lt;options&gt;
   </a>
   
@@ -3805,21 +3784,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#heap-dumps" title="Heap dumps" class="md-nav__link">
+  <a href="#heap-dumps" class="md-nav__link">
     Heap dumps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zos-system-dumps" title="z/OS system dumps" class="md-nav__link">
+  <a href="#zos-system-dumps" class="md-nav__link">
     z/OS system dumps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tool-dumps" title="Tool dumps" class="md-nav__link">
+  <a href="#tool-dumps" class="md-nav__link">
     Tool dumps
   </a>
   
@@ -3831,21 +3810,21 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#priority0-999" title="priority=&lt;0-999&gt;" class="md-nav__link">
+  <a href="#prioritylt0-999gt" class="md-nav__link">
     priority=&lt;0-999&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#rangeranges" title="range=&lt;ranges&gt;" class="md-nav__link">
+  <a href="#rangeltrangesgt" class="md-nav__link">
     range=&lt;ranges&gt;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#requestrequests" title="request=&lt;requests&gt;" class="md-nav__link">
+  <a href="#requestltrequestsgt" class="md-nav__link">
     request=&lt;requests&gt;
   </a>
   
@@ -3857,7 +3836,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#dump-output" title="Dump output" class="md-nav__link">
+  <a href="#dump-output" class="md-nav__link">
     Dump output
   </a>
   
@@ -3865,7 +3844,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#system-dumps-on-linux" title="System dumps on Linux" class="md-nav__link">
+  <a href="#system-dumps-on-linux" class="md-nav__link">
     System dumps on Linux
   </a>
   
@@ -3877,7 +3856,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -4446,7 +4425,7 @@
 <p><code>-Xdump:&lt;agent&gt;:&lt;suboptions&gt;</code> descriptions and examples.</p>
 <h3 id="help"><code>help</code></h3>
 <p>To print usage information for a specific dump agent, use <code>-Xdump:&lt;agent&gt;:help</code></p>
-<h3 id="noneoptions"><code>none:&lt;options&gt;</code></h3>
+<h3 id="noneltoptionsgt"><code>none:&lt;options&gt;</code></h3>
 <p>Use the <code>-Xdump:none</code> option to add and remove dump agents for various VM events, update default dump settings (such as the dump name), and limit the number of dumps that are produced.</p>
 <p>The option can be used to affect all agents by specifying <code>-Xdump:none:&lt;options&gt;</code> or specific agents by specifying <code>-Xdump:&lt;agent&gt;:none:&lt;suboptions&gt;</code></p>
 <p>where <code>&lt;suboptions&gt;</code> is one of the following control types:</p>
@@ -4501,18 +4480,18 @@
 
 <p>This option does not add a Java dump agent; it updates the default settings for Java dump agents. Further Java dump agents will then create dump files using this specification for filenames, unless overridden.</p>
 <p><i class="fa fa-pencil-square-o" aria-hidden="true"></i> <strong>Note:</strong> Changing the defaults for a dump type will also affect the default agents for that dump type added by the VM during initialization. For example if you change the default file name for Java dump files, that will change the file name used by the default Java dump agents. However, changing the default range option will not change the range used by the default Java dump agents, because those agents override the range option with specific values.</p>
-<h3 id="eventsevent"><code>events=&lt;event&gt;</code></h3>
+<h3 id="eventslteventgt"><code>events=&lt;event&gt;</code></h3>
 <p>To trigger a dump as a result of an event, use the <code>-Xdump:&lt;agent&gt;:events=&lt;event&gt;</code> suboption. For a list of possible events, see <a href="#dump-events">Dump events</a>.</p>
 <p>For example, the following command instructs the VM to create a dump agent at startup that produces a Heap dump whenever the <em>vmstop</em> event happens:</p>
 <pre><code>-Xdump:heap:events=vmstop
 </code></pre>
 
-<h3 id="execcommand"><code>exec=&lt;command&gt;</code></h3>
+<h3 id="execltcommandgt"><code>exec=&lt;command&gt;</code></h3>
 <p>The exec suboption is used by the tool dump agent to specify an external application to start. You can set a specific command to run for a particular dump agent with the following command:</p>
 <pre><code>-Xdump:&lt;agent&gt;:exec=&lt;command&gt;
 </code></pre>
 
-<h3 id="filefilename"><code>file=&lt;filename&gt;</code></h3>
+<h3 id="fileltfilenamegt"><code>file=&lt;filename&gt;</code></h3>
 <p>The file suboption specifies where the diagnostics information is written for the specified dump type. The syntax is <code>-Xdump:&lt;agent&gt;:file=&lt;filename&gt;</code>.</p>
 <p>For example, to create a Heap dump called <code>my.dmp</code> when a <strong>vmstop</strong> event is received, use:</p>
 <pre><code>java -Xdump:heap:events=vmstop,file=my.dmp
@@ -4593,7 +4572,7 @@
 </ol>
 <p>This VM action does not apply to system dumps on z/OS operating systems that use the <code>dsn</code> option.
 You can prevent the VM reverting to different dump locations by using the <code>-Xdump:nofailover</code> option.</p>
-<h3 id="filterfilter"><code>filter=&lt;filter&gt;</code></h3>
+<h3 id="filterltfiltergt"><code>filter=&lt;filter&gt;</code></h3>
 <p>Some VM events occur thousands of times during the lifetime of an application. Dump agents can use filters and ranges to avoid producing an excessive number of dump files. The following syntax must be used:</p>
 <pre><code>-Xdump:&lt;agent&gt;:filter=&lt;filter&gt;
 </code></pre>
@@ -4662,7 +4641,7 @@
 
 <h4 id="other-events">Other events</h4>
 <p>If you apply a filter to an event that does not support filtering, the filter is ignored.</p>
-<h3 id="msg_filterfilter"><code>msg_filter=&lt;filter&gt;</code></h3>
+<h3 id="msg_filterltfiltergt"><code>msg_filter=&lt;filter&gt;</code></h3>
 <p>You can use the msg_filter suboption to filter on text strings within an exception message, allowing you to reduce the number of dump files produced. This option is supported only for the following events: <strong>throw</strong>, <strong>catch</strong>, <strong>systhrow</strong>, and <strong>uncaught</strong>.</p>
 <p>Use the following syntax to include message filtering in your dump output:</p>
 <pre><code>-Xdump:&lt;agent&gt;:events=&lt;event&gt;,msg_filter=&lt;filter&gt;`
@@ -4673,7 +4652,7 @@
 <pre><code>-Xdump:java:events=throw,filter=java/lang/VerifyError,msg_filter=*class format*
 </code></pre>
 
-<h3 id="optsoptions"><code>opts=&lt;options&gt;</code></h3>
+<h3 id="optsltoptionsgt"><code>opts=&lt;options&gt;</code></h3>
 <p>The full syntax is <code>-Xdump:&lt;agent&gt;:opts=&lt;options&gt;</code>.</p>
 <p>The heap dump agent uses this suboption to specify the type of file to produce. On z/OS, the system dump agent uses this suboption to specify the type of dump to produce.</p>
 <h4 id="heap-dumps">Heap dumps</h4>
@@ -4712,7 +4691,7 @@
 </code></pre>
 
 <p>Finally the last example starts the process and waits for 10 seconds before continuing, whether the process is still running or not. This last form is useful if you are starting a process that does not end, but requires time to initialize properly.</p>
-<h3 id="priority0-999"><code>priority=&lt;0-999&gt;</code></h3>
+<h3 id="prioritylt0-999gt"><code>priority=&lt;0-999&gt;</code></h3>
 <p>One event can generate multiple dump files. The agents that produce each dump file run sequentially and their order is determined by the priority keyword set for each agent. The full syntax for this command is <code>-Xdump:&lt;agent&gt;:priority=&lt;0-999&gt;</code>.</p>
 <p>Examination of the output from <code>-Xdump:what</code> shows that a <strong>gpf</strong> event produces a snap trace, a Java dump file, and a system dump file. In this example, the system dump runs first, with priority 999. The snap dump runs second, with priority 500. The Java dump runs last, with priority 10:</p>
 <pre><code>-Xdump:heap:events=vmstop,priority=123
@@ -4733,7 +4712,7 @@
   opts=PHD
 </code></pre>
 
-<h3 id="rangeranges"><code>range=&lt;ranges&gt;</code></h3>
+<h3 id="rangeltrangesgt"><code>range=&lt;ranges&gt;</code></h3>
 <p>You can start and stop dump agents on a particular occurrence of a VM event by using the <code>range</code> suboption: <code>-Xdump:&lt;agent&gt;:range=&lt;ranges&gt;</code></p>
 <p>For example:</p>
 <pre><code>-Xdump:java:events=fullgc,range=100..200
@@ -4742,7 +4721,7 @@
 <p><i class="fa fa-pencil-square-o" aria-hidden="true"></i> <strong>Note:</strong> range=1..0 against an event means "on every occurrence".</p>
 <p>The VM default dump agents have the range suboption set to 1..0 for all events except systhrow. Most systhrow events with <code>filter=java/lang/OutOfMemoryError</code> have the range suboption set to 1..4, which limits the number of dump files produced on <code>OutOfMemory</code> conditions to a maximum of 4. For more information, see <a href="#default-dump-agents">Default dump agents</a>.</p>
 <p>If you add a new dump agent and do not specify the range, a default of 1..0 is used.</p>
-<h3 id="requestrequests"><code>request=&lt;requests&gt;</code></h3>
+<h3 id="requestltrequestsgt"><code>request=&lt;requests&gt;</code></h3>
 <p>Use the request suboption to ask the VM to prepare the state before starting the dump agent: <code>-Xdump:&lt;agent&gt;:request=&lt;requests&gt;</code></p>
 <p>The available suboptions are listed in the following table:</p>
 <table>
@@ -5030,6 +5009,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xenableexcessivegc/index.html b/xenableexcessivegc/index.html
index 0a6af7c..e664dc1 100644
--- a/xenableexcessivegc/index.html
+++ b/xenableexcessivegc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1589,7 +1568,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3594,6 +3573,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xenableexplicitgc/index.html b/xenableexplicitgc/index.html
index 2dbd046..89f5898 100644
--- a/xenableexplicitgc/index.html
+++ b/xenableexplicitgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1601,14 +1580,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xenablestringconstantgc/index.html b/xenablestringconstantgc/index.html
index 58ef285..de41bc3 100644
--- a/xenablestringconstantgc/index.html
+++ b/xenablestringconstantgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1613,7 +1592,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3592,6 +3571,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xfastresolve/index.html b/xfastresolve/index.html
index 1432480..2ef84dd 100644
--- a/xfastresolve/index.html
+++ b/xfastresolve/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1625,7 +1604,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3576,6 +3555,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xfuture/index.html b/xfuture/index.html
index 65cbd7b..72b4a08 100644
--- a/xfuture/index.html
+++ b/xfuture/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1637,21 +1616,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3604,6 +3583,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xgc/index.html b/xgc/index.html
index 9e16e31..3c1133b 100644
--- a/xgc/index.html
+++ b/xgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1649,14 +1628,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1664,105 +1643,105 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#concurrentscavenge" title="concurrentScavenge" class="md-nav__link">
+  <a href="#concurrentscavenge" class="md-nav__link">
     concurrentScavenge
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dnssexpectedtimeratiomaximum" title="dnssExpectedTimeRatioMaximum" class="md-nav__link">
+  <a href="#dnssexpectedtimeratiomaximum" class="md-nav__link">
     dnssExpectedTimeRatioMaximum
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dnssexpectedtimeratiominimum" title="dnssExpectedTimeRatioMinimum" class="md-nav__link">
+  <a href="#dnssexpectedtimeratiominimum" class="md-nav__link">
     dnssExpectedTimeRatioMinimum
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#excessivegcratio" title="excessiveGCratio" class="md-nav__link">
+  <a href="#excessivegcratio" class="md-nav__link">
     excessiveGCratio
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#mincontractpercent" title="minContractPercent" class="md-nav__link">
+  <a href="#mincontractpercent" class="md-nav__link">
     minContractPercent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maxcontractpercent" title="maxContractPercent" class="md-nav__link">
+  <a href="#maxcontractpercent" class="md-nav__link">
     maxContractPercent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#overridehirestimercheck" title="overrideHiresTimerCheck" class="md-nav__link">
+  <a href="#overridehirestimercheck" class="md-nav__link">
     overrideHiresTimerCheck
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#preferredheapbase" title="preferredHeapBase" class="md-nav__link">
+  <a href="#preferredheapbase" class="md-nav__link">
     preferredHeapBase
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#scvnoadaptivetenure" title="scvNoAdaptiveTenure" class="md-nav__link">
+  <a href="#scvnoadaptivetenure" class="md-nav__link">
     scvNoAdaptiveTenure
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#scvtenureage" title="scvTenureAge" class="md-nav__link">
+  <a href="#scvtenureage" class="md-nav__link">
     scvTenureAge
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stdglobalcompacttosatisfyallocate" title="stdGlobalCompactToSatisfyAllocate" class="md-nav__link">
+  <a href="#stdglobalcompacttosatisfyallocate" class="md-nav__link">
     stdGlobalCompactToSatisfyAllocate
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tlhincrementsize" title="tlhIncrementSize" class="md-nav__link">
+  <a href="#tlhincrementsize" class="md-nav__link">
     tlhIncrementSize
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tlhinitialsize" title="tlhInitialSize" class="md-nav__link">
+  <a href="#tlhinitialsize" class="md-nav__link">
     tlhInitialSize
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tlhmaximumsize" title="tlhMaximumSize" class="md-nav__link">
+  <a href="#tlhmaximumsize" class="md-nav__link">
     tlhMaximumSize
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verboseformat" title="verboseFormat" class="md-nav__link">
+  <a href="#verboseformat" class="md-nav__link">
     verboseFormat
   </a>
   
@@ -3447,14 +3426,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3462,105 +3441,105 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#concurrentscavenge" title="concurrentScavenge" class="md-nav__link">
+  <a href="#concurrentscavenge" class="md-nav__link">
     concurrentScavenge
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dnssexpectedtimeratiomaximum" title="dnssExpectedTimeRatioMaximum" class="md-nav__link">
+  <a href="#dnssexpectedtimeratiomaximum" class="md-nav__link">
     dnssExpectedTimeRatioMaximum
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dnssexpectedtimeratiominimum" title="dnssExpectedTimeRatioMinimum" class="md-nav__link">
+  <a href="#dnssexpectedtimeratiominimum" class="md-nav__link">
     dnssExpectedTimeRatioMinimum
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#excessivegcratio" title="excessiveGCratio" class="md-nav__link">
+  <a href="#excessivegcratio" class="md-nav__link">
     excessiveGCratio
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#mincontractpercent" title="minContractPercent" class="md-nav__link">
+  <a href="#mincontractpercent" class="md-nav__link">
     minContractPercent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maxcontractpercent" title="maxContractPercent" class="md-nav__link">
+  <a href="#maxcontractpercent" class="md-nav__link">
     maxContractPercent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#overridehirestimercheck" title="overrideHiresTimerCheck" class="md-nav__link">
+  <a href="#overridehirestimercheck" class="md-nav__link">
     overrideHiresTimerCheck
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#preferredheapbase" title="preferredHeapBase" class="md-nav__link">
+  <a href="#preferredheapbase" class="md-nav__link">
     preferredHeapBase
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#scvnoadaptivetenure" title="scvNoAdaptiveTenure" class="md-nav__link">
+  <a href="#scvnoadaptivetenure" class="md-nav__link">
     scvNoAdaptiveTenure
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#scvtenureage" title="scvTenureAge" class="md-nav__link">
+  <a href="#scvtenureage" class="md-nav__link">
     scvTenureAge
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stdglobalcompacttosatisfyallocate" title="stdGlobalCompactToSatisfyAllocate" class="md-nav__link">
+  <a href="#stdglobalcompacttosatisfyallocate" class="md-nav__link">
     stdGlobalCompactToSatisfyAllocate
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tlhincrementsize" title="tlhIncrementSize" class="md-nav__link">
+  <a href="#tlhincrementsize" class="md-nav__link">
     tlhIncrementSize
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tlhinitialsize" title="tlhInitialSize" class="md-nav__link">
+  <a href="#tlhinitialsize" class="md-nav__link">
     tlhInitialSize
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#tlhmaximumsize" title="tlhMaximumSize" class="md-nav__link">
+  <a href="#tlhmaximumsize" class="md-nav__link">
     tlhMaximumSize
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verboseformat" title="verboseFormat" class="md-nav__link">
+  <a href="#verboseformat" class="md-nav__link">
     verboseFormat
   </a>
   
@@ -4171,6 +4150,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xgcpolicy/index.html b/xgcpolicy/index.html
index 1f06d5e..84a1d3c 100644
--- a/xgcpolicy/index.html
+++ b/xgcpolicy/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1673,14 +1652,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1688,7 +1667,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#balanced" title="balanced" class="md-nav__link">
+  <a href="#balanced" class="md-nav__link">
     balanced
   </a>
   
@@ -1696,7 +1675,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#defaults-and-options" title="Defaults and options" class="md-nav__link">
+  <a href="#defaults-and-options" class="md-nav__link">
     Defaults and options
   </a>
   
@@ -1708,14 +1687,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#gencon" title="gencon" class="md-nav__link">
+  <a href="#gencon" class="md-nav__link">
     gencon
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#metronome-aix-linux-x86-only" title="metronome (AIX, Linux x86 only)" class="md-nav__link">
+  <a href="#metronome-aix-linux-x86-only" class="md-nav__link">
     metronome (AIX, Linux x86 only)
   </a>
   
@@ -1723,7 +1702,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#defaults-and-options_1" title="Defaults and options" class="md-nav__link">
+  <a href="#defaults-and-options_1" class="md-nav__link">
     Defaults and options
   </a>
   
@@ -1735,7 +1714,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#nogc" title="nogc" class="md-nav__link">
+  <a href="#nogc" class="md-nav__link">
     nogc
   </a>
   
@@ -1743,7 +1722,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#when-to-use-nogc" title="When to use nogc" class="md-nav__link">
+  <a href="#when-to-use-nogc" class="md-nav__link">
     When to use nogc
   </a>
   
@@ -1755,14 +1734,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#optavgpause" title="optavgpause" class="md-nav__link">
+  <a href="#optavgpause" class="md-nav__link">
     optavgpause
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#optthruput" title="optthruput" class="md-nav__link">
+  <a href="#optthruput" class="md-nav__link">
     optthruput
   </a>
   
@@ -3423,14 +3402,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3438,7 +3417,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#balanced" title="balanced" class="md-nav__link">
+  <a href="#balanced" class="md-nav__link">
     balanced
   </a>
   
@@ -3446,7 +3425,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#defaults-and-options" title="Defaults and options" class="md-nav__link">
+  <a href="#defaults-and-options" class="md-nav__link">
     Defaults and options
   </a>
   
@@ -3458,14 +3437,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#gencon" title="gencon" class="md-nav__link">
+  <a href="#gencon" class="md-nav__link">
     gencon
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#metronome-aix-linux-x86-only" title="metronome (AIX, Linux x86 only)" class="md-nav__link">
+  <a href="#metronome-aix-linux-x86-only" class="md-nav__link">
     metronome (AIX, Linux x86 only)
   </a>
   
@@ -3473,7 +3452,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#defaults-and-options_1" title="Defaults and options" class="md-nav__link">
+  <a href="#defaults-and-options_1" class="md-nav__link">
     Defaults and options
   </a>
   
@@ -3485,7 +3464,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#nogc" title="nogc" class="md-nav__link">
+  <a href="#nogc" class="md-nav__link">
     nogc
   </a>
   
@@ -3493,7 +3472,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#when-to-use-nogc" title="When to use nogc" class="md-nav__link">
+  <a href="#when-to-use-nogc" class="md-nav__link">
     When to use nogc
   </a>
   
@@ -3505,14 +3484,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#optavgpause" title="optavgpause" class="md-nav__link">
+  <a href="#optavgpause" class="md-nav__link">
     optavgpause
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#optthruput" title="optthruput" class="md-nav__link">
+  <a href="#optthruput" class="md-nav__link">
     optthruput
   </a>
   
@@ -3956,6 +3935,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xgcsplitheap/index.html b/xgcsplitheap/index.html
index 3aed441..16537e2 100644
--- a/xgcsplitheap/index.html
+++ b/xgcsplitheap/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1661,14 +1640,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3600,6 +3579,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xgcthreads/index.html b/xgcthreads/index.html
index 59ff244..9e541d3 100644
--- a/xgcthreads/index.html
+++ b/xgcthreads/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1685,14 +1664,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3588,6 +3567,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xgcworkpackets/index.html b/xgcworkpackets/index.html
index 3a5475b..6a9fc2f 100644
--- a/xgcworkpackets/index.html
+++ b/xgcworkpackets/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1697,14 +1676,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3587,6 +3566,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xifa/index.html b/xifa/index.html
index bd60e95..04a4a73 100644
--- a/xifa/index.html
+++ b/xifa/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1709,7 +1688,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3599,6 +3578,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xint/index.html b/xint/index.html
index 86c6a89..881e10e 100644
--- a/xint/index.html
+++ b/xint/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1721,14 +1700,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3587,6 +3566,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xjit/index.html b/xjit/index.html
index 184f34a..c13455c 100644
--- a/xjit/index.html
+++ b/xjit/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2213,14 +2192,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -2228,56 +2207,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#count" title="count" class="md-nav__link">
+  <a href="#count" class="md-nav__link">
     count
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#disablermode64" title="disableRMODE64" class="md-nav__link">
+  <a href="#disablermode64" class="md-nav__link">
     disableRMODE64
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#enablegpu" title="enableGPU" class="md-nav__link">
+  <a href="#enablegpu" class="md-nav__link">
     enableGPU
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exclude" title="exclude" class="md-nav__link">
+  <a href="#exclude" class="md-nav__link">
     exclude
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#limitfile" title="limitFile" class="md-nav__link">
+  <a href="#limitfile" class="md-nav__link">
     limitFile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#optlevel" title="optlevel" class="md-nav__link">
+  <a href="#optlevel" class="md-nav__link">
     optlevel
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbose" title="verbose" class="md-nav__link">
+  <a href="#verbose" class="md-nav__link">
     verbose
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vlog" title="vlog" class="md-nav__link">
+  <a href="#vlog" class="md-nav__link">
     vlog
   </a>
   
@@ -2289,7 +2268,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#examples" title="Examples" class="md-nav__link">
+  <a href="#examples" class="md-nav__link">
     Examples
   </a>
   
@@ -2297,21 +2276,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#generating-a-jit-verbose-log" title="Generating a JIT verbose log" class="md-nav__link">
+  <a href="#generating-a-jit-verbose-log" class="md-nav__link">
     Generating a JIT verbose log
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#analyzing-jit-performance" title="Analyzing JIT performance" class="md-nav__link">
+  <a href="#analyzing-jit-performance" class="md-nav__link">
     Analyzing JIT performance
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#analyzing-inlining-operations" title="Analyzing inlining operations" class="md-nav__link">
+  <a href="#analyzing-inlining-operations" class="md-nav__link">
     Analyzing inlining operations
   </a>
   
@@ -2323,7 +2302,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3439,14 +3418,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3454,56 +3433,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#count" title="count" class="md-nav__link">
+  <a href="#count" class="md-nav__link">
     count
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#disablermode64" title="disableRMODE64" class="md-nav__link">
+  <a href="#disablermode64" class="md-nav__link">
     disableRMODE64
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#enablegpu" title="enableGPU" class="md-nav__link">
+  <a href="#enablegpu" class="md-nav__link">
     enableGPU
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exclude" title="exclude" class="md-nav__link">
+  <a href="#exclude" class="md-nav__link">
     exclude
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#limitfile" title="limitFile" class="md-nav__link">
+  <a href="#limitfile" class="md-nav__link">
     limitFile
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#optlevel" title="optlevel" class="md-nav__link">
+  <a href="#optlevel" class="md-nav__link">
     optlevel
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbose" title="verbose" class="md-nav__link">
+  <a href="#verbose" class="md-nav__link">
     verbose
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vlog" title="vlog" class="md-nav__link">
+  <a href="#vlog" class="md-nav__link">
     vlog
   </a>
   
@@ -3515,7 +3494,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#examples" title="Examples" class="md-nav__link">
+  <a href="#examples" class="md-nav__link">
     Examples
   </a>
   
@@ -3523,21 +3502,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#generating-a-jit-verbose-log" title="Generating a JIT verbose log" class="md-nav__link">
+  <a href="#generating-a-jit-verbose-log" class="md-nav__link">
     Generating a JIT verbose log
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#analyzing-jit-performance" title="Analyzing JIT performance" class="md-nav__link">
+  <a href="#analyzing-jit-performance" class="md-nav__link">
     Analyzing JIT performance
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#analyzing-inlining-operations" title="Analyzing inlining operations" class="md-nav__link">
+  <a href="#analyzing-inlining-operations" class="md-nav__link">
     Analyzing inlining operations
   </a>
   
@@ -3549,7 +3528,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3970,6 +3949,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xjni/index.html b/xjni/index.html
index 3e9cfbe..4c5725d 100644
--- a/xjni/index.html
+++ b/xjni/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1757,14 +1736,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1772,7 +1751,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#arraycachemax" title="arrayCacheMax" class="md-nav__link">
+  <a href="#arraycachemax" class="md-nav__link">
     arrayCacheMax
   </a>
   
@@ -3349,14 +3328,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3364,7 +3343,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#arraycachemax" title="arrayCacheMax" class="md-nav__link">
+  <a href="#arraycachemax" class="md-nav__link">
     arrayCacheMax
   </a>
   
@@ -3619,6 +3598,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xlinenumbers/index.html b/xlinenumbers/index.html
index 40099e5..c92de46 100644
--- a/xlinenumbers/index.html
+++ b/xlinenumbers/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2225,14 +2204,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xloa/index.html b/xloa/index.html
index 28c6534..42a18b7 100644
--- a/xloa/index.html
+++ b/xloa/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2237,28 +2216,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3350,28 +3329,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3645,6 +3624,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xloaminimum/index.html b/xloaminimum/index.html
index 3498ab3..60d7ce3 100644
--- a/xloaminimum/index.html
+++ b/xloaminimum/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1817,14 +1796,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3618,6 +3597,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xlockreservation/index.html b/xlockreservation/index.html
index 461998d..b7501c9 100644
--- a/xlockreservation/index.html
+++ b/xlockreservation/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1829,7 +1808,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3572,6 +3551,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xlockword/index.html b/xlockword/index.html
index 3b7e421..5354855 100644
--- a/xlockword/index.html
+++ b/xlockword/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1841,14 +1820,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1856,21 +1835,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#mode" title="mode" class="md-nav__link">
+  <a href="#mode" class="md-nav__link">
     mode
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nolockword" title="nolockword" class="md-nav__link">
+  <a href="#nolockword" class="md-nav__link">
     nolockword
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#what" title="what" class="md-nav__link">
+  <a href="#what" class="md-nav__link">
     what
   </a>
   
@@ -3363,14 +3342,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3378,21 +3357,21 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#mode" title="mode" class="md-nav__link">
+  <a href="#mode" class="md-nav__link">
     mode
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nolockword" title="nolockword" class="md-nav__link">
+  <a href="#nolockword" class="md-nav__link">
     nolockword
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#what" title="what" class="md-nav__link">
+  <a href="#what" class="md-nav__link">
     what
   </a>
   
@@ -3667,6 +3646,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xlog/index.html b/xlog/index.html
index 8562638..e7f8ca2 100644
--- a/xlog/index.html
+++ b/xlog/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1853,14 +1832,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1868,56 +1847,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#error" title="error" class="md-nav__link">
+  <a href="#error" class="md-nav__link">
     error
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vital" title="vital" class="md-nav__link">
+  <a href="#vital" class="md-nav__link">
     vital
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info" title="info" class="md-nav__link">
+  <a href="#info" class="md-nav__link">
     info
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#warn" title="warn" class="md-nav__link">
+  <a href="#warn" class="md-nav__link">
     warn
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#config" title="config" class="md-nav__link">
+  <a href="#config" class="md-nav__link">
     config
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#all" title="all" class="md-nav__link">
+  <a href="#all" class="md-nav__link">
     all
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#none" title="none" class="md-nav__link">
+  <a href="#none" class="md-nav__link">
     none
   </a>
   
@@ -3398,14 +3377,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3413,56 +3392,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#error" title="error" class="md-nav__link">
+  <a href="#error" class="md-nav__link">
     error
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#vital" title="vital" class="md-nav__link">
+  <a href="#vital" class="md-nav__link">
     vital
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#info" title="info" class="md-nav__link">
+  <a href="#info" class="md-nav__link">
     info
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#warn" title="warn" class="md-nav__link">
+  <a href="#warn" class="md-nav__link">
     warn
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#config" title="config" class="md-nav__link">
+  <a href="#config" class="md-nav__link">
     config
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#all" title="all" class="md-nav__link">
+  <a href="#all" class="md-nav__link">
     all
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#none" title="none" class="md-nav__link">
+  <a href="#none" class="md-nav__link">
     none
   </a>
   
@@ -3761,6 +3740,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xlp/index.html b/xlp/index.html
index 6f81f5d..e96d2ef 100644
--- a/xlp/index.html
+++ b/xlp/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1865,14 +1844,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -1880,28 +1859,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#aix" title="AIX&reg;" class="md-nav__link">
+  <a href="#aix" class="md-nav__link">
     AIX&reg;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#linux" title="Linux&reg;" class="md-nav__link">
+  <a href="#linux" class="md-nav__link">
     Linux&reg;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#windows" title="Windows&trade;" class="md-nav__link">
+  <a href="#windows" class="md-nav__link">
     Windows&trade;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zos" title="z/OS&reg;" class="md-nav__link">
+  <a href="#zos" class="md-nav__link">
     z/OS&reg;
   </a>
   
@@ -1913,14 +1892,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#limitation-and-workaround" title="Limitation and workaround" class="md-nav__link">
+  <a href="#limitation-and-workaround" class="md-nav__link">
     Limitation and workaround
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3384,14 +3363,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3399,28 +3378,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#aix" title="AIX&reg;" class="md-nav__link">
+  <a href="#aix" class="md-nav__link">
     AIX&reg;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#linux" title="Linux&reg;" class="md-nav__link">
+  <a href="#linux" class="md-nav__link">
     Linux&reg;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#windows" title="Windows&trade;" class="md-nav__link">
+  <a href="#windows" class="md-nav__link">
     Windows&trade;
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zos" title="z/OS&reg;" class="md-nav__link">
+  <a href="#zos" class="md-nav__link">
     z/OS&reg;
   </a>
   
@@ -3432,14 +3411,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#limitation-and-workaround" title="Limitation and workaround" class="md-nav__link">
+  <a href="#limitation-and-workaround" class="md-nav__link">
     Limitation and workaround
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3729,6 +3708,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xlpcodecache/index.html b/xlpcodecache/index.html
index 05eb566..fd5de3a 100644
--- a/xlpcodecache/index.html
+++ b/xlpcodecache/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1877,14 +1856,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-values" title="Default values" class="md-nav__link">
+  <a href="#default-values" class="md-nav__link">
     Default values
   </a>
   
@@ -1892,28 +1871,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#aix" title="AIX" class="md-nav__link">
+  <a href="#aix" class="md-nav__link">
     AIX
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#linux" title="Linux" class="md-nav__link">
+  <a href="#linux" class="md-nav__link">
     Linux
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#macos" title="macOS" class="md-nav__link">
+  <a href="#macos" class="md-nav__link">
     macOS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zos" title="z/OS" class="md-nav__link">
+  <a href="#zos" class="md-nav__link">
     z/OS
   </a>
   
@@ -1925,7 +1904,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3377,14 +3356,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-values" title="Default values" class="md-nav__link">
+  <a href="#default-values" class="md-nav__link">
     Default values
   </a>
   
@@ -3392,28 +3371,28 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#aix" title="AIX" class="md-nav__link">
+  <a href="#aix" class="md-nav__link">
     AIX
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#linux" title="Linux" class="md-nav__link">
+  <a href="#linux" class="md-nav__link">
     Linux
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#macos" title="macOS" class="md-nav__link">
+  <a href="#macos" class="md-nav__link">
     macOS
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#zos" title="z/OS" class="md-nav__link">
+  <a href="#zos" class="md-nav__link">
     z/OS
   </a>
   
@@ -3425,7 +3404,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3709,6 +3688,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xlpobjectheap/index.html b/xlpobjectheap/index.html
index e08db8d..939fd8e 100644
--- a/xlpobjectheap/index.html
+++ b/xlpobjectheap/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1889,14 +1868,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -1904,7 +1883,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#pagesize" title="pagesize" class="md-nav__link">
+  <a href="#pagesize" class="md-nav__link">
     pagesize
   </a>
   
@@ -1912,7 +1891,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#default-page-sizes" title="Default page sizes" class="md-nav__link">
+  <a href="#default-page-sizes" class="md-nav__link">
     Default page sizes
   </a>
   
@@ -1924,14 +1903,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#strict-warn" title="strict | warn" class="md-nav__link">
+  <a href="#strict-warn" class="md-nav__link">
     strict | warn
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#pageablenonpageable" title="pageable|nonpageable" class="md-nav__link">
+  <a href="#pageablenonpageable" class="md-nav__link">
     pageable|nonpageable
   </a>
   
@@ -1943,7 +1922,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3383,14 +3362,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3398,7 +3377,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#pagesize" title="pagesize" class="md-nav__link">
+  <a href="#pagesize" class="md-nav__link">
     pagesize
   </a>
   
@@ -3406,7 +3385,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#default-page-sizes" title="Default page sizes" class="md-nav__link">
+  <a href="#default-page-sizes" class="md-nav__link">
     Default page sizes
   </a>
   
@@ -3418,14 +3397,14 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#strict-warn" title="strict | warn" class="md-nav__link">
+  <a href="#strict-warn" class="md-nav__link">
     strict | warn
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#pageablenonpageable" title="pageable|nonpageable" class="md-nav__link">
+  <a href="#pageablenonpageable" class="md-nav__link">
     pageable|nonpageable
   </a>
   
@@ -3437,7 +3416,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3737,6 +3716,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmca/index.html b/xmca/index.html
index 5c98bae..acc50c2 100644
--- a/xmca/index.html
+++ b/xmca/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1949,7 +1928,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3596,6 +3575,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmcrs/index.html b/xmcrs/index.html
index f412ef2..891ec00 100644
--- a/xmcrs/index.html
+++ b/xmcrs/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1961,7 +1940,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3578,6 +3557,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmine/index.html b/xmine/index.html
index e1bf77f..76994d3 100644
--- a/xmine/index.html
+++ b/xmine/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1973,21 +1952,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3630,6 +3609,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xminf/index.html b/xminf/index.html
index 813f041..8b4a3d6 100644
--- a/xminf/index.html
+++ b/xminf/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1985,14 +1964,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3617,6 +3596,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmint/index.html b/xmint/index.html
index 6198c45..335e6f7 100644
--- a/xmint/index.html
+++ b/xmint/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -1997,7 +1976,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3600,6 +3579,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmn/index.html b/xmn/index.html
index 6556c6a..fdfde4f 100644
--- a/xmn/index.html
+++ b/xmn/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2033,7 +2012,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3603,6 +3582,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmo/index.html b/xmo/index.html
index 7f7a7ce..3af9bd3 100644
--- a/xmo/index.html
+++ b/xmo/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2081,7 +2060,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmr/index.html b/xmr/index.html
index 0ffef9d..1fe86cb 100644
--- a/xmr/index.html
+++ b/xmr/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2105,7 +2084,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3593,6 +3572,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xms/index.html b/xms/index.html
index bb79736..10c87a1 100644
--- a/xms/index.html
+++ b/xms/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2141,21 +2120,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#examples" title="Examples" class="md-nav__link">
+  <a href="#examples" class="md-nav__link">
     Examples
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#examples" title="Examples" class="md-nav__link">
+  <a href="#examples" class="md-nav__link">
     Examples
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3647,6 +3626,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xmso/index.html b/xmso/index.html
index 8e50cb2..6823faf 100644
--- a/xmso/index.html
+++ b/xmso/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2129,21 +2108,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-setting" title="Default setting" class="md-nav__link">
+  <a href="#default-setting" class="md-nav__link">
     Default setting
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-setting" title="Default setting" class="md-nav__link">
+  <a href="#default-setting" class="md-nav__link">
     Default setting
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3609,6 +3588,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xnumanone/index.html b/xnumanone/index.html
index a21d8cb..cb8b51b 100644
--- a/xnumanone/index.html
+++ b/xnumanone/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2273,14 +2252,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
@@ -3589,6 +3568,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xoptionsfile/index.html b/xoptionsfile/index.html
index cee4d24..5b25fcc 100644
--- a/xoptionsfile/index.html
+++ b/xoptionsfile/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2285,28 +2264,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3350,28 +3329,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3659,6 +3638,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xquickstart/index.html b/xquickstart/index.html
index 4bd9b96..6f7a1b8 100644
--- a/xquickstart/index.html
+++ b/xquickstart/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2297,21 +2276,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3606,6 +3585,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xrs/index.html b/xrs/index.html
index a4cc36b..e2dbc08 100644
--- a/xrs/index.html
+++ b/xrs/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2309,14 +2288,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3599,6 +3578,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xsamplingexpirationtime/index.html b/xsamplingexpirationtime/index.html
index de1ffa2..85943e0 100644
--- a/xsamplingexpirationtime/index.html
+++ b/xsamplingexpirationtime/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2321,14 +2300,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3593,6 +3572,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xscdmx/index.html b/xscdmx/index.html
index 6e340d2..21e0371 100644
--- a/xscdmx/index.html
+++ b/xscdmx/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2333,14 +2312,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3589,6 +3568,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xscminaot/index.html b/xscminaot/index.html
index 4bb9f68..323fe43 100644
--- a/xscminaot/index.html
+++ b/xscminaot/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2369,28 +2348,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#-xscminaot" title="-Xscminaot" class="md-nav__link">
+  <a href="#-xscminaot" class="md-nav__link">
     -Xscminaot
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#-xscmaxaot" title="-Xscmaxaot" class="md-nav__link">
+  <a href="#-xscmaxaot" class="md-nav__link">
     -Xscmaxaot
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3350,28 +3329,28 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#-xscminaot" title="-Xscminaot" class="md-nav__link">
+  <a href="#-xscminaot" class="md-nav__link">
     -Xscminaot
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#-xscmaxaot" title="-Xscmaxaot" class="md-nav__link">
+  <a href="#-xscmaxaot" class="md-nav__link">
     -Xscmaxaot
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3658,6 +3637,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xscminjitdata/index.html b/xscminjitdata/index.html
index f8cc120..e5220ab 100644
--- a/xscminjitdata/index.html
+++ b/xscminjitdata/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2381,21 +2360,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -2403,14 +2382,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#-xscminjitdata" title="-Xscminjitdata" class="md-nav__link">
+  <a href="#-xscminjitdata" class="md-nav__link">
     -Xscminjitdata
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#-xscmaxjitdata" title="-Xscmaxjitdata" class="md-nav__link">
+  <a href="#-xscmaxjitdata" class="md-nav__link">
     -Xscmaxjitdata
   </a>
   
@@ -2422,7 +2401,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3370,21 +3349,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3392,14 +3371,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#-xscminjitdata" title="-Xscminjitdata" class="md-nav__link">
+  <a href="#-xscminjitdata" class="md-nav__link">
     -Xscminjitdata
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#-xscmaxjitdata" title="-Xscmaxjitdata" class="md-nav__link">
+  <a href="#-xscmaxjitdata" class="md-nav__link">
     -Xscmaxjitdata
   </a>
   
@@ -3411,7 +3390,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3702,6 +3681,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xscmx/index.html b/xscmx/index.html
index 0d01d1c..b8f8f82 100644
--- a/xscmx/index.html
+++ b/xscmx/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2393,14 +2372,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -2408,7 +2387,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#setting-a-soft-maximum-size" title="Setting a soft maximum size" class="md-nav__link">
+  <a href="#setting-a-soft-maximum-size" class="md-nav__link">
     Setting a soft maximum size
   </a>
   
@@ -2420,7 +2399,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3356,14 +3335,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3371,7 +3350,7 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#setting-a-soft-maximum-size" title="Setting a soft maximum size" class="md-nav__link">
+  <a href="#setting-a-soft-maximum-size" class="md-nav__link">
     Setting a soft maximum size
   </a>
   
@@ -3383,7 +3362,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3650,6 +3629,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xshareclasses/index.html b/xshareclasses/index.html
index f5f2986..26b6be5 100644
--- a/xshareclasses/index.html
+++ b/xshareclasses/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2405,14 +2384,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -2420,378 +2399,378 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#adjustmaxaot-cache-utility" title="adjustmaxaot (Cache utility)" class="md-nav__link">
+  <a href="#adjustmaxaot-cache-utility" class="md-nav__link">
     adjustmaxaot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustminaot-cache-utility" title="adjustminaot (Cache utility)" class="md-nav__link">
+  <a href="#adjustminaot-cache-utility" class="md-nav__link">
     adjustminaot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustmaxjitdata-cache-utility" title="adjustmaxjitdata (Cache utility)" class="md-nav__link">
+  <a href="#adjustmaxjitdata-cache-utility" class="md-nav__link">
     adjustmaxjitdata (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustminjitdata-cache-utility" title="adjustminjitdata (Cache utility)" class="md-nav__link">
+  <a href="#adjustminjitdata-cache-utility" class="md-nav__link">
     adjustminjitdata (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustsoftmx-cache-utility" title="adjustsoftmx (Cache utility)" class="md-nav__link">
+  <a href="#adjustsoftmx-cache-utility" class="md-nav__link">
     adjustsoftmx (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#allowclasspaths" title="allowClasspaths" class="md-nav__link">
+  <a href="#allowclasspaths" class="md-nav__link">
     allowClasspaths
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#bootclassesonly" title="bootClassesOnly" class="md-nav__link">
+  <a href="#bootclassesonly" class="md-nav__link">
     bootClassesOnly
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cachedir" title="cacheDir" class="md-nav__link">
+  <a href="#cachedir" class="md-nav__link">
     cacheDir
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cachedirperm" title="cacheDirPerm" class="md-nav__link">
+  <a href="#cachedirperm" class="md-nav__link">
     cacheDirPerm
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cacheretransformed" title="cacheRetransformed" class="md-nav__link">
+  <a href="#cacheretransformed" class="md-nav__link">
     cacheRetransformed
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#checkurltimestamps" title="checkURLTimestamps" class="md-nav__link">
+  <a href="#checkurltimestamps" class="md-nav__link">
     checkURLTimestamps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#createlayer" title="createLayer" class="md-nav__link">
+  <a href="#createlayer" class="md-nav__link">
     createLayer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroy-cache-utility" title="destroy (Cache utility)" class="md-nav__link">
+  <a href="#destroy-cache-utility" class="md-nav__link">
     destroy (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroyall-cache-utility" title="destroyAll (Cache utility)" class="md-nav__link">
+  <a href="#destroyall-cache-utility" class="md-nav__link">
     destroyAll (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroyalllayers" title="destroyAllLayers" class="md-nav__link">
+  <a href="#destroyalllayers" class="md-nav__link">
     destroyAllLayers
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroyallsnapshots-cache-utility" title="destroyAllSnapshots (Cache utility)" class="md-nav__link">
+  <a href="#destroyallsnapshots-cache-utility" class="md-nav__link">
     destroyAllSnapshots (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroysnapshot-cache-utility" title="destroySnapshot (Cache utility)" class="md-nav__link">
+  <a href="#destroysnapshot-cache-utility" class="md-nav__link">
     destroySnapshot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#disablebci" title="disableBCI" class="md-nav__link">
+  <a href="#disablebci" class="md-nav__link">
     disableBCI
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#enablebci" title="enableBCI" class="md-nav__link">
+  <a href="#enablebci" class="md-nav__link">
     enableBCI
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#expire-cache-utility" title="expire (Cache utility)" class="md-nav__link">
+  <a href="#expire-cache-utility" class="md-nav__link">
     expire (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#fatal" title="fatal" class="md-nav__link">
+  <a href="#fatal" class="md-nav__link">
     fatal
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#findaotmethods-cache-utility" title="findAotMethods (Cache utility)" class="md-nav__link">
+  <a href="#findaotmethods-cache-utility" class="md-nav__link">
     findAotMethods (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#groupaccess" title="groupAccess" class="md-nav__link">
+  <a href="#groupaccess" class="md-nav__link">
     groupAccess
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#invalidateaotmethods-cache-utility" title="invalidateAotMethods (Cache utility)" class="md-nav__link">
+  <a href="#invalidateaotmethods-cache-utility" class="md-nav__link">
     invalidateAotMethods (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#layer" title="layer" class="md-nav__link">
+  <a href="#layer" class="md-nav__link">
     layer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#listallcaches-cache-utility" title="listAllCaches (Cache utility)" class="md-nav__link">
+  <a href="#listallcaches-cache-utility" class="md-nav__link">
     listAllCaches (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#mprotect" title="mprotect" class="md-nav__link">
+  <a href="#mprotect" class="md-nav__link">
     mprotect
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#modified" title="modified" class="md-nav__link">
+  <a href="#modified" class="md-nav__link">
     modified
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#name" title="name" class="md-nav__link">
+  <a href="#name" class="md-nav__link">
     name
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#noaot" title="noaot" class="md-nav__link">
+  <a href="#noaot" class="md-nav__link">
     noaot
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nobootclasspath" title="noBootclasspath" class="md-nav__link">
+  <a href="#nobootclasspath" class="md-nav__link">
     noBootclasspath
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nocheckurltimestamps" title="nocheckURLTimestamps" class="md-nav__link">
+  <a href="#nocheckurltimestamps" class="md-nav__link">
     nocheckURLTimestamps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nojitdata" title="nojitdata" class="md-nav__link">
+  <a href="#nojitdata" class="md-nav__link">
     nojitdata
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#none" title="none" class="md-nav__link">
+  <a href="#none" class="md-nav__link">
     none
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nonfatal" title="nonfatal" class="md-nav__link">
+  <a href="#nonfatal" class="md-nav__link">
     nonfatal
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nonpersistent" title="nonpersistent" class="md-nav__link">
+  <a href="#nonpersistent" class="md-nav__link">
     nonpersistent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nopersistentdiskspacecheck" title="noPersistentDiskSpaceCheck" class="md-nav__link">
+  <a href="#nopersistentdiskspacecheck" class="md-nav__link">
     noPersistentDiskSpaceCheck
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#persistent" title="persistent" class="md-nav__link">
+  <a href="#persistent" class="md-nav__link">
     persistent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#printallstats-cache-utility" title="printAllStats (Cache utility)" class="md-nav__link">
+  <a href="#printallstats-cache-utility" class="md-nav__link">
     printAllStats (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#printstats-cache-utility" title="printStats (Cache utility)" class="md-nav__link">
+  <a href="#printstats-cache-utility" class="md-nav__link">
     printStats (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#printtoplayerstats-cache-utility" title="printTopLayerStats (Cache utility)" class="md-nav__link">
+  <a href="#printtoplayerstats-cache-utility" class="md-nav__link">
     printTopLayerStats (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#readonly" title="readonly" class="md-nav__link">
+  <a href="#readonly" class="md-nav__link">
     readonly
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#reset" title="reset" class="md-nav__link">
+  <a href="#reset" class="md-nav__link">
     reset
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#restorefromsnapshot-cache-utility" title="restoreFromSnapshot (Cache utility)" class="md-nav__link">
+  <a href="#restorefromsnapshot-cache-utility" class="md-nav__link">
     restoreFromSnapshot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#restrictclasspaths" title="restrictClasspaths" class="md-nav__link">
+  <a href="#restrictclasspaths" class="md-nav__link">
     restrictClasspaths
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#revalidateaotmethods-cache-utility" title="revalidateAotMethods (Cache utility)" class="md-nav__link">
+  <a href="#revalidateaotmethods-cache-utility" class="md-nav__link">
     revalidateAotMethods (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#silent" title="silent" class="md-nav__link">
+  <a href="#silent" class="md-nav__link">
     silent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#snapshotcache-cache-utility" title="snapshotCache (Cache utility)" class="md-nav__link">
+  <a href="#snapshotcache-cache-utility" class="md-nav__link">
     snapshotCache (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#utilities" title="utilities" class="md-nav__link">
+  <a href="#utilities" class="md-nav__link">
     utilities
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbose" title="verbose" class="md-nav__link">
+  <a href="#verbose" class="md-nav__link">
     verbose
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verboseaot" title="verboseAOT" class="md-nav__link">
+  <a href="#verboseaot" class="md-nav__link">
     verboseAOT
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbosehelper" title="verboseHelper" class="md-nav__link">
+  <a href="#verbosehelper" class="md-nav__link">
     verboseHelper
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verboseio" title="verboseIO" class="md-nav__link">
+  <a href="#verboseio" class="md-nav__link">
     verboseIO
   </a>
   
@@ -2803,14 +2782,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#method-specification-syntax" title="Method specification syntax" class="md-nav__link">
+  <a href="#method-specification-syntax" class="md-nav__link">
     Method specification syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3734,14 +3713,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3749,378 +3728,378 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#adjustmaxaot-cache-utility" title="adjustmaxaot (Cache utility)" class="md-nav__link">
+  <a href="#adjustmaxaot-cache-utility" class="md-nav__link">
     adjustmaxaot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustminaot-cache-utility" title="adjustminaot (Cache utility)" class="md-nav__link">
+  <a href="#adjustminaot-cache-utility" class="md-nav__link">
     adjustminaot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustmaxjitdata-cache-utility" title="adjustmaxjitdata (Cache utility)" class="md-nav__link">
+  <a href="#adjustmaxjitdata-cache-utility" class="md-nav__link">
     adjustmaxjitdata (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustminjitdata-cache-utility" title="adjustminjitdata (Cache utility)" class="md-nav__link">
+  <a href="#adjustminjitdata-cache-utility" class="md-nav__link">
     adjustminjitdata (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#adjustsoftmx-cache-utility" title="adjustsoftmx (Cache utility)" class="md-nav__link">
+  <a href="#adjustsoftmx-cache-utility" class="md-nav__link">
     adjustsoftmx (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#allowclasspaths" title="allowClasspaths" class="md-nav__link">
+  <a href="#allowclasspaths" class="md-nav__link">
     allowClasspaths
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#bootclassesonly" title="bootClassesOnly" class="md-nav__link">
+  <a href="#bootclassesonly" class="md-nav__link">
     bootClassesOnly
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cachedir" title="cacheDir" class="md-nav__link">
+  <a href="#cachedir" class="md-nav__link">
     cacheDir
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cachedirperm" title="cacheDirPerm" class="md-nav__link">
+  <a href="#cachedirperm" class="md-nav__link">
     cacheDirPerm
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cacheretransformed" title="cacheRetransformed" class="md-nav__link">
+  <a href="#cacheretransformed" class="md-nav__link">
     cacheRetransformed
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#checkurltimestamps" title="checkURLTimestamps" class="md-nav__link">
+  <a href="#checkurltimestamps" class="md-nav__link">
     checkURLTimestamps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#createlayer" title="createLayer" class="md-nav__link">
+  <a href="#createlayer" class="md-nav__link">
     createLayer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroy-cache-utility" title="destroy (Cache utility)" class="md-nav__link">
+  <a href="#destroy-cache-utility" class="md-nav__link">
     destroy (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroyall-cache-utility" title="destroyAll (Cache utility)" class="md-nav__link">
+  <a href="#destroyall-cache-utility" class="md-nav__link">
     destroyAll (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroyalllayers" title="destroyAllLayers" class="md-nav__link">
+  <a href="#destroyalllayers" class="md-nav__link">
     destroyAllLayers
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroyallsnapshots-cache-utility" title="destroyAllSnapshots (Cache utility)" class="md-nav__link">
+  <a href="#destroyallsnapshots-cache-utility" class="md-nav__link">
     destroyAllSnapshots (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#destroysnapshot-cache-utility" title="destroySnapshot (Cache utility)" class="md-nav__link">
+  <a href="#destroysnapshot-cache-utility" class="md-nav__link">
     destroySnapshot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#disablebci" title="disableBCI" class="md-nav__link">
+  <a href="#disablebci" class="md-nav__link">
     disableBCI
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#enablebci" title="enableBCI" class="md-nav__link">
+  <a href="#enablebci" class="md-nav__link">
     enableBCI
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#expire-cache-utility" title="expire (Cache utility)" class="md-nav__link">
+  <a href="#expire-cache-utility" class="md-nav__link">
     expire (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#fatal" title="fatal" class="md-nav__link">
+  <a href="#fatal" class="md-nav__link">
     fatal
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#findaotmethods-cache-utility" title="findAotMethods (Cache utility)" class="md-nav__link">
+  <a href="#findaotmethods-cache-utility" class="md-nav__link">
     findAotMethods (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#groupaccess" title="groupAccess" class="md-nav__link">
+  <a href="#groupaccess" class="md-nav__link">
     groupAccess
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#invalidateaotmethods-cache-utility" title="invalidateAotMethods (Cache utility)" class="md-nav__link">
+  <a href="#invalidateaotmethods-cache-utility" class="md-nav__link">
     invalidateAotMethods (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#layer" title="layer" class="md-nav__link">
+  <a href="#layer" class="md-nav__link">
     layer
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#listallcaches-cache-utility" title="listAllCaches (Cache utility)" class="md-nav__link">
+  <a href="#listallcaches-cache-utility" class="md-nav__link">
     listAllCaches (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#mprotect" title="mprotect" class="md-nav__link">
+  <a href="#mprotect" class="md-nav__link">
     mprotect
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#modified" title="modified" class="md-nav__link">
+  <a href="#modified" class="md-nav__link">
     modified
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#name" title="name" class="md-nav__link">
+  <a href="#name" class="md-nav__link">
     name
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#noaot" title="noaot" class="md-nav__link">
+  <a href="#noaot" class="md-nav__link">
     noaot
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nobootclasspath" title="noBootclasspath" class="md-nav__link">
+  <a href="#nobootclasspath" class="md-nav__link">
     noBootclasspath
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nocheckurltimestamps" title="nocheckURLTimestamps" class="md-nav__link">
+  <a href="#nocheckurltimestamps" class="md-nav__link">
     nocheckURLTimestamps
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nojitdata" title="nojitdata" class="md-nav__link">
+  <a href="#nojitdata" class="md-nav__link">
     nojitdata
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#none" title="none" class="md-nav__link">
+  <a href="#none" class="md-nav__link">
     none
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nonfatal" title="nonfatal" class="md-nav__link">
+  <a href="#nonfatal" class="md-nav__link">
     nonfatal
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nonpersistent" title="nonpersistent" class="md-nav__link">
+  <a href="#nonpersistent" class="md-nav__link">
     nonpersistent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#nopersistentdiskspacecheck" title="noPersistentDiskSpaceCheck" class="md-nav__link">
+  <a href="#nopersistentdiskspacecheck" class="md-nav__link">
     noPersistentDiskSpaceCheck
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#persistent" title="persistent" class="md-nav__link">
+  <a href="#persistent" class="md-nav__link">
     persistent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#printallstats-cache-utility" title="printAllStats (Cache utility)" class="md-nav__link">
+  <a href="#printallstats-cache-utility" class="md-nav__link">
     printAllStats (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#printstats-cache-utility" title="printStats (Cache utility)" class="md-nav__link">
+  <a href="#printstats-cache-utility" class="md-nav__link">
     printStats (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#printtoplayerstats-cache-utility" title="printTopLayerStats (Cache utility)" class="md-nav__link">
+  <a href="#printtoplayerstats-cache-utility" class="md-nav__link">
     printTopLayerStats (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#readonly" title="readonly" class="md-nav__link">
+  <a href="#readonly" class="md-nav__link">
     readonly
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#reset" title="reset" class="md-nav__link">
+  <a href="#reset" class="md-nav__link">
     reset
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#restorefromsnapshot-cache-utility" title="restoreFromSnapshot (Cache utility)" class="md-nav__link">
+  <a href="#restorefromsnapshot-cache-utility" class="md-nav__link">
     restoreFromSnapshot (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#restrictclasspaths" title="restrictClasspaths" class="md-nav__link">
+  <a href="#restrictclasspaths" class="md-nav__link">
     restrictClasspaths
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#revalidateaotmethods-cache-utility" title="revalidateAotMethods (Cache utility)" class="md-nav__link">
+  <a href="#revalidateaotmethods-cache-utility" class="md-nav__link">
     revalidateAotMethods (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#silent" title="silent" class="md-nav__link">
+  <a href="#silent" class="md-nav__link">
     silent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#snapshotcache-cache-utility" title="snapshotCache (Cache utility)" class="md-nav__link">
+  <a href="#snapshotcache-cache-utility" class="md-nav__link">
     snapshotCache (Cache utility)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#utilities" title="utilities" class="md-nav__link">
+  <a href="#utilities" class="md-nav__link">
     utilities
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbose" title="verbose" class="md-nav__link">
+  <a href="#verbose" class="md-nav__link">
     verbose
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verboseaot" title="verboseAOT" class="md-nav__link">
+  <a href="#verboseaot" class="md-nav__link">
     verboseAOT
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verbosehelper" title="verboseHelper" class="md-nav__link">
+  <a href="#verbosehelper" class="md-nav__link">
     verboseHelper
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#verboseio" title="verboseIO" class="md-nav__link">
+  <a href="#verboseio" class="md-nav__link">
     verboseIO
   </a>
   
@@ -4132,14 +4111,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#method-specification-syntax" title="Method specification syntax" class="md-nav__link">
+  <a href="#method-specification-syntax" class="md-nav__link">
     Method specification syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -5051,6 +5030,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xsigcatch/index.html b/xsigcatch/index.html
index 122b6de..548918e 100644
--- a/xsigcatch/index.html
+++ b/xsigcatch/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2417,7 +2396,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3590,6 +3569,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xsigchain/index.html b/xsigchain/index.html
index 350ad6c..e0f0646 100644
--- a/xsigchain/index.html
+++ b/xsigchain/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2429,7 +2408,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3590,6 +3569,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xsignal/index.html b/xsignal/index.html
index e64ff01..47a1bb9 100644
--- a/xsignal/index.html
+++ b/xsignal/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2441,14 +2420,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -2456,14 +2435,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#posixsignalhandler" title="posixSignalHandler" class="md-nav__link">
+  <a href="#posixsignalhandler" class="md-nav__link">
     posixSignalHandler
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#userconditionhandler" title="userConditionHandler" class="md-nav__link">
+  <a href="#userconditionhandler" class="md-nav__link">
     userConditionHandler
   </a>
   
@@ -2475,7 +2454,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3363,14 +3342,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3378,14 +3357,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#posixsignalhandler" title="posixSignalHandler" class="md-nav__link">
+  <a href="#posixsignalhandler" class="md-nav__link">
     posixSignalHandler
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#userconditionhandler" title="userConditionHandler" class="md-nav__link">
+  <a href="#userconditionhandler" class="md-nav__link">
     userConditionHandler
   </a>
   
@@ -3397,7 +3376,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3677,6 +3656,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xsoftmx/index.html b/xsoftmx/index.html
index 13184c3..2efad3b 100644
--- a/xsoftmx/index.html
+++ b/xsoftmx/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2453,14 +2432,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xsoftrefthreshold/index.html b/xsoftrefthreshold/index.html
index 3375b83..78dd0bd 100644
--- a/xsoftrefthreshold/index.html
+++ b/xsoftrefthreshold/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2465,21 +2444,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3604,6 +3583,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xss/index.html b/xss/index.html
index fb4e39f..eb417a2 100644
--- a/xss/index.html
+++ b/xss/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2489,14 +2468,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3622,6 +3601,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xtgc/index.html b/xtgc/index.html
index 3913175..81fddf5 100644
--- a/xtgc/index.html
+++ b/xtgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2501,14 +2480,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -2516,56 +2495,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#backtrace" title="backtrace" class="md-nav__link">
+  <a href="#backtrace" class="md-nav__link">
     backtrace
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#compaction" title="compaction" class="md-nav__link">
+  <a href="#compaction" class="md-nav__link">
     compaction
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#concurrent" title="concurrent" class="md-nav__link">
+  <a href="#concurrent" class="md-nav__link">
     concurrent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump" title="dump" class="md-nav__link">
+  <a href="#dump" class="md-nav__link">
     dump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#freelist" title="freeList" class="md-nav__link">
+  <a href="#freelist" class="md-nav__link">
     freeList
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#parallel" title="parallel" class="md-nav__link">
+  <a href="#parallel" class="md-nav__link">
     parallel
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#scavenger" title="scavenger" class="md-nav__link">
+  <a href="#scavenger" class="md-nav__link">
     scavenger
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#terse" title="terse" class="md-nav__link">
+  <a href="#terse" class="md-nav__link">
     terse
   </a>
   
@@ -3398,14 +3377,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3413,56 +3392,56 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#backtrace" title="backtrace" class="md-nav__link">
+  <a href="#backtrace" class="md-nav__link">
     backtrace
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#compaction" title="compaction" class="md-nav__link">
+  <a href="#compaction" class="md-nav__link">
     compaction
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#concurrent" title="concurrent" class="md-nav__link">
+  <a href="#concurrent" class="md-nav__link">
     concurrent
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#dump" title="dump" class="md-nav__link">
+  <a href="#dump" class="md-nav__link">
     dump
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#freelist" title="freeList" class="md-nav__link">
+  <a href="#freelist" class="md-nav__link">
     freeList
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#parallel" title="parallel" class="md-nav__link">
+  <a href="#parallel" class="md-nav__link">
     parallel
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#scavenger" title="scavenger" class="md-nav__link">
+  <a href="#scavenger" class="md-nav__link">
     scavenger
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#terse" title="terse" class="md-nav__link">
+  <a href="#terse" class="md-nav__link">
     terse
   </a>
   
@@ -3761,6 +3740,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xthr/index.html b/xthr/index.html
index 0a65e6e..268537b 100644
--- a/xthr/index.html
+++ b/xthr/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2513,14 +2492,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -2528,35 +2507,35 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#adaptspin-noadaptspin" title="AdaptSpin | noAdaptSpin" class="md-nav__link">
+  <a href="#adaptspin-noadaptspin" class="md-nav__link">
     AdaptSpin | noAdaptSpin
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#fastnotify-nofastnotify" title="fastNotify | noFastNotify" class="md-nav__link">
+  <a href="#fastnotify-nofastnotify" class="md-nav__link">
     fastNotify | noFastNotify
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cfsyield-nocfsyield-linux-only" title="cfsYield | noCfsYield (Linux&reg; only)" class="md-nav__link">
+  <a href="#cfsyield-nocfsyield-linux-only" class="md-nav__link">
     cfsYield | noCfsYield (Linux&reg; only)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#minimizeusercpu" title="minimizeUserCPU" class="md-nav__link">
+  <a href="#minimizeusercpu" class="md-nav__link">
     minimizeUserCPU
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#secondaryspinforobjectmonitors-nosecondaryspinforobjectmonitors" title="secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors" class="md-nav__link">
+  <a href="#secondaryspinforobjectmonitors-nosecondaryspinforobjectmonitors" class="md-nav__link">
     secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors
   </a>
   
@@ -3377,14 +3356,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3392,35 +3371,35 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#adaptspin-noadaptspin" title="AdaptSpin | noAdaptSpin" class="md-nav__link">
+  <a href="#adaptspin-noadaptspin" class="md-nav__link">
     AdaptSpin | noAdaptSpin
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#fastnotify-nofastnotify" title="fastNotify | noFastNotify" class="md-nav__link">
+  <a href="#fastnotify-nofastnotify" class="md-nav__link">
     fastNotify | noFastNotify
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#cfsyield-nocfsyield-linux-only" title="cfsYield | noCfsYield (Linux&reg; only)" class="md-nav__link">
+  <a href="#cfsyield-nocfsyield-linux-only" class="md-nav__link">
     cfsYield | noCfsYield (Linux&reg; only)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#minimizeusercpu" title="minimizeUserCPU" class="md-nav__link">
+  <a href="#minimizeusercpu" class="md-nav__link">
     minimizeUserCPU
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#secondaryspinforobjectmonitors-nosecondaryspinforobjectmonitors" title="secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors" class="md-nav__link">
+  <a href="#secondaryspinforobjectmonitors-nosecondaryspinforobjectmonitors" class="md-nav__link">
     secondarySpinForObjectMonitors | noSecondarySpinForObjectMonitors
   </a>
   
@@ -3701,6 +3680,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xtlhprefetch/index.html b/xtlhprefetch/index.html
index ec8fc07..22ae406 100644
--- a/xtlhprefetch/index.html
+++ b/xtlhprefetch/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2525,7 +2504,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3572,6 +3551,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xtrace/index.html b/xtrace/index.html
index 8bacffb..b9ec1b1 100644
--- a/xtrace/index.html
+++ b/xtrace/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2537,14 +2516,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#xtrace-option-builder" title="Xtrace Option Builder" class="md-nav__link">
+  <a href="#xtrace-option-builder" class="md-nav__link">
     Xtrace Option Builder
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -2552,14 +2531,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#configuring-trace" title="Configuring trace" class="md-nav__link">
+  <a href="#configuring-trace" class="md-nav__link">
     Configuring trace
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#controlling-tracepoint-activation" title="Controlling tracepoint activation" class="md-nav__link">
+  <a href="#controlling-tracepoint-activation" class="md-nav__link">
     Controlling tracepoint activation
   </a>
   
@@ -2571,14 +2550,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#about-trace" title="About trace" class="md-nav__link">
+  <a href="#about-trace" class="md-nav__link">
     About trace
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-tracing" title="Default tracing" class="md-nav__link">
+  <a href="#default-tracing" class="md-nav__link">
     Default tracing
   </a>
   
@@ -2586,14 +2565,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#default-memory-management-tracing" title="Default memory management tracing" class="md-nav__link">
+  <a href="#default-memory-management-tracing" class="md-nav__link">
     Default memory management tracing
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#default-assertion-tracing" title="Default assertion tracing" class="md-nav__link">
+  <a href="#default-assertion-tracing" class="md-nav__link">
     Default assertion tracing
   </a>
   
@@ -2605,7 +2584,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#tracepoint-activation" title="Tracepoint activation" class="md-nav__link">
+  <a href="#tracepoint-activation" class="md-nav__link">
     Tracepoint activation
   </a>
   
@@ -2613,14 +2592,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#tracepoint-specification" title="Tracepoint specification" class="md-nav__link">
+  <a href="#tracepoint-specification" class="md-nav__link">
     Tracepoint specification
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#trace-levels" title="Trace levels" class="md-nav__link">
+  <a href="#trace-levels" class="md-nav__link">
     Trace levels
   </a>
   
@@ -2632,7 +2611,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -2640,147 +2619,147 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#buffers" title="buffers" class="md-nav__link">
+  <a href="#buffers" class="md-nav__link">
     buffers
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#count-tracepoint" title="count (tracepoint)" class="md-nav__link">
+  <a href="#count-tracepoint" class="md-nav__link">
     count (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exception-tracepoint" title="exception (tracepoint)" class="md-nav__link">
+  <a href="#exception-tracepoint" class="md-nav__link">
     exception (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exceptionoutput" title="exception.output" class="md-nav__link">
+  <a href="#exceptionoutput" class="md-nav__link">
     exception.output
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#external-tracepoint" title="external (tracepoint)" class="md-nav__link">
+  <a href="#external-tracepoint" class="md-nav__link">
     external (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#iprint-tracepoint" title="iprint (tracepoint)" class="md-nav__link">
+  <a href="#iprint-tracepoint" class="md-nav__link">
     iprint (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maximal-tracepoint" title="maximal (tracepoint)" class="md-nav__link">
+  <a href="#maximal-tracepoint" class="md-nav__link">
     maximal (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#methods" title="methods" class="md-nav__link">
+  <a href="#methods" class="md-nav__link">
     methods
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#minimal-tracepoint" title="minimal (tracepoint)" class="md-nav__link">
+  <a href="#minimal-tracepoint" class="md-nav__link">
     minimal (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#none-tracepoint" title="none (tracepoint)" class="md-nav__link">
+  <a href="#none-tracepoint" class="md-nav__link">
     none (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#output" title="output" class="md-nav__link">
+  <a href="#output" class="md-nav__link">
     output
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#print-tracepoint" title="print (tracepoint)" class="md-nav__link">
+  <a href="#print-tracepoint" class="md-nav__link">
     print (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#properties" title="properties" class="md-nav__link">
+  <a href="#properties" class="md-nav__link">
     properties
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#resume" title="resume" class="md-nav__link">
+  <a href="#resume" class="md-nav__link">
     resume
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#resumecount" title="resumecount" class="md-nav__link">
+  <a href="#resumecount" class="md-nav__link">
     resumecount
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#sleeptime" title="sleeptime" class="md-nav__link">
+  <a href="#sleeptime" class="md-nav__link">
     sleeptime
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stackdepth" title="stackdepth" class="md-nav__link">
+  <a href="#stackdepth" class="md-nav__link">
     stackdepth
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#suspend" title="suspend" class="md-nav__link">
+  <a href="#suspend" class="md-nav__link">
     suspend
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#suspendcount" title="suspendcount" class="md-nav__link">
+  <a href="#suspendcount" class="md-nav__link">
     suspendcount
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#trigger" title="trigger" class="md-nav__link">
+  <a href="#trigger" class="md-nav__link">
     trigger
   </a>
   
@@ -2788,14 +2767,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#types" title="Types" class="md-nav__link">
+  <a href="#types" class="md-nav__link">
     Types
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#actions" title="Actions" class="md-nav__link">
+  <a href="#actions" class="md-nav__link">
     Actions
   </a>
   
@@ -2807,7 +2786,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#what" title="what" class="md-nav__link">
+  <a href="#what" class="md-nav__link">
     what
   </a>
   
@@ -2819,7 +2798,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3611,14 +3590,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#xtrace-option-builder" title="Xtrace Option Builder" class="md-nav__link">
+  <a href="#xtrace-option-builder" class="md-nav__link">
     Xtrace Option Builder
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3626,14 +3605,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#configuring-trace" title="Configuring trace" class="md-nav__link">
+  <a href="#configuring-trace" class="md-nav__link">
     Configuring trace
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#controlling-tracepoint-activation" title="Controlling tracepoint activation" class="md-nav__link">
+  <a href="#controlling-tracepoint-activation" class="md-nav__link">
     Controlling tracepoint activation
   </a>
   
@@ -3645,14 +3624,14 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#about-trace" title="About trace" class="md-nav__link">
+  <a href="#about-trace" class="md-nav__link">
     About trace
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-tracing" title="Default tracing" class="md-nav__link">
+  <a href="#default-tracing" class="md-nav__link">
     Default tracing
   </a>
   
@@ -3660,14 +3639,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#default-memory-management-tracing" title="Default memory management tracing" class="md-nav__link">
+  <a href="#default-memory-management-tracing" class="md-nav__link">
     Default memory management tracing
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#default-assertion-tracing" title="Default assertion tracing" class="md-nav__link">
+  <a href="#default-assertion-tracing" class="md-nav__link">
     Default assertion tracing
   </a>
   
@@ -3679,7 +3658,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#tracepoint-activation" title="Tracepoint activation" class="md-nav__link">
+  <a href="#tracepoint-activation" class="md-nav__link">
     Tracepoint activation
   </a>
   
@@ -3687,14 +3666,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#tracepoint-specification" title="Tracepoint specification" class="md-nav__link">
+  <a href="#tracepoint-specification" class="md-nav__link">
     Tracepoint specification
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#trace-levels" title="Trace levels" class="md-nav__link">
+  <a href="#trace-levels" class="md-nav__link">
     Trace levels
   </a>
   
@@ -3706,7 +3685,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#parameters" title="Parameters" class="md-nav__link">
+  <a href="#parameters" class="md-nav__link">
     Parameters
   </a>
   
@@ -3714,147 +3693,147 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#buffers" title="buffers" class="md-nav__link">
+  <a href="#buffers" class="md-nav__link">
     buffers
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#count-tracepoint" title="count (tracepoint)" class="md-nav__link">
+  <a href="#count-tracepoint" class="md-nav__link">
     count (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exception-tracepoint" title="exception (tracepoint)" class="md-nav__link">
+  <a href="#exception-tracepoint" class="md-nav__link">
     exception (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#exceptionoutput" title="exception.output" class="md-nav__link">
+  <a href="#exceptionoutput" class="md-nav__link">
     exception.output
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#external-tracepoint" title="external (tracepoint)" class="md-nav__link">
+  <a href="#external-tracepoint" class="md-nav__link">
     external (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#help" title="help" class="md-nav__link">
+  <a href="#help" class="md-nav__link">
     help
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#iprint-tracepoint" title="iprint (tracepoint)" class="md-nav__link">
+  <a href="#iprint-tracepoint" class="md-nav__link">
     iprint (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#maximal-tracepoint" title="maximal (tracepoint)" class="md-nav__link">
+  <a href="#maximal-tracepoint" class="md-nav__link">
     maximal (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#methods" title="methods" class="md-nav__link">
+  <a href="#methods" class="md-nav__link">
     methods
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#minimal-tracepoint" title="minimal (tracepoint)" class="md-nav__link">
+  <a href="#minimal-tracepoint" class="md-nav__link">
     minimal (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#none-tracepoint" title="none (tracepoint)" class="md-nav__link">
+  <a href="#none-tracepoint" class="md-nav__link">
     none (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#output" title="output" class="md-nav__link">
+  <a href="#output" class="md-nav__link">
     output
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#print-tracepoint" title="print (tracepoint)" class="md-nav__link">
+  <a href="#print-tracepoint" class="md-nav__link">
     print (tracepoint)
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#properties" title="properties" class="md-nav__link">
+  <a href="#properties" class="md-nav__link">
     properties
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#resume" title="resume" class="md-nav__link">
+  <a href="#resume" class="md-nav__link">
     resume
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#resumecount" title="resumecount" class="md-nav__link">
+  <a href="#resumecount" class="md-nav__link">
     resumecount
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#sleeptime" title="sleeptime" class="md-nav__link">
+  <a href="#sleeptime" class="md-nav__link">
     sleeptime
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#stackdepth" title="stackdepth" class="md-nav__link">
+  <a href="#stackdepth" class="md-nav__link">
     stackdepth
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#suspend" title="suspend" class="md-nav__link">
+  <a href="#suspend" class="md-nav__link">
     suspend
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#suspendcount" title="suspendcount" class="md-nav__link">
+  <a href="#suspendcount" class="md-nav__link">
     suspendcount
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#trigger" title="trigger" class="md-nav__link">
+  <a href="#trigger" class="md-nav__link">
     trigger
   </a>
   
@@ -3862,14 +3841,14 @@
       <ul class="md-nav__list">
         
           <li class="md-nav__item">
-  <a href="#types" title="Types" class="md-nav__link">
+  <a href="#types" class="md-nav__link">
     Types
   </a>
   
 </li>
         
           <li class="md-nav__item">
-  <a href="#actions" title="Actions" class="md-nav__link">
+  <a href="#actions" class="md-nav__link">
     Actions
   </a>
   
@@ -3881,7 +3860,7 @@
 </li>
         
           <li class="md-nav__item">
-  <a href="#what" title="what" class="md-nav__link">
+  <a href="#what" class="md-nav__link">
     what
   </a>
   
@@ -3893,7 +3872,7 @@
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -4482,8 +4461,8 @@
 <p>Exception trace output goes to file <code>except</code> and wraps at 2 MB:</p>
 <pre><code>-Xtrace:exception.output={except,2m},maximal
 </code></pre>
-<p>Exception trace output goes to a file whose filename contains today's date in <em>
-yyyymmdd</em> format (for example, <code>traceout.20181025.trc</code>):</p>
+<p>Exception trace output goes to a file whose filename contains today's date in *
+yyyymmdd* format (for example, <code>traceout.20181025.trc</code>):</p>
 <pre><code>-Xtrace:exception.output=traceout.%d.trc,maximal
 </code></pre>
 <p>Exception trace output goes to a file whose filename contains the number of the process (the PID number) that generated it (for example, <code>tracefrompid2112.trc</code>):</p>
@@ -4649,8 +4628,8 @@
 <p>Trace output goes to files <code>gc0.trc</code>, <code>gc1.trc</code>, and <code>gc2.trc</code>, each 10 MB in size:</p>
 <pre><code>-Xtrace:output={gc#.trc,10m,3},maximal=j9gc
 </code></pre>
-<p>Trace output goes to a file, where the filename contains today's date in <em>
-yyyymmdd</em> format (for example, <code>traceout.20181025.trc</code>):</p>
+<p>Trace output goes to a file, where the filename contains today's date in *
+yyyymmdd* format (for example, <code>traceout.20181025.trc</code>):</p>
 <pre><code>-Xtrace:output=traceout.%d.trc,maximal=j9gc
 </code></pre>
 <p>Trace output goes to a file whose name contains the number of the process (the PID number) that generated it (for example, <code>tracefrompid2112.trc</code>):</p>
@@ -5069,6 +5048,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xtunevirtualized/index.html b/xtunevirtualized/index.html
index c5512ca..5796e01 100644
--- a/xtunevirtualized/index.html
+++ b/xtunevirtualized/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2549,14 +2528,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3592,6 +3571,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xverbosegclog/index.html b/xverbosegclog/index.html
index 4caa852..f6396eb 100644
--- a/xverbosegclog/index.html
+++ b/xverbosegclog/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2561,21 +2540,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#default-behavior" title="Default behavior" class="md-nav__link">
+  <a href="#default-behavior" class="md-nav__link">
     Default behavior
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3614,6 +3593,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xverify/index.html b/xverify/index.html
index a826229..fc99658 100644
--- a/xverify/index.html
+++ b/xverify/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2573,7 +2552,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3601,6 +3580,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xx_jvm_commands/index.html b/xx_jvm_commands/index.html
index 5dfdb3c..9b4e172 100644
--- a/xx_jvm_commands/index.html
+++ b/xx_jvm_commands/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3526,6 +3505,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxactiveprocessorcount/index.html b/xxactiveprocessorcount/index.html
index d5d8391..bd34ca3 100644
--- a/xxactiveprocessorcount/index.html
+++ b/xxactiveprocessorcount/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2633,7 +2612,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3593,6 +3572,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxallowvmshutdown/index.html b/xxallowvmshutdown/index.html
index 2dc1673..bfb2174 100644
--- a/xxallowvmshutdown/index.html
+++ b/xxallowvmshutdown/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2645,7 +2624,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3592,6 +3571,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxclassrelationshipverifier/index.html b/xxclassrelationshipverifier/index.html
index 18f972e..791b1b4 100644
--- a/xxclassrelationshipverifier/index.html
+++ b/xxclassrelationshipverifier/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2657,14 +2636,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxcodecachetotal/index.html b/xxcodecachetotal/index.html
index 607ebf8..714b07f 100644
--- a/xxcodecachetotal/index.html
+++ b/xxcodecachetotal/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2669,7 +2648,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3574,6 +3553,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxcompactstrings/index.html b/xxcompactstrings/index.html
index 8cfad45..b440ad0 100644
--- a/xxcompactstrings/index.html
+++ b/xxcompactstrings/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2681,7 +2660,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3594,6 +3573,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxdisableexplicitgc/index.html b/xxdisableexplicitgc/index.html
index 41e1fd7..0812e1e 100644
--- a/xxdisableexplicitgc/index.html
+++ b/xxdisableexplicitgc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2693,7 +2672,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3590,6 +3569,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxdisclaimjitscratch/index.html b/xxdisclaimjitscratch/index.html
index 5c18868..5ba01bf 100644
--- a/xxdisclaimjitscratch/index.html
+++ b/xxdisclaimjitscratch/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2705,14 +2684,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3611,6 +3590,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxenablecpumonitor/index.html b/xxenablecpumonitor/index.html
index 514c319..697bccd 100644
--- a/xxenablecpumonitor/index.html
+++ b/xxenablecpumonitor/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2717,21 +2696,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3628,6 +3607,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxhandlesigxfsz/index.html b/xxhandlesigxfsz/index.html
index 38d9719..8f8a783 100644
--- a/xxhandlesigxfsz/index.html
+++ b/xxhandlesigxfsz/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2729,14 +2708,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxheapdumponoutofmemory/index.html b/xxheapdumponoutofmemory/index.html
index 54d3714..8fa64a8 100644
--- a/xxheapdumponoutofmemory/index.html
+++ b/xxheapdumponoutofmemory/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2741,7 +2720,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3592,6 +3571,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxheapdumppath/index.html b/xxheapdumppath/index.html
index 1795dea..67880ed 100644
--- a/xxheapdumppath/index.html
+++ b/xxheapdumppath/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2753,7 +2732,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3573,6 +3552,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxheapmanagementmxbeancompatibility/index.html b/xxheapmanagementmxbeancompatibility/index.html
index 48ae03a..3b2e5fe 100644
--- a/xxheapmanagementmxbeancompatibility/index.html
+++ b/xxheapmanagementmxbeancompatibility/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2765,21 +2744,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3666,6 +3645,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxidletuningcompactonidle/index.html b/xxidletuningcompactonidle/index.html
index 4760ca7..a9488a7 100644
--- a/xxidletuningcompactonidle/index.html
+++ b/xxidletuningcompactonidle/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2777,14 +2756,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3626,6 +3605,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxidletuninggconidle/index.html b/xxidletuninggconidle/index.html
index 72f8ff6..8f30796 100644
--- a/xxidletuninggconidle/index.html
+++ b/xxidletuninggconidle/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2789,14 +2768,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3624,6 +3603,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxidletuningminfreeheaponidle/index.html b/xxidletuningminfreeheaponidle/index.html
index cfb450e..805d373 100644
--- a/xxidletuningminfreeheaponidle/index.html
+++ b/xxidletuningminfreeheaponidle/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2801,21 +2780,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3626,6 +3605,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxidletuningminidlewaittime/index.html b/xxidletuningminidlewaittime/index.html
index 7932ba6..ffb3c02 100644
--- a/xxidletuningminidlewaittime/index.html
+++ b/xxidletuningminidlewaittime/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2813,14 +2792,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3618,6 +3597,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxignoreunrecognizedvmoptions/index.html b/xxignoreunrecognizedvmoptions/index.html
index a5c8924..1dfe86d 100644
--- a/xxignoreunrecognizedvmoptions/index.html
+++ b/xxignoreunrecognizedvmoptions/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2825,7 +2804,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3592,6 +3571,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxignoreunrecognizedxxcolonoptions/index.html b/xxignoreunrecognizedxxcolonoptions/index.html
index 470cbff..adfc22f 100644
--- a/xxignoreunrecognizedxxcolonoptions/index.html
+++ b/xxignoreunrecognizedxxcolonoptions/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2837,7 +2816,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3599,6 +3578,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxinitialheapsize/index.html b/xxinitialheapsize/index.html
index f5fdece..062d167 100644
--- a/xxinitialheapsize/index.html
+++ b/xxinitialheapsize/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2921,7 +2900,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3587,6 +3566,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxinitialrampercentage/index.html b/xxinitialrampercentage/index.html
index 1ae0832..90272ee 100644
--- a/xxinitialrampercentage/index.html
+++ b/xxinitialrampercentage/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2933,7 +2912,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3592,6 +3571,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxinterleavememory/index.html b/xxinterleavememory/index.html
index a350bc3..ecbb69f 100644
--- a/xxinterleavememory/index.html
+++ b/xxinterleavememory/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2873,7 +2852,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3593,6 +3572,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxjitinlinewatches/index.html b/xxjitinlinewatches/index.html
index 839adca..090f2b1 100644
--- a/xxjitinlinewatches/index.html
+++ b/xxjitinlinewatches/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2885,7 +2864,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3593,6 +3572,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxlazysymbolresolution/index.html b/xxlazysymbolresolution/index.html
index 93bcec6..4670d5b 100644
--- a/xxlazysymbolresolution/index.html
+++ b/xxlazysymbolresolution/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2897,14 +2876,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3611,6 +3590,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxmaxdirectmemorysize/index.html b/xxmaxdirectmemorysize/index.html
index f0a9384..8be7ec0 100644
--- a/xxmaxdirectmemorysize/index.html
+++ b/xxmaxdirectmemorysize/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2909,7 +2888,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3589,6 +3568,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxnosuballoc32bitmem/index.html b/xxnosuballoc32bitmem/index.html
index bde5067..65a6ead 100644
--- a/xxnosuballoc32bitmem/index.html
+++ b/xxnosuballoc32bitmem/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2957,14 +2936,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3610,6 +3589,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxonoutofmemoryerror/index.html b/xxonoutofmemoryerror/index.html
index 4b165be..612fb5f 100644
--- a/xxonoutofmemoryerror/index.html
+++ b/xxonoutofmemoryerror/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2945,7 +2924,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3579,6 +3558,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxpagealigndirectmemory/index.html b/xxpagealigndirectmemory/index.html
index 56321d6..c8847eb 100644
--- a/xxpagealigndirectmemory/index.html
+++ b/xxpagealigndirectmemory/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2969,7 +2948,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3594,6 +3573,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxpositiveidentityhash/index.html b/xxpositiveidentityhash/index.html
index 98b9529..403af07 100644
--- a/xxpositiveidentityhash/index.html
+++ b/xxpositiveidentityhash/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2981,7 +2960,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3594,6 +3573,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxreadipinfoforras/index.html b/xxreadipinfoforras/index.html
index f6f1ce7..eca5af3 100644
--- a/xxreadipinfoforras/index.html
+++ b/xxreadipinfoforras/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2993,7 +2972,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3594,6 +3573,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxreducecpumonitoroverhead/index.html b/xxreducecpumonitoroverhead/index.html
index 50dba7a..735b0e7 100644
--- a/xxreducecpumonitoroverhead/index.html
+++ b/xxreducecpumonitoroverhead/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3005,14 +2984,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3617,6 +3596,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxruntimeinstrumentation/index.html b/xxruntimeinstrumentation/index.html
index ae3b3c2..a11a102 100644
--- a/xxruntimeinstrumentation/index.html
+++ b/xxruntimeinstrumentation/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3017,7 +2996,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3595,6 +3574,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxsethwprefetch/index.html b/xxsethwprefetch/index.html
index 0dc2e6e..eafa830 100644
--- a/xxsethwprefetch/index.html
+++ b/xxsethwprefetch/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3029,7 +3008,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3595,6 +3574,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxshareanonymousclasses/index.html b/xxshareanonymousclasses/index.html
index 1c54f30..9aad635 100644
--- a/xxshareanonymousclasses/index.html
+++ b/xxshareanonymousclasses/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3041,14 +3020,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3614,6 +3593,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxshareclassesenablebci/index.html b/xxshareclassesenablebci/index.html
index 784f29a..0284acd 100644
--- a/xxshareclassesenablebci/index.html
+++ b/xxshareclassesenablebci/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3065,14 +3044,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3611,6 +3590,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxsharedcachehardlimit/index.html b/xxsharedcachehardlimit/index.html
index ab59ca5..afcf18f 100644
--- a/xxsharedcachehardlimit/index.html
+++ b/xxsharedcachehardlimit/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3077,21 +3056,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3343,21 +3322,21 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#example" title="Example" class="md-nav__link">
+  <a href="#example" class="md-nav__link">
     Example
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3628,6 +3607,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxshareunsafeclasses/index.html b/xxshareunsafeclasses/index.html
index b42c5d5..3ed795c 100644
--- a/xxshareunsafeclasses/index.html
+++ b/xxshareunsafeclasses/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3089,14 +3068,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#see-also" title="See also" class="md-nav__link">
+  <a href="#see-also" class="md-nav__link">
     See also
   </a>
   
@@ -3614,6 +3593,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxstacktraceinthrowable/index.html b/xxstacktraceinthrowable/index.html
index 87fa5c1..5e6bea0 100644
--- a/xxstacktraceinthrowable/index.html
+++ b/xxstacktraceinthrowable/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3101,7 +3080,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3593,6 +3572,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxtransparenthugepage/index.html b/xxtransparenthugepage/index.html
index 9a6cafd..9666df8 100644
--- a/xxtransparenthugepage/index.html
+++ b/xxtransparenthugepage/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3113,7 +3092,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3591,6 +3570,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxusecompressedoops/index.html b/xxusecompressedoops/index.html
index 85a85ee..e1b80dd 100644
--- a/xxusecompressedoops/index.html
+++ b/xxusecompressedoops/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3125,7 +3104,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3594,6 +3573,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxusecontainersupport/index.html b/xxusecontainersupport/index.html
index fb91fca..9116ed5 100644
--- a/xxusecontainersupport/index.html
+++ b/xxusecontainersupport/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3137,7 +3116,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3627,6 +3606,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxusegcstartuphints/index.html b/xxusegcstartuphints/index.html
index ea0da12..71e7096 100644
--- a/xxusegcstartuphints/index.html
+++ b/xxusegcstartuphints/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3149,7 +3128,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3608,6 +3587,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxusenogc/index.html b/xxusenogc/index.html
index a33bb25..5419cd7 100644
--- a/xxusenogc/index.html
+++ b/xxusenogc/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3161,14 +3140,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3336,14 +3315,14 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
 </li>
       
         <li class="md-nav__item">
-  <a href="#explanation" title="Explanation" class="md-nav__link">
+  <a href="#explanation" class="md-nav__link">
     Explanation
   </a>
   
@@ -3611,6 +3590,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxverboseverification/index.html b/xxverboseverification/index.html
index 8d69664..00ce647 100644
--- a/xxverboseverification/index.html
+++ b/xxverboseverification/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3173,7 +3152,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3617,6 +3596,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xxvmlockclassloader/index.html b/xxvmlockclassloader/index.html
index 69cace1..3dc70cc 100644
--- a/xxvmlockclassloader/index.html
+++ b/xxvmlockclassloader/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -3185,7 +3164,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3598,6 +3577,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file
diff --git a/xzero/index.html b/xzero/index.html
index bd82423..62f2cfa 100644
--- a/xzero/index.html
+++ b/xzero/index.html
@@ -109,24 +109,7 @@
       <defs>
         
         
-          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
-    viewBox="0 0 416 448" id="__github">
-  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
-        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
-        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
-        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
-        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
-        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
-        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
-        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
-        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
-        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
-        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
-        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
-        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
-        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
-        99.5z" />
-</svg>
+          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448" viewBox="0 0 416 448" id="__github"><path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19T128 352t-18.125-8.5-10.75-19T96 304t3.125-20.5 10.75-19T128 256t18.125 8.5 10.75 19T160 304zm160 0q0 10-3.125 20.5t-10.75 19T288 352t-18.125-8.5-10.75-19T256 304t3.125-20.5 10.75-19T288 256t18.125 8.5 10.75 19T320 304zm40 0q0-30-17.25-51T296 232q-10.25 0-48.75 5.25Q229.5 240 208 240t-39.25-2.75Q130.75 232 120 232q-29.5 0-46.75 21T56 304q0 22 8 38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0 37.25-1.75t35-7.375 30.5-15 20.25-25.75T360 304zm56-44q0 51.75-15.25 82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5T212 416q-19.5 0-35.5-.75t-36.875-3.125-38.125-7.5-34.25-12.875T37 371.5t-21.5-28.75Q0 312 0 260q0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25 30.875Q171.5 96 212 96q37 0 70 8 26.25-20.5 46.75-30.25T376 64q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34 99.5z"/></svg>
         
       </defs>
     </svg>
@@ -217,20 +200,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
           </div>
         </div>
       
@@ -272,20 +253,18 @@
 
   
 
-
-  <a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
-    
-      <div class="md-source__icon">
-        <svg viewBox="0 0 24 24" width="24" height="24">
-          <use xlink:href="#__github" width="24" height="24"></use>
-        </svg>
-      </div>
-    
-    <div class="md-source__repository">
-      GitHub
+<a href="https://github.com/eclipse/openj9-docs/" title="Go to repository" class="md-source" data-md-source="github">
+  
+    <div class="md-source__icon">
+      <svg viewBox="0 0 24 24" width="24" height="24">
+        <use xlink:href="#__github" width="24" height="24"></use>
+      </svg>
     </div>
-  </a>
-
+  
+  <div class="md-source__repository">
+    GitHub
+  </div>
+</a>
     </div>
   
   <ul class="md-nav__list" data-md-scrollfix>
@@ -2585,7 +2564,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3329,7 +3308,7 @@
     <ul class="md-nav__list" data-md-scrollfix>
       
         <li class="md-nav__item">
-  <a href="#syntax" title="Syntax" class="md-nav__link">
+  <a href="#syntax" class="md-nav__link">
     Syntax
   </a>
   
@@ -3625,6 +3604,31 @@
     
     
       
+        
+<script>
+  window.ga = window.ga || function() {
+    (ga.q = ga.q || []).push(arguments)
+  }
+  ga.l = +new Date
+  /* Setup integration and send page view */
+  ga("create", "UA-105616558-3", "mkdocs.org")
+  ga("set", "anonymizeIp", true)
+  ga("send", "pageview")
+  /* Register handler to log search on blur */
+  document.addEventListener("DOMContentLoaded", () => {
+    if (document.forms.search) {
+      var query = document.forms.search.query
+      query.addEventListener("blur", function() {
+        if (this.value) {
+          var path = document.location.pathname;
+          ga("send", "pageview", path + "?q=" + this.value)
+        }
+      })
+    }
+  })
+</script>
+<script async src="https://www.google-analytics.com/analytics.js"></script>
+      
     
   </body>
 </html>
\ No newline at end of file