
JAVA
文章平均质量分 84
iteye_9253
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap解读
实现原理 锁分离 (Lock Stripping) ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁。只要多个修改操作发生在不同的段上,它们就可...原创 2014-08-27 10:43:10 · 232 阅读 · 0 评论 -
Java中的ReentrantLock和synchronized两种锁定机制的对比
多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和volatile 。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它...原创 2014-08-26 14:54:21 · 142 阅读 · 0 评论 -
JUC之Atomic系列12大类实例讲解和原理分解
在java6以后我们不但接触到了Lock相关的锁,也接触到了很多更加乐观的原子修改操作,也就是在修改时我们只需要保证它的那个瞬间是安全的即可,经过相应的包装后可以再处理对象的并发修改,以及并发中的ABA问题,本文讲述Atomic系列的类的实现以及使用方法,其中包含:基本类:AtomicInteger、AtomicLong、AtomicBoolean;引用类型:AtomicReferenc...原创 2014-08-16 01:03:48 · 181 阅读 · 0 评论 -
Spring 之AOP AspectJ切入点语法详解
三6.5 AspectJ切入点语法详解6.5.1 Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的AspectJ切入点指示符如下: execution:用于匹配方法执行的连接点; within:用于匹配指...原创 2014-04-30 16:15:25 · 120 阅读 · 0 评论 -
Java Phaser使用
1 Overview Java 7的并发包中推出了Phaser,其功能跟CyclicBarrier和CountDownLatch有些重叠,但是提供了更灵活的用法,例如支持动态调整注册任务的数量等。本文在Phaser自带的示例代码基础上进行一下简单的分析。 2 Glossary2.1 Registration Phaser支持通过register()和bulkR...原创 2014-03-24 12:33:30 · 596 阅读 · 0 评论 -
BTrace入门及使用实例
介绍Btrace (Byte Trace)是sun推出的一款java 动态、安全追踪(监控)工具,可以不停机的情况下监控线上情况,并且做到最少的侵入,占用最少的系统资源。 In a way, BTrace scripts are very similar to AOP's aspects, but can be attached to any existing Java code (or be...原创 2014-03-02 00:48:15 · 162 阅读 · 0 评论 -
System.nanoTime
System.nanoTime只能用于计算时间差,不能用于计算时间的准确度(System.out.println(new Date(System.nanoTime()));这种是绝对错误的)。 Java代码 long java.lang.System.nanoTime() Returns the current value of the most prec...原创 2014-02-10 17:28:21 · 133 阅读 · 0 评论 -
精巧好用的DelayQueue
我们谈一下实际的场景吧。我们在开发中,有如下场景a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。一种笨笨的办法就是,使用一个后台线程,遍历所有对象,挨个检查。这种笨笨的办法简单好用,但是对象数量过多时,可能存在性能问题,检查间隔时...原创 2014-02-10 17:23:41 · 83 阅读 · 0 评论 -
ReentrantLock可重入锁的使用场景
摘要从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。场景1:如果发现该操作已经在执行中则不再执行(有状态执行)a、用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。b、用在界面交互时点击执行较长时间请求操作时,防止多次点击导致后台重复执行(忽略重复触发)。以上两种情况多用于进行非重要任务防...原创 2014-02-10 16:01:34 · 91 阅读 · 0 评论 -
线程池ThreadPoolExecutor使用简介
01ThreadPoolExecutor pool = new ThreadPoolExecutor(corePoolSize,02 maximumPoolSize,03 keepAliveTime,...原创 2014-02-10 16:00:59 · 207 阅读 · 0 评论 -
ThreadPoolExecutor线程池的使用与理解
线程池的作用就是用尽可能少的线程来执行尽可能多的Runnable,以实现对线程的充分利用。从ThreadPoolExecutor类的构造方法说起:ThreadPoolExecutorpublic ThreadPoolExecutor(int corePoolSize, // 核心线程数 int maximumPoolSize, ...原创 2014-02-10 15:14:04 · 80 阅读 · 0 评论 -
Spring 的 AOP :基于Annotation 的“零配置”方式
AOP(Aspect Orient Programming ) , 面向切面编程 。 1、AOP的基本概念: AOP框架并不与特定的代码耦合,AOP框架能处理程序执行中特定的切入点(Pointcut),而不与具体某个类耦合。AOP框架具有如下特征: 1、各步骤之间的良好隔离性。 2、源代码无关性。 AOP的专业术语: 1、Aspect(切面) : 应用运行过程中...原创 2014-01-20 12:38:30 · 91 阅读 · 0 评论 -
Annotation注解的介绍和使用 自定义注解
1、Annotation的工作原理:JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型。该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的class文件和一个注解处理工具组成。Annotation并不直接影响代码的语义,但是他可以被看做是程序的工具或者类库。它会反过来对正在运行的程序语义有所影响。Annotation可以冲源文...原创 2014-01-20 11:34:56 · 94 阅读 · 0 评论 -
Java中动态加载properties文件,而不需要重启应用的解决方法
在Java项目中,如果需要使用.properties类型的文件作为某些配置信息存放介质的时候,一般都是将.properties文件放在src目录下,代码大部分都是这样写的:[java] view plaincopy Properties prop = new Properties(); InputStream is = CommonUtils.class....原创 2013-11-26 15:20:01 · 399 阅读 · 0 评论 -
Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm...
在开始介绍之前,先介绍几篇写的比较详细的博客,咱们不求最精,一定最全,最省事。 http://blog.youkuaiyun.com/fenglibing/article/details/6411924 一、jstatd 启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。 实例:jstatd -J-Djava.security.policy=my.pol...原创 2013-11-19 11:30:38 · 250 阅读 · 0 评论 -
BlockingQueue深入分析
一、概述:BlockingQueue作为线程容器,可以为线程同步提供有力的保障。 二、BlockingQueue定义的常用方法1.BlockingQueue定义的常用方法如下: 抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e, time, unit)移除remove()p...原创 2013-08-12 17:52:49 · 142 阅读 · 0 评论 -
java 多线程 CountDownLatch用法
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 构造方法参数指定了计数的次数cou...原创 2013-08-12 17:49:33 · 85 阅读 · 0 评论 -
用 join 或 CountDownLatch 让主线程等待所有子线程完成
原文出处:http://blog.chenlb.com/2008/11/join-or-countdownlatch-make-main-thread-wait-all-sub-thread.html 在编写多线程的工作中,有个常见的问题:主线程(main) 启动好几个子线程(task)来完成并发任务,主线程要等待所有的子线程完成之后才继续执行main的其它任务。 默认主线程退出...原创 2013-08-12 17:39:55 · 93 阅读 · 0 评论 -
JAVA线程池的分析和使用
【原帖:http://www.uml.org.cn/j2ee/201212193.asp】1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务 可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用...原创 2013-08-12 14:45:07 · 114 阅读 · 0 评论 -
【解惑】Java方法参数是引用调用还是值调用?
方法调用(call by) 是一个标准的计算机科学术语。方法调用根据参数传递的情况又分为值调用( call by reference ) 和引用调用( call by value ) 。江湖上有很多关于这两种调用的定义 ,最通常的说法是传递值的是值调用,传递地址的是引用调用。这其实很不恰当,这种 这些说法很容易让我们联想到Java的对象参数传递是引用调用,实际上,Java的对象参数传...原创 2013-08-08 00:12:36 · 119 阅读 · 0 评论 -
Java 线程池ThreadPoolExecutor
JDK1.5 开始关于多线程加了很多特性。如:ConcurrentHashMap: 放弃使用公用锁同步每一个方法,使用了更细化的锁机制,分离锁。对于大数据量的 HashMap 同步操作效率有了较大提升。CopyOnWriteArrayList: 是同步 List 的一个并发替代品。其线程安全性来源于这样一个事实:只要有效的不可变对象被正确发布,那么访问它将不再需要更多的同步。在每次需要修...原创 2013-07-17 14:39:37 · 82 阅读 · 0 评论 -
乐观锁VS悲观锁
实际生产环境里边,如果并发量不大,完全可以使用悲观锁定的方法,这种方法使用起来非常方便和简单。但是如果系统的并发非常大的话,悲观锁定会带来非常大的性能问题,所以就要选择乐观锁定的方法。悲观锁假定其他用户企图访问或者改变你正在访问、更改的对象的概率是很高的,因此在悲观锁的环境中,在你开始改变此对象之前就将该对象锁住,并且直 到你提交了所作的更改之后才释放锁。悲观的缺陷是不论是页锁还是行锁,加锁...原创 2013-07-14 23:48:10 · 76 阅读 · 0 评论 -
NIO VS IO
当学习了Java NIO和IO的API后,一个问题很快进入心中:我应该在何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地阐明Java NIO和IO的差异、它们的用例,以及它们如何影响您的代码设计。Java NIO和IO的主要差异下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IONIO面向流...原创 2013-07-14 23:35:16 · 117 阅读 · 0 评论 -
Java 内存模型及GC原理
一个优秀Java程序员,必须了解Java内存模型、GC工作原理,以及如何优化GC的性能、与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率,才能提高整个应用程序的性能。本文将从JVM内存模型、GC工作原理,以及GC的几个关键问题进行探讨,从GC角度提高Java程序的性能。 一、Java内存模型按照官方的说法:Java 虚拟机...原创 2013-07-13 23:00:34 · 114 阅读 · 0 评论 -
网站持久代引发Full GC问题分析
现状:Dragoon(监控系统)的日报显示trade_us_wholelsale(美国wholesale集群),日均Young GC次数25w次左右,应用暂停295w毫秒(相当于40多分钟),Full GC次数600次左右,应用暂停190w毫秒(相当于30多分钟)。GC,尤其是Full GC,每次都会导致JVM暂停工作,处理垃圾回收任务,短时间内无法响应用户请求,大量的Full GC会...原创 2013-07-13 22:57:06 · 434 阅读 · 0 评论 -
jvm内存管理之java堆溢出 -实例分析
java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,就会在对象数量达到最大堆的容量限制后产生内存溢出异常。下面给出例子代码体验一下java堆溢出的过程:1.通过jvm参数(-Xms20M -Xmx20M -Xmn10M ),限制java 堆的大小2.通过jvm参数(-verbose:gc -XX:+Pr...原创 2013-07-13 22:56:53 · 122 阅读 · 0 评论 -
关于JVM 内存溢出的几个分析
之前看编程之美,看到了对操作系统精通的定义,比如,写个程序能到任务管理器的CPU曲线划出一段正弦曲线,这种实际的动手能力确实值得我们去关注。刚刚在看书,关于虚拟机规则的,突然想到可以出如下面试题:给出一段会产生堆内存溢出的代码;给出一段虚拟机栈和本地方法栈溢出的代码:分StackOverflowError和OutOfMemoryError给出程序;给出一段能使运行时常量池溢出...原创 2013-07-13 22:56:29 · 106 阅读 · 0 评论 -
JVM参数设置详解
JVMHeap区域分布:Java Heap分为3个区,Young,Old和Permanent。Young区保存绝大多数刚实例化的对象,当该区被填满时,触发局部GC,局部GC会将Young区清空,仍被引用的对象将被移到Old区。当Old区再被塞满,就会触发FullGC,回收最后能回收的空间。Permanent区全称是PermanentGeneration space,永久区,用于存放Clas...原创 2013-07-13 22:56:03 · 54 阅读 · 0 评论 -
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jsta
JVM监控工具介绍jstatd启动jvm监控服务。它是一个基于rmi的应用,向远程机器提供本机jvm应用程序的信息。默认端口1099。实例:jstatd -J-Djava.security.policy=my.policymy.policy文件需要自己建立,内如如下:grant codebase "file:$JAVA_HOME/lib/tools.jar" { permission jav...原创 2013-07-12 15:53:33 · 70 阅读 · 0 评论 -
JVM参数调优实例解析
JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整个系统变得很慢,网站停滞时间能达10秒以上,这种情况如果没隔几分钟就来一次,自己都受不了。这种停滞在测试的时候看不出来,只有网站pv达到数十万/天的时候问题就暴露出来了。 要想配置好JVM参数,需要对年轻代、年老代、救助空间和永久代有一定了解,还要了解jvm内存管理逻辑,最终还要根据自己的应用来做调整。关于JV...原创 2013-07-12 15:30:31 · 80 阅读 · 0 评论 -
Java内存溢出的详细解决方案
一、内存溢出类型1、java.lang.OutOfMemoryError: PermGen spaceJVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它 和堆不同,运行期内GC不会释放空间。如果web app用了大量的第三方jar或者应用有太多的class文件而恰好MaxPermSize设置较小,超出...原创 2013-07-12 15:29:01 · 83 阅读 · 0 评论 -
OutOfMemoryError与unable to create new native thread(JVM创建大量线程)的关系
最近在应用服务器跑压力测试过程当中,出现无法创建线程的错误。在java应用中,有时候会出现这样的错误:OutOfMemoryError: unable to create new native thread.这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在线程个数很多的情况下, 你分配给JVM的内存越多,那么,上述错误发生的可能性就越大...原创 2013-07-12 15:07:30 · 261 阅读 · 0 评论 -
Java内存分配原理精讲
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:◆寄存器:我们在程序中无法控制◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中◆堆:存放用new产生的数据◆静态域:...原创 2013-07-12 14:45:43 · 53 阅读 · 0 评论 -
Java NIO原理图文分析及代码实现
前言: 最近在分析hadoop的RPC(Remote Procedure Call Protocol ,远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。可以参考:http://baike.baidu.com/view/32726.htm )机制时,发现hadoop的RPC机制的实现主要用到了两个技术:动态代理(动态代理可以参考博客:http://...原创 2013-07-08 17:40:16 · 97 阅读 · 0 评论 -
TLS/SSL使用javamail
// get the mail configuration optionsString mailHost = servletConfig.getServletContext().getInitParameter( "mailHost" );String mailTo = servletConfig.getServletContext().getInitPara...原创 2012-07-05 13:06:36 · 293 阅读 · 0 评论 -
什么是Widget?
Widget的起源 widget最初是源于苹果电脑的一个插件工具——Konfabulator,现在已经扩展应用到windows系统了,这个软件可以把它的功能块放到你 的桌面上,这些功能块就是 widget 比如说:时钟widget,就是在桌面上显示当前的时间;天气widget,可以显示你定制的地区的天气预报;cpu widget可以显示你cpu的占用比率;还有桌面搜索widget、股票w...原创 2012-06-08 11:31:21 · 6129 阅读 · 0 评论 -
spring分布式事务
分布式事务是指操作多个数据库之间的事务,spring的 org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持。如果使 用WAS的JTA支持,把它的属性改为WebSphere对应的TransactionManager。 在tomcat下,是没有分布式事务的,不过可以借助于第三方软件jotm(Java Op...原创 2012-01-17 11:38:58 · 113 阅读 · 0 评论 -
多线程——synchronized
Java 对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了 synchronized 关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对 synchronized 关键字的作用进行深入了解才可定论。 总的说来, synchronized 关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类, synchronized 可...原创 2012-01-13 15:41:34 · 94 阅读 · 0 评论 -
使用Java混淆工具yguard
在某些情况下, java 开发者可能希望保护自己的劳动成果,防止自己编写的源代码被竞争对手或者其他组织和个人轻易获取而危害自己的利益,最简单有效的办法就是对编译后的 java 类文件进行混淆处理。本文介绍一款这样的工具 yguard 。 yGruard 是一个功能比较强大的 java 类文件的混淆工具,特别适合与 ant 工具集成使用。 本文对 yguard 的基本元素做...原创 2011-10-09 16:45:02 · 222 阅读 · 0 评论 -
java.util.Collections使用说明
空集合Collections.EMPTY_LIST,Collections.emptyList()——返回只读的空LIST 集合Collections.EMPTY_MAP,Collections.emptyMap()——返回只读的空MAP集合Collections.EMPTY_SET,Collections.emptySet()返回只读的空SET集合...原创 2011-09-14 11:07:39 · 138 阅读 · 0 评论