<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>bigfish的网络博客 - JVM</title>
      <link>https://blog.laofu.online</link>
      <description>记录技术和生活</description>
      <generator>Zola</generator>
      <language>zh</language>
      <atom:link href="https://blog.laofu.online/tags/jvm/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sun, 27 Jun 2021 10:00:00 +0800</lastBuildDate>
      <item>
          <title>CMS 三色标记法</title>
          <pubDate>Sun, 27 Jun 2021 10:00:00 +0800</pubDate>
          <author>bigfish</author>
          <link>https://blog.laofu.online/blog/cms-three-color-mark/</link>
          <guid>https://blog.laofu.online/blog/cms-three-color-mark/</guid>
          <description xml:base="https://blog.laofu.online/blog/cms-three-color-mark/">&lt;h3 id=&quot;wei-shen-me-yin-ru-san-se-biao-ji-fa&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#wei-shen-me-yin-ru-san-se-biao-ji-fa&quot; aria-label=&quot;Anchor link for: wei-shen-me-yin-ru-san-se-biao-ji-fa&quot;&gt;为什么引入三色标记法&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;为了提供 JVM 垃圾回收的性能，从 CMS 垃圾收集器开始，引入了并发标记的概念（此处的并发标记是指与用户线程一起工作）。引入并发标记的过程就会带来一个问题，在业务执行的过程中，会对现有的引用关系链出现改变。具体如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/three-color-mark/20210626215542908.png&quot; alt=&quot;image-20210626215542908&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;</description>
      </item>
      <item>
          <title>简述 G1 垃圾回收器和 OOM 问题的排查</title>
          <pubDate>Sat, 12 Sep 2020 10:00:00 +0800</pubDate>
          <author>bigfish</author>
          <link>https://blog.laofu.online/blog/g1-oom/</link>
          <guid>https://blog.laofu.online/blog/g1-oom/</guid>
          <description xml:base="https://blog.laofu.online/blog/g1-oom/">&lt;p&gt;最近又碰到的 oom 的问题，一直在尝试定位中，由于现实使用的 G1 的垃圾回收器。所以今天打算线上的排查历程和方案查询出来。&lt;/p&gt;
&lt;h4 id=&quot;jvm-chang-yong-can-shu&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#jvm-chang-yong-can-shu&quot; aria-label=&quot;Anchor link for: jvm-chang-yong-can-shu&quot;&gt;jvm 常用参数&lt;/a&gt;&lt;/h4&gt;
&lt;pre class=&quot;giallo z-l-code z-d-code&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-Xmx1024m 最大堆内存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-Xms1024m 最小堆内存&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-Xss256k  设置栈的大小。栈都是每个线程独有一个，所有一般都是几百k的大小。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:MetaspaceSize=128m  元空间的大小&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:MaxMetaspaceSize=256m  最大元空间大小&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:MaxGCPauseMillis=200 设置每次年轻代垃圾回收的最长时间，如果无法满足此时间，JVM会自动调整年轻代大小，以满足此值&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:+UseG1GC 使用 G1 垃圾回收器&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:-OmitStackTraceInFastThrow 当一些异常在代码里某个特定位置被抛出很多次的话，HotSpot Server Compiler（C2）会用fast throw来优化这个抛出异常的地方。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:MinHeapFreeRatio=30&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:MaxHeapFreeRatio=50&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:MaxDirectMemorySize=100M 直接内存大小&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:+PrintGCDetails 打印 GC 详细信息&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;-XX:+DisableExplicitGC 禁止显示GC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      </item>
      <item>
          <title>手写一个简单的 JVM（二）：模拟运行 JVM</title>
          <pubDate>Wed, 10 Jun 2020 10:00:00 +0800</pubDate>
          <author>bigfish</author>
          <link>https://blog.laofu.online/blog/jvm-run/</link>
          <guid>https://blog.laofu.online/blog/jvm-run/</guid>
          <description xml:base="https://blog.laofu.online/blog/jvm-run/">&lt;h4 id=&quot;mo-ni-jvmzhi-ling-de-yun-xing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#mo-ni-jvmzhi-ling-de-yun-xing&quot; aria-label=&quot;Anchor link for: mo-ni-jvmzhi-ling-de-yun-xing&quot;&gt;模拟JVM指令的运行&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;模拟JVM的运行，需要有两个个方面的知识准备&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;JVM的结构&lt;/li&gt;
&lt;li&gt;字节码的含义&lt;/li&gt;
&lt;/ol&gt;</description>
      </item>
      <item>
          <title>手写一个简单的 JVM（一）：解析 Class 文件</title>
          <pubDate>Fri, 05 Jun 2020 10:00:00 +0800</pubDate>
          <author>bigfish</author>
          <link>https://blog.laofu.online/blog/jvm-class-file/</link>
          <guid>https://blog.laofu.online/blog/jvm-class-file/</guid>
          <description xml:base="https://blog.laofu.online/blog/jvm-class-file/">&lt;h2 id=&quot;javade-yun-xing-guo-cheng&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#javade-yun-xing-guo-cheng&quot; aria-label=&quot;Anchor link for: javade-yun-xing-guo-cheng&quot;&gt;java的运行过程&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;在运行一段  java  代码的时候需要经过&lt;code&gt;编译&lt;/code&gt;,&lt;code&gt;验证&lt;/code&gt;,&lt;code&gt;加载&lt;/code&gt;和&lt;code&gt;运行&lt;/code&gt;,具体如下图：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/jvm/01.png&quot; alt=&quot;运行过程&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; /&gt;&lt;/p&gt;
&lt;p&gt;对于 Java 源码变成字节码的编译过程，我们暂且跳过不讨论。&lt;/p&gt;
&lt;p&gt;想弄清楚  java 代码的运行原理，其实本质就是 java 字节码如何被 jvm 执行。&lt;/p&gt;</description>
      </item>
    </channel>
</rss>
