Java
文章平均质量分 93
Java相关
GhostStories
这个作者很懒,什么都没留下…
展开
-
Java反射知识
Java语言允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数、属性和方法等。Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程序化方式操作Class对象开辟了途径。简单实例我们将从一个简单例子开始探访转载 2015-03-26 14:12:42 · 615 阅读 · 0 评论 -
Java动态代理
Spring AOP使用动态代理技术在运行期织入增强的代码,为了揭示Spring AOP底层的工作机理,有必要对涉及到的Java知识进行学习。Spring AOP使用了两种代理机制:一种是基于JDK的动态代理;另一种是基于CGLib的动态代理。之所以需要两种代理机制,很大程度上是因为JDK本身只提供接口的代理,而不支持类的代理。带有横切逻辑的实例我们通过具体化代码实现上一节所介转载 2015-03-26 15:41:38 · 710 阅读 · 0 评论 -
Java并发 ThreadLocal
我们知道Spring通过各种模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突。我们使用模板类访问底层数据,根据持久化技术的不同,模板类需要绑定数据连接或会话的资源。但这些资源本身是非线程安全的,也就是说它们不能在同一时刻被多个线程共享。虽然模板类通过资源池获取数据连接或会话,但资源池本身解决的是数据连接或会话的缓存问题转载 2015-03-29 11:54:20 · 368 阅读 · 0 评论 -
《Thinking in Java》读书笔记之并发(一)
在没有接触并发编程概念之前,你学到的都是有关顺序编程的知识,即程序中的所以事物在任意时刻都只能执行一个步骤 并行编程可以使程序执行速度得到极大的提高,或者为设计某些类型的程序提供更易用的模型,或者两者皆有。原创 2015-04-08 15:30:38 · 546 阅读 · 0 评论 -
《Thinking in Java》读书笔记之并发(二)
基本的线程机制 一个线程就是在进程中一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行任务Thread类 Thread构造器只需要一个Runable对象,调用Thread对象的start()方法为该线程执行必须的初始化操作。原创 2015-04-08 15:52:07 · 573 阅读 · 0 评论 -
《Thinking in Java》读书笔记之并发(三)
使用Executor在Java SE5的java.util.concurrent包中的执行器(Executor)将为你管理Thread对象,Executor在客户端和任务执行之间提供了一个间接层 Executor在java SE 5/6 中是启动任务的优选方法。例程://: concurrency/CachedThreadPool.javaimport java.util原创 2015-04-08 16:49:35 · 465 阅读 · 0 评论 -
《Thinking in Java》读书笔记之并发(四)
休眠影响任务的一种简单方式是调用sleep(),这将使任务中止执行给定的时间。 例程://: concurrency/SleepingTask.java// Calling sleep() to pause for a while.import java.util.concurrent.*;public class SleepingTask extends LiftOf原创 2015-04-08 17:11:07 · 487 阅读 · 0 评论 -
《Thinking in Java》读书笔记之并发(五)
让步如果知道已经完成了在run()方法的循环的一次迭代过程中所需的工作,就可以给线程调度机制一个暗示:你的工作已近做的差不多了,可以让别的线程使用CPU了,这个暗示将通过调用yield()方法作出(不过这只是一个暗示,没有任何机制保证它将被采纳),当调用yield()时,你也是在建议具有相同优先级的其他线程可以运行原创 2015-04-09 10:23:56 · 505 阅读 · 0 评论 -
《Thinking in Java》读书笔记之并发(六)
共享受限资源对于并发工作,你需要某种方式来防止两个任务访问相同的资源,至少关键阶段不能出现这种现象基本上所有的并发模式在解决线程冲突问题的时候,都是采取序列化访问共享资源的方案synchronizedjava以提供关键字synchronized的形式,为防止资源冲突提供了内置支持 要控制对共享资源的访问,得先把它包装进一个对象LockLock对象必须显示的创建、锁定和释放。与synchronize原创 2015-04-09 14:51:07 · 582 阅读 · 0 评论 -
Java IO 总结(一)
学习Java中的IO,首先要理解Java中IO的流模型。所谓流,可以假想成河流,流的数据源,就是河流的发源地,流是单向的,流的单向性,就像河流的水流是单向的一样。Java中的流可以从两方面的分类: 第一种分类:输入流和输出流 第二种分类:节点流和处理流输入流和输出流,就是程序和外部的数据源进行IO操作。这些数据源可以是可以是内存,文件,还可以是网络上的一个URL。输入流和输出流的定义都是相对程序原创 2015-04-20 10:57:45 · 751 阅读 · 0 评论 -
Java IO 总结(二)
再次理解一下流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:读写单位不同:字节流以字节(8bit)原创 2015-04-20 11:25:45 · 455 阅读 · 0 评论 -
Java8-概述
概述 java怎么还在变 java中的函数 流 默认方法 来自函数式编程的其他好思想 小结欢迎访问本人博客查看原文:http://wangnan.tech1.概述为什么你应该关系java8?因为java8所做的改变,在许多方面比java历史上任何一次改变都深远再也不哟写下面这种啰嗦的程序了(按苹果重量排序)12345原创 2017-05-08 17:42:54 · 409 阅读 · 0 评论 -
Java8-行为参数化
在软件工程中,一个众所周知的问题就是,不管你做什么,用户的需求肯定会变行为参数化就是可以帮助你处理频繁变更需求的一种软件开发模式。欢迎访问本人博客查看原文:http://wangnan.tech它意味着拿出一个代码块,把它准备好却不执行它,这个代码块以后可以被你的程序其他部分调用我们看一个例子,我们通过不断改进这个例子,展示行为参数化版本1.1 筛选绿苹原创 2017-05-08 17:43:34 · 1053 阅读 · 0 评论 -
Java8-Lambda表达式
Lambda表达式,它可以很简洁地表示一个行为或传递代码,现在你可以把Lambda表达式看作匿名功能,它基本上就是没有声明名称的方法,但和匿名类一样,它也可以作为参数传递给一个方法欢迎访问本人博客查看原文:http://wangnan.techLambda管中窥豹可以把lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表,函数主体原创 2017-05-08 17:44:18 · 598 阅读 · 0 评论 -
Java8-流-简介
几乎每个java应用程序都会制造和处理集合,要是没有集合,还能做什么呢?尽管集合对于几乎任何一个java应用都是不可或缺的,但是集合操作却远远算不上完美欢迎访问本人博客查看原文:http://wangnan.tech很多业务逻辑都涉及类似于数据库的操作,比如对几道菜按照类别进行分组,查找出最贵的菜,大部分数据库都允许你声明式地指定这些操作,你不需要实现如何筛选,你只原创 2017-05-08 17:45:08 · 400 阅读 · 0 评论 -
Java8-流-使用流
欢迎访问本人博客查看原文:http://wangnan.tech筛选和切片用谓词筛选filter方法会接收一个谓词(一个返回Boolean)作为参数,并返回一个包括所有符号谓词的元素的流例子:筛选所有的素菜1List vegetarianMenu = menu.stream().filter(Dish::isVeg原创 2017-05-27 16:02:05 · 2030 阅读 · 0 评论 -
Java8-流-用流收集数据和并行流
欢迎访问本人博客查看原文:http://wangnan.tech收集器简介对流调用collect方法将对流中的元素触发一个规约操作Collectors实用类提供了很多静态工程方法,可以方便地创建常用收集器的实例,只要拿来用就可以了最常用的是toList方法,它会把流收集到一个List中:1List transactio原创 2017-05-27 16:03:06 · 936 阅读 · 0 评论 -
Java-ConcurrentHashMap整理
先说说HashMap HashTableHashMap线程不安全,并发情况下不能使用HashTable:线程安全,但是效率低下HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常低下。因为当一个线程访问HashTable的同步方法时,其他线程访问HashTable的同步方法时,可能会进入阻塞或轮询状态。线原创 2017-07-18 15:48:20 · 271 阅读 · 0 评论 -
Java-HashMap整理
参考:http://blog.csdn.net/vking_wang/article/details/14166593http://wiki.jikexueyuan.com/project/java-collection/hashmap.htmlHashMap数据结构数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);原创 2017-07-18 15:50:05 · 289 阅读 · 0 评论 -
Java引用类型
在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。强引用(StrongReference)强引用是使用最普遍的引用。如原创 2017-07-18 15:51:36 · 285 阅读 · 0 评论 -
Java-WeakHashMap整理
介绍以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除WeakHashMap 类的行为部分取决于垃圾回收器的动作。因为垃圾回收器在任何时候都可能丢弃键,WeakHashMap原创 2017-07-18 15:52:45 · 313 阅读 · 0 评论 -
JVM内存模型整理
Table of Contents内存模型图详细介绍程序计数器PC虚拟机栈本地方法栈方法区Java堆一般地大家讲到的Java内存其实就是Jvm内存Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。内存模型图详细原创 2017-09-08 15:20:38 · 301 阅读 · 0 评论 -
Java-BIO/NIO/AIO整理
Table of Contents参考http://qindongliang.iteye.com/blog/2018539一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作。同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO。阻塞IO和非阻塞IO的区别在于第一步,发起IO请求是否会被阻塞,原创 2017-09-08 15:22:41 · 259 阅读 · 0 评论 -
Java-LinkedHashMap整理
Table of Contents概述例子HashMapLinkedHashMap实现成员变量初始化储存读取排序模式对比下几种MapHashMapHashtableLinkedHashMapTreeMap总结概述HashMap 是无序的,HashMap 在 put 的时候是根据 key 的 hashcode 进行 hash 然原创 2017-09-08 15:26:08 · 345 阅读 · 0 评论 -
Java-HashSet/LinkedHashSet整理
Table of ContentsHashSet概述构造方法add方法contains方法remove方法clone方法注意LinkedHashSet概述构造方法总结HashSet概述HashSet 是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素所有放入 HashSet 中的集合元原创 2017-09-08 15:26:34 · 260 阅读 · 0 评论 -
Java-LinkedHashMap与LRUcache整理
Table of ContentsLRU 缓存介绍实现代码LRU 缓存介绍我们平时总会有一个电话本记录所有朋友的电话,但是,如果有朋友经常联系,那些朋友的电话号码不用翻电话本我们也能记住,但是,如果长时间没有联系了,要再次联系那位朋友的时候,我们又不得不求助电话本,但是,通过电话本查找还是很费时间的。但是,我们大脑能够记住的东西是一定的,我们只能记住自己最熟悉的,而原创 2017-09-08 15:26:56 · 418 阅读 · 0 评论 -
Java-ArrayList快速失败机制/CopyOnWriteArrayList/扩容
1.迭代ArrayList时做add或remove操作会发生什么?答案会抛出 java.util.ConcurrentModificationException 解决方法对JAVA集合进行遍历删除时务必要用迭代器使用CopyOnWriteArrayList总结:对于ArrayList,在使用Iterator遍历时,不能使用list.add()...原创 2018-02-08 11:03:59 · 1018 阅读 · 0 评论 -
JVM内存管理-垃圾回收与内存分配
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。Java垃圾收集哪些内存需要回收?线程私有区的程序计数器、虚拟机栈和本地方法栈不需要,重点是共享数据区的堆和方法区部分的内存什么时候回收?判断对象是否存活的算法?引用计数法逻辑:给对象添加一个引用计数器,每当有一个地方引...原创 2018-02-08 11:06:35 · 218 阅读 · 0 评论 -
JVM内存溢出详解(栈溢出,堆溢出,持久代溢出以及无法创建本地线程)
写在前面内存溢出和内存泄漏的区别:内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无...原创 2018-02-08 11:07:40 · 1764 阅读 · 0 评论 -
JVM垃圾回收器详解
说明针对jdk7关于垃圾回收可以查看我之前的博文: JVM内存管理-垃圾回收与内存分配垃圾收集器分类按线程数分可以分为串行垃圾回收器和并行垃圾回收器。串行垃圾回收器一次只使用一个线程进行垃圾回收;并行垃圾回收器一次将开启多个线程同时进行垃圾回收。在并行能力较强的 CPU 上,使用并行垃圾回收器可以缩短 GC 的停顿时间。按照工作模式分...原创 2018-02-08 11:10:52 · 214 阅读 · 0 评论 -
JVM编译优化
在部分的商用虚拟机中,Java 程序最初是通过解释器(Interpreter )进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁的时候,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,即时编译器(Just In Time Compiler )会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化。HotSpot 内的即时编译器...原创 2018-02-08 11:13:45 · 311 阅读 · 0 评论