2014-09-25 Created By BaoXinjian…
1. 背景 假设有如下SQL语句: SELECT * FROM table1 LIMIT offset, rows 这是一条典型的LIMIT语句,常见的使用场景是,某些查询返回的内容特别多,而客户端处理能力有限,希望每次只取一部分结果进行处理. 上述SQL语句的实现机制是: 从"table"表中读取offset+rows行记录 抛弃前面的offset行记录,返回后面的rows行记录作为最终结果. 这种实现机制存在一个弊端:虽然只需要返回rows行记录,但却必须先访问offset行不会用…
本篇是优化系列的第一篇:数据类型 为了不产生赘述,尽量用简洁的语言来描述. 在选择数据类型之前,首先要知道几个原则: 更小的通常更好 尽量使用可以正确存储数据的最小数据类型.更小的数据类型意味着更快,占用更少的磁盘,内存以及缓存,以及处理时间 简单就好 这是出于操作数据类型的效率和代价考虑.整型比字符型操作代价更低,因为字符集和校对规则是字符处理比整型更复杂 两个例子:使用Mysql内建的datatime而不是字符串存储时间,使用整型而不是IP字符串存IP地址 尽量避免NULL 这是个很烦人的值…
电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情,随着Android开的性能要求越来越高,电量的优化,也显得格外重要,一个耗电的应用,用户肯定会毫不犹豫的进行卸载,所以本篇博客,我们一起来学习Android性能优化之电量优化. 耗电是如何产生的? 耗电情况,例如:打开屏幕,所有要使用CPU/GPU工作的动作都会唤醒屏幕,都会消耗电量.这和应用程序唤醒设备还不一样. (1)唤醒屏幕 当用户电量屏幕的时候,意味着系统的各组件要开始进行工作,界面也需要开始执行渲染.…
本文内容:adapter,listview的优化,RecycleBi,google大会推荐优化, 实现ListView的过程,Adapter起到了至关重要的作用,不仅仅因为getview()方法.那么,先从Adapter说起~ Adapter: 它在ListView和数据源之间起到桥梁的作用,避免listview和数据源直接接触,而导致因为数据源的复杂性使listview显得臃肿. Adapter,适配器,把复杂的数据源适配给listview,很容易联想到适配器模式.   下面是几种常用的Ada…
尽量运行在Sun/Oracle JDK1.7以上环境中,低版本的jdk容易出现莫名的bug,ES性能体现在在分布式计算中,一个节点是不足以测试出其性能,一个生产系统至少在三个节点以上. ES集群节点规划良好,master.node.client分离开来,data节点关闭http功能. 合理利用内存. a) JVM内存设置不要超过机器的一半内存,并且不超过32G.(./bin/elasticsearch -Xmx10g -Xms10g或者修改./bin/elasticsearch.in.sh文件:…
Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难.随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了.现代JVM持续演进,内建了更为成熟的优化技术.运行时技术和垃圾收集器.与此同时,底层的硬件平台和操作系统也在演化. 目录: 一.Java性能优化系列之一--设计优化 二.Java性能优化系列之二--程序优化 三.Java性能优化系列之三--并发程序设计详解 四.Java性能优化系列之四--Java内存管理与垃圾回收…
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据实际情况考虑. 2. 一个场景 我们有A.B两张表,需要做这样的一个查询: SELECT a1, a2, (SELECT b1, b2 FROM B WHERE B.b3 = A.a1) FROM A WHERE A.a3 = ? 当然,我们也可以拆分成两次查询: SELECT a1, a2 FRO…
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语句: SELECT name FROM tb_user WHERE age = 20; 默认情况下,MySQL需要遍历整张表,才能找到符合条件的记录.如果在age字段上建立索引,那么MySQL可以很快找到所有符合条件的记录(索引本身通过B+树实现,查起来很快.简单起见,想象一下二分查找和遍历查找的区…
Android性能优化系列之布局优化 Android性能优化系列之内存优化 Android性能优化系列之apk瘦身 应用的启动速度缓慢是我们在开发过程中常常会遇到的问题,比方启动缓慢导致的黑屏.白屏问题,本篇博客就将介绍App启动优化的相关知识. 应用的启动方式 通常来说,启动方式分为两种:冷启动和热启动. 1.冷启动:当启动应用时.后台没有该应用的进程.这时系统会又一次创建一个新的进程分配给该应用.这个启动方式就是冷启动. 冷启动由于系统会又一次创建一个新的进程分配给它.所以会先创建和初始化A…
Android性能优化系列之布局优化 Android性能优化系列之内存优化 为什么APK要瘦身.APK越大,在下载安装过程中.他们耗费的流量会越多,安装等待时间也会越长:对于产品本身,意味着下载转化率会越低(由于竞品中.用户有很多其它机会选择那个体验最好.功能最多,性能最好,包最小的),所以apk的瘦身优化也非常重要.本篇博客将讲述apk瘦身的相关内容. 包体分析 在Android Studio工具栏里,打开build–>Analyze APK, 选择要分析的APK包 watermark/2/t…
2014-10-04 Created By BaoXinjian 一.摘要 PLSQL_性能优化系列14_Oracle High Water Level高水位分析 高水位线好比水库中储水的水位线,用于描述数据库中段的扩展方式.高水位线对全表扫描方式有着至关重要的影响. 当使用delete 操作表记录时,高水位线并不会下降,随之导致的是全表扫描的实际开销并没有任何减少. 本文给出高水位线的描述,如何降低高水位线,以及高水位线对全表扫描的影响. 1. 何谓高水位线 如前所述,类似于水库中储水的水位线…
占位符 PLSQL_性能优化工具系列_Best Practices: Proactively Avoiding Database/Query Performance Issue…
2014-09-24 Created By BaoXinjian…
2. 垃圾收集器与内存分配策略 垃圾收集(Garbage Collection, GC)是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Scala等)程序员在提升开发效率上获得了惊人的便利.理解GC,对于理解JVM和Java语言有着非常重要的作用.并且当我们需要排查各种内存溢出.内存泄漏问题时,当垃圾收集称为系统达到更高并发量的瓶颈时,只有深入理解GC和内存分配,才能对这些"自动化"的技术实施必要的监控和调节. GC主要需…
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Server DBA或者T-SQL开发人员能够主动地识别潜在的SQL性能问题,通过扫描和分析SQL语句进行人工智能自动SQL优化.Dell SQL Optimizer通过尝试每一种可能来激发数据库内部SQL优化器的潜能,从而达到性能优化的目的,这是数据库内部SQL优化器不能做到的.下面介绍一下这个工具的一些主…
从全局出发优化索引 对于高负载的数据库,如何创建最少的索引,让数据库的整体性能提高呢?例如,对于100 条SQL语句,如何创建最佳的5条索引? SQL自动优化工具SQL Tuning Expert Pro for Oracle 下载: https://www.tosska.cn/tosska-sql-tuning-expert-pro-tse-pro-for-oracle-download-free-trial-zh/ 产品介绍: https://www.tosska.cn/tosska-sql…
1. Java内存区域 1.1 运行时数据区 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.主要包括:程序计数器.虚拟机栈.本地方法栈.Java堆.方法区(运 行时常量池).直接内存. 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.在虚拟机概念模型中,字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令,分支.循环.跳转.异常处理.线程恢复等…
3. 虚拟机执行子系统 3.1 Java跨平台的基础 Java刚诞生的宣传口号:一次编写,到处运行(Write Once, Run Anywhere),其中字节码是构成平台无关的基石,也是语言无关性的基础. Java虚拟机不和包括Java在内的任何语言绑定,它只与Class文件这种特定的二进制文件格式所关联,这使得任何语言的都可以使用特定的编译器将其源码编译成Class文件,从而在虚拟机上运行. 3.2 Class类的文件结构 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说…
4. 编写高效Java程序 4.1 面向对象 构造器参数太多怎么办? 正常情况下,如果构造器参数过多,可能会考虑重写多个不同参数的构造函数,如下面的例子所示: public class FoodNormal { //required private final String foodName;//名称 private final int reilang;//热量 //optional private final int danbz;//蛋白质 private final int dianfen;…
5. 早期编译优化 早起编译优化主要指编译期进行的优化. java的编译期可能指的以下三种: 前端编译器:将.java文件变成.class文件,例如Sun的Javac.Eclipse JDT中的增量式编译器(ECJ) JIT编译器(Just In Time Compiler):将字节码变成机器码,例如HotSpot VM的C1.C2编译器 AOT编译器(Ahead Of Time Compiler):直接把*.java文件编译成本地机器码,例如GNU Compiler for the Java(…
6. 晚期编译优化 晚期编译优化主要是在运行时做的一些优化手段. 6.1 JIT编译器 在部分的商用虚拟机中,java程序最初是通过解释器(Interpreter) 进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为"热点代码"(Hot Spot Code).为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个过程的编译器称为即时编译器(Just In Time Compiler) jav…
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/improving-layouts/optimizing-layout.html 在接下来的一段时间里.我会每天翻译一部分关于性能提升的Android官方文档给大家 性能优化之布局篇: [Android 性能优化系列]布…
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/articles/memory.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 以下是本次的正文: ################ 随机訪问存储器(Ram) 无论在哪种软件…
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 原文地址:http://developer.android.com/training/articles/memory.html 在接下来的一段时间里,我会每天翻译一部分关于性能提升的Android官方文档给大家 建议大家在看本文之前先去我的博客看看 [Android 性能优化系列]内存之基础篇--Andr…
图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降低了OOM发生的概率.然而,在图片加载方面我们是否可以就此放松警惕了呢? 开源图片加载库能为我们解决绝大部分有关图片的问题,然而并不是所有! 首先,图片从来源上可以分成三大类:网络图片.手机图片.APK资源图片.网络图片和手机图片都在图片加载库功能的覆盖范围内,基本上不用开发者太操心,但是APK资源…
pytorch1.0进行Optimizer 优化器对比 import torch import torch.utils.data as Data # Torch 中提供了一种帮助整理数据结构的工具, 叫做 DataLoader, 能用它来包装自己的数据, 进行批训练. import torch.nn.functional as F # 包含激励函数 import matplotlib.pyplot as plt LR = 0.01 # 学习率 BATCH_SIZE = 32 EPOCH = 12…
MySQL 性能优化系列之一 单表预处理 背景介绍 我们经常在写多表关联的SQL时,会想到 left jion(左关联),right jion(右关联),inner jion(内关联)等. 但是,当表中数据量过大时,如果没有写好查询条件或者查询条件书写的先后顺序不同,可能会有明显的性能差别. 近期,有个同事遇到一个SQL查询比较慢的问题:tableA,tableB,tableC三张表联合查询的SQL,查询用时将近50s. 原因分析 1.分别确认3张表的数据量 tableA:3千万+ 条记录: t…
前言 这是优化系列的最后一篇的第1小篇,我们其实可以直接从sql怎么写讲起,why not?但是我还是决定花2个篇幅 问一些问题,带着几个问题循序渐进的往下走. 一个sql语句是怎么被执行的? sql中关键字的执行顺序是怎样的? 什么是扫描? 为什么查询会慢? 什么是慢查询? 第一个问题:sql是怎么被执行的? 下图用的网上的一张流程图,省略了建立连接的过程.比较重要的几步:查询缓存,语法检查,语义检查,查询优化器,执行计划 其中查询缓存大家应该都见过,一条耗时较长的sql,过一会儿再查询的话几…
目前性能优化专题已完成以下部分: 性能优化总纲——性能问题及性能调优方式 性能优化第四篇——移动网络优化 性能优化第三篇——Java(Android)代码优化 性能优化第二篇——布局优化 性能优化第一篇——数据库性能优化 性能优化实例 后续计划性能优化——诊断及工具(目前只有关于TraceView的介绍).性能优化——内存篇.性能优化——JNI篇,性能优化——电量篇. 2.何为性能问题 在性能测试中存在两个概念: (1). 响应时间 指从用户操作开始到系统给用户以正确反馈的时间.一般包括逻辑处理…