<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>archive</title><link>https://archive-w.netlify.app/doc/advance/jvm/tools/</link><description>Recent content on archive</description><generator>Hugo</generator><language>zh-CN</language><atom:link href="https://archive-w.netlify.app/doc/advance/jvm/tools/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://archive-w.netlify.app/doc/advance/jvm/tools/hsdb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://archive-w.netlify.app/doc/advance/jvm/tools/hsdb/</guid><description>&lt;ul>
&lt;li>
&lt;h2 id="introhsdb">
 Intro(HSDB)
 &lt;a class="anchor" href="#introhsdb">#&lt;/a>
&lt;/h2>
&lt;p class="tip">&lt;code>-XX:-UseCompressedOops&lt;/code>oops: ordinary object pointer，普通对象指针压缩，例如Object o = new Object();其中o就是个指向new Object()对象的指针，o在指针压缩前占用8个字节，在指针压缩后占用4个字节。
&lt;br>&lt;code>-XX:-UseCompressedClassPointers&lt;/code>压缩Klass Pointer，压缩前8个字节，压缩后4个字节。&lt;/p>
&lt;p class="warn">&lt;code>sudo java -cp $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;h2 id="reference">
 Reference
 &lt;a class="anchor" href="#reference">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>


 &lt;a href="https://github.com/openjdk/jdk/blob/jdk8-b120/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java" rel="noopener" target="_blank">https://github.com/openjdk/jdk/blob/jdk8-b120/hotspot/agent/src/share/classes/sun/jvm/hotspot/HSDB.java&lt;/a>&lt;/li>
&lt;li>


 &lt;a href="https://openjdk.org/groups/hotspot/docs/Serviceability.html#bsa" rel="noopener" target="_blank">https://openjdk.org/groups/hotspot/docs/Serviceability.html#bsa&lt;/a>&lt;/li>
&lt;li>


 &lt;a href="https://docs.oracle.com/en/java/javase/11/tools/jhsdb.html#GUID-0345CAEB-71CE-4D71-97FE-AA53A4AB028E" rel="noopener" target="_blank">https://docs.oracle.com/en/java/javase/11/tools/jhsdb.html#GUID-0345CAEB-71CE-4D71-97FE-AA53A4AB028E&lt;/a>&lt;/li>
&lt;li>&lt;/li>
&lt;li>


 &lt;a href="https://github.com/openjdk/jdk/tree/jdk8-b120/hotspot/agent/doc" rel="noopener" target="_blank">https://github.com/openjdk/jdk/tree/jdk8-b120/hotspot/agent/doc&lt;/a> #下面站点可以渲染里面的html.
&lt;ol>
&lt;li>


 &lt;a href="https://htmlpreview.github.io/?https://github.com/openjdk/jdk/blob/jdk8-b120/hotspot/agent/doc/index.html" rel="noopener" target="_blank">https://htmlpreview.github.io/?https://github.com/openjdk/jdk/blob/jdk8-b120/hotspot/agent/doc/index.html&lt;/a>&lt;/li>
&lt;li>


 &lt;a href="https://svn.netlabs.org/repos/java/trunk/openjdk/hotspot/agent/doc/index.html" rel="noopener" target="_blank">https://svn.netlabs.org/repos/java/trunk/openjdk/hotspot/agent/doc/index.html&lt;/a>&lt;/li>
&lt;/ol>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title/><link>https://archive-w.netlify.app/doc/advance/jvm/tools/jvisualvm/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://archive-w.netlify.app/doc/advance/jvm/tools/jvisualvm/</guid><description>&lt;ul>
&lt;li>
&lt;h2 id="introjvisualvm">
 Intro(jvisualvm)
 &lt;a class="anchor" href="#introjvisualvm">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>OQL控制台&lt;/p>
&lt;p class="warn"> 使用样例
&lt;br>&lt;code>select s from java.lang.String s where s.toString().contains(&amp;quot;hello&amp;quot;)&lt;/code>
&lt;br>&lt;code>select s from java.lang.String s where s.toString().equals(&amp;quot;12&amp;quot;)&lt;/code>
&lt;br>&lt;code>select s from java.lang.String s where /^\d+$/.test(s.toString())&lt;/code>
&lt;br>&lt;code>select i from java.lang.Integer i where i.value &amp;gt; 12302&lt;/code>&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;h2 id="reference">
 Reference
 &lt;a class="anchor" href="#reference">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>


 &lt;a href="https://htmlpreview.github.io/?https://raw.githubusercontent.com/visualvm/visualvm.java.net.backup/master/www/oqlhelp.html" rel="noopener" target="_blank">https://htmlpreview.github.io/?https://raw.githubusercontent.com/visualvm/visualvm.java.net.backup/master/www/oqlhelp.html&lt;/a>&lt;/li>
&lt;li>


 &lt;a href="https://cr.openjdk.org/~sundar/8022483/webrev.01/raw_files/new/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html" rel="noopener" target="_blank">https://cr.openjdk.org/~sundar/8022483/webrev.01/raw_files/new/src/share/classes/com/sun/tools/hat/resources/oqlhelp.html&lt;/a>&lt;/li>
&lt;li>


 &lt;a href="https://www.cnblogs.com/ghj1976/p/5408295.html" rel="noopener" target="_blank">https://www.cnblogs.com/ghj1976/p/5408295.html&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul></description></item><item><title/><link>https://archive-w.netlify.app/doc/advance/jvm/tools/stringtable/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://archive-w.netlify.app/doc/advance/jvm/tools/stringtable/</guid><description>&lt;ul>
&lt;li>
&lt;h2 id="introstringtable--打印-jvm-stringtable">
 Intro(StringTable | 打印 JVM StringTable)
 &lt;a class="anchor" href="#introstringtable--%e6%89%93%e5%8d%b0-jvm-stringtable">#&lt;/a>
&lt;/h2>
&lt;p class="warn">将虚拟机中的 StringTable 里面的字符全部打印出来，有两种方式，1：通过


 &lt;a href="https://docs.oracle.com/javase/9/tools/jcmd.htm#:~:text=VM.stringtable" rel="noopener" target="_blank">jcmd&lt;/a> 命令，2：借助 sun 下 hotspot 中的相关工具类编码。&lt;/p>
&lt;ul>
&lt;li>
&lt;h3 id="jcmd-方式">
 jcmd 方式
 &lt;a class="anchor" href="#jcmd-%e6%96%b9%e5%bc%8f">#&lt;/a>
&lt;/h3>
&lt;div class="alert callout note">&lt;p class="title">&lt;span class="icon icon-note">&lt;/span> Note &lt;/p>&lt;p> jcmd 里面有个命令是&lt;code>VM.stringtable&lt;/code>，可以查看 VM 里面的 stringtable，jdk 9以下好像没有这个命令


 &lt;a href="https://stackoverflow.com/questions/64458776/why-can-some-jcmd-commandseg-vm-set-flag-can-not-be-used-on-all-pid" rel="noopener" target="_blank">参考&lt;/a>，会抛出：”java.lang.IllegalArgumentException: Unknown diagnostic command“错误，所以可以使用 jdk9 去诊断。&lt;/p>
&lt;/p>&lt;/div>
&lt;div class="outer yosemite">&lt;div class="dot red">&lt;/div>&lt;div class="dot amber">&lt;/div>&lt;div class="dot green">&lt;/div>&lt;/div>
&lt;div class="code-toolbar">&lt;pre data-lang="java" data-line="" class="language-java line-numbers" style="max-height: none">&lt;code class="language-java">package _base.str.test;

public class StringTest {
 public static void main(String[] args) {
 String str2 = new String(&amp;quot;str&amp;quot;)+new String(&amp;quot;01&amp;quot;); // 创建string对象 0x02912。
 str2.intern(); // jdk1.7及以下。 str2.intern()如果常量池中没有的话，会创建 str2 0x02912。 . 所以 str2.intern() == str2
 String str1 = &amp;quot;str01&amp;quot;; // 现在常量池中有了，直接返回引用 0x02912。
 System.out.println(str2==str1); // 所以相等

 String str3 = new String(&amp;quot;hel&amp;quot;) + new String(&amp;quot;lo&amp;quot;);

 String str4 = new String(&amp;quot;he&amp;quot;) + new String(&amp;quot;llo&amp;quot;);

 String str3Tmp = str3.intern();
 String str4Tmp = str4.intern();
 System.out.println(str3.equals(str4));

 keepRunning();
 System.out.println();
 }

 public static void keepRunning(){
 Thread thread = Thread.currentThread();
 synchronized (thread){
 try {
 thread.wait();
 } catch (InterruptedException e) { e.printStackTrace(); }
 }
 }
}
&lt;/code>&lt;/pre>&lt;/div>
&lt;p>可以使用 idea 中的 JDK 1.8 环境编译，然后运行使用 jdk9。
&lt;br>再运行：&lt;code>/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home/bin/java -cp /Users/stevenobelia/Documents/project_idea_test/idea-test-project/_0_base-learning/target/classes _base.str.test.StringTest&lt;/code>&lt;/p></description></item></channel></rss>