性能战术在代码中的体现
Posted evak
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能战术在代码中的体现相关的知识,希望对你有一定的参考价值。
性能战术目标和基本的方法如下图
总结来说性能最重要的就是时间和空间的合理划分。响应时间越短对于空间的要求往往也会非常高,不能顾此失彼,一个高性能的系统应该是两者合二为一。
资源需求:
1.减少一个事件流所用的资源(简单递延频繁的函数设置成内敛,使用基本的数据类型)
public void demo1() {
for(int i = 0; i <= imgs.length; i++) {
imgs[i] = document+i; // documen是全局变量
}
}
imgs[i] = document+i; // documen是全局变量
}
}
修改后:
public void demo1() {
int doc=document; //设置局部变量
for(int i = 0; i <= imgs.length; i++) {
imgs[i] = doc+i;
}
}
imgs[i] = doc+i;
}
}
2.减少处理事件的数量,减小频率。
var values = new Array();
values[0] = 123;
values[1] = 456;
values[2] = 789;
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(); } }
以上是关于性能战术在代码中的体现的主要内容,如果未能解决你的问题,请参考以下文章