自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

aty

虽有嘉肴,弗食,不知其旨也;虽有至道,弗学,不知其善也。是故学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。

  • 博客(16)
  • 资源 (1)
  • 收藏
  • 关注

原创 J.U.C原子工具类AtomicXXX中,set和lazySet的区别

提到java原子类,不得不说下关键字volatile和内存可见性。内存可见性问题,可以看下《java并发编程实践》讲的很详细。下面的示例代码是错误的,因为没有使用volatile来保证内存的可见性,所以如果1个线程修改了共享变量,那么另外一个线程可能永远也看不到修改后的值。如果将stop修改成volatile类型的,就可以保证一个线程对volatile变量的修改,对另一个线程是可见的。publ

2014-11-30 17:14:06 6308

原创 java中虚引用PhantomReference与弱引用WeakReference(软引用SoftReference)的差别

本文主要是重申下这几种引用的差别,并给出实际的例子,让读者清楚的感受到它们的差别。软引用和弱引用差别不大,JVM都是先将其referent字段设置成null,之后将软引用或弱引用,加入到关联的引用队列中。我们可以认为JVM先回收堆对象占用的内存,然后才将软引用或弱引用加入到引用队列。而虚引用则不同,JVM不会自动将虚引用的referent字段设置成null,而是先保留堆对象的内存空间,直接将PhantomReference加入到关联的引用队列,也就是说如果我们不手动调用PhantomReference.cl

2014-11-21 21:57:17 4153 1

原创 requireJS在同一个HTML/JSP页面,加载不同版本的jquery

requireJS支持JS模块化,也能够实现在同一个HTML/JSP页面加载不同版本的模块。这个特性太棒了,下面我们看下如何加载多个版本的jquery。1、如果不同context加载的模块相同,版本相同(同一个js文件),会怎么样呢?这个js文件会下载多次吗?结论:通过httpwatch观察,如果不同的context加载同1个js文件,那么这个js文件会下载多次。显然这很浪费。2、如果2个context都是需要jquery-1.10.1版本,那么怎么保证只js只下载一次呢?结论:我们可以定义一个类似父类的c

2014-11-19 21:53:55 4105

原创 JVM运行报错:GC overhead limit exceeded

今天在折腾OOM和java的4种引用类型的时候,在运行过程中JVM报了一个错误:java.lang.OutOfMemoryError: GC overhead limit exceeded 这个错误平时遇到的概率很少很少,今天无意中遇到了,这里做个记录。oracle/sun官网的解释是:The concurrent collector will throw an OutOfMe

2014-11-16 22:37:07 23143

原创 解决JVM启动报错:Unrecognized VM option '+HeapDumpOnOutOfMemeryError'

今天再搞一些OutOfMemery的相关知识探索,我想在JVM遇到OOM错误的时候,能够打印出heap dump,以便事后用Eclipse Memory Analyzer Tool(MAT)等内存分析工具分析内存的占用情况。我使用了JDK1.6.0_37和JDK1.7.0_60版本进行试验,到网上找了下,知道-XX:+HeapDumpOnOutOfMemoryError可以让JVM在探测到内存OO

2014-11-16 20:51:41 16937 2

原创 ExecutorService.invokeAny()和ExecutorService.invokeAll()的源码阅读心得

ExecutorService.invokeAny()和ExecutorService.invokeAll()的使用方式,可以参考我之前的一篇文章。之前的博客按照test and learn的学习方式(有点类似于测试驱动开发),构造了我能想到的几种场景来进行测试,通过分析测试结果,也得出了一些结论,学会了这2个API的使用。本文主要是阅读下J.U.C源码,一则验证下之前的一些推论,二则学习下源码中的一些技巧,这是通过执行测试用例看不到的。这也提示我们:设计API的时候,要站在使用者的角度,考虑他们的调用习惯

2014-11-15 19:40:21 2467

原创 gradle配置本地jar包依赖和以debug模式启动jetty

以debug模式启动jetty,这个目的很明显,为了后台java代码的远程调试。做法是:增加环境变量GRADLE_OPTS,值设置为:-Xdebug -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n 这样通过gradle jettyRun命令启动jetty容器的时候,会有如下的显示结果,代表已经启用了debu

2014-11-14 16:30:02 10264

原创 让你的javascript函数拥有记忆功能,减少全局变量的使用

让你的javascript函数拥有记忆功能,减少全局变量的使用

2014-11-13 13:32:30 2067 1

原创 javascript中区分鼠标单击和拖动事件

在javascript中,一般的DOM元素如div,都有onmousedown、onmousemove、onmouseup这3个鼠标事件。 当鼠标在div1上移动或者按下左键拖动的时候,都会触发onmousemove事件。如何区分这2种事件呢?如何区分鼠标单击弹起和拖动后弹起呢?区分鼠标单击弹起和拖动后弹起,可以注册onmousedown和onmouseup事件处理函数,在onmous

2014-11-11 11:01:58 11166 2

原创 使用Jmockit完成static方法的mock

传统的JMock是无法Mock静态方法的,但是Jmockit能够很好地Mock类的静态方法。

2014-11-10 19:09:49 19298

原创 requireJS中使用setTimeout和setInterval遇到的问题和解决方式

第一种方式会报错,因为say函数仅仅在模块内部可见,setTimeout看不见;第二种方式:代码会立即执行,没有到达setTimeout的延时效果;第三种方式:通过这种匿名函数调用,能够满足我们的需要,即解决了延时的问题,也解决了变量可见域的问题。

2014-11-06 19:03:19 2651

原创 javascript中使用var定义变量的预编译效果

首先说明一点:javascript语法是非常灵活的,灵活的代价就是很容易导致不规范的编码和各种意想不到的运行结果。ECMAScript 5 引入了 严格模式 (strict mode),今后我们编写javascript代码最好都使用"use strict",规范我们的javascript代码。下面的测试代码不是基于严格模式。 alert(a);var a;//已声明未赋值alert(b

2014-11-05 10:15:02 1378

原创 javascript中闭包的2种经典用法

闭包这个东西,网上有很多介绍资料。个人看了很多,还是一知半解。这里不做理论介绍,直接给出2个例子。

2014-11-04 18:35:55 1144 2

原创 javascript中两种定义函数方式的差别以及函数的预编译效果

我们知道在function mm(){ }这种形式是声明一个函数,跟 var 一个变量的机制一样,脚本在解释执行之前会做预编译处理,而 var mm = function(){ }这种形式是对一个变量赋值,虽然也做预编译,但仅仅只是给 mm 事先变量分配一个内存空间,而没有做初始化

2014-11-04 16:57:58 1063

原创 使用spring-loaded开源项目,实现java程序和web应用的热部署

JDK1.5之后提供了java.lang.instrument.Instrumentation,即java agent机制能够实现类的redefinition和retransform。redefinition对应Instrumentation.redefineClasses()能够实现类的热替换,但遗憾的是功能很有限。最近遇到一个开源项目spring-loaded,看了下官方的介绍文档:发现它功能比JDK自带的强大多了。经过自己的尝试,发现使用spring-loaded项目,确实可以实现java应用的热部署

2014-11-03 20:36:28 6970 1

原创 理解和解决requireJS的报错:MODULE NAME HAS NOT BEEN LOADED YET FOR CONTEXT

使用requireJS加载模块的时候,有时候会碰到如下的错误:Uncaught Error: Module name "module1" has not been loaded yet for context: _. Use require([])。可以看到使用define()定义模块的时候,如果依赖的模块比较少,那么可以使用标准方式;如果依赖的模块很多,那么可以使用方式1或者方式2来解决。很显然,使用require()加载模块的时候,也存在和define()一样的问题。经过我的试验:使用方式2也是可以的

2014-11-02 17:49:10 36659 2

eclipse最常用的快捷键

这是我个人从网上整理出来的快捷键,日常很常用的列在这里。而且比较清晰,欢迎大家下载。在eclipse提高开发效率

2012-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除