
性能优化
cailyn_
一学就废的程序媛
展开
-
21.java堆的分析案例
java堆的分析案例01. tomcat堆溢出案例02. ArgoUML dump文件分析01. tomcat堆溢出案例02. ArgoUML dump文件分析原创 2021-05-10 14:53:35 · 83 阅读 · 0 评论 -
20.认识java堆文件
认识java堆文件01. 什么是堆dump02. 如何进行堆dump03. 使用MAT打开dump04. 浅堆和深堆05. 支配树(Dominator Tree)01. 什么是堆dump堆是java程序的主要内存区间,堆dump(转存)就是指将整个java堆的内容全部导出到文件,便于后续分析Dump文件大小和被使用堆大小大体相当通常使用MAT分析堆文件分析堆文件的机器内存推荐为堆文件大小的2倍02. 如何进行堆dump03. 使用MAT打开dump04. 浅堆和深堆05. 支配树原创 2021-04-30 14:23:51 · 395 阅读 · 0 评论 -
19.JMC介绍
JMC介绍01. JMC的介绍02. 得到JFR文件03. 总体概览04. CPU分析05. 内存分析06. IO分析01. JMC的介绍02. 得到JFR文件03. 总体概览04. CPU分析05. 内存分析06. IO分析原创 2021-04-30 14:15:44 · 1275 阅读 · 0 评论 -
18.jdk自带命令行工具
jdk自带命令行工具01. jps02. jstat03. jinfo04. jmap05. jstack06. jcmd01. jps对java进程进行罗列02. jstat03. jinfo04. jmap05. jstack06. jcmd原创 2021-04-30 14:10:44 · 101 阅读 · 0 评论 -
17.使用第三方程序窥视系统性能指标
使用第三方程序窥视系统性能指标01. Linux top02. Linux vmstat03. Linux iostat04. Linux pidstat05. Windows 任务管理器06. Windows Process Explorer01. Linux top02. Linux vmstat03. Linux iostat04. Linux pidstat05. Windows 任务管理器06. Windows Process Explorer...原创 2021-04-30 10:33:22 · 80 阅读 · 0 评论 -
16.总结一些必须知道的jvm参数
总结一些必须知道的jvm参数01. 内存管理相关02. 并行回收器相关03. CMS相关04. G1相关05. 打印系统信息相关01. 内存管理相关02. 并行回收器相关03. CMS相关04. G1相关05. 打印系统信息相关原创 2021-04-30 10:20:44 · 83 阅读 · 0 评论 -
15.认识JIT
认识JIT01. 什么是JIT02. 开启JIT03. JIT编译阈值04. OSR栈上替换05. 方法内联06. 设置代码缓存大小01. 什么是JIT即时编译:JIT(just-in-time)编译器运行时动态编译代码相对于解释执行速度快02. 开启JIT03. JIT编译阈值JIT使用混合模式运行(指定参数为-Xmixed),在混合模式时,只会对热点代码进行即时编译。对于是否为热点代码,虚拟机内有一个阈值进行判断,当函数调用次数超过这个阈值时,就被认为是热点代码,进行即时编译。原创 2021-04-30 10:10:15 · 116 阅读 · 0 评论 -
14.理解线程栈
理解线程栈01. 什么是栈02. 在java中设置java线程栈大小03. 栈帧的组成1、局部变量表:2、操作数栈3、帧数据区01. 什么是栈java栈是一块线程私有的内存空间如果说java堆和程序数据密切相关,那么java栈就是和线程执行密切相关的。线程执行的基本行为是函数调用,每次函数调用的数据都是通过java栈传递的02. 在java中设置java线程栈大小-Xss:设置线程栈大小大,则系统能支持的线程总数较小小,则系统容易发生栈溢出03. 栈帧的组成1、局部变量原创 2021-04-29 19:13:19 · 533 阅读 · 0 评论 -
13.理解G1
理解G101. G1的特点02. G1的内存划分03. G1的主要收集过程04. G1的新生代收集05. G1的并发标记06. G1的混合回收07. 启动G1的参数01. G1的特点JDK1.7引入并行性:G1在回收期间,可以有多个GC线程同时工作,有效利用多核计算能力并发性:G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时进行,因此一般来说,不会在整个回收期间完全阻塞应用程序分代GC:G1依然是一个分代收集器,但是和之前回收器不同,它同时兼顾年轻代和老年代。对比原创 2021-04-29 18:47:57 · 274 阅读 · 0 评论 -
12.理解CMS
理解CMS01. 标记清除法(mark-sweep)02. CMS主要工作步骤03. CMS主要设置参数04. CMS日志分析01. 标记清除法(mark-sweep)标记清除法是现代垃圾回收算法的思想基础。标记清除法将垃圾回收分为两个阶段:标记阶段和清除阶段。一种可行的实现是,在标记阶段,首先通过根节点,标记所有从根节点开始的可达对象。因此未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象标记清除法可能产生的最大问题是空间碎片02. CMS主要工作步骤CM原创 2021-04-29 17:30:17 · 76 阅读 · 0 评论 -
11.串行回收器与并行回收器
串行回收器与并行回收器01. 分代算法(Generational Collecting)02. 标记压缩法(Mark-compact)03. 复制算法(Copying)04. 使用串行回收器05. 使用并行回收器01. 分代算法(Generational Collecting)分代的思想被现有虚拟机广泛使用,几乎所有的垃圾回收器都区分新生代和老年代02. 标记压缩法(Mark-compact)从根节点出发识别所有的存活对象移动将存活对象整理好清除边界外的空间03. 复制算法(Co原创 2021-04-29 17:02:43 · 202 阅读 · 0 评论 -
10.理解垃圾回收GC
理解垃圾回收GC01. 什么是垃圾回收02. 垃圾回收的目标03. 垃圾回收带来的问题01. 什么是垃圾回收Garbage Collection (GC)垃圾回收不是虚拟机独创的,早在20世纪60年代,垃圾回收就已经被Lisp语言使用。现在,除了java以外,c#,Python等语言都使用了垃圾回收的思想02. 垃圾回收的目标堆:垃圾回收的主要工作空间方法区:Class不存在实例ClassLoader被回收栈:与垃圾回收无关03. 垃圾回收带来的问题垃原创 2021-04-29 16:07:00 · 128 阅读 · 0 评论 -
9.JVM内存结构
JVM内存结构01. jvm的总体内存02. 堆的一般结构03. 通过一个例子说明堆,方法区,栈的关联01. jvm的总体内存方法区:类定义区java堆:java工作的主要内存区间,也是最大的内存区间直接内存:直接内存的申请没有堆快,直接内存的访问要快于java堆,适用于对象池的存储垃圾回收系统:可以同时对方法区、堆、直接内存的垃圾数据进行清理。垃圾回收系统的主要工作空间是java堆,其本身的内存区间也很大,也是非常耗内存,非常耗资源的栈:栈内的对象不会被垃圾回收系统回收,栈内的对象被调用完原创 2021-04-29 15:26:26 · 201 阅读 · 0 评论 -
8.java中的一些编程技巧
java中的一些编程技巧01. 优先使用局部变量02. 位运算代替算数运算03. 数组代替switch04. 一维数组代替二维数组05. 提取表达式06. 展开循环07. 布尔运算代替位运算08. 使用arratCopy进行数组复制01. 优先使用局部变量调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(heap)中创建,速度较慢LocalvarBench02. 位运算代替算数运算位运算是最为高效的。因此,可以尝试使原创 2021-04-29 14:55:31 · 226 阅读 · 0 评论 -
7.强引用和弱引用
强引用和弱引用01. 强引用02. 软引用03. 弱引用01. 强引用02. 软引用软引用是除了强引用外,最强的引用类型。可以通过java.lang.ref.SoftReference使用软引用。一个持有软引用的对象,不会被jvm很快回收,jvm根据当前堆的使用情况来判断何时回收。当堆使用率临近阈值时,才回去回收软引用的对象。只要有足够多的内存,软引用可能在内存中存活相当长的一段时间因此,软引用可以用于对内存敏感的Cache。03. 弱引用弱引用是一种比软引用更弱的引用类型。在系统G原创 2021-04-29 11:42:18 · 109 阅读 · 0 评论 -
6.使用NIO加速程序
使用NIO加速程序01. Buffer类族和Channel02. Buffer的基本原理与操作03. MappedByteBuffer性能评估04. 直接内存的使用01. Buffer类族和Channel传统是基于流的(IO),NIO基于块的(buffer);实例02. Buffer的基本原理与操作创建和重置buffer的方式读写缓冲区03. MappedByteBuffer性能评估04. 直接内存的使用...原创 2021-04-29 11:18:00 · 89 阅读 · 0 评论 -
5.Java中Map的使用
Java中Map的使用01. java中主要的Map实现02. HashMap03. LinkedHashMap04. TreeMap01. java中主要的Map实现02. HashMapHashMap就是将key作为hash算法,然后将hash值映射到内存地址,直接取得key所对应的数据为保证性能,hash算法必须是高效的hash冲突的处理查找复杂度为常量03. LinkedHashMap04. TreeMap...原创 2021-04-29 10:32:06 · 96 阅读 · 0 评论 -
4.java中List的使用
java中List的使用01. java中主要的List实现02. Vector/ArrayList03. LinckedList01. java中主要的List实现02. Vector/ArrayList算法类似,都是数据Vector的所有方法都是同步的ArrayList不是线程安全的如果可以,务必初始化容量随机插入/删除,尤其是插入到头部非常慢很快的随机访问03. LinckedList双向链表需要更多的内存不需要预估容量随机插入删除相对较快随机访问较慢...原创 2021-04-28 18:12:03 · 94 阅读 · 0 评论 -
3.Java中String使用的注意事项
Java中String使用的注意事项01.不可变的String02.使用StringBuffer/StringBuilder03.压缩字符串04.JDK6之前的内存泄漏01.不可变的String不变性是指String对象一旦生成,则不能对其进行改变。String的这个特性可以泛化为不变(immutable)模式,即一个对象的状态在对象被创建之后就不在发生变化。不变模式的主要作用在于当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和锁等待的时间,从而大幅度提高系统性能。02.使用StringB原创 2021-04-28 17:52:59 · 245 阅读 · 0 评论 -
2.常用优化组件和方法
常用优化组件和方法一、缓冲Buff1.1JMH1.2 缓冲Buffer(写)二、 缓存Cache(读)三、对象池一、缓冲Buff缓冲区是一块特定的内存区域。开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统的性能。1.1JMH多线程应用场景如Log4j异步操作,不会因为io问题造成拥堵,增大吞吐量1.2 缓冲Buffer(写)NoBufferMovingCircle:作图时,直接在显示面板上绘画,一边作画,一边显示BufferMovingCircle:作图时,先在缓冲原创 2021-04-28 17:23:22 · 320 阅读 · 0 评论 -
1.程序性能的概述
程序性能的概述一、性能的主要衡量标准:1.1 内存1.2 CPU占有率1.3 吞吐量1.4 延时二、性能的优化方法2.1 业务流程优化2.2 数据结构的优化2.3 算法优化一、性能的主要衡量标准:内存CPU占有率吞吐量延时1.1 内存代码段(静态数据)堆栈动态链接库共享内存1.2 CPU占有率1.3 吞吐量1.4 延时吞吐量:每秒钟能处理多少任务延时:每个任务需要多少时间吞吐量高延时一定短吗?答:吞吐量和延时并没有直接的关系,举例:负载均衡后吞吐量增加,延时不原创 2021-04-28 11:26:16 · 407 阅读 · 0 评论