性能战术在代码中的体现

Posted evak

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能战术在代码中的体现相关的知识,希望对你有一定的参考价值。

性能战术目标和基本的方法如下图

技术图片技术图片

 

总结来说性能最重要的就是时间和空间的合理划分。响应时间越短对于空间的要求往往也会非常高,不能顾此失彼,一个高性能的系统应该是两者合二为一。

 

 资源需求:

1.减少一个事件流所用的资源(简单递延频繁的函数设置成内敛,使用基本的数据类型)

public void demo1() {
     for(int i = 0; i <= imgs.length; i++) {
        imgs[i] = document+i; // documen是全局变量
     }
 }
修改后:
public void demo1() {
     int doc=document; //设置局部变量
     for(int i = 0; i <= imgs.length; i++) {
        imgs[i] = doc+i;
     }
 }
2.减少处理事件的数量,减小频率。
var values = new Array();
 values[0] = 123;
 values[1] = 456;
 values[2] = 789;
修改后:
 var values = [123, 456, 789];
 
3.控制资源的使用
jdk1.5自带的并发库中Future类。
Future类中重要方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。
public static void main(String[] args) throws InterruptedException,  
        ExecutionException {  
      
    final ExecutorService exec = Executors.newFixedThreadPool(1);  
      
    Callable<String> call = new Callable<String>() {  
        public String call() throws Exception {  
            //开始执行耗时操作  
            Thread.sleep(1000 * 5);  
            return "线程执行完成.";  
        }  
    };  
      
    try {  
        Future<String> future = exec.submit(call);  
        String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); //任务处理超时时间设为 1 秒  
        System.out.println("任务成功返回:" + obj);  
    } catch (TimeoutException ex) {  
        System.out.println("处理超时啦....");  
        ex.printStackTrace();  
    } catch (Exception e) {  
        System.out.println("处理失败.");  
        e.printStackTrace();  
    }  
    // 关闭线程池  
    exec.shutdown();  
}  

资源管理

1.引入并发

(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
(2)创建Thread子类的实例,即创建了线程对象。
(3)调用线程对象的start()方法来启动该线程。

public class TestThread extends Thread{
public void run() {
System.out.println(“Hello World”);
}
public static void main(String[] args) {
Thread mThread = new TestThread();
mThread.start();
}
}

2.维持数据或计算的多个副本。比如说保存相同运算的结果

3.增加可用资源。增加内存,CPU速度。

可以在相关的配置文件中进行修改调整内存大小。

Xms = 设置内存初始化的大小

Xmx = 设置最大能够使用内存的大小 

资源仲裁:

1.先进先出

2.为事件设立优先级(优先级队列)

动态设立优先级

轮转,实现时间最早优先

public class MyThread1 extends Thread{

    MyThread1(String name){

        super(name);

    }

    

    @Override

    public void run() {

        for(int i = 0; i < 10000 ; i++){

            System.out.println(getName()+": "+i);

        }

    }

 

}

 

 

public class MyThread2 extends Thread{

    MyThread2(String name){

        super(name);

    }

    

    @Override

    public void run() {

        for(int i = 0; i < 10000 ; i++){

            System.out.println(getName()+": "+i);

        }

    }

 

}

 

 

public class Test {

    public static void main(String[] args) {

        MyThread1 t1 = new MyThread1("t1");

        

        MyThread1 t2 = new MyThread1("t2");

        t1.setPriority(Thread.NORM_PRIORITY + 3);

        t1.start();

        t2.start();

    }

 

}

 

以上是关于性能战术在代码中的体现的主要内容,如果未能解决你的问题,请参考以下文章

性能战术:

优秀代码规范

质量属性-重构代码

Unity HTFramework框架(四十)Debug的性能监控

java 代码片段

现代HTTP性能测试工具 WRK:相对 ab 优势体现在哪里?