jvm优化参数收拾
jvm优化参数整理在逃逸分析的基础上,如果堆上的所有数据都不会逃逸出去被其他线程访问到,那就可以把它们当
jvm优化参数整理
在逃逸分析的基础上,如果堆上的所有数据都不会逃逸出去被其他线程访问到,那就可以把它们当作栈上数据对待,认为它们是线程私有的,同步加锁自然就无须进行??
锁膨胀? 可以看下几篇文章,介绍的比较详细,相信看了之后也比较有感触,不多做介绍sun 文档 :?http://java.sun.com/performance/reference/whitepapers/6_performance.html 轻量锁 :?http://kenwublog.com/theory-of-lightweight-locking-upon-cas 偏向锁:?http://kenwublog.com/theory-of-java-biased-locking jvm相关参数:?http://kenwublog.com/docs/java6-jvm-options-chinese-edition.htm Do Java 6 threading optimizations actually work??http://www.infoq.com/articles/java-threading-optimizations-p1?, ?http://www.infoq.com/articles/java-threading-optimizations-p2
相关参数:?-XX:+DoEscapeAnalysis?&&?-XX:+EliminateLocks ? #开启锁消除,注意锁消除是基于逃逸分析的基础,默认两者都打开 -XX:+PrintEliminateLocks ?#打印锁消除日志-XX:+UseBiasedLocking ?#开启偏向锁-XX:+UseSpinning &?-XX:PreBlockSpin=10 ?#启用自旋锁 指针压缩 (-XX:+UseCompressedOops)OOP = “ordinary object pointer” 普通对象指针。
在64位HotSpot中使用32位指针,默认64位会比32位的内存使用多出1.5倍
启用CompressOops后,会压缩的对象:
每个Class的属性指针(静态成员变量)每个对象的属性指针普通对象数组的每个元素指针比如指向PermGen的Class对象指针,本地变量,堆栈元素,入参,返回值,NULL指针不会被压缩
详细的可以看下http://kenwublog.com/compressedoops
getter方法优化(-XX:UseFastAccessorMethods)
?
Use optimized versions of Get<Primitive>Field. 估计也是使用Jit + inline技术提升相应的访问速度。
其他还有一些jvm优化主要就是内存参数,GC算法。
?
内存参数主要关注-Xms -Xmn -Xmx -XX:PermSize -Xss 等参数的设置,其中eden堆的设置taobao的一位仁兄的建议是每次request消耗的内存大小×100,也有点道理。
每次request消耗内存的计算 =??young区大小/(young gc时间间隔×每秒请求数)
?
GC算法主要是一些CMS , G1算法。后续再补充
感触?随着自己看jvm blog越来越多,发现自己对jvm真的是越来越陌生。
神啊,大家简历中尽量少提自己精通jvm了,不然会遭BS,简历和面试中是一大忌。
至少我现在看别人的面试简历就是有这样的一种心态,O(∩_∩)O