Java_代码优化

来源:互联网 发布:襄阳网络广播电视台 编辑:程序博客网 时间:2024/05/18 12:38
package com.tangguoqiang;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * Java的性能优化 * 1、减少GC压力,优先级比较低的线程,它是一个守护线程,回收堆内存。 * 2、尽量避免new操作。 * @author 唐国强 */public class MyHighPerformanceJava {public static void main(String[] args) {//1、String\StringBuffer\StringBuilder//String底层是不可变char数组→String的concat()方法返回new创建的对象String str = "aaa";String str2 = "aaa";String str1 = new String("aaa");System.out.println(str == str1);System.out.println(str == str2);System.out.println(str.length());String str3 = "aaa" + str + "bbb";String aaaa = str3.concat(str2);//StringBuffer底层是可变长度char数组→append()方法返回当前对象this//StringBuffer线程安全,效率比较低,所有方法加了synchroinzed关键字StringBuffer sb = new StringBuffer();sb = sb.append("aaa").append("bbb");//StringBuilder底层也是可变长度数组,且没有加synchronized,线程不安全,性能较好StringBuilder sb2 = new StringBuilder();sb2 = sb2.append("ccc").append("ddd");//2、普通for遍历\foreach遍历\Iterator遍历Long t1 = System.currentTimeMillis();List<Integer> list = new ArrayList<Integer>();for(int i = 0; i < 1000000 ; i++){list.add(i);}int size = list.size();for(int i = 0; i < 1000 ; i++){for(int j = 0; i < size; i++){list.get(j);}}Long t2 = System.currentTimeMillis();for(int i = 0; i < 1000; i++){for(Integer obj:list){//循环中发生了对象的创建}}Long t3 = System.currentTimeMillis();for(int i = 0; i < 1000; i++){Iterator it = list.iterator();//循环中发生了对象的创建while(it.hasNext()){it.next();}}Long t4 = System.currentTimeMillis();System.out.println("普通for循环用时:"+(t2 - t1));//普通for循环用时最少System.out.println("foreach遍历用时:"+(t3 - t2));//foreach用时最多System.out.println("Iterator遍历用时:"+(t4 - t3));//3、int和Integer,尽量使用基本类型list.add(1);//自动装箱Integer[] i = {1,2};//三个对象int[] j = {3,4};//一个对象//4、尽量使用同步代码块,同步代码越少越好,粒度越小越好,尽量不用同步方法//5、按需要定义transient关键字避免序列化无用信息,例如HashMap中的size成员//6、三元运算符比if-else的效率更高,三元运算符在CPU层面更优化//7、选择容器//需要排序,需要排序取数据:ArrayList//需要删除,新增元素:LinkedList//有线程安全问题:Vector//8、instanceof+接口类型校验,比实现类校验更快}}

原创粉丝点击