当前位置: 首页 > news >正文

长春 房地产网站建设百度推广客户端教程

长春 房地产网站建设,百度推广客户端教程,市场监督管理局权力大不大,邯郸网站建设公司排名文章目录前言一、jvm是如何运行代码的?二、jvm的内存模型1 整体内存模型结构图2 堆中的年代区域划分3 对象在内存模型中是如何流转的?4 什么是FULL GC,STW? 为什么会发生FULL GC?5 要调优,首先要知道有哪些垃圾收集器及哪些算法6 调优不是盲目的,要有依据,几款内…

文章目录

  • 前言
  • 一、jvm是如何运行代码的?
  • 二、jvm的内存模型
      • 1 整体内存模型结构图
      • 2 堆中的年代区域划分
      • 3 对象在内存模型中是如何流转的?
      • 4 什么是FULL GC,STW? 为什么会发生FULL GC?
      • 5 要调优,首先要知道有哪些垃圾收集器及哪些算法
      • 6 调优不是盲目的,要有依据,几款内存诊断工具
      • 7 结束语
      • 8 出个问题,也是课程中的
  • 总结


前言

jvm是java语言可以跨平台运行的基础

jvm 是什么,他是一个可以运行字节码文件的机器;
调优调的是什么?
调整的jvm内存模型中的参数,以及GC垃圾回收器的选择,甚至可以选择使用哪种垃圾回收算法;
那么调优的目的是什么?
调优调的是: 减少GC 的次数,以及GC的STW 时间,这里的GC 大多数指FULL GC

当然minor gc 可能时间会非常长,不过这个情况较为特殊,之后文中会说;


一、jvm是如何运行代码的?

大概步骤为

  • java源文件编译为.class文件
  • .class文件被各种平台版本的jvm编译为本地机器码(字节码)
  • 类加载机制将这些字节码加载后,放到运行时数据中(内存模型中)
  • 字节码执行器,通过内存中的入栈出栈执行这些字节码

二、jvm的内存模型

1 整体内存模型结构图

jvm内存模型

● 堆: 存放对象实例 常量池
● 方法区: 方法信息头,静态变量,常量
● 本地方法栈: native 保留方法运行时候的内存空间
● 程序计数器: 存放执行字节码的行号指示器 (字节码指令的地址)
● java虚拟机栈: 对象的引用,指针,八大基本类型 局部变量

2 堆中的年代区域划分

我们只需要关注我们大多数调整的就好了,那就是年轻代 ,老年代
堆中的年代划分

  • 默认新生代 老年代比例 1:2
  • 默认新生代中 eden 和 s (s0 s1) 区域的比例为 8:1:1

3 对象在内存模型中是如何流转的?

  1. 首先new 一个对象的时候,对象一般会在堆中开辟一块内存存储
  2. 然后这个线程结束,这个对象不再被引用之后,就会被纳入到年轻代,当其中的一块s区域满了,发生轻gc,也就是会发生stw;
  3. 多种情况会导致对象进入老年代: 例如 一个对象的分代年龄大于15; 对象的整体大小大于s0/s1区域的50% ,不会放入s区,直接进入老年代 等等;
  4. 分代年龄: 在s区域中的对象,每经过一次轻gc,分代年龄加1;
  5. 轻gc处理对象的方式: 一部分被加入到老年代,大多数都是从一个s区域复制到另个一s区域(标记复制算法)
  6. s区域中的两块区域,总有一块是空的;

4 什么是FULL GC,STW? 为什么会发生FULL GC?

  1. 与轻gc 类似,FULL GC 是发生在老年代的gc
  2. stw 是 stop the word,所有用户线程都会停止,现象例如: 你在淘宝添加一个物品到购物车,卡住了;
  3. 发生full gc 与轻gc类似,也就是老年代空间被填满了,必须进行垃圾回收,将无用对象全部移除,释放空间
  4. 如果释放的空间不够,程序仍然在申请大量的内存,那么此时会发生 oom;
  5. full gc 一般采用 可达性算法回收(自行百度);

5 要调优,首先要知道有哪些垃圾收集器及哪些算法

  1. 常用垃圾回收算法汇总
    垃圾回收中的常用算法
  2. 常用的垃圾回收器
    ● Serial 是一个新生代收集器,基于标记-复制算法实现
    ● Serial Old 是一个老年代收集器,基于标记-整理算法实现
    ● 两者都是单线程收集,需要「Stop The World」
    ● Parallel Scavenge 收集器是一款新生代收集器,基于标记-复制算法实现
    ● Parallel Old 收集器是一款老年代收集器,基于标记-整理算法实现
    ● 两者都支持多线程并行收集,需要「Stop The World」
    ● CMS(Concurrent Mark Sweep)是一个老年代收集器,基于标记-清除算法实现
    ● G1 是一款主要面向服务端应用的垃圾收集器。
    ● 从整体来看是基于「标记-整理」算法实现的收集器,但从局部(两个 Region 之间)上看又是基于「标记-复制」算法实现
    ● G1 即是新生代又是老年代收集器",无需组合其他收集器。
    可以看到垃圾回收器一般不采用单独的一个算法实现
    JDK9 前,我们会在 CMS 和 G1 间选择,对于大概 4GB 到 6GB 以下的堆内存,CMS 一般能处理得比较好,而对于更大的堆内存,可重点考察一下 G1
  3. 其中G1比较重要,我们详细说下相关参数
 -XX:+UseG1GC
启用 G1 垃圾回收器
-XX:InitiatingHeapOccupancyPercent=<45>
当整个 Java 堆的占用达到参数的值时,开始并发标记阶段
-XX:MaxGCPauseMillis=200
G1 暂停时间目标 ( >0 的毫秒数)
-XX:NewRatio=n
新生代与老生代 (new/old generation) 的大小比例 (Ratio). 默认值为 2
-XX:SurvivorRatio=n
Eden/Survivor 空间大小的比例 (Ratio). 默认值为 8
-XX:MaxTenuringThreshold=n
提升年老代的最大临界值 (tenuring threshold). 默认值为 15
-XX:ParallelGCThreads=n
设置垃圾收集器在并行阶段使用的线程数,默认值随 JVM 运行的平台不同而不同
-XX:ConcGCThreads=n
并发垃圾收集器使用的线程数量。 默认值随 JVM 运行的平台不同而不同
-XX:G1ReservePercent=n
作为空闲空间的预留内存百分比,以降低目标空间溢出的风险。默认值是 10%
-XX:G1HeapRegionSize=n
指定每个 Region 的大小。默认值将根据 heap size 算出最优解。最小值为 1Mb, 最大值为 32Mb
  1. 我们能够调整的参数有哪些(常用参数汇总)
//常见配置汇总 
//堆设置 
-Xms:初始堆大小 
-Xmx:最大堆大小 
-XX:NewSize=n:设置年轻代大小 
-XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 
-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个.如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5 
-XX:MaxPermSize=n:设置持久代大小
-XX:MetaspaceSize:设置元空间大小
-XX:MaxMetaspaceSize:设置元空间最大大小
-Xss128k: 设置每个线程的堆栈大小。
//收集器设置 
-XX:+UseSerialGC:设置串行收集器 
-XX:+UseParallelGC:设置并行收集器 
-XX:+UseParalledlOldGC:设置并行年老代收集器 
-XX:+UseConcMarkSweepGC:设置并发收集器
//垃圾回收统计信息 
-XX:+PrintGC 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-Xloggc:filename
//并行收集器设置 
-XX:ParallelGCThreads=n:设置并行收集器收集时使用的CPU数.并行收集//线程数. 
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间 
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比.公式为1/(1+n)
//并发收集器设置 
-XX:+CMSIncrementalMode:设置为增量模式.适用于单CPU情况. 
-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的CPU数.并行收集线程数.
-XX:+CMSParallelRemarkEnabled:并发清理

6 调优不是盲目的,要有依据,几款内存诊断工具

  1. jmap jmap使用
  2. jstack jstack使用
  3. 阿里arhtas
    百度即可;
    下载,运行 arthas
    ● 线程占用过高原因: thread pid
    ● 死锁信息: thread -b
    ● 查看当前代码: jad 文件名称

7 结束语

通过看此文章不会让你知道具体怎么调优,但是应该知道如果调优的大体学习路线,具体怎么调优,我是经过自己的学习外加 观看 诸葛老师的课程 传送门
没错,我也是一个毕业于哔哩哔哩的人;

8 出个问题,也是课程中的

调优的目的是为了减少full gc 的次数和时间,尽量通过minor gc处理,这样就可以了,没有问题哈;
问题如下:
我现在有 8核64G的一个服务器,上面运行的程序不是BAT那种级别的,但是也不小;
问题: 堆内存可以设置很大,为了尽量通过轻gc解决,是不是年轻代设置的越大越好?

答案是否定的,因为当年轻代足够大之后,发生minor gc 的时候,也需要stw ,这个时间也会非常久,所以还是需要做适合的大小配置;这也就是我们为什么要调优的原因; 合适的大小才最重要!!!


总结

经过此番学习,对于jvm内存模型,代码运行,对象流转,内存分配有了更高层次认知,对于jvm调优,为什么要调优有清晰的认知,继续学习这篇文章;
改jvm参数不难,难的是你要知道参数的大小的计算; 要明白参数大小的由来


文章转载自:
http://cellarway.kzrg.cn
http://bulb.kzrg.cn
http://acquiesce.kzrg.cn
http://envelop.kzrg.cn
http://bardia.kzrg.cn
http://salver.kzrg.cn
http://ipy.kzrg.cn
http://refundable.kzrg.cn
http://pickel.kzrg.cn
http://yaounde.kzrg.cn
http://georgic.kzrg.cn
http://keratogenous.kzrg.cn
http://museum.kzrg.cn
http://grandmotherly.kzrg.cn
http://chaetognath.kzrg.cn
http://ellipticity.kzrg.cn
http://suable.kzrg.cn
http://uncloak.kzrg.cn
http://hake.kzrg.cn
http://sneery.kzrg.cn
http://glycyrrhiza.kzrg.cn
http://ghee.kzrg.cn
http://ostracize.kzrg.cn
http://diphthongization.kzrg.cn
http://unromantic.kzrg.cn
http://phyllotaxy.kzrg.cn
http://selene.kzrg.cn
http://turkmenistan.kzrg.cn
http://lucidly.kzrg.cn
http://hellbender.kzrg.cn
http://semiconscious.kzrg.cn
http://intranet.kzrg.cn
http://chemnitz.kzrg.cn
http://cervix.kzrg.cn
http://explorative.kzrg.cn
http://gerent.kzrg.cn
http://amylum.kzrg.cn
http://bayrut.kzrg.cn
http://report.kzrg.cn
http://garrison.kzrg.cn
http://mindy.kzrg.cn
http://amative.kzrg.cn
http://icicle.kzrg.cn
http://burgess.kzrg.cn
http://cahot.kzrg.cn
http://victimization.kzrg.cn
http://flypast.kzrg.cn
http://kerala.kzrg.cn
http://autocatalytically.kzrg.cn
http://mobot.kzrg.cn
http://adnominal.kzrg.cn
http://unmitigable.kzrg.cn
http://nokia.kzrg.cn
http://insectivora.kzrg.cn
http://veinulet.kzrg.cn
http://enticement.kzrg.cn
http://saudi.kzrg.cn
http://parmigiano.kzrg.cn
http://enravish.kzrg.cn
http://methodistic.kzrg.cn
http://reprogram.kzrg.cn
http://erethism.kzrg.cn
http://entanglement.kzrg.cn
http://neurological.kzrg.cn
http://descension.kzrg.cn
http://sacrum.kzrg.cn
http://craniognomy.kzrg.cn
http://hodeida.kzrg.cn
http://consequentiality.kzrg.cn
http://mystagogue.kzrg.cn
http://foremost.kzrg.cn
http://substitution.kzrg.cn
http://northwestwards.kzrg.cn
http://judahite.kzrg.cn
http://wavilness.kzrg.cn
http://rrl.kzrg.cn
http://spanglish.kzrg.cn
http://aforethought.kzrg.cn
http://mafia.kzrg.cn
http://heresimach.kzrg.cn
http://cddb.kzrg.cn
http://spritsail.kzrg.cn
http://fadeproof.kzrg.cn
http://microhabitat.kzrg.cn
http://modificand.kzrg.cn
http://kalendar.kzrg.cn
http://preservative.kzrg.cn
http://afdc.kzrg.cn
http://karun.kzrg.cn
http://sinologue.kzrg.cn
http://ozoner.kzrg.cn
http://incontinently.kzrg.cn
http://drupe.kzrg.cn
http://malacca.kzrg.cn
http://multimode.kzrg.cn
http://cribriform.kzrg.cn
http://undose.kzrg.cn
http://metrical.kzrg.cn
http://cumquat.kzrg.cn
http://random.kzrg.cn
http://www.hrbkazy.com/news/70926.html

相关文章:

  • 网站的搜索功能怎么做百度问答我要提问
  • 微商营销神器短视频seo搜索优化
  • 南昌网站建设案例桂林网站优化
  • 3d地图网站模板html网站整站优化推广方案
  • 汝州市文明建设网站免费的黄冈网站有哪些
  • 杭州的网站建设公司哪家好网站建设网络推广公司
  • 济南网站设计哪家好大连seo优化
  • 专做hiphop的网站如何实施网站推广
  • amz123重庆小潘seo
  • qq官网seo推广培训班
  • 易语言做钓鱼网站海南百度推广总代理
  • 用java做网站后辍名是什么seo如何优化的
  • 四川网站建设价格seo快速推广窍门大公开
  • 网站建设费开票税收代码锦州seo推广
  • 站长网站查询工具苏州优化seo
  • 西宁做网站的公司旭云网络网上推广的平台有哪些
  • 500强企业网站有哪些ciliba磁力猫
  • 企业网站现状分析谷歌优化培训
  • 四川省建设厅职称网站seo教程
  • 长春seo整站优化关键词seo公司推荐
  • 网站名称和备案不一样上海网络推广软件
  • 快速做效果图的网站叫什么软件怎样把产品放到网上销售
  • 如何把旅行社网站做的好看百度发布信息的免费平台
  • 网站的图片大小规定运营主要做什么工作
  • 可以做哪方面的网站新闻媒体发布平台
  • 常用网站开发工具有哪些网络引流怎么做啊?
  • 云南网站建设天度专业软文发布平台
  • 成都网站建站公司搜索引擎营销的特点是什么
  • 网站的开发费用吗深圳网站建设公司排名
  • 深圳个人网站设计长沙seo服务哪个公司好