10种简单的Java性能优化:
1、使用StringBuilder
2、避免使用正则表达式
使用正则表达式的话,至少要将 Pattern 缓存下来,避免反复编译Pattern。
static final Pattern HEAVY_REGEX =
Pattern.compile("(((X)*Y)*Z)*");
3、不要使用iterator()方法
4、不要调用高开销方法
5、使用原始类型和栈
//存储在堆上
Integer i = 817598;
// 存储在栈上
int i = 817598;
6、避免递归
7、使用entrySet()迭代map
8、使用EnumSet或EnumMap
使用配置map时,我们可能会预先知道保存在map中键值。如果这个键值非常小,我们就应该考虑使用 EnumSet 或 EnumMap
9、优化自定义hasCode()方法和equals()方法
10、考虑使用set而并非单个元素
11、不要在循环中使用try…catch…,应该把其放在最外层,在执行中抛出异常会继续循环。/
12、循环内不要不断创建对象引用,/
Object obj = null;for (int i = 0; i <= count; i++) { obj = new Object(); }
13、尽量避免随意使用静态变量,gc通常是不会回收这个对象所占有的堆内存
14、将常量声明为static final,并以大写命名
15、字符串变量和字符串常量equals的时候将字符串常量写在前面,变量写在前面,null写在后面。
16、把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+”"最慢
17、 集合必须指定模板类型(5.0+)。说明:方便程序阅读,省去强制转换代码
18、 异常捕获尽量不要直接catch (Exception ex),应该把异常细分处理。说明:可以设计更合理异常处理分支,排错。
19、多提取公共方法,不要重复做一件事。
1
2
3
4
5
6
7
|
int loopTime = 50000 ; Integer i = 0 ; long startTime = System.currentTimeMillis(); for ( int j = 0 ; j < loopTime; j++){ String str = String.valueOf(i); } System.out.println( "String.valueOf():" + (System.currentTimeMillis() - startTime) + "ms" ); |
10种简单的Java性能优化:
1、使用StringBuilder
2、避免使用正则表达式
使用正则表达式的话,至少要将 Pattern 缓存下来,避免反复编译Pattern。
static final Pattern HEAVY_REGEX =
Pattern.compile("(((X)*Y)*Z)*");
3、不要使用iterator()方法
4、不要调用高开销方法
5、使用原始类型和栈
//存储在堆上
Integer i = 817598;
// 存储在栈上
int i = 817598;
6、避免递归
7、使用entrySet()迭代map
8、使用EnumSet或EnumMap
使用配置map时,我们可能会预先知道保存在map中键值。如果这个键值非常小,我们就应该考虑使用 EnumSet 或 EnumMap
9、优化自定义hasCode()方法和equals()方法
10、考虑使用set而并非单个元素
11、不要在循环中使用try…catch…,应该把其放在最外层,在执行中抛出异常会继续循环。/
12、循环内不要不断创建对象引用,/
Object obj = null;for (int i = 0; i <= count; i++) { obj = new Object(); }
13、尽量避免随意使用静态变量,gc通常是不会回收这个对象所占有的堆内存
14、将常量声明为static final,并以大写命名
15、字符串变量和字符串常量equals的时候将字符串常量写在前面,变量写在前面,null写在后面。
16、把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+”"最慢
17、 集合必须指定模板类型(5.0+)。说明:方便程序阅读,省去强制转换代码
18、 异常捕获尽量不要直接catch (Exception ex),应该把异常细分处理。说明:可以设计更合理异常处理分支,排错。
19、多提取公共方法,不要重复做一件事。
1
2
3
4
5
6
7
|
int loopTime = 50000 ; Integer i = 0 ; long startTime = System.currentTimeMillis(); for ( int j = 0 ; j < loopTime; j++){ String str = String.valueOf(i); } System.out.println( "String.valueOf():" + (System.currentTimeMillis() - startTime) + "ms" ); |