<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Docker on 蓝尾蜂鸟</title><link>https://clibing.com/tags/docker/</link><description>Recent content in Docker on 蓝尾蜂鸟</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Copyright © 2011-2026 clibing. All Rights Reserved.</copyright><lastBuildDate>Mon, 17 Oct 2022 14:59:03 +0800</lastBuildDate><atom:link href="https://clibing.com/tags/docker/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker</title><link>https://clibing.com/posts/linux/docker/docker/</link><pubDate>Mon, 17 Oct 2022 14:59:03 +0800</pubDate><guid>https://clibing.com/posts/linux/docker/docker/</guid><description>&lt;p>docker的yaml常用说明&lt;/p></description></item><item><title>Docker Compose</title><link>https://clibing.com/posts/linux/docker/docker-compose/</link><pubDate>Thu, 09 Sep 2021 10:08:03 +0800</pubDate><guid>https://clibing.com/posts/linux/docker/docker-compose/</guid><description>&lt;p>docker-compose的yaml常用说明&lt;/p></description></item><item><title>Java_docker_jvm</title><link>https://clibing.com/posts/linux/docker/java_docker_jvm/</link><pubDate>Thu, 20 Aug 2020 13:48:32 +0800</pubDate><guid>https://clibing.com/posts/linux/docker/java_docker_jvm/</guid><description><![CDATA[<h4 id="当前jvm配置" data-numberify>当前jvm配置<a class="anchor ms-1" href="#当前jvm配置"></a></h4>
<ul>
<li>-XX:+PrintFlagsInitial  查看初始</li>
</ul>

<h4 id="docker-java_opts" data-numberify>docker JAVA_OPTS<a class="anchor ms-1" href="#docker-java_opts"></a></h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">-XX:+AlwaysPreTouch 
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">    JAVA进程启动的时候,虽然我们可以为JVM指定合适的内存大小,但是这些内存操作系统并没有真正的分配给JVM,而是等JVM访问这些内存的时候,才真正分配,这样会造成以下问题。
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    1、GC的时候,新生代的对象要晋升到老年代的时候,需要内存,这个时候操作系统才真正分配内存,这样就会加大young gc的停顿时间<span class="p">;</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    2、可能存在内存碎片的问题。
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    jvm启用会慢，JDK8版本以前都不是并行处理的，到了JDK9才是并行
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    在没有配置-XX:+AlwaysPreTouch参数即默认情况下，JVM参数-Xms申明的堆只是在虚拟内存中分配，而不是在物理内存中分配：它被以一种内部数据结构的形式记录，从而避免被其他进程使用这些内存。这些内存页直到被访问时，才会在物理内存中分配。当JVM需要内存的时候，操作系统将根据需要分配内存页。
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl">    配置-XX:+AlwaysPreTouch参数后，JVM将-Xms指定的堆内存中每个字节都写入<span class="s1">&#39;0&#39;</span>，这样的话，除了在虚拟内存中以内部数据结构保留之外，还会在物理内存中分配。并且由于touch这个行为是单线程的，因此它将会让JVM进程启动变慢。所以，要么选择减少接下来对每个缓存页的第一次访问时间，要么选择减少JVM进程启动时间，这是一种trade-off。
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl">-XX:AutoBoxCacheMax<span class="o">=</span><span class="m">20000</span> 
</span></span><span class="line"><span class="ln">13</span><span class="cl">   jvm启动加载rt.jar包的时候，其中IntegerCache会加载int的~128-128为Integer到cahce，其他范围的使用时会进行new Integer操作。所以建议设置到大一点。 一般设置20000。 
</span></span><span class="line"><span class="ln">14</span><span class="cl">-XX:InitialHeapSize<span class="o">=</span><span class="m">523969984</span> 
</span></span><span class="line"><span class="ln">15</span><span class="cl">-XX:MaxHeapSize<span class="o">=</span><span class="m">8383519744</span> 
</span></span><span class="line"><span class="ln">16</span><span class="cl">-XX:+PrintCommandLineFlags 打印当前使用的参数
</span></span><span class="line"><span class="ln">17</span><span class="cl">-XX:+PrintFlagsFinal 打印当前使用参数最终的值
</span></span><span class="line"><span class="ln">18</span><span class="cl">-XX:+PrintGC  打印GC
</span></span><span class="line"><span class="ln">19</span><span class="cl">-XX:+PrintGCApplicationStoppedTime :打印垃圾回收期间程序暂停的时间.
</span></span><span class="line"><span class="ln">20</span><span class="cl">-XX:+PrintGCDateStamps :默认是+PrintGCTimeStamps打印jvm启动的相对时间，这个时间不利于查看，所以调整为系统时间
</span></span><span class="line"><span class="ln">21</span><span class="cl">-XX:+PrintGCDetails : 打印gc详细的信息
</span></span><span class="line"><span class="ln">22</span><span class="cl">-XX:+PrintGCTimeStamps :jvm启动的相对时间
</span></span><span class="line"><span class="ln">23</span><span class="cl">-XX:+UnlockExperimentalVMOptions : 可保证你的Java进程不会因为内存问题被容器Kill
</span></span><span class="line"><span class="ln">24</span><span class="cl">-XX:+UseCGroupMemoryLimitForHeap :感知CGroup的内存限制，防止容器被kill
</span></span><span class="line"><span class="ln">25</span><span class="cl">-XX:+UseCompressedOops 
</span></span><span class="line"><span class="ln">26</span><span class="cl">-XX:+UseCompressedClassPointers : 开启需要UseCompressedOops的支持，
</span></span><span class="line"><span class="ln">27</span><span class="cl">    如果不开启普通对象指针压缩，-UseCompressedOops，会在内存中消耗24个字节，o 指针占8个字节，Object对象占16个字节。
</span></span><span class="line"><span class="ln">28</span><span class="cl">    如果开启普通对象指针压缩，+UseCompressedOops，会在内存中消耗20个字节，o指针占4个字节，Object对象占16个字节。
</span></span><span class="line"><span class="ln">29</span><span class="cl">-XX:+UseParallelGC: 指定垃圾收集器为并行收集器
</span></span></code></pre></div>
<h4 id="压缩" data-numberify>压缩<a class="anchor ms-1" href="#压缩"></a></h4>
<ul>
<li>
<p>-XX:+UseCompressedOops: 针对32位、64位系统占用空间不同，进行压缩，主要节省内存和缩短GC时间</p>]]></description></item></channel></rss>