Java虚拟机中如何进行性能调优

这篇文章的内容主要围绕Java虚拟机中如何进行性能调优进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!

环县网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

一.  如何找到一个垃圾?

1)  引用计数算法:给对象添加一个引用计数器,有一次引用,计数器值就加1;当引用失效时,计数器值就减1。很多流程的编程语言例如Python都使用这种方法管理内存,但是主流的Java虚拟机没有选用它,主要原因是它很难解决对象之间相互循环引用的问题。

2)  根可达性分析算法:因为引用计数算法无法解决对象之间相互循环引用的问题,继而引出了这个算法。思想是以GC Roots作为起始点开始向下搜索,所走过的路径成为引用链,当一个对象到GC Roots没有任何引用链时,则这个对象是不可用的,就是垃圾。

二.  找到一个垃圾后,如何清除它?

1)  Mark-Sweep(标记清除):先标记出可回收的对象,然后清除。如下黑色部分为可回收对象,灰色部分为存活对象,绿色部分为未使用对象。

它的主要不足有两个:

1. 标记和清除两个过程的效率都不高

2. 另一个是空间的问题,标记清除之后产生了大量不连续的内存碎片,碎片会导致以后需要分配较大对象时,无法找到足够的连续内存,继而提前触发另一次垃圾收集动作。

2)  Copying(拷贝):将内存划分为两块,将存活对象全部copy到下面的区域,然后把上面的全部清除。

新生代中的Survivor1和Survivor2就是这样的。

缺点:浪费内存

3)  Mark-Compact(标记压缩或者标记整理):既不想碎片化,又不想浪费内存,就先将回收的对象标记起来,然后一边回收,一边把存活对象向一端移动。

缺点:效率偏低

3. CMS 全称 ConcurrentMarkSweep 老年代 并发的,垃圾回收和应用程序同时进行,降低STW的时间(200ms),CMS问题很多,所以没有一个版本默认是CMS,只能手动设定。CMS既然是MarkSweep,就一定会有碎片化的问题,碎片达到一定的程度,CMS老年代分配对象分配不下的时候,使用Serial Old进行老年代回收。(面试重灾区)

主要有四个过程:

初始标记、并发标记、重新标记、并发清理

CMS的缺点是:产生了浮动垃圾,并且使用Serial Old来清理整个老年代,这是CMS设计的缺陷;但是如果CMS做好调优,支持的内存要比Parallel Old大的多。

想象一下:

PS + PO -> 加内存 换垃圾回收器 -> PN + CMS + Serial Old (几个小时-几天的STW) ,几十个G 的内存,单线程的回收 -> G1 + Full GC  几十个G -> 上T内存的服务器 ZGC 

CMS并发标记采用的是: 三色标记法 + Incremental Update

4.  G1 垃圾回收器 (200ms - 10 ms)

算法:三色标记 + SATB

由于越来越多的内存需要回收,必然会产生STW,所以G1应运而生。

逻辑分代,物理不分代。

4.  ZGC (10ms - 1ms )  PK C++

算法:ColoredPointers + LoadBarrier

5.  Shenandoah

算法:ColorPointers + WriteBarrier

CMS中新生代的默认年龄是6,PS/PO中新生代的默认年龄是15,进入老年代,可以通过参数:-XX:MaxTenuringThreshold配置

jdk1.0自带的Serial和Serial Old,现在用的最多的是Parallel Scavenge和Parallel Old,调优用的是ParNew和CMS,jdk1.8用G1也没有问题

jdk1.8默认是Parallel Scavenge和Parallel Old,不管是单线程Serial还是并行Parallel,只要人多,都会出现问题,所以就有了承前启后的ParNew和CMS。

Java的特点有哪些

Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

感谢你的阅读,相信你对“Java虚拟机中如何进行性能调优”这一问题有一定的了解,快去动手实践吧,如果想了解更多相关知识点,可以关注创新互联网站!小编会继续为大家带来更好的文章!


本文题目:Java虚拟机中如何进行性能调优
当前路径:http://scyanting.com/article/jjgihc.html