Java&Java企业级架构
Dave888Zhou
大处着眼,小处着手;群居守口,独居守心。
展开
-
Java常用开源库梳理(2)
SLF4j和Logback库1. LoggerFactory, Logger (1)Slf4j:各种日志框架(如java logging, logback, log4j)一个抽象层,是一个简单的外观模块封装(为一组接口提供一个一致的界面,从而使得复杂的子系统与用户端分离解耦)。它允许你在后台使用任意的日志类库实现。日志是一项基本功能,如果你的应用中引用的第三方库使用了各种日志类库,会导致你应...原创 2019-07-06 10:45:09 · 1409 阅读 · 0 评论 -
深入理解Java类加载器(2):线程上下文类加载器
线程上下文类加载器线程上下文类加载器(context class loader)是从 JDK 1.2 开始引入的。类 java.lang.Thread中的方法 getContextClassLoader()和 setContextClassLoader(ClassLoader cl)用来获取和设置线程的上下文类加载器。如果没有通过 setContextClassLoader(ClassLo转载 2014-07-06 19:11:16 · 43429 阅读 · 10 评论 -
面向GC的Java编程
Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题。以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象,就交给GC来做吧!甚至有人说,如果在编程过程中频繁考虑内存问题,是一种退化,这些事情应该交给编译器,交给虚拟机来解决。 这话其实也没有太大问题,的确,大部分场景下关心内存、GC的问题,显得有点“转载 2014-05-30 09:41:10 · 1468 阅读 · 0 评论 -
浅析Java虚拟机结构与机制
本文旨在给所有希望了解JVM(Java Virtual Machine)的同学一个概念性的入门,主要介绍了JVM的组成部分以及它们内部工作的机制和原理。当然本文只是一个简单的入门,不会涉及过多繁杂的参数和配置,感兴趣的同学可以做更深入的研究,在研究JVM的过程中会发现,其实JVM本身就是一个计算机体系结构,很多原理和我们平时的硬件、微机原理、操作系统都有十分相似的地方,所以学习JVM本身也是加深自转载 2014-05-28 16:20:02 · 1561 阅读 · 0 评论 -
高吞吐低延迟Java应用的垃圾回收优化
高性能应用构成了现代网络的支柱。LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求。要优化用户体验,低延迟地响应这些请求非常重要。比如说,用户经常用到的一个功能是了解动态信息——不断更新的专业活动和内容的列表。动态信息在LinkedIn随处可见,包括公司页面,学校页面以及最重要的主页。基础动态信息数据平台为我们的经济图谱(会员,公司,群组等等)中各种实体的更新建立索引,它必须高吞翻译 2014-05-28 16:18:48 · 3951 阅读 · 1 评论 -
Java集合框架官方教程(6):算法
Lesson: Algorithms The polymorphic algorithms described here are pieces of reusable functionality provided by the Java platform. All of them come from theCollections class, and all take the翻译 2014-06-08 15:50:41 · 1441 阅读 · 0 评论 -
JVM调优总结(2):调优方法
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。典型设置:java -Xmx3550m -Xms3转载 2014-05-27 17:48:36 · 11401 阅读 · 1 评论 -
JVM调优总结(1):基本垃圾回收算法
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress引用类转载 2014-05-27 17:46:06 · 4372 阅读 · 1 评论 -
Java集合框架总结
集合框架的基本要点1、Java容器类库的简化图,下面是集合类库更加完备的图。包括抽象类和遗留构件(不包括Queue的实现):转载 2014-06-11 10:16:59 · 1391 阅读 · 0 评论 -
Java集合框架官方教程(7):自定义集合类的实现
Lesson: Custom Collection ImplementationsMany programmers will never need to implement their own Collections classes. You can go pretty far using the implementations described in the preceding sec翻译 2014-06-11 10:08:18 · 2965 阅读 · 0 评论 -
深入理解JavaBean(1):JavaBean的内省与BeanUtils库
内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法。 JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”。方法比较少。这些信息储存在类的私有变量中,转载 2014-07-05 14:50:46 · 9961 阅读 · 1 评论 -
深入理解JavaBean(2):属性编辑器PropertyEditor
在Spring配置文件里,我们往往通过字面值为Bean各种类型的属性提供设置值:不管是double类型还是int类型,在配置文件中都对应字符串类型的字面值。BeanWrapper填充Bean属性时如何将这个字面值转换为对应的double或int等内部类型呢?我们可以隐约地感觉到一定有一个转换器在其中起作用,这个转换器就是属性编辑器。“属性编辑器”这个名字可能会让人误以为是一个带用户界面的输转载 2014-07-05 14:50:48 · 14108 阅读 · 0 评论 -
深入理解Java类加载器(1):Java类加载原理解析
1 基本信息每个java开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是java技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性转载 2014-07-06 19:08:50 · 65118 阅读 · 12 评论 -
Java常用开源库梳理(1)
Java集合数据结构1. List: 线程不安全:ArrayList, LinkedList, BitSet 线程安全:Vector, CopyOnWriteArrayList (1)ArrayList:使用数组实现的List,相当于动态数组,读取速度快,插入与删除速度慢(因为插入与删除时要移动后面的元素),保持插入顺序,适合于随机访问。允许重复元素,包括null。 (2)Linke...原创 2019-07-06 10:44:52 · 2032 阅读 · 0 评论 -
Java常用开源库梳理(4)
Apache Flink库1. StreamExecutionEnvironment, ExecutionConfigLocalStreamEnvironment, RemoteStreamEnvironmentDataStream, DataStreamSource, DataStreamSink, KeyedStream, WindowedStream(1)StreamExecuti...原创 2019-07-09 10:37:35 · 1805 阅读 · 0 评论 -
Java常用开源库梳理(3)
Netty库1. ServerBootstrap, Bootstrap(1)ServerBootstrap:服务端启动器。 group():指定mainReactor线程池和subReactor线程池,前者是acceptor线程池用于接受客户端连接,后者是worker线程池用于处理IO事件,一类是服务端接收到客户端数据的Read事件,另一类是用户线程主动向客户端发送数据的Write事...原创 2019-07-09 10:37:08 · 1961 阅读 · 0 评论 -
Mockito:一个强大的用于Java开发的模拟测试框架
介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例。模拟(Mock)的概念 在软件开发的世界之外 "mock"一词是指模仿或者效仿. 因此可以将“mock”理解为一个替身,替代者. 在软件开发中提及"mock",通常理解为模拟对象或者Fake.译者注:mock等多代表的是对被模拟对翻译 2014-07-12 16:05:40 · 30505 阅读 · 1 评论 -
面向切面编程(2):AOP深入探索
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 举例:假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时转载 2014-06-22 15:31:14 · 2385 阅读 · 0 评论 -
面向切面编程(1):AOP介绍
AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方法论,它是对传统OOP编程的一种补充。 OOP是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系;AOP是希望能够将通用需求功能从不相转载 2014-06-22 15:29:10 · 1283 阅读 · 0 评论 -
Java动态代理与Cglib库
1、什么是动态代理?答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。2.为什么使用动态代理?答:因为动态代理可以对请求进行任何处理3.使用它有哪些好处?转载 2014-06-13 23:38:08 · 16216 阅读 · 1 评论 -
深入理解线程局部变量:ThreadLocal
一、ThreadLocal概述 学习JDK中的类,首先看下JDK API对此类的描述,描述如下: 该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望转载 2014-07-09 23:05:33 · 10730 阅读 · 1 评论 -
深入理解Java国际化
假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面——这便是典型的i18n国际化问题。对于有国际化要求的应用系统,我们不能简单地采用硬编码的方式编写用户界面信息、报错信息等内容,而必须为这些需要国际化的信息进行特殊处理。简单来说,就是为每种语言提供一套相应的资源文件,并以规范化命名的方式转载 2014-07-09 23:26:25 · 63472 阅读 · 3 评论 -
深入理解Java注解(1):基础详解
什么是注解(Annotation): Annotation(注解)就是Java提供了一种与程序元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据。 Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟转载 2014-06-29 17:38:37 · 7073 阅读 · 0 评论 -
深入理解Java注解(2):高级应用
下面进一步深入分析Java注解的机制。一、为什么使用Annotation: 在JAVA应用中,我们常遇到一些需要使用模版代码。例如,为了编写一个JAX-RPC web service,我们必须提供一对接口和实现作为模版代码。如果使用annotation对远程访问的方法代码进行修饰的话,这个模版就能够使用工具自动生成。 另外,一些API需要使用与程序代码同时维护的附属文件转载 2014-06-29 17:40:34 · 10179 阅读 · 0 评论 -
成为Java GC专家(3):如何优化Java垃圾回收机制
本文是成为Java GC专家系列文章的第三篇。在第一篇《成为JavaGC专家Part I — 深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。在第二篇《成为JavaGC专家Part II — 如何监控Java垃圾回收机制》,我解释了JVM实际上是如何执行垃圾回收的,翻译 2014-05-21 15:00:05 · 2657 阅读 · 0 评论 -
成为Java GC专家(4):Apache的MaxClients参数及其对Tomcat执行Full GC的影响
这是“成为Java GC专家系列文章”的第四篇。在第一篇文章 成为JavaGC专家Part I — 深入浅出Java垃圾回收机制 中我们学习了不同GC算法的执行过程,GC如何工作,新生代及老年代的基本概念,在JDK7中你应该了解的5种GC类型以及他们的性能如何。在第二篇文章 成为JavaGC专家Part II — 如何监控Java垃圾回收机制 中我们学到了JVM到底是如何执行垃圾回收,我们翻译 2014-05-21 15:07:34 · 2381 阅读 · 0 评论 -
成为Java GC专家(1):深入浅出Java垃圾回收机制
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验。如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当然,翻译 2014-05-20 17:19:18 · 5025 阅读 · 0 评论 -
成为Java GC专家(2):如何监控Java垃圾回收机制
本文是成为Java GC专家系列文章的第二篇。在第一篇《深入浅出Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。在本文中,我将解释JVM到底是如何执行垃圾回收处理的。什么是GC监控?垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,我们可以查明:1翻译 2014-05-20 17:20:23 · 13967 阅读 · 2 评论 -
Oracle官方并发教程(2)
多线程之间经常需要协同工作,最常见的方式是使用Guarded Blocks,它循环检查一个条件(通常初始值为true),直到条件发生变化才跳出循环继续执行。在使用Guarded Blocks时有以下几个步骤需要注意:假设guardedJoy()方法必须要等待另一线程为共享变量joy设值才能继续执行。那么理论上可以用一个简单的条件循环来实现,但在等待过程中guardedJoy方法不停的检查循环条翻译 2014-05-17 16:50:45 · 2066 阅读 · 0 评论 -
Oracle官方并发教程(1)
计算机的使用者一直以为他们的计算机可以同时做很多事情。他们认为当其他的应用程序在下载文件,管理打印队列或者缓冲音频的时候他们可以继续在文字处理程序上工作。甚至对于单个应用程序,他们仍然期待它能在在同一时间做很多事情。举个例子,一个流媒体播放程序必须能同时完成以下工作:从网络上读取数字音频,解压缩数字音频,管理播放和更新程序显示。甚至文字处理器也应该能在忙于重新格式化文本和刷新显示的情况下同时响应键翻译 2014-05-17 16:41:22 · 1307 阅读 · 0 评论 -
Java并发与多线程教程(3)
没有收到信号就唤醒,循环条件仍为true,while循环会再执行一次,促使醒来的线程回到等待状态。Java中的锁锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂。因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字(译者注:这翻译 2014-05-17 16:27:14 · 1709 阅读 · 0 评论 -
Java并发与多线程教程(2)
Java同步块Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java 同步关键字(synchronized)Java中的同步块用synchronized标翻译 2014-05-15 14:47:21 · 4175 阅读 · 0 评论 -
Java并发与多线程教程(1)
在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的CPU时间、所有的内存和其他计算机资源。一个好的程翻译 2014-05-15 14:32:14 · 4783 阅读 · 2 评论 -
Java集合框架官方教程(1):Collection/Set/List接口
一个集合,即collection,有时也被称为一个容器,只是将多个元素聚集成一个单元。Collections常被用来存储、检索、操纵聚集数据以及聚集数据间的通信。一般来说,Collections表示一组形成自然集合的数据项,比如一手扑克牌、一个信箱(由很多信组成)或者电话簿。 如果你熟悉Java语言或者任何一门其他编程语言,你可能已经对Collections比较熟悉了。Java 1.2之前的集合实翻译 2014-06-05 13:02:57 · 6381 阅读 · 0 评论 -
面向切面编程(3):AOP实现机制
1 AOP各种的实现AOP就是面向切面编程,我们可以从几个层面来实现AOP。转载 2014-06-23 22:28:08 · 6249 阅读 · 0 评论 -
Java集合框架官方教程(2):Queue/Deque/Map接口
The Queue Interface A Queue is a collection for holding elements prior to processing. Besides basicCollection operations, queues provide additional insertion, removal, and inspection operat翻译 2014-06-05 13:26:05 · 3027 阅读 · 0 评论 -
深入理解Java反射:候捷谈Java反射机制
摘要 Reflection是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信转载 2014-06-29 17:58:01 · 5687 阅读 · 1 评论 -
Java垃圾回收精粹
Java垃圾回收精粹分4个部分,本篇是第1部分。在第1部分里介绍了权衡点、对象生命周期以及全局暂停事件。 串行、并行、并发、CMS、G1、年轻代(Young Gen)、新生代(New Gen)、旧生代(Old Gen)、持久代(Perm Gen)、伊甸区(Eden)、年老区(Tenured)、幸存区(Survivor Spaces)、安全点(Safepoints)以及数百种JVM启动参数。当翻译 2014-05-25 11:01:04 · 2448 阅读 · 0 评论 -
深入理解JVM内幕
每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境)上的。JRE中最重要的部分是Java虚拟机(JVM),JVM负责分析和执行Java字节码。Java开发人员并不需要去关心JVM是如何运行的。在没有深入理解JVM的情况下,许多开发者已经开发出了非常多的优秀的应用以及Java类库。不过,如果你了解JVM的话,你会更加了解Jav翻译 2014-05-25 10:58:26 · 46156 阅读 · 12 评论 -
Java集合框架官方教程(5):集合类的同步包装器/不可变包装器
Wrapper Implementations Wrapper implementations delegate all their real work to a specified collection but add extra functionality on top of what this collection offers. For design patter翻译 2014-06-08 13:37:40 · 2382 阅读 · 0 评论