![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM性能调优
以JVM性能调优为主,数据库等调优为辅的专栏
cwl_java
这个作者很懒,什么都没留下…
展开
-
JVM性能调优-下载导致的频繁FullGC问题演练与解决
下载问题是什么问题⽤户线程访问所导致的⼤对象问题解决这个问题的关键是什么32G内存-xmx30G,系统每次进⾏FullGC时⻓太⻓可以减少-xmx⼤⼩成4G,从⽽缩短Full GC最终解决⽅案:集群部署,第⼀个节点4G 第⼆个节点4G 第三个节点4G ⽤nginx配置转发upstream...原创 2019-12-17 12:00:39 · 527 阅读 · 0 评论 -
JVM性能调优-FullGC与Minor的区别频繁FullGC问题分析
简介:FullGC与MinorGC讲解Minor GC触发条件当Eden区满时,触发Minor GCFullGC触发条件调⽤ System.gc() 此⽅法的调⽤是建议 JVM 进⾏ Full GC,虽然只是建议⽽⾮⼀定,但很多情况下它会触发 Full GC。因此强烈建议能不使⽤此⽅法就不要使⽤,让虚拟机⾃⼰去管理它的内存。可通过 -XX:+ DisableExplicitGC 来禁⽌ ...原创 2019-12-17 11:58:54 · 1380 阅读 · 0 评论 -
JVM性能调优-可视化虚拟机⼯具VisualVM
简介:VisualVM插件安装讲解以及基础线程功能/内存功能讲解VisualVM是什么?VisualVM是⼀个集成命令⾏JDK⼯具和轻量级分析功能的可视化⼯具VisualVM怎么⽤?在IDEA安装VisualVM插件,File-> Setting-> Plugins -> Browers Repositrories 搜索VisualVM Launcher安装并重启IDE...原创 2019-12-17 11:42:33 · 522 阅读 · 0 评论 -
JVM性能调优-可视化虚拟机⼯具Jconsole介绍
简介:jconsole是什么?怎么连接与使⽤介绍Jconsole是什么**JConsole (Java Monitoring and Management Console)**是⼀种基于 JMX 的可视化监视、管理⼯具,它管理部分的功能是针对 JMXMBean 进⾏管理,由于 MBean 可以使⽤代码、中间件服务器的管理控制台或者所有符合 JMX 规范的软件进⾏访问Jconsole怎么连...原创 2019-12-17 11:39:22 · 400 阅读 · 0 评论 -
JVM性能调优-实战应⽤之使⽤虚拟机⼯具JSTACK
Jstack是什么**Jstack (Stack Trace for Java)**命令⽤于⽣成虚拟机当前时刻的线程快照(-般称为thread dump 或者 java core ⽂件)线程快照就是当前虚拟机内每⼀条线程正在执⾏的⽅法堆栈的集合,⽣成线程快照的主要⽬的是定位线程出现⻓时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的⻓时间等待等都是导致线程⻓时间停顿的常⻅原因。线...原创 2019-12-17 11:28:07 · 365 阅读 · 0 评论 -
JVM性能调优-实战应⽤之使⽤虚拟机⼯具JHAT
简介:JHAT命令的是什么?JHAT命令的使⽤JHAT是什么Sun JDK 提供 **JHAT (JVM Heap Analysis Tool)**命令常与 jmap 搭配使⽤,来分析 jmap ⽣成的堆 转储快照。jhat内置了⼀个微型的HTTP/HTML服务器,⽣成dump⽂件的分析结果后,可以在浏览器中查看特点JHAT分析⼯作是⼀个耗时⽽且消耗硬件资源的过程JHAT 的分析功能相...原创 2019-12-17 11:24:52 · 286 阅读 · 0 评论 -
JVM性能调优-实战应⽤之使⽤虚拟机⼯具JMAP
简介:jmap常⽤命令讲解,linux命令说明书怎么看?JMAP是什么**Jmap (Memory Map for Java)**命令⽤于⽣成堆转储快照。如果不使⽤ jmap 命令,要想获取 Java 堆转储快照,还有⼀些⽐较“暴⼒”的⼿段:-XX: +HeapDumpOnOutOfMemoryError参数,可以让虚拟机在 OOM 异常出现之后⾃动⽣成 dump ⽂件,⽤于系统复盘环节和 ...原创 2019-12-17 11:22:08 · 300 阅读 · 0 评论 -
JVM性能调优-实战应⽤之使⽤虚拟机⼯具JSTAT与JINFO
简介:JSTAT命令和JINFO命令实战讲解JSTAT是什么**JSTAT (JVM Statistics Monitoring Tool)**是⽤于监视虚拟机各种运⾏状态信息的命令⾏⼯具。它可以显示本地或者远程-虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运⾏数据,在没有 GU 图形界⾯,只提供了纯⽂本控制台环境的服务器上,它将是运⾏期定位虚拟机性能问题的⾸选⼯具JSTAT命令使⽤...原创 2019-12-17 11:14:37 · 371 阅读 · 0 评论 -
JVM性能调优-实战应⽤之使⽤虚拟机⼯具JPS
简介:虚拟机⼯具的意义以及JPS讲解虚拟机⼯具的意义给⼀个系统定位问题的时候,知识、经验是关键基础,数据是依据,⼯具是运⽤知识处理数据的⼿段数据包括:运⾏⽇志、异常堆栈、GC ⽇志、线程快照( threaddump/javacore⽂件)、堆转储快照( heapdump/hprof⽂件)等。使⽤适当的虚拟机监控和分析的⼯具可以加快我们分析数据、定位解决问题的速度ps -ef|grep ...原创 2019-12-17 10:45:05 · 338 阅读 · 0 评论 -
JVM性能调优-逃逸分析和栈上分配
简介:堆内存分配⽅式,分配规则讲解逃逸分析逃逸分析的基本⾏为就是分析对象动态作⽤域:当⼀个对象在⽅法中被定义后,它可能被外部⽅法所引⽤,称为⽅法逃逸。甚⾄还有可能被外部线程访问到,譬如赋值给类变量或可以在其他线程中访问的实例变量,称为线程逃逸栈上分配栈上分配就是把⽅法中的变量和对象分配到栈上,⽅法执⾏完后⾃动销毁,⽽不需要垃圾回收的介⼊,从⽽提⾼系统性能...原创 2019-12-17 10:13:00 · 301 阅读 · 0 评论 -
JVM性能调优-⼤对象的分配和基本分配⼀样吗
简介:堆内存JVM参数讲解,⼤对象分配原则讲解和代码验证是什么所谓的⼤对象是指,需要⼤量连续内存空间的 Java 对象,最典型的⼤对象就是那种很⻓的字符串以及数组虚拟机提供了⼀个-XX: PretenureSizeThreshold 参数,令⼤于这个设置值的对象直接在⽼年代分配。这样做的⽬的是避免在 Eden 区及两个 Survivor 区之间发⽣⼤量的内存复制实战代码演练⼤对象配置...原创 2019-12-17 10:10:35 · 259 阅读 · 0 评论 -
JVM性能调优-探索堆内存到底是怎么分配
简介:堆内存分配⽅式,分配规则讲解对象分配的规则有哪些对象主要分配在新⽣代的 Eden 区上如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配少数情况下也可能会直接分配在⽼年代中GC参数指定垃圾回收-Xms20 M、-Xmx20 M、-Xmn1 0 M 这 3 个参数限制了 Java 堆⼤⼩为 20 MB,不可扩展,其中 10 MB 分配给新⽣代,剩下的 10 MB 分...原创 2019-12-17 10:00:12 · 296 阅读 · 0 评论 -
JVM性能调优-你不得不懂的G1收集器
简介:G1垃圾收集器是什么G1是⼀款⾯向服务端应⽤的垃圾收集器特点G1 中每个 Region 都有⼀个与之对应的 Remembered Set,当进⾏内存回收时,在 GC 根节点的枚举范围中加⼊ Remembered Set 即可保证不对全堆扫描也不会有遗漏 检查Reference引⽤的对象是否处于不同的RegionG1 收集器的运作⼤致可划分为以下⼏个步骤初始标记(Initial ...原创 2019-12-16 19:59:41 · 251 阅读 · 0 评论 -
JVM性能调优-你不得不懂的CMS收集器
简介:标记整理算法讲解以及分代收集算法讲解是什么CMS (Concurrent Mark Sweep)收集器是-种以获取最短回收停顿时间为⽬标的收集器。⽬前很⼤⼀部分的Java应⽤集中在互联⽹站或者B/S系统的服务端上,这类应⽤尤其重 视服务的响应速度,希望系统停顿时间最短,以给⽤户带来较好的体验。CMS 收集器是基于“标记-清除”算法实现的步骤流程初始标记(CMS initia...原创 2019-12-15 23:07:49 · 371 阅读 · 1 评论 -
JVM性能调优-Parallel Scavenge收集器
简介:Parallel Scavenge收集器讲解是什么Parallel Scavenge 收集器是⼀个新⽣代收集器,它也是使⽤复制算法的收集器,⼜是并⾏的多线程收集器由于与吞吐量关系密切,Parallel Scavenge 收集器也经常称为“吞吐量优先”收集器吞吐量是什么?CPU⽤于运⾏⽤户代码的时间与CPU总时间的⽐值,99%时间执⾏⽤户线程,1%时间回收垃圾 ,这时候吞吐量就是99...原创 2019-12-15 23:04:51 · 967 阅读 · 1 评论 -
JVM性能调优-ParNew收集器内容精讲
简介:parnew垃圾收集器图解分析特点是什么ParNew 收集器其实就是 Serial 收集器的多线程版本,除了使⽤多条线程进⾏垃圾收集之外,其余⾏为包括 Serial 收集器可⽤的所有控制参数(例如:-XX: SurvivorRatio、-XX:PretenureSize’ Threshold、-XX: HandlePromotionFailure 等)、收集算法、Stop The Wor...原创 2019-12-15 22:59:29 · 564 阅读 · 1 评论 -
JVM性能调优-Serial收集器内容精讲
简介:serial垃圾收集器讲解是什么收集算法是内存收到的⽅法论,垃圾回收器是内存回收的具体实现。Serial是⼀个单线程的垃圾收集器serial垃圾收集器的特点“Stop The World”,它进⾏垃圾收集时,必须暂停其他所有的⼯作线程,直到它收集结束。在⽤户不可⻅的情况下把⽤户正常⼯作的线程全部停掉使⽤场景:多⽤于桌⾯应⽤,Client端的垃圾回收器桌⾯应⽤内存⼩,进⾏垃...原创 2019-12-15 22:53:19 · 293 阅读 · 0 评论 -
JVM性能调优-剖析标记整理算法与分代收集算法
简介:标记整理算法讲解以及分代收集算法讲解标记整理算法解决了什么问题复制收集算法在对象存活率较⾼时就要进⾏较多的复制操作,效率将会变低。更关键的是,如果不想浪费 50%的空间,就需要有额外的空间进⾏分配担保,以应对被使⽤的内存中所有对象都 100%存活的极端情况,所以在⽼年代⼀般不能直接选⽤这种算法标记-整理根据⽼年代的特点,有⼈提出了另外⼀种“标记-整理(Mark- Compact)算法...原创 2019-12-15 22:50:54 · 306 阅读 · 0 评论 -
JVM性能调优-算法内功之剖析复制算法
简介:标记复制算法讲解为甚么出现复制算法?为了解决效率问题,⼀种称为“复制”(Copying)的收集算法出现了,它将可⽤内存按量划分为⼤⼩相等的两块,每次只使⽤其中的⼀块当这⼀块的内存⽤完了,就将还存活着的对象复制到另外⼀块上⾯,然后再把已使⽤过的内存空间⼀次清理掉。这样使得每次都是对整个半区进⾏内存回收,内存分配时也就不⽤考虑内存碎⽚等复杂情况,只要移动堆顶指针,按顺序分配内存即可...原创 2019-12-12 22:23:16 · 335 阅读 · 6 评论 -
JVM性能调优-算法内功之剖析标记清除
简介:标记清除算法讲解最基础的收集算法是“标记-清除”(Mark-Sweep)算法,如同它的名字⼀样,算法分为“标记”和“清 除”两个阶段⾸先标记出所有需要回收的对象,在标记完成后统⼀回收所有被标记的对象,它的标记过程其实在前- -节讲述对象标记判定时已经介绍过了它的主要不⾜有两个:⼀个是效率问题,标记和清除两个过程的效率都不⾼;另⼀个是空间问题,标记清除之后会产⽣⼤量不连续的内...原创 2019-12-12 22:15:21 · 301 阅读 · 1 评论 -
JVM性能调优-对象存活算法可达性分析
简介:判断对象是否存活算法,讲解对象垃圾回收对象是否回收判断可达性分析算法的概念(⼜叫跟搜索法)根搜索算法是从离散数学中的图论引⼊的,程序把所有的引⽤关系看作⼀张图,从⼀个节点GC ROOT开始,寻找对应的引⽤节点,找到这个节点以后,继续寻找这个节点的引⽤节点,当所有的引⽤节点寻找完毕之后,剩余的节点则被认为是没有被引⽤到的节点,即⽆⽤的节点java中可作为GC Root的对象有虚拟机栈...原创 2019-12-12 22:13:26 · 341 阅读 · 0 评论 -
JVM性能调优-对象存活算法引⽤计数法
简介:判断对象是否存活算法,讲解对象垃圾回收对象是否回收判断引⽤计数法存在的特点分析优缺点引⽤计数收集器可以很快的执⾏,交织在程序运⾏中。对程序需要不被⻓时间打断的实时环境⽐较有利。⽆法检测出循环引⽤。如⽗对象有⼀个对⼦对象的引⽤,⼦对象反过来引⽤⽗对象。这样,他们的引⽤计数永远不可能为0.run configurations—vm options—加配置项...原创 2019-12-12 22:10:57 · 307 阅读 · 0 评论 -
JVM性能调优-GC垃圾回收讲解
简介:GC垃圾回收讲解战略意义 能做出⼀个需求的同时也要懂得其对应的战略意义为什么要垃圾回收?Java语⾔中⼀个显著的特点就是引⼊了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃⽽解。由于有个垃圾回收机制,Java中的对象不再有“作⽤域”的概念,只有对象的引⽤才有“作⽤域”。垃圾回收可以有效的防⽌内存泄露,有效的使⽤空闲的内存对象是否存活判断堆中每个对象实例都有⼀个引⽤计数。...原创 2019-12-12 22:07:55 · 294 阅读 · 1 评论 -
JVM性能调优-Java程序员不可不知的对象访问定位⽅式
简介:Java程序员不可不知的对象访问定位⽅式当我们在堆上创建⼀个对象实例后,就要通过虚拟机栈中的reference类型数据来操作堆上的对象。现在主流的访问⽅式有两种(HotSpot虚拟机采⽤的是第⼆种):使⽤句柄访问对象。即reference中存储的是对象句柄的地址,⽽句柄中包含了对象实例数据与类型数据的具体地址信息,相当于⼆级指针。直接指针访问对象。即reference中存储的就是...原创 2019-12-12 22:05:33 · 305 阅读 · 0 评论 -
JVM性能调优-Java程序员不可不知的对象结构
简介:Java程序员不可不知的对象结构对象头⽤于存储对象的元数据信息Mark Word 部分数据的⻓度在32位和64位虚拟机(未开启压缩指针)中分别为32bit和64bit,存储对象⾃身的运⾏时数据如哈希值等。Mark Word⼀般被设计为⾮固定的数据结构,以便存储更多的数据信息和复⽤⾃⼰的存储空间。类型指针 指向它的类元数据的指针,⽤于判断对象属于哪个类的实例。实例数据存储的是真...原创 2019-12-12 22:03:08 · 241 阅读 · 0 评论 -
JVM性能调优-Java程序员不可不知的对象创建底层步骤细节
简介:Java程序员不可不知的对象创建底层步骤细节对象创建的流程步骤包括哪些虚拟机遇到⼀条new指令时,⾸先检查这个对应的类能否在常量池中定位到⼀个类的符号引⽤判断这个类是否已被加载、解析和初始化为这个新⽣对象在Java堆中分配内存空间,其中Java堆分配内存空间的⽅式主要有以下两种指针碰撞分配内存空间包括开辟⼀块内存和移动指针两个步骤⾮原⼦步骤可能出现并发问题,Java虚拟机...原创 2019-12-12 18:14:21 · 293 阅读 · 0 评论 -
JVM性能调优-运⾏时常量池
简介:JVM内存模型之⽅法区运⾏时常量池1.是什么?运⾏时常量池是⽅法区的⼀部分,Class⽂件除了有类的版本、字段、⽅法、接⼝等描述信息外,还有⼀项信息是常量池,⽤于存放编译器⽣成的各种字⾯量和符号引⽤,这部分内容将在类加载后进⼊⽅法区的运⾏时常量池中存放。2.运⾏时常量池的模拟3.特点运⾏时常量池是⽅法区的⼀部分,受到⽅法区内存的限制,当常量池再申请到内存时会抛出OutOf...原创 2019-12-12 18:06:56 · 356 阅读 · 0 评论 -
JVM性能调优-Java内存区域⽅法区
简介:JVM内存模型之⽅法区1.是什么?是各个线程共享的内存区域,它⽤于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据什么是类信息:类版本号、⽅法、接⼝2.为什么?内存中存放类信息、静态变量等数据,属于线程共享的⼀块区域Hotspot使⽤永久代来实现⽅法区 JRockit、IBM J9VM Java堆⼀样管理这部分内存3.特点并⾮数据进⼊了⽅法区...原创 2019-12-12 17:33:46 · 321 阅读 · 0 评论 -
JVM性能调优-Java内存区域Java堆
简介:JVM内存模型之JAVA堆1.是什么?是Java内存区域中⼀块⽤来存放对象实例的区域,【⼏乎所有的对象实例都在这⾥分配内存】2.为什么?此内存区域的唯⼀⽬的就是存放对象实例Java 堆(Java Heap)是 Java 虚拟机所管理的内存中最⼤的⼀块 Java 堆是被所有线程共享的⼀块内存区域3.特点Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC...原创 2019-12-12 12:00:01 · 301 阅读 · 0 评论 -
JVM性能调优-Java内存区域本地⽅法栈
简介:JVM内存模型之本地⽅法栈讲解1.是什么?⽤于作⽤域本地⽅法执⾏的⼀块Java内存区域2.为什么?与Java虚拟机栈相同,每个⽅法在执⾏的同时都会创建⼀个栈帧(Stack Framel)⽤于存储局部变量表、操作数栈、动态链接、⽅法出⼝等信息。每⼀个⽅法从调⽤直⾄执⾏完成的过程,就对应着⼀个栈帧在虚拟机栈中⼊栈到出栈的过程3.特点Hotshot将Java虚拟机栈和本地⽅法...原创 2019-12-12 11:57:22 · 307 阅读 · 0 评论 -
JVM性能调优-Java内存区域JAVA虚拟机栈
简介:JVM内存模型之java虚拟机栈讲解1.是什么?⽤于作⽤于⽅法执⾏的⼀块Java内存区域2.为什么?每个⽅法在执⾏的同时都会创建⼀个栈帧(Stack Framel)⽤于存储局部变量表、操作数栈、动态链接、⽅法出⼝等信息。每⼀个⽅法从调⽤直⾄执⾏完成的过程,就对应着⼀个栈帧在虚拟机栈中⼊栈到出栈的过程3.特点局部变量表存放了编译期可知的各种基本数据类型(boolean、b...原创 2019-12-12 11:54:59 · 377 阅读 · 0 评论 -
JVM性能调优-Java内存区域程序计算器
简介:JVM内存模型之程序计算器1.是什么?程序计数器是⼀块较⼩的内存空间,它可以看作是当前线程所执⾏的字节码的⾏号指示器线程是⼀个独⽴的执⾏单元,是由CPU控制执⾏的字节码解释器⼯作时就是通过改变这个计数器的值来选取下⼀条需要执⾏的字节码指令,分⽀、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成2.为什么?为了线程切换后能恢复到正确的执⾏位置,每条线程都需要...原创 2019-12-12 11:52:43 · 386 阅读 · 0 评论