AllInJVM
忆之独秀
Engineer
展开
-
【JVM】OOMError之Unable to create new native thread
最近线上出现了一个OOM的问题,使得服务异常以至于不可用。 一、现象 从现象来看就是请求服务全部失败,线程数激增,cpu和内存显示相对正常。查看error.log,都是"error.log:unable to create new native thread"错误: [ERROR] [org.springframework.boot.web.servlet.su...原创 2019-12-08 20:40:38 · 1334 阅读 · 0 评论 -
volatile语义及底层原理
当我们使用volatile关键字去修饰变量的时候,所以线程都会直接读取该变量并且不缓存它。这就确保了线程读取到的变量是同内存中是一致的。结合JMM的特性,volatile是一个最轻量级的同步机制,三大特点,1.保证主存可见性;2.不保证原子性;3.禁止指令重排序。 一、可见性 可见性是指当一条线程修改了这个变量的值,新值对于其他线程来说是可以"立即"得知的...原创 2019-07-29 17:17:28 · 222 阅读 · 0 评论 -
从CAS底层原理说到ABA问题
一、什么是CAS? CAS(Compare and sweep):比较并交换(compareAndSet),是解决多线程并行情况下使用锁造成性能损耗的一种机制。比较当前工作内存中的值和主内存中的值,如果相同则执行规定操作,否则继续比较知道主内存和工作内存中的值一致为止。CAS有3个操作数,内存值为V,旧的预期值为A,要修改的更新值为B。当且仅当预期值A和内存值V相同时,将内存值V修...原创 2019-07-30 23:03:57 · 538 阅读 · 0 评论 -
Java Memory Model - Java内存模型
Java虚拟机规范定义了Java内存模型(Java Memory Model,JMM)来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。JMM本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态变量和构成数组对象的元素)的访问方式。 一、主内存和工作内存 ...原创 2019-07-28 21:04:40 · 166 阅读 · 0 评论