javaEE性能优化

性能的优化一般可以从多方面入手,前端资源,java程序,数据传输,结果缓存,数据库,jvm的GC,甚至硬件层等。

一、前端优化

影响页面性能的因素很多;

1、页面请求Http数量。

新建一个http连接需要经历tcp协议握手建立连接状态等过程,并且大部分请求和相应包含了cookie和header内容,增加网络带宽的消耗。因此、减少HTTP请求的数量能够加速页面的加载。可以通过采取合并样式和脚本文件等措施,来减少页面加载所需要请求。

设置html页面缓存方法:

静态的html页面想要设置使用缓存:

通过HTTP的META设置expires和cache-control

<meta http-equiv="Cache-Control" content="max-age=7200" />
 <meta http-equiv="Expires" content="Mon, 20 Jul 2013 23:00:00 GMT" />

2、是否使用CND网络。

CDN网络能够使用户就近原则的取得所需要的资源,降低静态资源传输的网络延迟。

3、是否使用压缩。

对前端的js,css等静态资源文件可以去掉不要的注释和空格,空行等。使用gzip压缩来减少

网络上传输的字节数。当然,压缩是有成本的,会消耗服务器的cpu资源,但通常这种开销是值得的。

其他的规则还包括将样式放在页面首部加载,将js脚本放在底部加载,避免CSS样式,减少CDN查找等。

二、java程序优化

java代码的优化是找到执行java缓慢的代码,想尽办法对原有的代码进行优化。如使用单例模式,减少系统开销,将单线程变多线程,提升资源利用率,采用选择就绪模式,提供并发吞吐量,对于互不影响的流程,可以使用Future模式来提升任务效率。。。通过这些措施来提高程序的性能。

1、单例

对于I/O处理,数据库连接,配置文件解析加载等耗资源的操作,必须对这些实例创建进行限制,或使用一个公共实例。以减少系统开销。

2、Future模式。

Future模式有点类似于网上购物,在你购买商品,订单生效之后,你可以去做自己的事情,等待商家通过快递给你送货上门。Future模式就是,当某一程序提交请求,期望得到一个答复。但是可能服务器程序对这个请求的处理比较慢,因此不可能马上收到答复。但是,在传统的单线程环境下,调用函数是同步的,它必须等到服务程序返回结果,才能继续进行其他处理。而Future模式下,调用方法是异步的,原本等待返回的时间段,在主调函数中,则可以处理其他的任务

package com.test.dao;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureMain {
    private static class ChuJu{
          private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
    private class Work implements Runnable{
        public void run() {

        }
    }
    //网上订餐
    private static class OnlineLunch  implements Callable{
        private ChuJu chuJu;
        public OnlineLunch(String name){
            chuJu = new ChuJu();
            chuJu.setName(name);
        }
        public ChuJu call() throws Exception {
            System.out.println("下单");
            System.out.println("等待发货。。。。");
            try {
                Thread.sleep(10000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("收到货物:");
            return this.chuJu;
        }
    }
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        //第一步网上订购午餐
        FutureTask<ChuJu> future = new FutureTask<ChuJu>(new OnlineLunch("刀"));
        new Thread(future).start();
        //模拟去购物菜
        System.out.println("走去超市。。");
        Thread.sleep(3000);
        System.out.println("选菜。。。");
        Thread.sleep(3000);
        System.out.println("买菜回家。。。");
        Thread.sleep(3000);
        if(!future.isDone()){  //如果厨具还未到,等到
            System.out.println("等待厨具。。。");
        }
        ChuJu chuJu = future.get();
        //开始做菜
        System.out.println("厨具:"+chuJu.getName()+"到了");
    }
}

结果输出:

走去超市。。
下单
等待发货。。。。
选菜。。。
买菜回家。。。
等待厨具。。。
收到货物:
厨具:刀到了

相关推荐