- 博客(7)
- 收藏
- 关注
原创 JVM探秘之GC
GC的三个问题(what,when,how),带着问题去思考。哪些内存需要回收? 程序计数器、虚拟机栈、本地方法栈3个区域随线程而生死,所需要的内存大小基本是在编译期间确定下来的,一旦线程或方法结束,内存也就跟着回收了,所以这几个区域不需要过多的考虑垃圾回收问题。但是java堆和方法区只有在程序运行时才能确切的知道需要哪些对象需要多少内存,这部分的内存分配和回收都是动态的,所以这部分内存才是需要垃
2017-04-19 18:20:13 398
原创 JVM探秘之运行时数据区
(图来自《深入理解java虚拟机》)1、程序计数器(Program Counter Register)可以比作当前线程所执行的字节码的行号指示器。每条线程都需要有一个独立的程序计数器,线程私有的内存。计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器值就是空的。2、Java虚拟机栈(Java Virtual Machine Stacks)线程私有,
2017-04-19 17:57:00 247
原创 浅谈ThreadLocal
今天将探讨下JDK源码中出现频次很高的关键字–ThreadLocal,线程本地变量。基本概念ThreadLocal类,究竟是干啥的,首先来看java官方文档的说明: 该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中
2017-04-13 16:05:03 243
转载 浅谈java并发容器ConcurrentHashMap
我们知道concurrentHashMap是线程安全而且高效的HashMap,至于为什么,我们今天来一探究竟。HashMap与HashTable 在多线程的环境下使用HashMap进行put操作会使HashMap的Entry链表出现环形链表,从而在get操作时出现死循环,导致CPU利用率接近100%,看看这篇文章《疫苗:JAVA HASHMAP的死循环》,具体就不赘述了。HashTable虽然是线
2017-04-11 17:29:05 343
转载 如何合理设置线程池大小
接着上一篇探讨线程池留下的尾巴,如何合理的设置线程池大小。 要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析:任务的性质:CPU密集型任务、IO密集型任务、混合型任务。任务的优先级:高、中、低。任务的执行时间:长、中、短。任务的依赖性:是否依赖其他系统资源,如数据库连接等。性质不同的任务可以交给不同规模的线程池执行。对于不同性质的任务来说,CPU密集型任务应配置尽
2017-04-05 16:49:12 45486 7
原创 浅谈Java线程池
Java中的线程池是日常工作中用的比较频繁的并发框架了,几乎所有需要并发执行的程序都可以使用线程池。那么,使用线程池的程序究竟有什么好处呢?答案无非就是以下两点。降低资源消耗。 通过重复利用已创建的线程,降低了频繁切换线程上下文(创建与销毁)所带来的资源消耗。提高了线程的可管理性。 线程是稀缺资源,如果无限制的创建,过多的消耗系统资源,可能会导致服务器崩溃。使用线程池可以进行统一的
2017-04-04 15:42:36 421
转载 浅谈CAS
CAS(Compare and Swap),比较并交换。 java语言中,多线程访问一个互斥的变量时,主要是通过synchronized或者lock锁来达到线程间同步的目的。虽然锁机制在使用合理的情况下可以保证线程安全,但是使用锁带来的性能问题是一个痛点。java5更新后,开发非阻塞算法成为可能,而CAS实现了区别于锁机制的对变量同步特性的一种技术。非阻塞算法 (nonblocking algor
2017-04-01 11:49:48 261
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人