- 博客(10)
- 资源 (45)
- 收藏
- 关注
原创 java内存模型
前言 在学习java多线程并发编程前,必须要了解java内存模型,只有了解java内存模型,才能知道为什么多线程并发时会出现数据不一致,什么时候需要加锁同步等各种问题。下面只是简单阐述下java内存模型及其相关的概念。内存模型简介 java的并发采用的是共享内存模型(而非消息传递模型)。 Java内存模型(Java Memory Model)描述了Java程序中各种变量(共享变量)
2017-04-28 23:07:09 1671
原创 JVM 内存模型
内存划分java虚拟机按照运行时内存使用区域划分如图: 区域 是否线程共享 是否会内存溢出 程序计数器 否 不会 java虚拟机栈 否 会 本地方法栈 否 会 堆 是 会 方法区 是 会一、程序计数器(Program Counter Register) 程序计数器就是记录当前线程执行程序的位置,改变计数器的值来确定执行的下
2017-04-20 23:26:46 1573
原创 java中的CAS和原子类的实现
CAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了这些封装后的接口。 简单解释:CAS操作需要输入两个数值,一个旧值
2017-04-27 14:37:44 4427
原创 常量池之字符串常量池String.intern()
运行时常量池是方法区(PermGen)的一部分。需要提前了解: 1. JVM内存模型。 2. JAVA对象在JVM中内存分配常量池的好处常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。 - Java的自动装箱中其实就使用到了运行时常量池。详见:Java 自动装箱与拆箱的实现原理 - 还有字符串常量池。字符串进入到常量池的两种方法:1. new String()的实例
2017-04-25 22:01:41 3219 4
原创 ConcurrentHashMap 原理解析
了解ConcurrentHashMap 实现原理,建议首先了解下HashMap实现原理。 HashMap 源码解析(JDK1.8)为什么要用ConcurrentHashMap HashMap线程不安全,而Hashtable是线程安全,但是它使用了synchronized进行方法同步,插入、读取数据都使用了synchronized,当插入数据的时候不能进行读取(相当于把整个Hashtable都
2017-04-23 00:20:02 1600
原创 JAVA对象在JVM中内存分配
如果你还不了解JVM内存模型的建议您先看下JVM内存模型以一下代码为例,来分析下,java对象在内存中的空间分配。public class Student { private String name; private static Birthday birthday = new Birthday(); public Student(String name) { t
2017-04-22 13:50:07 1975
原创 Java 自动装箱与拆箱的实现原理
什么是自动装箱和拆箱 自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。原始类型byte, short, char, int, long, float, double 和 boolean 对应的封
2017-04-21 23:58:24 2351
原创 阻塞队列和ArrayBlockingQueue源码解析
什么是阻塞队列当队列中为空时,从队列总获取元素的操作将被阻塞,当队列满时,向队列中添加元素的操作将被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,知道其它的线程往队列中插入新的元素。同样,试图往满的队列中添加新元素的线程也会被阻塞,直到有其他的线程使队列重新变的空闲起来。 处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e)
2017-04-20 13:41:46 1783
原创 HashMap 源码解析(JDK1.8)
HashMap是由数组加链表的结合体。如下图: 图中可以看出HashMap底层就是一个数组结构,每个数组中又存储着链表(链表的引用)JDK1.6实现hashmap的方式是采用位桶(数组)+链表的方式,即散列链表方式。JDK1.8则是采用位桶+链表/红黑树的方式,即当某个位桶的链表长度达到某个阈值(8)的时候,这个链表就转化成红黑树,这样大大减少了查找时间。存储查找原理: - 存储:首先获取
2017-04-20 12:50:09 1599
原创 ReentrantLock 源码分析
公平锁和非公平锁Lock 有两种实现方式,公平锁和非公平锁。Lock 是通过AQS实现锁的机制。AQS中存在一个队列(双向链表)存储所有要获取当前锁的所有线程信息。公平锁:当前线程不立刻获得锁,而是先直进入等待队列中队尾进行排队获取锁。非公平锁:当前线程首先尝试获取一下锁(仅仅尝试一下),如果获取不到,则乖乖的进入到等待队列中去排队。ReentrantReadWriteLock 源码分析类继承
2017-04-14 11:44:16 1544
HTML5 世界地图 划分世界区域并显示国家名
2017-12-20
jdk源码share.rar
2017-09-07
openjdk8 源码 包括 jvm的实现
2017-09-07
JAVA网络编程 第4版.pdf
2017-09-07
MySQL必知必会(文字版).pdf
2017-09-07
Java数据结构和算法.(第二版).pdf
2017-09-07
Java RESTful Web Service实战.pdf
2017-09-07
MySQL性能调优与架构设计--全册.pdf
2017-09-07
mysql技术内幕InnoDB存储引擎.pdf
2017-09-07
深入java虚拟机 周志明
2017-09-07
javaFX 基础教程
2015-05-26
GB8567-2006计算机软件文档编制规范
2014-05-06
axis 实现 webservice 例子
2012-08-24
web 编译器
2011-12-06
JNI实例 Java调用DLL c++调用Java
2010-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人