- 博客(13)
- 资源 (22)
- 问答 (1)
- 收藏
- 关注
原创 深入理解Lock的底层实现原理
lock的实现完全是由java写的,和操作系统或者是JVM虚拟机没有任何关系。整体来看Lock主要是通过两个东西来实现的分别是CAS和ASQ(AbstractQueuedSynchronizer)。通过加锁和解锁的过程来分析锁的实现。加锁一、整体概述流程1. 读取表示锁状态的变量2. 如果表示状态的变量的值为0,那么当前线程尝试将变量值设置为1(通过CAS操作完成),当多个线程
2017-01-22 23:58:05 13353 1
原创 深入理解voildate
对于被voildate修饰过的变量大部分人都知道当一个线程修改过后对另外一个线程可见,具体是为什么资料的讲解比较少,通过读并发编程的艺术对voildate变量的原理机制做下总结。 对于voildate变量来讲是有两个语义的,一个是可见性问题,另外一个是禁止指令重排。 1、可见性问题 相对于内存,CPU的速度是极高的,如果CPU需要存取数据时都直接与内存打交道,在存取过
2017-01-22 13:37:45 1003
转载 分布式锁(1):Java 常用技术方案
前言:由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题。所以自己结合实际工作中的一些经验和网上看到的一些资料,做一个讲解和总结。希望这篇文章可以方便自己以后查阅,同时要是能帮助到他人那也是很好的。正文:第一步,自身的业务场景:在我日常做的项目中,目前涉及了以下这些业务场景:场景一
2017-01-20 16:04:38 209
转载 JVM初探- 内存分配、GC原理与垃圾收集器
JVM内存的分配与回收大致可分为如下4个步骤: 何时分配 -> 怎样分配 -> 何时回收 -> 怎样回收. 除了在概念上可简单认为new时分配外, 我们着重介绍后面的3个步骤:I. 怎样分配- JVM内存分配策略对象内存主要分配在新生代Eden区, 如果启用了本地线程分配缓冲, 则优先在TLAB上分配, 少数情况能会直接分配在老年代, 或被拆分成标量类型在栈上分配(JIT优
2017-01-20 11:30:21 372
原创 ReentrantLock 实现原理深入探究
前言这篇文章被归到Java基础分类中,其实真的一点都不基础。网上写ReentrantLock的使用、ReentrantLock和synchronized的区别的文章很多,研究ReentrantLock并且能讲清楚ReentrantLock的原理的文章很少,本文就来研究一下ReentrantLock的实现原理。研究ReentrantLock的实现原理需要比较好的Java基础以及阅读代码的能力,有
2017-01-20 11:27:38 504 1
原创 getClass().getResourceAsStream() .获取配置文件的方法
class.getResourceAsStream 用法 首先,Java中的getResourceAsStream有以下几种 Class.getResourceAsStream(String path) : path 不以’/‘开头时默认是从此类所在的包下取资源,以’/‘开头则是从 ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取
2017-01-13 00:21:06 14766
转载 跨域SSO
跨域SSO的实现之一:架构设计翻译自CodeProject网站ASP.NET9月份最佳文章:Single Sign On (SSO) for cross-domain ASP.NET applications。翻译不妥之处还望大家多多指导、相互交流。文章分为两部分:架构设计和程序实现,此为第一篇即:架构设计或者叫设计蓝图(Part-I - The design
2017-01-11 14:35:59 407
原创 IO流详解
File类 String path="e:/img"; String fileName="test.jpg"; new File(path,fileName);//相对路径:相对于path的路径 new File(new File(path),fileName);//同样是相对于path的路径IO流分类1、流向 输入流与输出流 程序 与 文件|数组|网络连接|
2017-01-10 11:32:41 482
原创 Java如何定位占用CPU比较高的问题
编写Java项目时,经常会遇到两种问题。 第一种:Java进程占用CPU比较高第二种:Java进程堆内存溢出 今天主要跟大家聊聊第一种问题如何排查。 一、确定消耗CPU的Java进程 从上图可以看到Java进程 27459 消耗的CPU比较高。 二、查找 27459 Java进程消耗CPU线程ID
2017-01-09 17:46:06 1932
转载 SpringMVC 请求数据封装转换
简介:handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型)A、处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解: @PathVariable;B、处理request header部分的注解: @RequestHeader,
2017-01-05 16:41:32 3860
原创 垃圾收集方式
垃圾收集算法1、标记清除算法 标记清除算法分为标记和清除两个阶段,首先标记出所要回收的对象,在标记完后统一回收所有被标记的对象。有两点不足,一是效率问题,标记清除两个过程的效率都不高;另外一个是标记清楚之后会产生大量的不连续碎片,碎片太多会导致以后无法分配大对象。2、赋值算法 将可用的内容按照容量划分为大小相等的两块,每次只使用其中的一块,当另外一块用完了,就
2017-01-05 01:12:07 911
原创 Java虚拟机体系结构
Java程序执行流程Java程序的执行依赖于编译环境和运行环境。源码代码转变成可执行的机器代码,由下面的流程完成:在 Java虚拟机规范中,一个虚拟机实例的行为是分别按照子系统、内存区、数据类型和指令来描述的,这些组成部分一起展示了抽象的虚拟机的内部体系结构。JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序
2017-01-05 00:31:30 384
转载 Java变量的初始化问题探究
对于Java的变量,我们知道有成员变量和局部变量。关于他们的初始化,基本上所有书上都会写。成员变量,java会帮助你初始化,局部变量,则需要程序员自己初始化。对于类的成员变量。不管程序有没有显示的初始化,Java 虚拟机都会先自动给它初始化为默认值。规则为:1、整数类型(byte、short、int、long)的基本类型变量的默认值为0。2、单精度
2017-01-03 16:18:08 483
elasticsearch2.3.3中离线安装的插件
2017-02-28
azkaban2.5 配置 jar包完整版
2015-07-10
JSP 书目检索系统
2012-01-05
elasticsearch 过滤器使用问题求大神
2015-04-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人