分类目录归档:Java

HashMap


链表长度大于8而且整个map中的键值对大于等于MIN_TREEIFY_CAPACITY (64)才进行链表到红黑树的转换


//-----------------------------------------------
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
                   boolean evict) {
        Node<K,V>[] tab; Node<K,V> p; int n, i;
        if ((tab = table) 

Read more

如何制定调优策略


如何预热?

可以通过设置CompileThreshold参数降低执行方法次数阈值来提前预热代码,也可以通过调用WarmUpContextListener.invoke方法指定需要预热的方法,当然也可以在启动时提前写个循环或多线程调用该方法。

我们还可以使用一些工具来预热,例如之前有同学提到的JMH。

Read more

异常


抛出异常需要构建异常栈,对异常进行捕获和处理,这个过程比较消耗系统的性能,怎么理解?

创建异常对象时会调用父类Throwable的fillInStackTrace()方法生成栈追踪信息,也就是调用native的fillInStackTrace()方法去爬取线程堆栈信息,为运行时栈做一份快照,正是这一部分开销很大

如何实现自定义异常?

继承RuntimeException,然后将writableStackTrace设置为false。

以下是RuntimeException的构造函数:

protected RuntimeException(String message, Throwable cau

Read more