
java
文章平均质量分 52
lixiaoming21
心医网初步加入互联网行业,心医团队属于初起步团队,我们的网站还需要成长、健壮。本人之前一直从事技术类管理工作,担任整个项目的架构还是头一次。网站不可能一口气吃成胖子,只能靠平时一点一滴的积累和进步。欢迎各位提出宝贵建议和想法。
展开
-
ThreadLocal学习
ThreadLoocal原理ThreadLocal是线程变量,主要为防止多线程环境中,变量访问冲突问题。ThreadLocal为每个线程创建了一个变量副本,实际就是在线程Thread类中有个私有属性,如下图:实际数据存储是在ThreadLocal中的ThreadLocalMap中存储,ThreadLocal相当于一层包装,所有的get,set操作都是对这个m原创 2017-01-25 17:25:35 · 312 阅读 · 0 评论 -
JAVA锁机制
synchronized和Lock均为可重入锁。即可为该对象多次加锁,通过锁标志+1进行操作;当所标志为0时,释放所。重入锁目的是为防止死锁发生。synchronized:基于系统内核实现线程等待(通过linux系统pthread_mutex_lock命令进行等待)。 a、将线程通过CAS操作放入ContentionList队列头部。 b、当Ow原创 2017-01-25 17:26:19 · 2605 阅读 · 0 评论 -
JAVA线程池ExecutorService学习
ExecutorService线程池总接口。ThreadPoolExecutor是Executors类的底层实现 。ThreadPoolExecutor的完整构造方法的签名是:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Block原创 2017-01-25 17:26:57 · 245 阅读 · 0 评论 -
JVMGC机制
GC就是找到不用的对象,回收对象,释放内存。名词解释:minor gc:年轻代回收major gc/full gc:年老代回收当进行年老代回收时,往往伴随至少一次年轻代回收。但在PS回收器时,则会选择只进行major gc。对象的移动过程:初始在eden区分配,当进行一次年轻代gc后,放入存活区。当在存活区来回复制N次(可配置),进入年老代。大对象也会直接放原创 2017-01-25 17:27:19 · 1681 阅读 · 0 评论 -
jvm内存结构
jvm内存分为:线程私有内存:栈、程序计数器,公共内存:堆、本地方法区、方法区、直接内存栈存放线程的方法调用、返回值、局部变量、对象引用等信息。程序计数器记录当前线程执行的位置。本地方法栈存放jni,native方法调用信息,类似JVM栈。堆存放所有定义的对象。分为年轻代、年老代,年轻代分为eden区和2个幸存区。方法区,在hotspot虚拟机中也叫原创 2017-01-25 17:27:38 · 425 阅读 · 0 评论 -
JVM内存模型
启动一个线程,都会分配一块工作内存,每次线程操作变量,都是从主内存拷贝到工作内存,线程只操作工作内存,然后再jvm会回写到主内存。因此出现多线程访问同一数据会线程不安全。volatile可以保证变量的内存可见性,但原子操作只有赋值(i=1)这一种改变操作,所所以要自己实现变量原子性。jdk提供atomic原子操作对象。原创 2017-01-25 17:27:55 · 226 阅读 · 0 评论 -
JAVA中的CAS原理
CAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。本文先从CAS的应用说起,再深入原理解析。 CAS应用CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什转载 2017-01-25 17:30:06 · 326 阅读 · 0 评论