您的位置:首页 > 编程语言 > Java开发

JVM菜鸟进阶高手之路十二(jdk9、JVM方面变化, 蹭热度)

2017-09-22 19:22 393 查看
转载请注明原创出处,谢谢!

经过 4 次跳票,历经曲折的 Java 9 正式版终于发布了!今天看着到处都是jdk9发布了,新特性说明,心想这么好的蹭热度计划能错过嘛,哈哈,所以就发了这篇文章。

目前jdk9和jvm9的规范都还没有出来,很多细节估计还不清楚,基本就是通过官方介绍,看的。



所以各位看官莫急

去首页下载jdk9,你会发现:


不这么吓唬我们,我们一般不会这么快用的

之后下载页发现和以前的略有不同,没有32位了。


下载、安装和以前没有啥区别,之后运行效果:



Java Platform, Standard Edition What’s New in Oracle JDK 9

主要是基于该地址:New in Oracle JDK 9What’s New for JVM Tuning in JDK 9,其他内容可以自己有兴趣的看看,其他的我也没看。



These are the JVM tuning enhancements in JDK 9.



改善增加G1Usability, Determinism, and Performance

就是内部改进了,详细的看下描述。

删除jdk8弃用的垃圾回收器组合

1.下面组合删除

- DefNew + CMS

- ParNew + SerialOld

- Incremental CMS

2. foreground的cms gc删除

foreground它发生的场景比如业务线程请求分配内存,但是内存不够了,于是可能触发一次cms gc,这个过程就必须是要等内存分配到了线程才能继续往下面走的,因此整个过程必须是STW的,因此CMS GC整个过程都是暂停应用的,但是为了提高效率,它并不是每个阶段都会走的,只走其中一些阶段,这些省下来的阶段主要是并行阶段,Precleaning、AbortablePreclean,Resizing这几个阶段都不会经历,其中sweep阶段是同步的,但不管怎么说如果走了类似foreground的cms gc,那么整个过程业务线程都是不可用的,效率会影响挺大。

参考:http://mp.weixin.qq.com/s?__biz=MzIzNjI1ODc2OA==&mid=403167528&idx=1&sn=915363f7daaf161c8cf8cd1953d377db&scene=19#wechat_redirect

3.一些jvm参数去掉

- -Xincgc

- -XX:+CMSIncrementalMode

- -XX:+UseCMSCompactAtFullCollection

- -XX:+CMSFullGCsBeforeCompaction

- -XX:+UseCMSCollectionPassing

4. UseParNewGC

The command line flag -XX:+UseParNewGC no longer has an effect. ParNew can only be used with CMS and CMS requires ParNew. Thus, the -XX:+UseParNewGC flag has been deprecated and will likely be removed in a future release.

5. 使用G1做为默认回收器

Risks and Assumptions

- The change is based on the assumption that limiting latency is often more important than maximizing throughput. If this assumption is incorrect then this change might need to be reconsidered.

- G1 is seen as a robust and well-tested collector. It is not expected to have stability problems, but becoming the default collector will increase its visibility and may reveal previously-unknown issues. If a critical issue is found that can’t be addressed in the JDK 9 time frame, we will revert back to use Parallel GC as the default for the JDK 9 GA.

- The resource usage of G1 is different from Parallel. When resource usage overhead needs to be minimized a collector other than G1 should be used, and after this change the alternate collector will have to be specified explicitly.

简单意思就是,与CMS类似,G1更关注的是延迟,如果更关注吞吐量还是建议ps吧,G1已经足够健壮了,可能有未知没预测到的,如果解决不了就默认换会PS。

6. 统一GC日志

Reimplements Garbage Collection (GC) logging using the unified JVM logging framework introduced in JEP 158. GC logging is re-implemented in a manner consistent with the current GC logging format; however, some differences exist between the new and old formats.

7. 废弃CMS

Deprecates the Concurrent Mark Sweep (CMS) garbage collector. A warning message is issued when it is requested on the command line, using the -XX:+UseConcMarkSweepGC option. The Garbage-First (G1) garbage collector is intended to be a replacement for most uses of CMS.

其实通过上面好多项都可以看见把CMS参数去掉很多,之后一些相关也废弃了,就是想让G1替代CMS,由于CMS采用的是标记清除,而G1使用的是标记整理所以G1在若干次GC后,不需要类似CMS那样必须进行一次碎片整理。

G1垃圾回收器并没有特别研究就仅仅了解使用标记整理,后面会有空进行学习、分享。

今天大概就这么多了,也是才出来很多不熟悉,而且只是一点点小部分,后续有空多写写,后续Java 将每半年发布一个版本(压力大啊),我想想JVM后续会越来完善的。希望大家对我多多关注,多多支持,点赞点赞,谢谢。

个人公众号

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: