我是靠谱客的博主 时尚学姐,最近开发中收集的这篇文章主要介绍Java基础学习之JVM篇:说说STW、吞吐量、FootPrint和Latency学习目标什么是GC提高吞吐量LatencyFootPrint,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学习目标

GC不仅负责内存的回收,也负责内存的分配,甚至故障异常处理一条龙,GC可以拥有不同算法实现,不同算法解决不同的问题,那么

  1. 为什么要GC?
  2. 什么是STW?
  3. 如何提高ThroughPut?

什么是GC

百度百科是这样解释:

GC(Garbage Collection):JAVA/.NET中的垃圾回收器。Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。有了GC,程序员就不需要再手动的去控制内存的释放。当Java虚拟机(VM)或.NETCLR发觉内存资源紧张的时候,就会自动地去清理无用对象(没有被引用到的对象)所占用的内存空间

其实生活中也许有过这样的场景:当张三妈妈在房间很辛苦的打扫时,发现张三在捣蛋,不停在弄乱房间,是的,假如妈妈打扫的速度<张三弄乱房间的速度呢,此时妈妈愤怒极了,对着张三大声喊了一句:Stop the world!给我停下来。

是的,JVM中内存也是同样如此,当分配内存速度大于回收速度,这时必然就会出现内存溢出,此时GC需要做的就是STW(Stop the world):别给我在分配了,我需要回收内存,给我等待吧

一般在程序执行时,我们可以通过设置参数-XX:GCTimeRatio,假设XX:GCTimeRatio=19 ,表示垃圾收集时间为1/(1+19),默认值为99,即1%时间用于垃圾收集。时间占比指的就是占用CPU执行的时间。而非GC占用CPU执行时间占比可以称为ThroughPut,即吞吐量,程序工作时间的占比。

Tips:JVM标准参数不随着JDK版本变化而变化,扩展参数在JDK各个版本中可能会变动,不保证每个JVM都支持
在这里插入图片描述
那么如何提高吞吐量,提高程序执行效率?

提高吞吐量

  1. 提高堆内存大小
  2. 优化GC算法

我们知道可以设法提高GC效率来提高吞吐量,即使GC尽量少占用CPU开销。那么提高堆内存大小,JVM参数可以这样设置-Xmx:4G,表示设置最大的堆大小为4G。

  • -Xms:设置Java程序启动时初始化堆大小
  • -Xmx:设置Java程序能获得最大的堆大小

我们知道房间大了,放的东西多了,那么就自然可以减少整理和打扫的次数了。提高堆内存同理。

当然还有一个就是优化GC的算法,那么GC又有哪些算法,不同算法有何优劣,不同场景应该用哪些算法,这些我们可以先表不谈,我们只知道可以通过一些算法来提高GC的速度,提高程序执行的吞吐量。

还有人问可以多线程来提高GC的速度,那么多线程GC真能提高吞吐量吗?

  • 如果在单核场景下,多线程执行其实在并发,而并发我们知道是CPU的替换执行,从整体时间上看,就是串行的,而且会存在线程创建和分发任务的开销,并不能够提高执行GC的速度,
  • 在多核CPU中,多线程执行也并非一定能提高,如果存在不能并发的任务呢

Latency

Latency指GC造成的停顿时间,即Pause Time:一次STW的时间。
而延迟Latency一般指的是Pause Time的峰值。

多线程和提高内存可以降低Latency

FootPrint

FootPrint指的是应用对内存最终的需求,比如内存使用100M/s,GC速度80M/s,10s内存进行一次回收,那么内存此时剩下的200M称为峰值,即对内存最终的需求。

最后

以上就是时尚学姐为你收集整理的Java基础学习之JVM篇:说说STW、吞吐量、FootPrint和Latency学习目标什么是GC提高吞吐量LatencyFootPrint的全部内容,希望文章能够帮你解决Java基础学习之JVM篇:说说STW、吞吐量、FootPrint和Latency学习目标什么是GC提高吞吐量LatencyFootPrint所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部