java编程
文章平均质量分 87
crazzy_lp
这个作者很懒,什么都没留下…
展开
-
JVM项目实践
一、启动分配内存 关于GC有一个常见的疑问是,在启动时,我们内存如何分配?用-Xmn,-Xmx,-Xms,-Xss,-XX:NewSize,-XX:MaxNewSize,-XX:MaxPermSize,-XX:PermSize,-XX:SurvivorRatio,-XX:PretenureSizeThreShold,-XX:MaxTenuringThreshold就基本可以配置内存启...原创 2016-12-05 11:11:48 · 290 阅读 · 0 评论 -
java高并发编程:2--volatile可见性同步
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是synchronized 的一部分 。 锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次只允...原创 2016-06-12 11:40:33 · 160 阅读 · 0 评论 -
java高并发编程:1--内存模型
我们在学习Java高并发编程前,先了解一下《java内存管理(1) 》、《Java垃圾回收(2)》、《java线程池使用》。一、计算机硬件的效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存作为内存与处理器之间的缓冲:将运算需要使用的数据复制到缓存中,让运算能快速进行,当运算结束后再...原创 2016-06-08 10:49:26 · 251 阅读 · 0 评论 -
WebService编程详解之客户端编写
一、wsdl2java用法wsdl2java -p com -d src -all aa.wsdl -p 指定其wsdl的命名空间,也就是要生成代码的包名: -d 指定要产生代码所在目录 -client 生成客户端测试web service的代码 -server 生成服务器启动web service的代码 -impl 生成web s...原创 2014-07-19 18:26:32 · 120 阅读 · 0 评论 -
WebService编程详解之安全应用
一、概述CXF 的 WS-Security 实现基于开放源码的 WSS4J 库。Axis2 代码也使用这个库,因此这两个堆栈的 WS-Security 配置细节有一些相似之处。但是,通过解释 WS-SecurityPolicy 配置 WSS4J 的代码层不一样。在 Axis2 中这由单独发布的 Rampart 模块处理,而在 CXF 中由 cxf-rt-ws-policy 和 cxf-rt...原创 2014-07-19 18:19:28 · 191 阅读 · 0 评论 -
WebService编程详解之Interceptor和Handler
一、有关调用CXF拦截器 1、拦截器概述 Interceptor是CXF架构中一个很有特色的模式。你可以在不对核心模块进行修改的情况下,动态添加很多功能。这对于CXF这个以处理消息为中心的服务框架来说是非常有用的,CXF通过在Interceptor中对消息进行特殊处理,实现了很多重要功能模块,例如:日志记录,Soap消息处理,消息的压缩处理。 在Interc...原创 2014-07-19 18:01:14 · 346 阅读 · 0 评论 -
WebService编程详解之配置篇
一、采用CXF+Spring构建WebService服务端(1)在Myeclipse中创建一个web工程,并将Apache-cxf-2.3.x/lib中的jar包拷贝到:工程名\WebRoot\WEB-INF\lib下。(2)在工程中编写WebService的interface和implements,注意在编写接口和实现类的过程中需要应用到各种类型的Annotation,用来描述web...原创 2014-07-19 17:52:56 · 399 阅读 · 0 评论 -
java web编程web.xml详解
一般的java web工程中都会用到web.xml,web.xml在Java web工程的WEB-INF目录下,web.xml主要的功能就是用来配置站点信息,主要的配置项有:①站台的名称和说明;②针对环境参数(Context)做初始化工作;③Servlet的配置(包括Filter、Listener、Servlet);④Tag Library的对应;⑤JSP网页设定;⑥Mime Typ...原创 2014-07-19 17:20:40 · 432 阅读 · 0 评论 -
log4j的配置详解
Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。在这里讲解log4j,一方面因为log4j在Java开发中是非常常用的日志输出控制部件,也是因为在hadoop中有一个flume组件,它监听数据的方式配置与这里非常相似,所以在这里...原创 2014-07-18 22:39:26 · 132 阅读 · 0 评论 -
定时任务管理之java篇quartz使用
在开发过程中,我们经常会遇到一些需要异步定期执行的批处理任务。比如夜里低峰时段的备份、统计,或者是每周、每月对数据库表进行整理,这时就需要通过使用定时任务管理器来辅助我们完成这些任务的定时触发。常见的定时任务管理器多分为三类,分别是: ①操作系统(OS)级别的定时任务管理器,例如linux的crontab、windows自带的计划任务。OS级不用专门开启监听器,占用系统资...原创 2014-07-18 20:38:19 · 2298 阅读 · 0 评论 -
代理模式(Proxy)
代理模式是对象的结构模式,代理模式给某一个对象提供一个代理对象,并由代理对象控制原对象的引用。换言之,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。一、代理的种类①远程代理:为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是本机器中,也可...原创 2014-07-16 21:00:14 · 127 阅读 · 0 评论 -
适配器模式(Adapter)
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 在大规模的系统开发过程中,我们常常碰到诸如以下这些情况:我们需要实现某些功能,这些功能已有还不太成熟的一个或多个外部组件,如果我们自己重新开发这些功能会花费大量时间;所以很多情况下会选择先暂时使用外部组件,以后再考虑随时替换。但这样一来,会带来一个问题,...原创 2014-07-15 23:10:07 · 134 阅读 · 0 评论 -
java高并发编程:4--Java中的阻塞队列
1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:...原创 2016-06-21 11:15:33 · 226 阅读 · 0 评论 -
Java高并发编程:3----Synchronized
1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。2 术语定义术语英文说明CASComp...原创 2016-06-21 11:51:10 · 129 阅读 · 0 评论 -
JVM监视与调优
学习Java GC机制的目的是为了在JVM出现问题时分析原因并解决。JVM监控与调优主要着眼于如何配置、如何监控、如何优化3点。一、参数配置 在Java虚拟机的参数中,有3种表示方法,用“ps -ef | grep java”命令,可以得到当前Java进程的所有启动参数和配置参数:标准参数(-),所有的jvm实现都必须实现这些参数的功能,并且向后兼容;非标准参数...原创 2016-12-04 15:39:11 · 149 阅读 · 0 评论 -
JVM监控与故障处理
现实企业级java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError内存不足内存泄露线程死锁锁争用(lock Contention)Java进程消耗CPU过高... ... 等等 这些问题在日常开发中可能被很多人忽视(比如遇到上面这些问题就重启服务器或者跳大内存,而不会深究问题根源),但能够解决这些问题是Java程序员的必备需...原创 2016-11-21 15:00:03 · 202 阅读 · 0 评论 -
Java垃圾回收(2)
一、Java垃圾回收概况 在Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不稳得执行着出栈和入栈操作。每个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,并且在方法结束或线程结束时,内存自然就跟着回收了,所以这几个区域内不需要过多考虑回收问题。而Java堆和方法区则不一样,一个接口中的多个实...原创 2015-09-18 15:21:07 · 166 阅读 · 0 评论 -
java内存管理(1)
一、java运行时数据区域①程序计数器线程独有,记录线程运行到的字节码位置;②java虚拟机栈和本地方法栈线程独有,用来记录方法被执行时存储的局部变量、对象引用等;③Java堆线程共享,用来存储实例对象;④方法区线程共享,用来存储虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;⑤直接内存,不占用Java虚拟机内存,但是Java虚拟机可以使用的内存。 程序计数器:...原创 2015-09-16 10:52:49 · 104 阅读 · 0 评论 -
java高并发编程:11--ReentrantReadWriteLock深入分析
一、ReentrantReadWriteLock与ReentrantLock 说到ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。 ReentrantLock 实现了标准的互斥操作,也就是一次只能有一个线程持有锁,也即所谓独占锁的概念。前面的章节中一直在强调这个特点。显...原创 2016-06-27 15:43:49 · 158 阅读 · 0 评论 -
java高并发编程:10--ReentrantLock深入分析
一、什么是reentrantlock java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现。这就为 Lock 的多种实现留下了空间,各种实现可能有不同的调度算法、性能特性或者锁定语义。 ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性...原创 2016-06-27 15:29:56 · 298 阅读 · 0 评论 -
java高并发编程:9--Atomic原子变量与原子类
一、何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成) 在x86 平台上,CPU提供了在指令执行期间对总线...原创 2016-06-24 16:10:33 · 188 阅读 · 0 评论 -
java高并发编程:8--Copy-On-Write容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArr...原创 2016-06-24 11:25:34 · 124 阅读 · 0 评论 -
java高并发编程:7--原子操作的实现原理
一、引言 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Intel处理器和Java里是如何实现原子操作的。二、术语定义三、处理器如何实现原子操作 32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多...原创 2016-06-24 11:07:56 · 177 阅读 · 0 评论 -
java高并发编程:5--ConcurrentLinkedQueue的实现原理分析
1. 引言 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列Con...原创 2016-06-23 11:23:18 · 174 阅读 · 0 评论 -
java高并发编程:6--深入分析ConcurrentHashMap
1.术语定义术语英文解释哈希算法hash algorithm是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。哈希表hash table根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所...原创 2016-06-23 10:52:37 · 194 阅读 · 0 评论 -
原始模型模式(prototype)
原始原型模式属于对象创建模式。通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原始模型模式。例如,在西游记中,孙悟空可以揪下一把毫毛,变出多个孙悟空,和他本身几乎一模一样,换言之,孙悟空可以根据自己的形象,复制出很多”身外之身“类,这就相当于采用了原始原型模式。 在Java语言中构件模型直接支持原始模型模式。所有的...原创 2014-07-14 23:31:46 · 346 阅读 · 0 评论 -
构造模式(Builder)
构造模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。具体的操作过程是:构造模式利用一个导演者对象和具体构造者对象一个一个的构造出所有的零件,从而构造出完整的产品对象;并且构造者模式将产品的结构和产品的零件构造过程对客户端隐藏起来,把对构造过程进行指挥的责任和具体构造者零件的责任分割开来,达到责任划分和封装的目的。 应当指出的是,这些零件有可能...原创 2014-07-14 20:49:25 · 299 阅读 · 0 评论 -
java反射机制(1)反射理论基础
运行时类型识别(Run-time Type Identification,RTTI)主要有两种方式,一种是我们在编译时和运行时已经知道了所有的类型,另外一种是功能强大的“反射”机制。 要理解RTTI在java中的工作原理,首先必须知道类型信息在运行时是如何表示的,这项工作是有“class对象”完成的,它包含了与类有关的信息。类是程序的重要组成部分,每个类都有一个clas...原创 2014-06-27 00:01:08 · 136 阅读 · 0 评论 -
java泛型
JDK1.5中最显著变化之一就是添加对泛型类型的支持。所谓的泛型就是指在对象建立时不指定类中属性的具体类型,而由外部在声明及实例化对象时指定类型。一、为什么要用泛型 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。 在没有泛型之前,由于JAVA中的类都是源自jav...原创 2014-06-25 00:09:20 · 179 阅读 · 0 评论 -
java线程池使用
在Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。一、为什么要用线程池 在Java中,如果每当一个请求到达就创建一个新线程,开销是相当大的。在实际使用中,每个请求创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源,甚至可能要比花在实际...原创 2014-06-23 23:41:51 · 643 阅读 · 1 评论 -
java多线程、资源共享和死锁
一、进程和线程的概念和区别 进程是一块包含了某些资源的内存区域。操作系统利用进程把它的工作划分为一些功能单元,并且进程中包含一个或多个执行单元称为线程(thread)。进程还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问,是系统进行资源分配和调度的一个独立单位。 线程是操作系统分配处理器时间的基本单元,可以有多个线程同时执行代码,且多个线程共享内存。但每个...原创 2014-06-23 00:09:17 · 311 阅读 · 0 评论 -
解析java传值和传址以及对象的Clone
在讨论上面问题之前,我们先来看看函数的实参为形参赋值时,传递的到底是什么东西?实际上实参赋值给形参时,是将自己的一份拷贝传递到函数内部。这就不难理解,不管是“传址”还是“传值”,本质上都是传值,但传递值的类型是不相同的。对于普通基本类型,就是这个数值的拷贝,所以函数内部对其进行修改,不会影响传递的实参的值;而对于指针来说,函数内部对其修改,影响的是指针指向的那片内存区域,但实参指...原创 2014-06-21 00:02:06 · 166 阅读 · 0 评论 -
java IO系统(2)
四、字符流 java提供了Reader和Writer两个专门操作字符流的类。①Reader使用字符的方式从文件中读取数据。常用方法有: Reader是一个抽象类,具体可以完成的功能有其子类完成,如下:CharArrayReader:直接从内存中以“字符”的形式读取数据。每次读取一个字符,存放到缓存区中。FileReader:从文本文件中读取字符的字符输入流,该字符输入流...原创 2014-06-19 23:18:27 · 97 阅读 · 0 评论 -
java IO系统(1)
java IO操作主要是指的是使用java进行输入、输出操作,java中的所有操作类都放在java.io包中。在这个java.io包中最重要的就是5个类和一个接口,5个类指的是File、OutputStream、InputStream、Write、Reader,一个接口指的是Serializable。掌握这些IO操作的核心就可以掌握了。 Java 流在处理上分为字...原创 2014-06-19 23:16:41 · 129 阅读 · 0 评论 -
java中数组与集合
在java编程的过程中,我们不能确定某一类型的对象到底会需要多少,为了解决这个问题,java提供了容纳对象的多种方式。其中内建的类型是数组;此外还提供了“集合类”,利用这些集合类,我们就可以容纳并操作自己的对象。一、数组 如何区分数组和其他集合类呢?其实有两种方式可以区分开:效率和类型。在java中,数组是一个简单的先行序列,它使得元素的访问速度非常快,但付出的代价是--创建...原创 2014-06-19 00:01:16 · 153 阅读 · 0 评论 -
java内部类探讨
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可以是静态static的,也可用public,default,protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。一、内部类的作用 典型的情况是,内部类继...原创 2014-06-17 23:38:50 · 111 阅读 · 0 评论 -
java核心:变量类型、运算符优先级、封装继承多态
一、java内的变量类型1、基本数据类型①整数类型byte--8位--默认值(byte)0short--16位--默认值(short)0int--32位--默认值0long--64位--默认值0L②浮点类型float--32位--默认值0.0fdouble--64位--默认值0.0d③字符串char--16位--默认值\u0000(空,'')④布...原创 2014-06-17 20:05:12 · 310 阅读 · 0 评论 -
java核心:访问权限控制、static和final的作用
一、类的访问控制不能将类设置成private(那样会使除了类之外的其他东西都不能访问他),也不能设置成protected()。类的访问只有两个选择:“有好的(default)”和public,其中对于“友好的(default)”类仅能在包内使用。若不愿其他任何人访问那个类,可将所有的构造器设置为private,这样一来,在类的一个static成员内部,除自己之外的其他所有人都无法创建属于那个...原创 2014-06-17 19:57:27 · 212 阅读 · 0 评论 -
java反射机制(2)反射应用
在上一篇详细讲解了反射的实现基础,这主要是反射在java 编程中应用非常广泛。例如我们熟知的struts、spring等框架,以及我们后续还要讲到的IoC(控制反转)、AOP(面向切面变成)等理论,这些都是建立在java反射的基础之上的,所以反射非常重要。 除了上面提到的这些框架,其实我们自己在编写程序的过程中,也经常会用到反射技术。通过反射,可以解决很多问题,也使得我...原创 2014-06-28 00:15:19 · 109 阅读 · 0 评论 -
java注释详解
Annotation是java中重要的特性,该技术在spring、Habinate等框架中大量使用。通过java自带的三种注释,来窥探注释的应用和原理,这样在后面使用这些框架的时候,可以迅速上手。 注释是什么?注释为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后某个时刻非常方便的使用这些数据。 为什么要用注释?注释实现了对元数据的支持,能够使开发...原创 2014-07-01 22:40:00 · 212 阅读 · 0 评论