Mysql优化算法
1尽量让字段not nullsql
2选择正确的存储引擎,myisam是表锁 写,innodb是行锁,查数据库
3为每张表设置一个id做为其主键。这个id最好是一个int类型的缓存
4当只须要一条数据时使用LIMIT 1.咱们做为开发者,是可以知道咱们须要的数据的条数的,若已经知道结果只有一条的时候,必定要使用limit 1 ,这样一来,MySQL在查询到一条数据以后,会当即中止搜索,这会带来性能上的提高服务器
5使用缓存。缓存是解决这类问题的一把手。它既能够加快整个系统(并不是数据库系统,使用缓存的时候并无去访问数据库)的访问速度,也能够减小数据库负载的压力并发
6为搜索字段建索引工具
7垂直分割,把数据库中的表按列变成几张表的方法,这样能够下降表的复杂度和字段的数目,从而达到优化的目的性能
JVM调优优化
1使用调优工具线程
2查看堆信息
有了堆信息查看方面的功能,咱们通常能够顺利解决如下问题:
--年老代年轻代大小划分是否合理
--内存泄漏
--垃圾回收算法设置是否合理
3线程监控
死锁检查
4查看热点
CPU热点:检查系统哪些方法占用的大量CPU时间
内存热点:检查哪些对象在系统中数量最大(必定时间内存活对象和销毁对象一块儿统计)
5使用快照对比,迅速发现问题
这两个东西对于系统优化颇有帮助。咱们能够根据找到的热点,有针对性的进行系统的瓶颈查找和进行系统优化,而不是漫无目的的进行全部代码的优化。
1按系统线程选好收集器的算法
串行处理器:
-- 适用状况:数据量比较小(100M左右),单处理器下而且对相应时间无要求的应用。
-- 缺点:只能用于小型应用。
并行处理器:
-- 适用状况:“对吞吐量有高要求”,多CPU,对应用过响应时间无要求的中、大型应用。举例:后台处理、科学计算。
-- 缺点:垃圾收集过程当中应用响应时间可能加长。
并发处理器:
-- 适用状况:“对响应时间有高要求”,多CPU,对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。
2堆大小设置
年轻带和老年代大小
什么状况下触发垃圾回收
因为对象进行了分代处理,所以垃圾回收区域、时间也不同。GC有两种类型:Scavenge GC 和 Full GC
Scavenge GC
通常状况下,当新对象生成,而且在Eden申请空间失败时,就会触发Scavenge GC,对Eden区域进行GC,清除非存活对象,而且把尚且存活的对象移动到Survivor区。而后整理Survivor的两个区。这种方式的GC是对年轻代的Eden区进行,不会影响到年老代。由于大部分对象都是从Eden区开始的,同时Eden区不会分配的很大,因此Eden区的GC会频繁进行。于是,通常在这里须要使用速度快、效率高的算法,使Eden区能尽快空闲出来。
Full GC
对整个堆进行整理,包括Young、Tenured 和 Perm。Full GC 由于须要对整个堆进行回收,因此比 Scavenge GC 要慢,所以应该尽量减小 Full GC 的次数。在对JVM调优的过程当中,很大一部分工做就是对于 Full GC 的调节。
有以下缘由可能致使Full GC:
. 年老代(Tenured)被写满
. 持久代(Perm)被写满
. System.gc()被显式调用
. 上一次GC以后Heap的各域分配策略动态变化