代码优化

JVM性能调优详解

。_饼干妹妹 提交于 2019-12-04 07:55:22
性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标、发现性能瓶颈、性能调优、通过监控及数据统计工具获得数据、确认是否达到目标。 何时进行JVM调优 遇到以下情况,就需要考虑进行JVM调优了: Heap内存(老年代)持续上涨达到设置的最大内存值; Full GC 次数频繁; GC 停顿时间过长(超过1秒); 应用出现OutOfMemory 等内存异常; 应用中有使用本地缓存且占用大量内存空间; 系统吞吐量与响应性能不高或下降。 JVM调优的基本原则 JVM调优是一个手段,但并不一定所有问题都可以通过JVM进行调优解决,因此,在进行JVM调优时,我们要遵循一些原则: 大多数的Java应用不需要进行JVM优化; 大多数导致GC问题的原因是代码层面的问题导致的(代码层面); 上线之前,应先考虑将机器的JVM参数设置到最优; 减少创建对象的数量(代码层面); 减少使用全局变量和大对象(代码层面); 优先架构调优和代码调优,JVM优化是不得已的手段(代码、架构层面); 分析GC情况优化代码比优化JVM参数更好(代码层面); 通过以上原则,我们发现,其实最有效的优化手段是架构和代码层面的优化,而JVM优化则是最后不得已的手段

JVM性能调优详解

余生长醉 提交于 2019-12-04 05:41:33
前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标、发现性能瓶颈、性能调优、通过监控及数据统计工具获得数据、确认是否达到目标。 何时进行JVM调优 遇到以下情况,就需要考虑进行JVM调优了: Heap内存(老年代)持续上涨达到设置的最大内存值; Full GC 次数频繁; GC 停顿时间过长(超过1秒); 应用出现OutOfMemory 等内存异常; 应用中有使用本地缓存且占用大量内存空间; 系统吞吐量与响应性能不高或下降。 JVM调优的基本原则 JVM调优是一个手段,但并不一定所有问题都可以通过JVM进行调优解决,因此,在进行JVM调优时,我们要遵循一些原则: 大多数的Java应用不需要进行JVM优化; 大多数导致GC问题的原因是代码层面的问题导致的(代码层面); 上线之前,应先考虑将机器的JVM参数设置到最优; 减少创建对象的数量(代码层面); 减少使用全局变量和大对象(代码层面); 优先架构调优和代码调优,JVM优化是不得已的手段(代码、架构层面);

JVM性能调优详解

半世苍凉 提交于 2019-12-04 05:41:28
前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标、发现性能瓶颈、性能调优、通过监控及数据统计工具获得数据、确认是否达到目标。 何时进行JVM调优 遇到以下情况,就需要考虑进行JVM调优了: Heap内存(老年代)持续上涨达到设置的最大内存值; Full GC 次数频繁; GC 停顿时间过长(超过1秒); 应用出现OutOfMemory 等内存异常; 应用中有使用本地缓存且占用大量内存空间; 系统吞吐量与响应性能不高或下降。 JVM调优的基本原则 JVM调优是一个手段,但并不一定所有问题都可以通过JVM进行调优解决,因此,在进行JVM调优时,我们要遵循一些原则: 大多数的Java应用不需要进行JVM优化; 大多数导致GC问题的原因是代码层面的问题导致的(代码层面); 上线之前,应先考虑将机器的JVM参数设置到最优; 减少创建对象的数量(代码层面); 减少使用全局变量和大对象(代码层面); 优先架构调优和代码调优,JVM优化是不得已的手段(代码、架构层面);

深度解密Go语言之 pprof

坚强是说给别人听的谎言 提交于 2019-12-04 05:29:28
目录 什么是 pprof pprof 的作用 pprof 如何使用 runtime/pprof net/http/pprof pprof 进阶 Russ Cox 实战 查找内存泄露 总结 参考资料 相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这个函数的执行效率优化到了极致。 一般我们使用二分法,或者牛顿迭代法计算一个浮点数的平方根。但在这个函数里,作者使用了一个“魔数”,根本没有迭代,两步就直接算出了平方根。令人叹为观止! 因为它是最底层的函数,而游戏里涉及到大量的这种运算,使得在运算资源极其紧张的 DOS 时代,游戏也可以流畅地运行。这就是性能优化的魅力! 工作中,当业务量比较小的时候,用的机器也少,体会不到性能优化带来的收益。而当一个业务使用了几千台机器的时候,性能优化 20%,那就能省下几百台机器,一年能省几百万。省下来的这些钱,给员工发年终奖,那得多 Happy! 一般而言,性能分析可以从三个层次来考虑:应用层、系统层、代码层。 应用层主要是梳理业务方的使用方式,让他们更合理地使用,在满足使用方需求的前提下,减少无意义的调用;系统层关注服务的架构,例如增加一层缓存;代码层则关心函数的执行效率,例如使用效率更高的开方算法等。 做任何事,都要讲究方法。在很多情况下,迅速把事情最关键的部分完成

深入Synchronized的实现原理与源码分析

Deadly 提交于 2019-12-04 04:36:59
前言 一、synchronized的特性 1.1 原子性 1.2 可见性 1.3 有序性 1.4 可重入性 二、synchronized的用法 三、synchronized锁的实现 3.1 同步方法 3.2 同步代码块 四、synchronized锁的底层实现 五、JVM对synchronized的优化 5.1 锁膨胀 5.1.1 偏向锁 5.1.2 轻量级锁 5.1.3 重量级锁 5.2 锁消除 5.3 锁粗化 5.4 自旋锁与自适应自旋锁 结语 前言 如果某一个资源被多个线程共享,为了避免因为资源抢占导致资源数据错乱,我们需要对线程进行同步,那么synchronized就是实现线程同步的关键字,可以说在并发控制中是必不可少的部分,今天就来看一下synchronized的使用和底层原理。 一、synchronized的特性 1.1 原子性 所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。 在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。但是像i++、i+=1等操作字符就不是原子性的,它们是分成 读取、计算、赋值 几步操作,原值在这些步骤还没完成时就可能已经被赋值了,那么最后赋值写入的数据就是脏数据,无法保证原子性。

20191107-5 beta week 2/2 Scrum立会报告+燃尽图 04

半世苍凉 提交于 2019-12-04 04:30:28
此作业要求参见 https://edu.cnblogs.com/campus/nenu/2019fall/homework/9957 小组名称:“组长”组 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,梅小雨 本次 Master:梅小雨 一:Scrum立会 要求1:工作照片 要求2:时间跨度,精确到分钟,从何时开始至何时结束 11月10日 15:49开始至16:20结束,共31分钟 要求3:地点 信息科学与技术学院 要求4:立会 内容 昨天的成绩:完成对数据库信息更新。 今日计划:制定代码规范,各自优化代码。 目前困难:各个模块如何继续优化以提高用户感受。 要求5:todo list 二:燃尽图 leangoo看板链接: https://www.leangoo.com/kanban/board/go/3087061# 三:版本控制 来源: https://www.cnblogs.com/yty0517/p/11831294.html

编译-O 选项对性能提升作用

坚强是说给别人听的谎言 提交于 2019-12-04 03:22:13
编译-O 选项对性能提升作用 https://www.cnblogs.com/pigerhan/p/3526889.html GCC -O 选项 这个选项控制所有的优化等级。使用优化选项会使编译过程耗费更多的时间,并且占用更多的内存,尤其是在提高优化等级的时候。 -O设置一共有五种:-O0、-O1、-O2、-O3和-Os。 让我们来逐一考察各个优化等级: -O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。 -O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。 -O2:-O1的进阶。这是 推荐的 优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。 -O3:这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且 在使用gcc4.x的系统里不应全局启用 。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包 将 产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为

扛把子组20191107-4 beta week 2/2 Scrum立会报告+燃尽图 03

五迷三道 提交于 2019-12-04 02:25:10
此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9956 一、小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 刘信鹏 二、Scrum例会 时间:2019年11月9日 本次Scrum Master:宋晓丽 要求1 工作照片 要求2 时间跨度 2019.11.8 13:01-13:27 总计 26分钟 要求3 地点 信科学院一楼展板旁 要求4 例会内容包括 (1)昨天的任务 1.讨论小程序能够优化的点 2.分解代码解读任务 (2)今天的任务 1.对日志的增加修改功能进行改进,使其更便捷化 2.制定代码规范 3.各自研读代码,进一步优化 (3)目前的困难 今日无困难 要求5 todo list 要求6 人工制品中间产物 项目地址: https://e.coding.net/PSP_help/PSPHelper.git Leangoo看板地址:https://www.leangoo.com/kanban/board/go/3085150# 燃尽图 版本控制 来源: https://www.cnblogs.com/kangbazizu/p/11828445.html

MyEclipse的优化与快捷键的设置

三世轮回 提交于 2019-12-03 20:59:09
Ladies and gentlemen , 不知道各位有没有和本人一样痛苦的经历: myeclipse 让人无语 + 崩溃的反应速度。甚至严重的时候,点开一个 jsp 或按下 Ctrl+S 保存的时间,我都可以趴桌子上睡一会了,绝对绝对没夸张。后来,问了几个同学,大家都没什么太治本的解决办法,大都建议让我把 myeclipse 卸载重安装,我照做了,感觉比之前稍微好些,但还是达不到人类可以接受的速度。于是乎,本着靠人不如靠己的想法,本姑娘决定彻底 optimize 一下将还要陪伴我良久的亲爱的 myeclipse 。 本文总结的有些是在 google 上搜的,有些是自己总结的,有些是翻资料查的,有些是我们课堂上学过的,有些是自己瞎琢磨的,不过都是本人一个一个进行来的,基本大概应该没有错误,不过也不能把话说死。从凌晨 4 点左右敲到早上7点,自己做个总结,分享一下,同时也希望能够让 myeclipse code 时像我之前一样反应不够理想的同学尽快用的 high 起来! 一、MyEclipse的优化 1、打开 myeclipse安装目录下的meclipse.ini配置文件 -vmargs -Xmx512m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=64m -Dgenuitec.honorDevMode=true -Dosgi

KeyMob:努力帮助应用开发者最大化移动广告收益

若如初见. 提交于 2019-12-03 20:48:36
KeyMob移动广告聚合 是一个帮助 移动 应用开发者集合众多优秀广告平台的 管理 工具。通过它,你将可以 实现应用交叉推广 、 定向推广 等等,从而实现你广告收 入 的最大化。它还能帮助你 自主销售广告 ,并和其他的广告平台 可以随意切换 ,这样就能为你时刻投放最高价的广告。 KeyMob 目前支持的广告平台有: 百度 广告、 admob 广告、 iad 、 广点通 、 mmedia、inmobi 、 chartboost 。我们会不断添加更多优秀的广告平台,为你提供更多更好的选择。目前支持 Android 、 IOS 等 其他 开发 平台将会陆续上线。 KeyMob 源自开发者并且完全免费,未来 KeyMob 希望更多的从广告优化及数据服务本身寻求盈利模式。 在 KeyMob 内测阶段就选用了 KeyMob 移动广告的团队认为,在国内目前的状况下, KeyMob 是一个很 优秀 的广告平台,因为只需要在应用中加入其代码就可以同时管理来自多个广告平台的广告。 来源: oschina 链接: https://my.oschina.net/u/2651747/blog/632661