虚拟机:JVM
文章平均质量分 96
奔奔尚
spawpaw@hotmail.com
展开
-
Java多线程:锁的底层实现
最近准备招聘,在网上搜集了很多关于JVM获取的锁流程的文章,基本上所有关于偏向锁获取的部分都是错的,所以专门花时间自己看了看代码,整理出来供大家参考。一、 基本概念CAS(compare and swap) 参考资料: https://blog.csdn.net/ls5718/article/details/52563959 缓存一致性协议1. 什么是...原创 2018-07-31 11:39:11 · 4604 阅读 · 2 评论 -
Java多线程:synchronized和volatile
一、什么是锁1.1 为什么需要锁: CPU的内存模型大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而数据首先会被从主存取到CPU的cache中,但是当变量在cache中被改变时,是不会立马写回主存的,那么问题就来了,在多核心CPU中,如果执行下面一段代码:i = i + 1;在多线程环境中就会出问题,如果这里不明白可以参考下图或者百度内存模型,这里不再赘述1...原创 2018-08-01 16:53:13 · 372 阅读 · 0 评论 -
Java多线程:JUC包-锁的封装
之前在Java多线程:synchronized和volatile这篇文章中,讲了Java在语言层面上对对多线程提供的支持。那么,在实际应用中,很多时候仅仅靠这两个关键字是不够的。那么如果我们想进行更骚的操作,就需要使用 java.util.concurrent 包下的工具类了。这个包的结构如下所示:- java.util - atomic //原子操作 - locks /...原创 2018-08-01 19:21:27 · 591 阅读 · 0 评论 -
Java多线程:线程池
一、为什么使用线程池最基本的开启一个异步任务的方法就是直接像下面这样new一个Threadnew Thread(new Runnable() { @Override public void run() { // TODO } }).start();但是这样做有很多弊端:每次new Thread新建对象性能差。 如果并发的线程数量很多,并且每个线...原创 2018-08-05 09:15:32 · 303 阅读 · 0 评论 -
JVM:GC(GarbageCollection,垃圾回收)
众所周知,Java程序不用像C++程序在程序中自行处理内存的回收释放。这是因为Java在JVM虚拟机上增加了垃圾回收(GC)机制,用以在合适的时间触发垃圾回收,将不需要的内存空间回收释放,避免无限制的内存增长导致的OOM。作为一个合格的Java程序员,有必要了解Java GC相关知识。掌握GC知识一方面可以帮助我们快速排查因JVM导致的线上问题,另一方面也可以帮助我们在Java应用发布之前合理地对...原创 2018-08-20 22:34:33 · 404 阅读 · 0 评论