JVM性能优化:
1.减少GC性能开销,GC就是一个运行jvm中的守护线程,专门用于回收在堆内存中的垃圾。
2.尽量少用new关键字实例化对象
String,StringBuffer,StringBuilder
线程安全:是否使用锁
StringBuffer 线程安全
StringBuilder 非线程安全
字符串拼接用SB
性能:
普通for循环 > 增强for循环 > 迭代器(迭代的对象必须是实现了序列化接口的)
transient 不需要给外面的类来使用 反射不能操作transient属性
HashMap的底层用transient用的非常多
定义局部变量的时候尽量使用基本数据类型。
线程是最小的执行单元。
将一组没有规律的数字放进一个数组中,就可以达到有规律地去操作的目的
// 1 2 3 4 5 6 7 8 9 10 11 12
int DAYS[][]={{0, 31,28,31,30,31,30,31,31,30,31,30,31},
{0, 31,29,31,30,31,30,31,31,30,31,30,31}}
取模
1.减少GC性能开销,GC就是一个运行jvm中的守护线程,专门用于回收在堆内存中的垃圾。
2.尽量少用new关键字实例化对象
String,StringBuffer,StringBuilder
线程安全:是否使用锁
StringBuffer 线程安全
StringBuilder 非线程安全
字符串拼接用SB
性能:
普通for循环 > 增强for循环 > 迭代器(迭代的对象必须是实现了序列化接口的)
transient 不需要给外面的类来使用 反射不能操作transient属性
HashMap的底层用transient用的非常多
定义局部变量的时候尽量使用基本数据类型。
线程是最小的执行单元。
将一组没有规律的数字放进一个数组中,就可以达到有规律地去操作的目的
// 1 2 3 4 5 6 7 8 9 10 11 12
int DAYS[][]={{0, 31,28,31,30,31,30,31,31,30,31,30,31},
{0, 31,29,31,30,31,30,31,31,30,31,30,31}}
取模
为什么需要序列化:为了把对象保存下来 为了在网络上进行传输
用流之后一定要关流:
try{ios.close();}catch(Exception e){} try{bos.close();}catch(Exception e){}