电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

如何利用java开发高性能、高并发web应用

29页
  • 卖家[上传人]:xzh****18
  • 文档编号:56705459
  • 上传时间:2018-10-15
  • 文档格式:PPT
  • 文档大小:372.50KB
  • / 29 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、如何用Java进行高性能网站开发,Java程序性能优化技巧,生成对象时,合理分配空间和大小: Java中的很多类都有它的默认的空间分配大小,对于一些有大小的对象的初始化,应该预计对象的大小,然后使用进行初始化。 例如:我们在使用Vector,当声明Vector vectnew Vector()时,系统调用: public Vector() / 缺省构造函数 this(10); / 容量是 10; 缺省分配10个对象大小容量。当执行add方法时,可以看到具体实现为: public synchronized boolean add(Object o) modCount+; ensureCapacityHelper(elementCount+1); elementDataelementCount+ =o; return true; ,Java程序性能优化技巧,生成对象时,合理分配空间和大小: private void ensureCapacityHelper(int minCapacity) int oldCapacity = elementData.length; if (minCapac

      2、ity oldCapacity) Object oldData = elementData; int newCapacity = (capacityIncrement 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2); if (newCapacity minCapacity) newCapacity = minCapacity; elementData = new ObjectnewCapacity; System.arraycopy(oldData, 0, elementData, 0, elementCount); 我们可以看到,当Vector大小超过原来的大小时,一些代码的目的就是为了做容量的扩充,在预先知道该Vector大小的话,可以指定其大小,避免容量扩充的开销。,Java程序性能优化技巧,优化循环体: 循环是比较重复运行的地方,如果循环次数很大,循环体内不好的代码对效率的影响就会被放大而变的突出。让我们看看下面的代码片: Vector vect = new Vector(1000); . for( inti

      3、=0; ivect.size(); i+) . for循环部分改写成: int size = vect.size(); for( int i=0; isize; i+) . 如果size=1000,就可以减少1000次size()的系统调用开销,避免了循环体重复调用。,Java程序性能优化技巧,优化循环体: 再看如下的代码片: for (int i = 0;i 100000;i+) if (i%10 = 9) . / 每十次执行一次 改写成也可以提高效率: for(inti =0,j =10; i100000; i+,j-) if(j = 0) . / 每十次执行一次 j = 10; 所以,当有较大的循环时,应该检查循环内是否有效率不高的地方,寻找更优的方案加以改进。,Java程序性能优化技巧,少用new初始化一个实例: 尽量少用new来初始化一个类的实例,当一个对象是用new进行初始化时,其构造函数链的所有构造函数都被调用到,所以new操作符是很消耗系统资源的,new一个对象耗时往往是局部变量赋值耗时的上千倍。同时,当生成对象后,系统还要花时间进行垃圾回收和处理。 当new创建对象不

      4、可避免时,注意避免多次的使用new初始化一个对象。 尽量在使用时再创建该对象。如: NewObject object = new NewObject(); int value; if(i0 ) value =object.getValue(); ,少用new初始化一个实例: 上面一段代码可以修改为: int value; if(i0 ) NewObject object = new NewObject(); Value =object.getValue(); 另外,应该尽量重复使用一个对象,而不是声明新的同类对象。一个重用对象的方法是改变对象的值,如可以通过setValue之类的方法改变对象的变量达到重用的目的。,Java程序性能优化技巧,选择合适的方法调用: 在Java中,一切都是对象,如果有方法(Method)调用,处理器先要检查该方法是属于哪个对象,该对象是否有效,对象属于什么类型,然后选择合适的方法并调用。 可以减少方法的调用,同样一个方法: public void CallMethod(int i ) if( i =0 ) return; . / 其他处理 如果直接调用, i

      5、nt i = 0; . CallMethod(i);,Java程序性能优化技巧,选择合适的方法调用: 上面的代码,就应该写成: int i = 0; . if( i =0 ) CallMethod(i); 不影响可读性等情况下,可以把几个小的方法合成一个大的方法。 另外,在方法前加上final,private关键字有利于编译器的优化。,Java程序性能优化技巧,异常处理技巧: 异常是Java的一种错误处理机制,对程序来说是非常有用的,但是异常对性能不利。抛出异常首先要创建一个新的对象,并进行相关的处理,造成系统的开销,所以异常应该用在错误处理的情况,不应该用来控制程序流程,流程尽量用while,if等处理。 在不是很影响代码健壮性的前提下,可以把几个try/catch块合成一个。 尽量使用局部变量和静态变量: 尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack) 中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。 尽量使用静态变量,即加修饰符static,如果类中的变量不会随他的实例而变化,就可以定义为静态变量,从而

      6、使他所有的实例都共享这个变量。 同步处理技巧: 同步主要出现在多线程的情况,为多线程同时运行时提供对象数据安全的机制,多线程是比较复杂话题,应用多线程也是为了获得性能的提升,应该尽可能减少同步。 另外,如果需要同步的地方,可以减少同步的代码段,如只同步某个方法或函数,而不是整个代码。,Java程序性能优化技巧,尽可能的使用Java自身提供的API: Java的API一般都做了性能的考虑,如果完成相同的功能,优先使用API而不是自己写的代码,如数组复制通常的代码如下: int size = 1000; String strArray1 = new Stringsize; String strArray2 = new Stringsize; for(inti=0;isize;i+) / 赋值 strArray1 = (new String(“Array: “ + i); for(inti=0;isize;i+) / 复制 strArray2=(new String(String)a); ,Java程序性能优化技巧,尽可能的使用Java自身提供的API: 上面那段代码,如果使用Java提供的

      7、API,就可以提高性能: int size = 1000; String strArray1 = new Stringsize; String strArray2 = new Stringsize; for(inti=0;isize;i+) / 赋值 strArray1 = (new String(“Array: “ + i); System.arraycopy(strArray1,0,strArray2,0,size); / 复制 同样的一个规则是,当有大量数据的复制时,应该使用System.arraycopy()。,Java程序性能优化技巧,尽量减少I/O操作: 输入/输出(I/O)包括很多方面,我们知道,进行I/O操作是很消耗系统资源的。程序中应该尽量少用I/O操作。使用时可以注意: . 合理控制输出函数System.out.println()对于大多时候是有用的,特别是系统调试的时候,但也会产生大量的信息出现在控制台和日志上,同时输出时,有序列化和同步的过程,造成了开销。 特别是在发行版中,要合理的控制输出,可以在项目开发时,设计好一个Debug的工具类,在该类中可以实现输出开

      8、关,输出的级别,根据不同的情况进行不同的输出的控制。 尽量使用缓存: 读写内存要比读写硬盘上的文件要快很多,应尽可能使用缓冲,以便直接从内存中读取数据。 尽可能使用带有Buffer的类代替没有Buffer的类,如可以用BufferedReader 代替Reader,用BufferedWriter代替Writer来进行处理I/O操作。 同样可以用BufferedInputStream代替InputStream都可以获得性能的提高,Java程序性能优化技巧,尽量不使用同步: Servlet是多线程的,以处理不同的请求,基于前面同步的分析,如果有太多的同步就失去了多线程的优势了。 不用保存太多的信息在HttpSession中 很多时候,存储一些对象在HttpSession中是有必要的,可以加快系统的开发,如网上商店系统会把购物车信息保存在该用户的Session中,但当存储大量的信息或是大的对象在会话中时,是有害的,特别是当系统中用户的访问量很大,对内存的需求就会很高。 具体开发时,在这两者之间应作好权衡。,Java程序性能优化技巧,清除SESSION: 通常情况,当达到设定的超时时间时,同时

      9、有些Session没有了活动,服务器会释放这些没有活动的Session, 不过这种情况下,特别是多用户并访时,系统内存要维护多个的无效Session。 当用户退出时,应该手动释放,回收资源,实现如下: HttpSession theSession = request.getSession(); / 获取当前Session if(theSession != null) theSession.invalidate(); / 使该Session失效 。 缓存Home接口: EJB库使用Enterprise Bean 的客户端通过它的Home接口创建它的实例。客户端能通过JNDI访问它。服务器通过Lookup方法来获取。 JNDI是个远程对象,通过RMI方式调用,对它的访问往往是比较费时的。所以,在设计时可以设计一个类专门用来缓存Home接口,在系统初始化时就获得需要的Home接口并缓存,以后的引用只要引用缓存即可。,Java程序性能优化技巧,使用快速度的Jdbc驱动: JDBC API包括两种实现接口形式,一种是纯Java实现的驱动,一种利用ODBC驱动和数据库客户端实现,具体有四种驱动模式: 第一类:JDBC-ODBC桥,再加上ODBC驱动程序。 第一类JDBC驱动程序是JDBC-ODBC桥再加上一个ODBC驱动程序。建议第一类驱动程序只用于原型开发,而不要用于正式的运行环境。桥接驱动程序由Sun提供,它的目标是支持传统的数据库系统。Sun为该软件提供关键问题的补丁,但不为该软件的最终用户提供支持。一般地,桥接驱动程序用于已经在ODBC技术上投资的情形,例如已经投资了Windows应用服务器。 尽管Sun提供了JDBC-ODBC桥接驱动程序,但由于ODBC会在客户端装载二进制代码和数据库客户端代码,这种技术不适用于高事务性的环境。另外,第一类JDBC驱动程序不支持完整的Java命令集,而是局限于ODBC驱动程序的功能,这种驱动方式也叫胖客户,主要用于低并发请求,大数据量传输的应用。,

      《如何利用java开发高性能、高并发web应用》由会员xzh****18分享,可在线阅读,更多相关《如何利用java开发高性能、高并发web应用》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.