
Java高级
文章平均质量分 84
小飞鹤
这个作者很懒,什么都没留下…
展开
-
AQS与JUC中的锁实现原理
摘要提到JAVA加锁,我们通常会想到synchronized关键字或者是Java Concurrent Util(后面简称JCU)包下面的Lock,今天就来扒一扒Lock是如何实现的,比如我们可以先提出一些问题:当我们通实例化一个ReentrantLock并且调用它的lock或unlock的时候,这其中发生了什么?如果多个线程同时对同一个锁实例进行lock或unlcok操作,这其中又发生了什么...转载 2018-08-31 16:54:43 · 1323 阅读 · 0 评论 -
JVM中的GC回收分析
1.GC垃圾回收算法1、三种垃圾回收算法标记-清除(年老代)标记-整理(即标记-压缩)(年老代)复制(年轻代)1.1、标记-清除算法原理:从根集合节点进行扫描,标记出所有的存活对象,最后扫描整个内存空间并清除没有标记的对象(即死亡对象)适用场合:存活对象较多的情况下比较高效适用于年老代(即旧生代)缺点:容易产生内存原创 2016-08-06 14:13:42 · 3710 阅读 · 1 评论 -
JVM类加载机制与反射
一、Java类加载机制1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始转载 2016-05-30 10:50:37 · 1704 阅读 · 0 评论 -
Java类的加载机制 ClassLoader
1.图解JVM中的ClassLoader java应用环境中不同的class分别由不同的ClassLoader负责加载。 一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader Bootstrap ClassLoader 负责加载java基础类,主要是 %JR原创 2016-01-29 18:01:37 · 2003 阅读 · 0 评论 -
Java NIO 与 Nio Socket
Java NIO 目录:Java NIO概述Java NIO ChannelJava NIO BufferJava NIO Scatter / GatherJava NIO 通道之间的数据传输Java NIO SelectorJava NIO FileChannelJava NIO SocketChannelJava NIO ServerSocketChannelJava NIO Da原创 2016-01-22 20:31:54 · 1305 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲: 一.对ThreadLocal的理解 二.深入解析ThreadLocal类转载 2015-12-30 15:11:37 · 780 阅读 · 0 评论 -
Java I/O模型与NIO解析
1.Java IO模型解析 也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念 说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,接下来介绍了5种IO模型,最后介绍了两种和高性能IO设计转载 2015-12-30 14:17:34 · 1011 阅读 · 0 评论 -
Java内存模型与并发同步常用的关键字(volatile和Synchronized)
1.Java内存模型参考:http://www.infoq.com/cn/special-column/articles/ Java内存模型专栏2.volatile关键字的理解Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,原创 2015-12-10 20:53:18 · 988 阅读 · 0 评论 -
多线程与并发知识点总结
对于多线程和并发编程这个比较大的技术模块,我们会整理一些帖子方便知识点的梳理,同时会原创视频帮助大家理解线程和并发的各个细节,以及JMM等比较深入的线程内存结构。最终的目的是写好代码。现在以前收藏的帖子整理分享给大家.大体上结构还是很全面,有些具体的细节还不够仔细。在录制视频中注意这些细节的讲解。1.计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用转载 2015-08-03 10:35:46 · 2433 阅读 · 1 评论 -
Java集合类操作优化总结
在实际的项目开发中会有很多的对象,如何高效、方便地管理对象,成为影响程序性能与可维护性的重要环节。Java 提供了集合框架来解决此类问题,线性表、链表、哈希表等是常用的数据结构,在进行 Java 开发时,JDK 已经为我们提供了一系列相应的类来实现基本的数据结构,所有类都在 java.util 这个包里,清单 1 描述了集合类的关系。清单 1.集合类之间关系Collection├转载 2015-07-31 15:21:58 · 948 阅读 · 0 评论 -
Java并发编程初级-未使用Java并发包的时候
转自Java并发编程网 http://ifeve.com/java_multi_thread_programming_1_2/ 本文介绍了Java原生的多线程技术(1.2),通过详细介绍wait和notify相关的机制、基础的多线程技术以及基于这些技术的等待超时、线程间的通信技术和线程池高阶技术,最后通过一个基于线程池的简单文本web服务器—MollyServer,来阐明多线程带来好处转载 2015-06-08 13:46:29 · 1164 阅读 · 0 评论 -
泛型总结
1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。可以在集合框架(Collection framework)中看到泛型的动机。例如,Map 类允许您向一个 Map 添加任意类转载 2015-05-07 13:37:50 · 736 阅读 · 0 评论 -
详解Java反射机制
1.Java反射机制:反射机制允许程序在运行时通过反射的API获取类中的描述,方法,并且允许我们在运行时改变fields内容或者去调用methods2.反射机制提供的功能: 1.运行时判断任意一个对象所属的类 2.运行时构造任意一个类的对象 3.运行时判断任意一个类所具有的成员变量和方法 4原创 2015-05-07 13:22:30 · 1091 阅读 · 1 评论 -
JVM性能监控和调优
参考:http://www.cnblogs.com/java-zhao/category/776216.html(万分感谢,学了好多东西)1. JVM性能监控1、定位系统问题依据GC日志堆转储快照(heapdump/hprof文件)线程快照(threaddump/javacore文件)运行日志异常堆栈分析依据的工具jps:显示指定系统内的所有JV转载 2016-08-06 14:31:40 · 3732 阅读 · 0 评论 -
理解concurrent包中的CountDownLatch
正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在Java并发中,countdownlatch的概念是一个常见的面试题,所以一定要确保你很好的理解了它。在这篇文章中,我将会涉及到在Java并发编 程中跟CountDownLatch相关的以下几点:目录CountDownLatch是什么转载 2016-09-12 20:05:09 · 2363 阅读 · 0 评论 -
JDK1.8源码分析之AbstractQueuedSynchronizer
一、前言 在锁框架中,AbstractQueuedSynchronizer抽象类可以毫不夸张的说,占据着核心地位,它提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。所以很有必要好好分析。二、AbstractQueuedSynchronizer数据结构 分析类,首先就要分析底层采用了何种数据结构,抓住核心点进行分析,经过分析可知,AbstractQueued...转载 2018-08-31 14:34:19 · 590 阅读 · 1 评论 -
CountDownLatch和CyclicBarrier的简单使用
转自:http://www.kissyu.org/2016/07/18/%E5%AD%A6%E4%B9%A0%E4%BD%BF%E7%94%A8CountDownLatch%E5%92%8CCyclicBarrier/简介CountDownLatch和CyclicBarrier都是线程同步的辅助工具。CountDownLatchCountDownLatch可转载 2017-08-30 09:44:18 · 507 阅读 · 0 评论 -
Future --- 多线程设计模式
Future --- 多线程设计模式说到多线程的future,百度 多线程 future,网上也有各式各样的例子,写的比我还要好,但是实在是这个模式或者说例子以及实用性太大了,我不得不拿出来讲,甚至在实际生产环境中也是可以用的.我呢,也是拿出网上的例子详细的讲一遍~~看下面的图↓↓↓↓↓传统下单流程.jpg如上图,传统的订单下单流程,首先减商品库转载 2017-07-10 10:14:16 · 633 阅读 · 0 评论 -
深入Java集合HashMap实现原理
深入Java集合学习系列:HashMap的实现原理参考文献引用文献:深入Java集合学习系列:HashMap的实现原理,大部分参考这篇博客,只对其中进行稍微修改自己曾经写过的:Hashmap实现原理1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程转载 2017-04-05 10:26:49 · 539 阅读 · 0 评论 -
从Java内存模型的角度思考线程安全与并发
并发的两个关键问题1、线程之间如何通信2、线程之间如何同步 通信是指线程之间以何种机制来交换信息,在命令式编程中,通信机制有两种:共享内存和消息传递;JAVA的并发采用的是共享内存,线程之间的通信总是隐式进行。 同步指程序中用于控制不同线程间操作发生相对顺序的机制,在共享内存并发模型中,同步是显式进行的。JAVA的内存模型1、共享变量:分配在堆内转载 2017-03-23 15:08:29 · 2492 阅读 · 0 评论 -
JVM知识点总结
转自:http://www.ityouknow.com/java/2017/03/01/jvm-overview.html在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功。对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后,内功就更主要了。一个内功低的人招式在奇妙也打不过一个内功高的人。比如转载 2017-03-23 13:15:24 · 2608 阅读 · 0 评论 -
Java 动态代理机制详解(JDK 和CGLIB,Javassist,ASM)
转自:http://www.cnblogs.com/linghu-java/p/5714769.htmlclass文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生转载 2017-03-08 14:30:53 · 1984 阅读 · 0 评论 -
Java并发的核心控制机制
转载自:http://frodoking.github.io/2015/07/19/java-concurrent-mechanism/在一般性开发中,笔者经常看到很多同学在对待java并发开发模型中只会使用一些基础的方法。比如volatile,synchronized。像Lock和atomic这类高级并发包很多人并不经常使用。我想大部分原因都是来之于对原理的不属性导致的。在繁忙的开发工作转载 2016-09-27 14:13:37 · 3325 阅读 · 0 评论 -
Java反射案例详解
案例驱动是最好的,要不然只看理论的话,看了也不懂,通过案例的实战之后,在回过头去看看理论,会有更好的理解。【案例1】通过一个对象获得完整的包名和类名package Reflect;/** * 通过一个对象获得完整的包名和类名 * */class Demo{ //other codes...}class hello{ public static void原创 2016-10-12 14:18:24 · 2864 阅读 · 0 评论 -
[源码解析]HashMap和HashTable的区别(源码分析解读)
先来一段比较拗口的定义:Hashtable 的实例有两个参数影响其性能:初始容量 和 加载因子。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。注意,哈希表的状态为 open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索。加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量和加载因子这两个参数只是对该实现的提示。关于何时转载 2016-09-26 14:53:54 · 2210 阅读 · 0 评论 -
如何通过Exector使用一个优先级队列
实现一个基于优先级的Executor类很容易将执行者转换成一个基于优先级的(执行者)。你只要传入一个参数化为Runnable接口的PriorityBlockingQueue对象作为参数。但是,使用执行者时,你应该知道存储在优先级列队中的所有对象必须实现Comparable接口在内部,一个执行者使用一个阻塞队列来存储待处理任务。以任务到达执行者的顺序来存储。一个可能的替代就是使用一个原创 2016-09-18 09:59:06 · 2563 阅读 · 0 评论 -
Spring中AOP实现的两种方式之JDK和cglib的动态代理
AOP的实现原理: 都是基于代理模式,都是生成一个大代理对象 静态AOP: AspectJ实现的AOP, 将切面代码直接编译到Java类文件中 --- 实现: JDK提供的动态代理技术 动态AOP: 将切面代码进行动态织入实现的AOP --- Spring的AOP为动态AOP原创 2016-08-31 20:03:04 · 6613 阅读 · 0 评论 -
java 集合架构--[Collection] [List] [Set] [Map] [集合工具类]
数组与集合的共同点和区别集合框架--Set元素存取无序不可重复无索引Iterator 接口Stack 是 Vector的子类泛型Map 接口Collections 类关于数组 集合的总结 一 、集合架构数组与集合的共同点和区别相同点:数组或集合都是容器都可以存储对象区别是: --数组是长度固定的,一旦指定长度则不能再改变;数组除了可以存储对象,还可以存储基本数转载 2014-09-26 14:37:08 · 1295 阅读 · 1 评论 -
Java中的习惯用法总结
在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的。在本文中,我会尽量收集一些最常用的习惯用法,特别是很难猜到的用法。(Joshua Bloch的《 Effective Java 》对这个话题给出了更详尽的论述,可以从这本书里学习更多的用法。)我把本文的所有代码都放在公共场所里。你可以根据自己的喜好去复制和修改任意的代码片段,不需要任何的凭证。目录转载 2015-04-07 15:11:06 · 1049 阅读 · 0 评论 -
Java 排序和查找汇总
1.各种排序 import java.util.Random; /** * * 排序测试类 * * * * 排序算法的分类如下: * * 1.插入排序(直接插入排序、折半插入排序、希尔排序); * * 2.交换排序(冒泡泡排序、快速排序); * * 3.选择排序(直接选择排序、堆排序); * * 4.归并排序; * * 5.基数排序。 * * *原创 2014-08-26 11:03:52 · 1088 阅读 · 0 评论 -
Java中的内存模型和多线程分析
浅谈java内存模型 不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的。JVM定义了自己的内存模型,屏蔽了底层原创 2014-08-12 13:53:43 · 718 阅读 · 0 评论 -
Java网络编程详解
关于网络协议TCP TCP,传输控制协议(Transmission Control Protocol),是面向连接的通信协议。它提供两台计算机之间的可靠无差错的数据传输。应用程序通过 TCP 进行通讯时,数据源和接收目标之间会建立一个虚拟的连接,这个连接一旦建立,两台计算机之间就可以把数据作为双向字节流进行交换。其实基于 TCP 的通信传输的数据帧也不是可靠的,原创 2014-07-14 13:57:37 · 1878 阅读 · 0 评论 -
Java反射机制
Java反射机制Reflection,是在程序运行的时候能够获取和改变类的属性、方法等信息。因为反射的动态控制类的特性,所以大多被用在框架开发中等。我主要通过实例的方式来展现Java反射的常用方法。Java 反射机制主要提供了以下功能:1. 在运行时判断任意一个对象所属的类;2. 在运行时构造任意一个类的对象;3. 在运行时判断任意一个类所具有的成员原创 2014-07-30 10:25:27 · 836 阅读 · 0 评论 -
使用Java对文件进行压缩处理
在web开发过程中,进行文件的压缩传输是一种常见的需求。比如一种场景:用户需要下载定时生成的报表,我们需要先对报表文件进行压以方便用户的下载,并减少文件的存储空间。 事实上,JDK已经提供了文件压缩/解压缩的支持,可以生成zip/gzip的压缩格式,并且支持支持“校验和”以检查压缩文件的完整性。通常会使用CRC(循环冗余校验)算法进行校验。 遗憾的是,J原创 2014-07-29 11:28:50 · 3080 阅读 · 1 评论 -
Java并发器分析
一、简介 JDK5中添加了新的concurrent包,其中包含了很多并发容器,这些容器针对多线程环境进行了优化,大大提高了容器类在并发环境下的执行效率。 CopyOnWriteArrayList类是一个线程安全的List接口的实现,在该类的内部进行元素的写操作时,底层的数组将被完整的复制,这对于读操作远远多于写操作的应用非常适合。在CopyOnWriteArrayLis原创 2014-08-01 15:45:14 · 860 阅读 · 0 评论 -
Java多线程编程详解
线程的同步 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。Java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方原创 2014-07-24 17:29:04 · 1120 阅读 · 0 评论 -
正则表达式详解
第一个“\”这个是俗称转义字符,就是把一个字符标记为一个特殊字符或者原义字符。如:“n” 就是匹配“n” 。如果是“\n” 则是换行符。有人该问了如果我就是想写“\”这个斜杠呢? 这个也很简单啊!就直接是这样写“\\”就可以了!为什么写两个“\\”呢!就是为了区分。第二个“^”这个是俗称开始字符,就是说准备写正则了!如果设置了RegExp对象的Multiline属性,^也匹原创 2014-07-04 10:11:49 · 2960 阅读 · 0 评论 -
Java中的异常解析
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解。不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单、听话。不信?那你看看下面的代码,“猜猜”它执行后的结果会是什么?不要往后看答案、也不许执行代码看真正答案哦。如果你的答案是正确,那么这篇文章你就不用浪费时间看啦。原创 2014-07-04 10:35:03 · 1333 阅读 · 0 评论 -
java动态代理
一、代理的概念与作用 首先代理是一种常用的设计模式,其目的就是为其它对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息转发消息,以及进行消息被委托执行后的后续处理。程序中的代理是:要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系原创 2014-07-01 14:24:47 · 625 阅读 · 0 评论 -
Java对象池
单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数。对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加一个标记,标记该实例是否被占用。当类初始化的时候,这个对象池就被初始化了,实例就被创建出来。然后,用户可以向这个类索取实例,如果池中所有的实例都已经被占用了,那么抛出异常。用户用完以后,还要把实例“还原创 2014-07-23 13:54:35 · 714 阅读 · 0 评论