- 浏览: 268613 次
- 性别:
- 来自: 杭州
-
最新评论
-
GGGGeek:
Integer null转为0的情况是什么时候
BeanUtils.copyProperties VS PropertyUtils.copyProperties -
yizishou:
...
JAVA 8 :从永久区(PermGen)到元空间(Metaspace) -
_神谕_:
...
CopyOnWriteArrayList 解读 -
lixia0417:
很清晰。
spring 源码分析--IOC容器初始化四 -
lixia0417:
条理很清晰啊。看着舒服。
spring 源码分析--IOC容器初始化二
文章列表
接上一篇:
http://caoyaojun1988-163-com.iteye.com/blog/1302936
5 性能
虽然除了互斥锁,同步框架也支持其他许多风格的同步;但是锁的性能是最容易比较和衡量的,即便如此,还有很多不同的测量方法。这里的实验旨在揭示开销和吞吐量。在每项测试中,每个线程多次更新一个伪随机数,计算使用函数:nextRandom(INT种子):
int t = (seed % 127773) * 16807 –(seed / 127773) * 2836;
return (t > 0)? t : t + 0x7fffffff;
...
接上一篇:
http://caoyaojun1988-163-com.iteye.com/blog/1290759
4、运用:
AbstractQueuedSynchronizer类将上述功能联系在一起,作为一个“模板方法模式[6]”中的模板类,作为其他同步器的基类。子类只是实现预定义方法,实现通过获取锁和释放锁的操作来检查和更新状态。然而,AbstractQueuedSynchronizer的子类本身不可用于ADTS,因为这些类暴露的用于内部控制获取和释放的策略的方法,应该对用户不可见。所有java.util.concurrent包中的同步类声明了一个私有的内部Abst ...
接上一篇:http://caoyaojun1988-163-com.iteye.com/admin/blogs/1279097
3.3 队列
框架的核心是维护阻塞线程的队列,队列的策略是先进先出(FIFO),因此,该框架不支持基于优先级的同步
一直以来,对于同步队列的最合 ...
最近在使用memcache客户端的时候,发现一个可能是多线程的问题,客户端的实现是NIO+JUC,由于出现频率很低,场景没有办法复原,一直没有找到问题的真正原因,通过代码走查也没有发现任何问题,于是决定回顾一下JUC的东西,看看是不是可以受到启发,于是决定先看一下大牛Doug Lea的论文,顺便翻译一下。由于英文水平很挫,又是第一次,希望不要误导了大家。废话不表。
JAVA.util.concurrent 同步框架
Doug Lea SUNY Oswego Oswego NY 13126 dl@cs.oswego.edu
摘要
J2SE1.5的jav ...
1
在上一篇中有提到spring aop的动态字节码增强,我自己也没看过spring 的实现方式,按照大家的说法应该是动态生产一个子类去重写方法,由于自己没去看过,暂且不表,接下去,可能还是打算从分析字节码的角度去看类似于spring aop这个功能反应到字节码有哪些变化,或者说实现方式,
这个例子还是基于最简单的HelloWorld,还请大家回顾一下前面的几个章节,最要是这个 HelloWorld.class 文件的解读 这个例子和前面两个例子一下将基于它做一些变化,再去从字节码的角度去比较看看究竟做了什么。
首先考虑aop的一个最简单应用场景,就是日志输出,假设现在需要在输出hell ...
前面两个例子,一个简单的替换了二进制的编码,一个通过理解class的文件格式,可以增加输出的内容,都非常简单,但是实际可能用到的不会这么简单,更多的是对方法的操作,比如spring aop的实现方式有两种动态代理和字节码增强,其中字节码增强便可以通过修改class的二进制文件完成,另外对性能分析、调试跟踪和日志记录,也可以通过这种方式简单的实现,当然在现实中我们不会去真正的操作二进制码,我们一般通过第三方的库文件,比如:asm、 cglib、 serp、 和bcel等;但是他们的本质还是去操作二进制码;前面在分析helloworld.class 的时候,还剩下两块内容当时没有讨论(其实是一样的 ...
上一节我们看了一个简单的例子,我们通过直接改变二进制的class文件,改变程序的行为,
这一节继续上面的例子看一些其他的情况,用前面的HelloWorld为例
先看java 文件:
public class HelloWorld{
public static void main(String [] arvgs){
System.out.println("hello world");
}
}
它的class文件
00000000h: CA FE BA BE 00 00 00 2E 00 1D 0A 00 0 ...
上一节我们分析了一个简单的HelloWorld的class文件,那知道了这个结构有什么用呢,接下来我们通过几个例子来简单的了解一下。
一、先看一个简单的例子,这个例子了,我们通过直接改变二进制的class文件,改变程序的行为,以前面的HelloWorld为例。
先看java 文件:
public class HelloWorld{
public static void main(String [] arvgs){
System.out.println("hello world");
}
}
它的class文件:
000 ...
这一篇主要针对最简单的HelloWorld的class文件进行分析,按照上一篇文章的结构去实例化的分析一个class文件。
下面是java源文件
public class HelloWorld{
public static void main(String [] arvgs){
System.out.println("hello world");
}
}
运行 javac HelloWorld.java 得到的class 文件如下:
00000000h: CA FE BA BE 00 00 00 2E 00 1D 0A 00 ...
Java class 文件
1、Class文件是什么:class文件是java程序二进制文件的精确的定义,每一个class的文件都对应一个类或则接口,class文件是JVM真正能读懂的文件格式。
2、Class文件与java的关系:一般的讲class文件由java的类文件编译而来,但是事实上class文件只是定义的一种格式,你甚至可以手动编写二进制文件,只要能满足
提到 string、stringbuilder、 stringbuffer、大家都应该非常熟悉,
通常的理解是:
string 对象为final的,一旦被创建,就不能改变。
stringbuffer 是可变对象,append(),不会新建对象,同时是线程安全的,
stringbuilder 为线程不安全。
有 ...
最近看了一些spring 源码的分析的文章,自己也仔细看了一部分源码,终觉得由于涉及到的类之间的关系过于复杂,看过之后收获也不是很大,我想可不可以通过一步一步建立一个简单类spring 的方式来分析源码呢?类似于《how tomcat works》。不知道大家对这个计划有什么看法呢?欢迎大家发表自己的意见。。
在上一节第一个函数里,有两个比较重要的函数调用,第一个在上一节已经分析过了,这个函数将我们定义在xml文件里的bean的信息,封装到一个 BeanDefinitionHolder类型的对象里。这一节将继续处理这个对象。
2.1.1.1.2 registerBeanDefinition (bdHolder, getReaderContext().getRegistry())
在 BeanDefinitionReaderUtils 调用:
================================================================= ...
上一节将xml文档解析为DOM ,并且创建了一个 BeanDefinitionParserDelegate 类型的对象,在这一节,将使用这个对象来完成对bean的装载工作。
2.1.1.1 parseBeanDefinitions (root, delegate): 该方法体完成注册过程。
====================================================================
/**
* Process the given bean element, parsing the bean ...