Bao Tingyu's Blog

异常正常打印堆栈丢失

现象发现异常日志文件里有很多nullPointException,只有简单的异常名称,却没有堆栈信息。(已确认代码中日志打印方式正确) 原因jit本身的优化,没有记录trace “JVM对一些特定的异常类型做了Fast Throw优化,如果检测到在代码里某个位置连续多次抛出同一类型异常的话,C2会决定用Fast Throw方式来抛出异常,而异常Trace即详细的异常栈信息会被清空。这种...

分布式缓存实践

分布式缓存主要用于查询场景,缓解DB压力,针对不同的一致性要求分为两种缓存场景: 最终一致性分布式缓存 强一致分布式缓存 CAP中的C表示的是多副本一致性 ACID中的C表示的是动作一致性,比如A给B打钱 最终一致性分布式缓存 最终一致性对一致性要求不高,可以采用异步更新的方式避免业务系统阻塞。 采用旁路缓存模式,先去缓存获取数据,存在则直接返回,不存在去读DB,然...

Java应用内存占用过高排查

基础 Java运行时内存结构 JVM在执行Java程序时会将它管理的内存划分为不同的数据区域: - 程序计数器:用于存放下一条指令所在单元的地址的地方。每执行一条指令,程序计数器就会加一。每个线程都会维护一个独立的程序计数器且各线程之间的程序计数器互不影响,在程序执行过程中,线程会不断的切换,独立的线程计数器保证了当前线程的正确执行位置。程序计数器是唯一一个不会出现OutOfMem...