零碎笔记(八)

  java程序启动时添加参数-XX:+AlwaysPreTouch
  启动时就把参数里说好了的内存全部舔一遍,可能令得启动时慢上一点,但后面访问时会更流畅,比如页面会连续分配,比如不会在晋升新生代到老生代时才去访问页面使得GC停顿时间加长。ElasticSearch和Cassandra都打开了它。
  

  Thread#setUncaughtExceptionHandler()方法可用来设置未捕捉的异常处理器。
  如果线程使用相同的未捕捉的异常处理器,可以使用Thread.setDefaultUncaughtExceptionHandler()设置全局的。
  

  数据库连接有“8小时问题”,所以Spring 数据库数据源配置时,destroy-method="close"一定要加上。“8小时问题”是指一个连接空闲8小时数据库会自动关闭,而数据源并不知道。
  高并发下,可以testOnBorrow设置false,testWhileIdle设置为true,这样就会定时对后台空链接进行检测发现无用连接就会清除掉,不会每次都去都去检测是否8小时的空链接。
  

  当复制大量数据时,使用System.arraycopy()命令。
  

  慎用异常,异常对性能不利。
  抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。
  异常只能用于错误处理,不应该用来控制程序流程。
  

  基于效率和类型检查的考虑,应该尽可能使用array,无法确定数组大小时才使用ArrayList。
  

  ArrayList删除元素时, 从尾部开始遍历,可大大提升执行效率
  

  循环内不要不断创建对象引用,例如:

for (int i = 1; i <= count; i++) {
    Object obj = new Object();
}

  这种做法会导致内存中有count份Object对象引用存在,count很大的话,就耗费内存了,建议为改为:

Object obj = null;
for (int i = 0; i <= count; i++) { 
    obj = new Object(); 
}

  这样的话,内存中只有一份Object对象引用,每次new Object()的时候,Object对象引用指向不同的Object罢了,但是内存中只有一份,这样就大大节省了内存空间了。
  

  java不支持创建泛型数组,可以使用Array.newInstance来实现:

// http://blog.csdn.net/orzlzro/article/details/7017435  
public static <T> T[] test2(int length, Class<T> newType) {  
    // T t = new T(); 编译错误  
    // T[] wrong = new T[length]; 编译错误  
    // T[] newArray = (T[]) new Object[length]; 运行时ClassCastException  

    // 参考Arrays.copyOf
    T[] newArray = (T[]) Array.newInstance(newType, length);  
    return newArray;  
}  

  

  Tomcat最大连接数取决于maxConnections值加上acceptCount这个值,在连接数达到了maxConenctions之后,tomcat仍会保持住连接,但是不处理,等待其它请求处理完毕之后才会处理这个请求。
  

  看源码时,常常会看到这种写法,有啥好处?

final E[] items = this.items; 
final ReentrantLock lock = this.lock; 

1、final的数据不可变,因此更安全,防止意外修改,阅读代码时更清晰,是一种好的编程习惯;
2、更快,因为每次都直接this.items会发生如下操作(字节码表示):
   aload_0 //0 表示当前对象
   getfield #xxx; //得到当前对象的items

  从字节码可以看出需要两条指令; 如果 final E[] items = this.items; 如果接下来使用的话,直接从堆栈取items的引用,更快。

猜你喜欢

转载自blog.csdn.net/zero__007/article/details/85108848