<?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>你假笨说JVM参数 on 分享技术带来的喜悦</title><link>https://bridgeli.cn/categories/%E4%BD%A0%E5%81%87%E7%AC%A8%E8%AF%B4jvm%E5%8F%82%E6%95%B0/</link><description>Recent content in 你假笨说JVM参数 on 分享技术带来的喜悦</description><generator>Hugo -- 0.156.0</generator><language>zh-cn</language><lastBuildDate>Sun, 31 Dec 2017 10:19:25 +0000</lastBuildDate><atom:link href="https://bridgeli.cn/categories/%E4%BD%A0%E5%81%87%E7%AC%A8%E8%AF%B4jvm%E5%8F%82%E6%95%B0/index.xml" rel="self" type="application/rss+xml"/><item><title>你假笨JVM参数 – 007 UseGCLogFileRotation NumberOfGCLogFiles GCLogFileSize</title><link>https://bridgeli.cn/posts/2017-12-31-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-007-usegclogfilerotation-numberofgclogfiles-gclogfilesize/</link><pubDate>Sun, 31 Dec 2017 10:19:25 +0000</pubDate><guid>https://bridgeli.cn/posts/2017-12-31-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-007-usegclogfilerotation-numberofgclogfiles-gclogfilesize/</guid><description>&lt;p&gt;你假笨的第七次分享，也是你假笨在 2017 年的最后一次关于 JVM 的分享：&lt;/p&gt;
&lt;p&gt;序号：007&lt;br&gt;
时间：2017-08-10&lt;br&gt;
参数：&lt;br&gt;
-XX:UseGCLogFileRotation&lt;br&gt;
-XX:NumberOfGCLogFiles&lt;br&gt;
-XX:GCLogFileSize&lt;br&gt;
含义：&lt;br&gt;
这次分享了3个设置滚动记录GC日志的参数&lt;br&gt;
通过参数-Xloggc:xxx可指定GC日志文件路径&lt;br&gt;
普通情况下，GC日志文件内容会不断积累，进程重启后日志文件会被覆盖&lt;br&gt;
这次分享的3个参数在设置-Xloggc参数的前提下有效&lt;/p&gt;
&lt;p&gt;-XX:UseGCLogFileRotation&lt;br&gt;
Enabled GC log rotation, requires -Xloggc.&lt;br&gt;
打开或关闭GC日志滚动记录功能，要求必须设置 -Xloggc参数&lt;/p&gt;
&lt;p&gt;-XX:NumberOfGCLogFiles&lt;br&gt;
Set the number of files to use when rotating logs, must be &amp;gt;= 1.&lt;br&gt;
The rotated log files will use the following naming scheme, &lt;filename&gt;.0, &lt;filename&gt;.1, …, &lt;filename&gt;.n-1.&lt;br&gt;
设置滚动日志文件的个数，必须大于1&lt;br&gt;
日志文件命名策略是，&lt;filename&gt;.0, &lt;filename&gt;.1, …, &lt;filename&gt;.n-1，其中n是该参数的值&lt;/p&gt;
&lt;p&gt;-XX:GCLogFileSize&lt;br&gt;
The size of the log file at which point the log will be rotated, must be &amp;gt;= 8K.&lt;br&gt;
设置滚动日志文件的大小，必须大于8k&lt;br&gt;
当前写日志文件大小超过该参数值时，日志将写入下一个文件&lt;/p&gt;</description></item><item><title>你假笨JVM参数 – 006 ExplicitGCInvokesConcurrent</title><link>https://bridgeli.cn/posts/2017-12-23-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-006-explicitgcinvokesconcurrent/</link><pubDate>Sat, 23 Dec 2017 11:14:14 +0000</pubDate><guid>https://bridgeli.cn/posts/2017-12-23-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-006-explicitgcinvokesconcurrent/</guid><description>&lt;p&gt;你假笨的第六次分享：&lt;/p&gt;
&lt;p&gt;序号：006&lt;br&gt;
时间：2017-07-31&lt;br&gt;
参数：-XX:ExplicitGCInvokesConcurrent&lt;br&gt;
含义：&lt;br&gt;
Enables invoking of concurrent GC by using the System.gc() request.&lt;br&gt;
This option is disabled by default and can be enabled only together with the -XX:+UseConcMarkSweepGC option.&lt;br&gt;
System.gc()是正常FULL GC，会STW&lt;br&gt;
打开此参数后，在做System.gc()时会做background模式CMS GC，即并行FULL GC，可提高FULL GC效率&lt;br&gt;
注，该参数在允许systemGC且使用CMS GC时有效&lt;br&gt;
举例：&lt;br&gt;
-XX:+ExplicitGCInvokesConcurrent&lt;br&gt;
相关参数：&lt;br&gt;
-XX:DisableExplicitGC 控制是否允许System.gc()，默认允许&lt;/p&gt;
&lt;p&gt;小程序截图：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/12/ExplicitGCInvokesConcurrent_JVMPocket-254x1024.png" alt="" width="254" height="1024" class="alignnone size-medium wp-image-497" /&gt;
&lt;p&gt;分享记录：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/12/ExplicitGCInvokesConcurrent-233x1024.png" alt="" width="233" height="1024" class="alignnone size-medium wp-image-496" /&gt;</description></item><item><title>你假笨JVM参数 – 005 CMSScavengeBeforeRemark</title><link>https://bridgeli.cn/posts/2017-12-17-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-005-cmsscavengebeforeremark/</link><pubDate>Sun, 17 Dec 2017 09:22:35 +0000</pubDate><guid>https://bridgeli.cn/posts/2017-12-17-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-005-cmsscavengebeforeremark/</guid><description>&lt;p&gt;你假笨的第五次分享：&lt;/p&gt;
&lt;p&gt;序号：005&lt;br&gt;
时间：2017-07-24&lt;br&gt;
参数：-XX:CMSScavengeBeforeRemark&lt;br&gt;
含义：&lt;br&gt;
Enable scavenging attempts before the CMS remark step.&lt;br&gt;
开启或关闭在CMS重新标记阶段之前的清除（YGC）尝试&lt;br&gt;
CMS并发标记阶段与用户线程并发进行，此阶段会产生已经被标记了的对象又发生变化的情况，若打开此开关，可在一定程度上降低CMS重新标记阶段对上述“又发生变化”对象的扫描时间，当然，“清除尝试”也会消耗一些时间&lt;br&gt;
注，开启此开关并不会保证在标记阶段前一定会进行清除操作&lt;/p&gt;
&lt;p&gt;小程序截图：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/12/CMSScavengeBeforeRemark_JVMPocket-334x1024.png" alt="" width="334" height="1024" class="alignnone size-medium wp-image-474" /&gt;
&lt;p&gt;分享记录：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/12/CMSScavengeBeforeRemark-228x1024.png" alt="" width="228" height="1024" class="alignnone size-medium wp-image-473" /&gt;</description></item><item><title>你假笨JVM参数 – 004 MaxTenuringThreshold</title><link>https://bridgeli.cn/posts/2017-12-10-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-004-maxtenuringthreshold/</link><pubDate>Sun, 10 Dec 2017 07:32:14 +0000</pubDate><guid>https://bridgeli.cn/posts/2017-12-10-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-004-maxtenuringthreshold/</guid><description>&lt;p&gt;你假笨的第四次分享：&lt;/p&gt;
&lt;p&gt;序号：004&lt;br&gt;
时间：2017-07-21&lt;br&gt;
参数：-XX:MaxTenuringThreshold&lt;br&gt;
含义：&lt;br&gt;
Sets the maximum tenuring threshold for use in adaptive GC sizing.&lt;br&gt;
The largest value is 15.&lt;br&gt;
The default value is 15 for the parallel (throughput) collector, and 6 for the CMS collector.&lt;br&gt;
在可自动调整对象晋升老年代年龄阈值的GC中，该参数用于设置上述年龄阈值的最大值&lt;br&gt;
参数值最大为15&lt;br&gt;
Parallel Scavenge中默认值为15，CMS中默认值为6，G1中默认值为15&lt;/p&gt;
&lt;p&gt;小程序截图：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/12/MaxTenuringThreshold_JVMPocket-290x1024.png" alt="" width="290" height="1024" class="alignnone size-medium wp-image-469" /&gt;
&lt;p&gt;分享记录：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/12/MaxTenuringThreshold-298x1024.png" alt="" width="298" height="1024" class="alignnone size-medium wp-image-468" /&gt;</description></item><item><title>你假笨JVM参数 – 003 CompileCommand</title><link>https://bridgeli.cn/posts/2017-11-25-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-003-compilecommand/</link><pubDate>Sat, 25 Nov 2017 10:15:16 +0000</pubDate><guid>https://bridgeli.cn/posts/2017-11-25-%E4%BD%A0%E5%81%87%E7%AC%A8jvm%E5%8F%82%E6%95%B0-003-compilecommand/</guid><description>&lt;p&gt;你假笨的第三次分享：&lt;/p&gt;
&lt;p&gt;序号：003&lt;br&gt;
时间：2017-07-19&lt;br&gt;
参数：-XX:CompileCommand&lt;br&gt;
含义：&lt;br&gt;
Specifies a command to perform on a method.&lt;br&gt;
该参数用于定制编译需求，比如过滤某个方法不做JIT编译&lt;br&gt;
若未指定方法描述符，则对全部同名方法执行命令操作，具体如何指定见下文[举例]&lt;br&gt;
可使用星号通配符（*）指定类或方法，具体如何使用见下文[举例]&lt;br&gt;
该参数可多次指定，或使用 换行符（\n）分隔参数后的多个命令&lt;br&gt;
解析完该命令后，JIT编译器会读取.hotspot_compiler文件中的命令，该参数也可写在.hotspot_compiler文件中&lt;br&gt;
可使用-XX:CompileCommandFile指定.hotspot_compiler文件为其他文件&lt;br&gt;
用法：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;
-XX:CompileCommand=command,method[,option]
命令：
exclude，跳过编译指定的方法
compileonly，只编译指定的方法
inline/dontinline，设置是否内联指定方法
print，打印生成的汇编代码
break，JVM以debug模式运行时，在方法编译开始处设置断点
quiet，不打印在此命令之后、通过-XX:CompileCommand指定的编译选项
log，记录指定方法的编译日志，若未指定，则记录所有方法的编译日志
其他命令，option，help
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;举例：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;设置编译器跳过编译com.jvmpocket.Dummy类test方法的4种写法&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;
-XX:CompileCommand=exclude,com/jvmpocket/Dummy.test
-XX:CompileCommand=exclude,com/jvmpocket/Dummy::test
-XX:CompileCommand=exclude,com.jvmpocket.Dummy::test
-XX:CompileCommand=&amp;#34;exclude com/jvmpocket/Dummy test&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;设置编译器只跳过编译java.lang.String类int indexOf(String)方法&lt;br&gt;
-XX:CompileCommand=”exclude,java/lang/String.indexOf,(Ljava/lang/String;)I”&lt;/li&gt;
&lt;li&gt;设置编译器跳过编译所有类的indexOf方法&lt;br&gt;
-XX:CompileCommand=exclude,*.indexOf&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;小程序截图：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/11/CompileCommand_JVMPocket-522x1024.png" alt="" width="522" height="1024" class="alignnone size-medium wp-image-463" /&gt;
&lt;p&gt;分享记录：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/11/CompileCommand-213x1024.png" alt="" width="213" height="1024" class="alignnone size-medium wp-image-462" /&gt;</description></item><item><title>你假笨说JVM参数 – 002 StringTableSize</title><link>https://bridgeli.cn/posts/2017-11-05-%E4%BD%A0%E5%81%87%E7%AC%A8%E8%AF%B4jvm%E5%8F%82%E6%95%B0-002-stringtablesize/</link><pubDate>Sun, 05 Nov 2017 06:53:11 +0000</pubDate><guid>https://bridgeli.cn/posts/2017-11-05-%E4%BD%A0%E5%81%87%E7%AC%A8%E8%AF%B4jvm%E5%8F%82%E6%95%B0-002-stringtablesize/</guid><description>&lt;p&gt;没想到距离第一次整理你假笨的分享已经过去两个多月了，近期会继续整理一系列你假笨关于JVM参数的分享，下面是第二次：&lt;/p&gt;
&lt;p&gt;序号：002&lt;br&gt;
时间：2017-07-14&lt;br&gt;
参数：-XX:StringTableSize&lt;br&gt;
含义：Number of buckets in the interned String table&lt;br&gt;
String.intern() 被调用时会往 Hashtable 插入一个 String（若该 String 不存在），这里的 Table 就是 StringTable，此参数就是这个 StringTable 的大小，若此参数设置过小，明显的问题就是过多的hash碰撞，造成在查找字符串时比较消耗 CPU 资源&lt;br&gt;
JDK 1.6 起，当冲突次数超过 100 次会自动 rehash，即便如此，若此参数设置过小会导致不断的 rehash，依然会过度消耗 CPU 资源&lt;br&gt;
建议将此参数设置的值稍大一些，以减少 hash 冲突&lt;/p&gt;
&lt;p&gt;使用方法：-XX:ReservedCodeCacheSize=__&lt;/p&gt;
&lt;p&gt;小程序截图：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/11/JVMPocket_StringTableSize-576x1024.jpg" alt="" width="576" height="1024" class="alignnone size-medium wp-image-424" /&gt;
&lt;p&gt;分享记录：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/11/StringTableSize-260x1024.png" alt="" width="260" height="1024" class="alignnone size-medium wp-image-425" /&gt;
&lt;p&gt;感谢你假笨&lt;/p&gt;</description></item><item><title>你假笨说JVM参数 – 001 ReservedCodeCacheSize</title><link>https://bridgeli.cn/posts/2017-08-26-%E4%BD%A0%E5%81%87%E7%AC%A8%E8%AF%B4jvm%E5%8F%82%E6%95%B0-001-reservedcodecachesize/</link><pubDate>Sat, 26 Aug 2017 08:24:43 +0000</pubDate><guid>https://bridgeli.cn/posts/2017-08-26-%E4%BD%A0%E5%81%87%E7%AC%A8%E8%AF%B4jvm%E5%8F%82%E6%95%B0-001-reservedcodecachesize/</guid><description>&lt;p&gt;因为之前看过周志明《深入理解Java虚拟机JVM高级特性和最佳实践》，而对JVM的一些东西感兴趣，感觉挺好玩的，前段时间有幸加了阿里寒泉子的微信（现在应该是前阿里了），而加入了一个你假笨建的一个JVM参数交流群，你假笨在里面做过几次分享，看到有小伙伴整理笔记，表示赞同。因为俗话说好记性不如烂笔头，何况自己记性并不怎么好，以下是第一次的分享。另外虽然这些东西平时可能用不到，但当实际出问题的时候不懂这些肯定是束手无策，所以多看看总没有坏处&lt;/p&gt;
&lt;p&gt;序号：001&lt;br&gt;
时间：2017-07-13&lt;br&gt;
参数：-XX:ReservedCodeCacheSize&lt;br&gt;
含义：Reserved code cache size (in bytes) – maximum code cache size&lt;br&gt;
用于设置Code Cache大小，JIT编译的代码都放在Code Cache中，若Code Cache空间不足则JIT无法继续编译，并且会去优化，比如编译执行改为解释执行，由此，性能会降低&lt;br&gt;
等价参数：-Xmaxjitcodesize&lt;br&gt;
使用方法：-XX:ReservedCodeCacheSize=__&lt;br&gt;
小程序截图：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/08/JVMPocket-ReservedCodeCacheSize-488x1024.png" alt="" width="488" height="1024" class="alignnone size-medium wp-image-395" /&gt;
&lt;p&gt;分享记录：&lt;/p&gt;
&lt;img loading="lazy" decoding="async" src="https://www.bridgeli.cn/wp-content/uploads/2017/08/ReservedCodeCacheSize-222x1024.png" alt="" width="222" height="1024" class="alignnone size-medium wp-image-396" /&gt;
&lt;p&gt;文中小程序截图，是你假笨为了方便大家查询JVM参数而开发的一个小程序，大家可以搜索：JVMPocket添加到自己小程序中，没事的翻翻这些参数也挺好，另外JVMPocket里面有一个签到功能，你假笨会每天设置一个签到的目标人数，达到目标第二天就会在群里面分享一个JVM参数，所以大家可以每天签到，并加到你假笨建的的JVM参数交流群里面，当面听大神的教导。&lt;/p&gt;</description></item></channel></rss>