关于java中的interrupt

1. interrupt知识点

PS: 以下总结基于JDK8

本文不会完整说明interrupt,只会罗列一些比较重要的点。完整了解Thread.interrupt可以看参考资料。

以下的一些理解新的有助于理解参考资料的文章:

interrupt方法调用后,针对BLOCKED状态的线程,只是设定中断标志位为true。是否响应中断(感知这个标志位的变化)取决于API的设计。JDK的阻塞IO API、Synchronized同步块、还有Lock中的很多方法(不包括lockInterruptibly)都是不响应中断的。当然调用线程可以利用标志位判断来使得自己设计的API是......

JAVA代码优化记录

1. 避免伪共享(false sharing)

1.1 概述

代码层面放的比较近的字段频繁一起并发变更可能导致需要写相同的cache line,写cache line根据MESI协议,要让别的cpu下对应的cache line保持禁写。这导致原本可以从L1 L2cache中获取的数据不得不从L3或者内存中获取,命中率大大降低,性能下降。

参考资料:http://ifeve.com/from-javaeye-false-sharing/

1.2 解决办法

避免伪共享的关键就是避免并发访问的数据在一个cache line。那么解决办法也比较简单了,需要避免伪共享的对象,加个......

jstack分析线程的技巧

1. 关于jstack的说明

jstack prints Java stack traces of Java threads for a given Java process or core file or a remote debug server.

jstack用于打印一个JAVA进程里面的线程堆栈,是我们排查性能瓶颈时常用的工具。

2. 准备知识

2.1 Java Thread的状态

一般操作系统中线程的生命周期是这样的:

metaspace OOM问题解决

1. 什么是metaspace

JDK8中去掉了原来的永久代,而用metaspace来替代。并且metaspace现在是使用了netive memory。

原来放在永久代里面的东西也全部放到元数据区了。元数据区主要包含以下内容:

name and fields of the class: 存放类名字、成员变量相关的元数据

methods of a clas......

JAVA的堆内存储VS堆外存储

1. 介绍

在很多JAVA实现的产品中我们都可以看到JVM的off heap内存空间的使用。例如kafka、ignite、alluxio等等。这说明OS管理内存是有好处的,例如可以利用os page cache来改进IO性能。

今天看到一篇PPT似乎不错,打算学习下。PPT原文见:On heap cache vs off-heap cache

2. heap上对象的开销

3. JA......