代码优化

一,多线程

  从资源利用的角度看,使用多线程的原因主要有两个:IO阻塞与多CPU。当前线程进行IO处理的时候,会被阻塞释放CPU以等待IO操作完成,由于IO操作(不管是磁盘IO还是网络IO)通常都需要较长的时间,这时CPU可以调度其他的线程进行处理。理想的系统Load是既没有进程(线程)等待也没有CPU空闲,利用多线程IO阻塞与执行交替进行,可最大限度利用CPU资源。使用多线程的另一个原因是服务器有多个CPU,要想最大限度地使用这些CPU,必须启动多线程。

  启动线程数=【任务执行时间 / (任务执行时间 - IO等待时间)】 * CPU内核数

  即:如果任务是CPU计算型任务,那么线程数最多不超过CPU内核数;如果任务需要等待磁盘操作,网络响应,那么多启动的线程有助于提高任务并发度,提高系统吞吐能力,改善系统性能;

  解决线程安全的主要手段主要有以下几点:

  1,将对象设为无状态(虽然从面向对象的角度,这是一种不良设计);

2,使用局部对象;

  3,并发访问资源时使用锁;

二,资源复用

  系统运行时,要尽量减少那些开销很大的系统资源的创建和锁毁,比如数据库连接,网络通信连接,线程,复杂对象等。从编程角度,资源复用主要有两种模式:单例和对象池;对于每个WEB请求,WEB应用服务器都需要创建一个独立的线程去处理,这方面,应用服务器也采用线程池的方式。这些所谓的连接池,线程池,本质上都是对象池,即连接,线程都是对象,池管理的方式也基本相同;

三,数据结构

  字符串散列算法Time33:

hash(i) = hash(i - 1) * 33 + str[i]

Time33虽然可以较好地解决冲突,但有可能相似字符串的HashCode也比较接近,这种情况下,一个可行的方案是对字符串取信息指纹,再对信息指纹求HashCode,由于字符串微小的变化就可以引起信息指纹(MD5)的巨大不同,因此可以获得较好的随机散列。

四,垃圾回收

     理解垃圾回收机制有助于优化和参数调优,以及编写内存安全的代码。

以JVM为例,其内存主要可划分为堆(heap)和堆栈(stack)。堆栈用于存储线程上下文信息,如方法参数,局部变量靠等。堆则是存储对象的内存空间,对象的创建和释放,垃圾回收就在这里进行。

   在JVM分代垃圾回收机制中,将应用程序可用的堆空间分为年轻代(Young Generation) 和年老代(old Generation),又将年轻代分为Eden区(Eden Space),From区和To区,新建对象总是在Eden区中被创建,当Eden区空间已满,就触发一次YoungGC,将还被使用的对象复制对From区,这样整个Eden区都是未被使用的空间,可供继续使用,当Eden区再次用完,再触发一次Young GC,将Eden区和From区还在被使用的对象复制到To区,下一次Young GC则是将Eden区和To区还被使用的对象复制到From区。因此经过多次Young GC,某些对象会在From区和To区多次复制,如果超过某个阈值对象还未被释放,则将该对象复制到Old Generation。如果Old Generation空间也用完,那么就会触发Full GC,即所谓的全量回收,全量回收会对系统性能产生较大影响,因此应该根据系统业务特点和对象生命周期合理设置Young Generation 和 Old Generation 的大小,尽量减少Full GC。事实上,某些WEB应用在整个运行期间可以做到从不进行Full GC。

时间: 2024-08-27 18:19:26

代码优化的相关文章

代码优化(长期更新)

前言 代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的. 代码优化的目标是:

代码优化:学学Java看看Android

由于考试的原因,好长时间都没能来写博文了(什么时候出的CSDN-markdown编辑器),今天就代码优化方面来写一篇博文,主要是讲Java. 优秀代码具备的品质: 1.简练 2.可读性强 3.模块化 4.层次性 5.设计良好 花些时间设计你的程序,因为思考的代价要小于调试. 6.高效 7.清晰 清晰是优秀代码的基本. 常见的编程规范: 1.基本要求 *程序结构清晰,简单易懂,单个函数的程序行数最好不超过100行. *尽量使用标准的函数和公共函数. *不要随意的定义全局变量,尽量使用局部变量. *

鑫鹏SEO告诉你网站代码优化H1、H2、H3标签的作用

网站优化不仅仅是包括:网站的标题,关键词,描述的优化:首页布局.网站导航,网站底部,头部,幻灯片,第一屏的内容布局优化,其实还包括代码优化,网站速度的优化,文章的优化,栏目.页面的优化,URL优化等等.今天鑫鹏SEO为大家讲解在代码优化里面最重要的优化是网站标签的优化,通常标签包括网站的H1.H2.H3,其实很多新手SEO并不知道这些标签有什么作用,究竟怎么设置. 一.网站代码优化H1.H2.H3标签的需要程序员写好程序的调用 说到代码的优化,肯定是少不了程序员的配合,所以在做网站的时候,在做网

PHP代码优化技巧大盘点

原文:PHP代码优化技巧大盘点 PHP优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码.本文给大家提供全面的优化技巧. 1.echo比print快. 2.使用echo的多重参数代替字符串连接. 3.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替. 4.对global变量,应该用完就unset()掉. 5.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会. 6.函数代替正则表达式完成相

【代码优化】for-each代替普通的for循环或者while循环

对于集合的遍历首选方法是for-each for(Element e :c){ doSomething(e): } 这是1.5版本之后的做法:java1.5之前使用的是Iterator迭代器. 为了弄清楚为啥比普通的for循环或者whlie循环好,请看一下代码 Iterator<Element> i=c.iterator(); while(i.hasNext()){ doSomething(i.next()); } Iterator<Element> i2=c.iterator()

【代码优化】坚持使用Override注解

对于传统程序员,注解里面最重要的就是Override注解了.这里的注解,都是指只能用在方法中的声明, 她表示被注解的方法用于覆盖了父类的一个声明,如果坚持使用这个注解,可以防止一大类的非法错误. <span style="font-size:14px;">public class Bigram{ private final char first: private final char second: public Bigram (char first ,char secon

【代码优化】equals深入理解

覆盖equals时,遵守通用约定 对equal方法的覆盖看起来很简单,但是有许多情况是容易导致错误,最好的避免这些错误的办法 就是不覆盖equals方法. 必须遵循的原则: 自反性--对于任何非空的引用 x,有x.equals(x) 为true: 对称性--对于任何非空的引用x,y,如果x.equals(y) 为true,则必有y.equals(x) 为true: 传递性--对于任何非空的引用x,y,z,如果x.equals(y) 为true且y.equals(z) 为true, 则必有x.eq

【代码优化】私有构造器使用及对象创建优化

1.使用私有构造器或者枚举类型强化singleton 1>单例模式---私有构造器,提供一个公有的成员是一个静态工厂方法: public class SingleTon{ private static final  SingleTon single=new SingleTon(): private SingleTon(){ } public static SingleTon getInstance() { return single: } } 工厂方法的优势一在于它提供了灵活性:在不改变其他ap

【代码优化】构造器参数繁多时候,考虑使用builder模式

静态工厂和构造器有个共同的局限性:都不能很好的扩展到大量的可选参数. 1.对于多个可选参数的构造器,我们都习惯采用重叠构造器模式,比如一个参数的构造器调用2个参数的构造器,     2个参数的构造器调用3个参数的,以此类推. public class User{ private int id: private String name: private String age: private String sex: public User(int id){ this(id,null); } pub

Vue.js前后端同构方案之准备篇——代码优化

作者:王鹤 导语 目前Vue.js的火爆不亚于当初的React,本人对写代码有洁癖,代码也是艺术.此篇是准备篇,工欲善其事,必先利其器.我们先在代码层面进行优化,对我们完成整个技术架构是起到基础作用的.此准备篇是独立的,即使你们的项目不使用Vue.js,也不影响文章的阅读,是代码的基础优化. 一.前言 目前Vue.js的火爆不亚于当初的React,本人对写代码还是有一定洁癖的,代码也是艺术.很长时间在找寻最适合自己的前端开发框架,包括在React最火的时候,我依然在坚持寻找,但React在我心目