自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

Java IO (上)

[b]一、概述[/b]IO即Input/Output,指输入/输出,IO设备是计算机系统的重要组成部分。Java使用"流"的方式处理IO,对象或者数据要进行传递,需要将对象或者数据转换成某种形式的流,然后通过流的形式传递到目的地,最后再将目的地的流转换成对象或者数据。例如通过网络传递数据,或者将内存中的数据持久化到文件或者数据库中都会涉及到IO操作,另外Java中的RMI和EJB等技术也会默认...

2015-08-16 16:58:15 102

HashMap源码分析

[b]一、数据结构[/b]Map将实际数据存储在Entry类的数组中。代码片段:[code="java"]transient Entry[] table;//HashMap的成员变量,存放数据static class Entry implements Map.Entry {//内部类Entry final K key; V value; Entry...

2015-07-19 20:33:37 116

ArrayList源码分析

[b]一、类结构[/b][img]http://dl2.iteye.com/upload/attachment/0110/1037/e19e7258-8df2-3d3b-ad2b-f64f6fc1599c.png[/img]List,Set,Queue等均继承自Collection接口。[b]二、属性[/b]非常简单就2个属性。private transient Objec...

2015-07-12 10:44:08 118

如何调试JDK源码

相信各位小伙伴们跟我一样,想通过JDK源码来学习Java,比如collections包,java.util.concurrent包。可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。下面是编译jdk的具体步骤: 1.把C:\java\jdk1.6.0_26\src.zip解压到C:\java\jdk1.6.0_26\src ...

2015-06-30 20:42:15 159

RMI

一、简介RMI (Remote Method Invocation) 是Java内置的分布式透明远程方法调用机制,客户端仅需要有远程服务的接口。EJB远程调用方式也是对RMI方式的封装,只是EJB是通过配置方式发布的远程服务,而RMI是通过编程方式发布的远程服务。二、RMI原理[img]http://dl2.iteye.com/upload/attachment/0109/29...

2015-06-07 16:54:04 78

Memcached(四)、Memcached原理

前文写了一些memcached的简单示例,以及如何在centos上安装memcached服务器等,本文主要关注memcached的原理。一、内存存储默认情况下memcached是通过Slab Allocation机制来分配和管理内存的。Slab Allocation的原理是将内存分配为各种大小的块(chunk),并将尺寸相同的块组成组。 [img]http://dl2.itey...

2015-06-06 10:03:01 64

Memcached(三)、封装Memcached和Ehcache

本文对Ehcache和Memcached进行了简单的封装,这样对于客户端程序无需了解ehcache和memcached的差异,仅需要配置缓存的Provider类就可以在二者之间进行切换,Provider实现类通过Spring IoC注入。cache.xml[code="java"] ...

2015-05-25 09:10:59 109

Memcached(二)、Centos安装Memcached服务器

一、安装gccrpm和yum安装memcached服务器连接没有找到,所以我使用的是make的方式安装,由于make依赖于gcc,所以要先安装gcc[code="java"]开始安装,命令如下,[color=red][b]顺序一定不能出错[/b][/color]:建议可以先切换到root用户,不然可能会遇到权限问题:su root 输入密码......rpm -ivh ...

2015-05-20 09:17:02 87

Memcached(一)、HelloWorld

一、简介高性能的架构离不开缓存,分布式缓存中的佼佼者当属memcached,它通过客户端将不同的key hash到不同的memcached服务器中,而获取的时候也到相同的服务器中获取,由于不需要做集群同步,也就省去了集群间同步的开销和延迟,所以它相对于ehcache等缓存来说能更好的支持分布式应用,具有更强的横向伸缩能力。二、客户端选择一个memcached客户端,我这里用的是memc...

2015-05-17 14:30:04 84

JMS

1 JMS概念 JMS是Java Message Service Java消息服务的简称,是Sun公司制定的J2EE规范之一,JMS是一个规范,各个厂商提供了不同的实现,类似于JPA,Hibernate和TopLink等提供了JPA实现,很多产品都实现了JMS规范,如IBM的MQSeries、Weblogic、JBoss还有开源的activemq等等。查看JMS源码您就会发现,里面基本都是接口...

2015-05-08 21:13:12 109

Ehcache

1 简介Ehcache是一个快速的、轻量级的、易于使用的、进程内的缓存。它支持内存和磁盘缓存,是一个非常轻量级的缓存实现,从1.2 版本开始支持了集群,是从hibernate发展出来的缓存。特点: 快速. 简单. 多种缓存策略 缓存数据有两级:内存和磁盘,因此无需担心容量问题 缓存数据会在虚拟机重启的过程中写入磁盘 可以通过RMI、可插入API 等方式进...

2015-04-19 18:18:25 98

JPA之JPQL(三)

1 什么是JPQLJPQL是Java Persistence Query Language的简称,可以看成是JPA中的HQL, JPQL支持各种复杂查询。2 检索单个对象@Testpublic void querySingleObject1() { Query query = em.createQuery("select * from Course where id...

2015-03-16 13:19:42 118

JPA之生命周期管理(二)

1 JPA状态转换图 [img]http://dl2.iteye.com/upload/attachment/0106/6739/62975871-8855-382a-8973-61dc86d75441.gif[/img]要理解JPA的核心接口,这个图必须牢记。分为4种状态:1)New状态:未有id,未与Persistence Context建立关联关系。2)M...

2015-03-15 19:40:14 202

JPA之HelloWorld(一)

[b]1 JPA概述[/b]JPA是[color=red][b]J[/b][/color]ava [color=red][b]P[/b][/color]ersistence [color=red][b]A[/b][/color]PI的简称,是Sun推出的J2EE规范之一,是ORM规范,Hibernate,TOPLink,OpenJPA等框架提供了JPA实现。JPA是Hibernate的作者主导...

2015-03-14 21:29:23 135

16.性能优化-完结

性能调优是一个宏大的工程,需要从宏观架构(比如拆分,冗余,读写分离,集群,缓存等), 软件设计(比如多线程并行化,选择合适的数据结构), 数据库设计层面(合理的表设计,汇总表,索引,分区,拆分,冗余等) 以及微观(软件的配置,SQL语句的编写,操作系统配置等)根据软件的应用场景做综合的考虑和权衡,并经验实际测试验证才能达到最优。性能水很深, 笔者经验尚浅 ,赶脚也就了解了点皮毛而已,我觉得...

2015-03-12 09:58:50 76

15.性能优化-工具-MAT

1.MAT概述MAT是Java堆内存分析工具,可从http://www.eclipse.org/mat/中下载。MAT分析用的内存dump文件,可以通过jmap -dump:format=b,file=d:/111.dump生成,或者通过配置JVM参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/error.hprof ,这样发生O...

2015-03-10 09:54:49 174

14.性能优化-优化-软件配置优化

1.Tomcat线程池修改tomcat的server.xml文件: maxThreads --最大的线程数量,默认值200。允许的最大线程数受操作系统限制。minSpareThreads --最小空闲线程数。如果空闲线程小于此值,则一次性创建这个数量的空闲线程。默认值25maxSpareThreads --最大空闲线程数。如果空闲线程超过此值,会将超出的线程关闭。...

2015-03-09 08:39:54 144

13.性能优化-优化-JVM调优

1.JDK版本尽可能的使用高版本的JDK版本,这通常可以带来免费的性能提升。当前前提是版本是稳定的,并且相应的应用服务器或者开源第三方工具等,也可以基于此版本稳定运行。2.字节码验证如果编译的代码,以及依赖的第三方jar包都是可信赖的话,可以关闭字节码验证,从而节省类加载时间,可通过-XVerify:none关闭字节码验证。3.JIT编译方式HotSpot有2种JIT编...

2015-03-06 09:06:25 143

12.性能优化-优化-程序优化

1.字符串优化1.1. String对象的特点1)不变性。String对象一旦生成,则不能对它进行改变。不变模式的主要作用是当一个对象需要被多线程共享,并且访问频繁时,可以省略同步和锁等待的时间,从而大幅提高系统性能。2)针对常量池的优化。当两个String对象拥有相同的值时,他们只引用常量池中的同一份拷贝。(PS:通过javap -verbose命令可以查看到常量池信息。)Str...

2015-03-03 12:17:31 88

11.性能优化-优化-JVM参数总结

1.堆-Xms --初始堆大小-Xmx --最大堆大小-Xmn --新生代大小-Xss --线程栈大小-XX:PermSize --永久代初始大小-XX:MaxPermSize --永久代最大值-XX:SurvivorRatio --新生代和suvivor比例,默认为8-XX:TargetSurvivorRatio --survivor可使用率,默认50%-...

2015-02-28 11:47:04 236

JSON

1.什么是JSONJSON是指JavaScript对象表示法([color=red][b]J[/b][/color]ava[color=red][b]S[/b][/color]cript [color=red][b]O[/b][/color]bject [color=red][b]N[/b][/color]otation)。JSON是轻量级的文本数据交换格式。JSON独立于语言。J...

2015-02-12 11:15:19 76

10.性能优化-监控-MySQL慢查询

1.记录慢查询配置show variables where variable_name like 'slow%' ; --查看默认日志路径查询结果:--不用的机器可能不同slow_query_log_file=/var/lib/mysql/centos-slow.log修改mysqld配置文件:/usr /my.cnf[一般在/etc/my.cnf,本机在/user/my.cn...

2015-02-10 13:52:51 125

9.性能优化-监控-JVM监控工具

1.JConsole JConsole随Java 5和更高版本分发,位于%JAVA_HOME%/bin目录下。可以用来监控堆使用,类加载、CPU使用以及线程情况,如下图所示: [img]http://dl2.iteye.com/upload/attachment/0105/9586/48030418-361c-31e1-8b85-0845de2d5a67.jpg[/img]...

2015-02-09 10:32:46 84

8.性能优化-监控-垃圾收集器

1.垃圾收集算法1)引用计数法。对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器加1,当引用失效时,A的引用计数器减1。只要对象A的引用计数器值为0,则对象A就不能再被引用了。但是引用计数器无法处理循环引用的问题,所以JVM不使用引用计数法进行垃圾回收。 [img]http://dl2.iteye.com/upload/attachment/0105/8154/2d...

2015-02-04 09:50:38 152

7.性能优化-监控-Java命令总结

1. jps jps --列出java进程 -l --输出主函数的完整路径 -m --传递给主函数的参数 -v --传递给JVM的参数2. jstat jstat --虚拟机统计信息监视工具jstat - [-t] [-h] [ []]-class --显示Classloader的信息-compil...

2015-02-03 09:05:10 81

6.性能优化-监控-硬件资源监控-磁盘IO

1.概述由于IO速度相对于内存和CPU会慢很多,所以磁盘IO操作很容易成为性能瓶颈,对于有磁盘操作的应用,都应该监控磁盘IO。Java应用造成磁盘IO消耗严重,主要是多个线程需要进行大量内容写入(例如频繁的日志写入),或者操作的文件本身很大。任何减少磁盘IO的策略都有帮助,例如使用BufferedInputStream,使用缓存,使用NIO等。2.iostat命令# i...

2015-02-01 09:20:03 184

5.性能优化-监控-硬件资源监控-内存

1.概述系统在进行页面交换或使用虚拟内存时,Java应用就会出现明显的性能问题。当应用运行所需的内存超过可用物理内存时,就会发生页面交换。当应用耗尽物理内存时,操作系统将应用的一部分交换到swap区,当应用再次访问这些内存时,再将这部分内容交换到内存中,这种页面交换会对应用的性能造成很大影响。Java应用一般将-Xms和-Xmx避免运行期频繁的进行垃圾收集和内存的扩充。2.free命令...

2015-01-30 09:52:46 162

4.性能优化-监控-硬件资源监控-CPU

1.概述要提高应用的性能,就必须充分利用给配给它的CPU周期。系统态CPU使用率高意味着共享资源有竞争或者IO设备之间有大量的交互。对于java应用,典型的上下文切换发生在进行文件IO操作、网络IO操作、锁等待或者线程sleep时,当前线程进入阻塞状态或者休眠状态,从而触发上下文切换,上下文切换过多会使应用的响应速度下降。2.top命令# top命令top - 21:1...

2015-01-29 09:21:52 198

3.性能优化-监控-硬件和软件环境获取

性能测试一定要首先标明测试的软硬件环境,本篇简要说明如何获取常用的软硬件环境的linux命令。1.硬件1)查看CPU#cat /proc/cpuinfomodel name : Intel(R) Core(TM) i7-2630QM CPU @ 2.00GHzcpu MHz : 1995.529cache size : 6144 K...

2015-01-28 09:28:10 140

2.性能优化-策略

1. 类生产环境 让性能测试环境尽可能的接近生产环境,这样才能保证测试的准确性。如机器的配置、操作系统、应用软件版本、软件的部署方式,数据量等都要尽可能的接近生产环境。2. 基准测试 每次性能测试,只改变其中一个参数,并将此性能测试结果同之前的性能测试结果进行比较。如果测试过程会产生一定的数据,则每次测试前需要将数据保持在初始状态,否则就可能会因为数据量的不同对结果造成影响,造成性...

2015-01-28 09:27:10 58

1.性能优化-指标

1)TPSTransaction Per Second的缩写,系统每秒钟能够处理的交易或事务数。2)吞吐量单位时间内系统完成的请求数。对于企业应用来说,通常用TPS来度量。吞吐量和响应时间是衡量系统处理能力的最重要的指标。3)响应时间系统完成一次外部请求处理所需的时间,从客户端发起一个请求开始计时,到客户端收到从服务器端返回的响应之间所经历的时间。不考虑客户端渲染所花费的时间。...

2015-01-27 09:19:57 153

0.性能优化-目录

从今天开始笔者陆续发表一些性能测试相关的文章,主要是对自己前段时间学习的总结,由于水平有限,性能测试领域很深,本人理解的也比较浅,欢迎各位大咖批评指正。主要内容包括:一、性能测试指标吞吐量、TPS、响应时间、负载、可扩展性、PV、思考时间 [url]http://frank1234.iteye.com/blog/2180305[/url]二、性能测试策略生产环境相同 基准测...

2015-01-27 09:19:12 50

享元模式

1.定义运用共享技术有效的支持大量细粒度的对象。2.适用场景1)应用使用了大量的对象,并且造成了大量的存储开销。例如编辑一个文档,会有大量重复的字符,如果每个都创建一个新的对象,会造成很大的内存开销。3.类图 [img]http://dl2.iteye.com/upload/attachment/0105/5805/61459298-f9d5-3464-9aaa-7f5...

2015-01-26 10:19:51 61

模板方法模式

1.定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。2.适用场景1)HttpServlet的service()方法。HttpSerlvet在service方法中调用doGet()和doPost()等方法,用户定义的Servlet继承自HttpServlet,重写其中的方法,由父类统一调用子类的方法。...

2015-01-23 23:37:08 57

适配器模式

1.定义将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。2.适用场景1)改造遗留系统或者使用第三方系统,原系统的接口跟新系统不符,无法一起工作。适配器模式的前提是原系统的接口无法修改,新系统的接口也无法修改成跟原系统的接口匹配,两个都不能改,引入一个Adapter,来适配一下。2)现实中的例子。手机充电器、电源...

2015-01-22 23:43:34 68

桥接模式

1.定义将抽象部分和它的实现部分分离,使他们都可以独立的变化。2.适用场景1)某个类具有两个或者两个以上的维度变化,可以使用桥接模式进行分离这两种维度的变化,例如您是一个服装制造商,既生产棉服,也生产T恤衫,每种衣服既有红色的,又有绿色的,这就出现了两个变化的维护,就可以通过桥接模式实现,下面用具体代码来实现这个示例。2)多数据库支持。如果您的应用要支持多种数据库,通过提供不同的实...

2015-01-22 23:41:47 61

代理模式

1.定义为其它对象提供一种代理以控制对这个对象的访问。2.应用场景1)Spring AOP。Spring AOP底层就是使用动态代理来实现的,Spring将切面织入到代理对象中。Spring AOP :[url] http://frank1234.iteye.com/blog/2170678[/url]2)Hibernate延迟加载。Hibernate提供了延迟加载机制,使用延...

2015-01-21 12:49:00 109

外观模式

1.定义外观模式也称为门面模式,英文名称是Facade,为子系统的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。外观模式的结构示意图如下: [img]http://dl2.iteye.com/upload/attachment/0105/4050/368cf7ae-1648-342e-98e5-9ebcee7a9808.jp...

2015-01-19 22:06:11 79

观察者模式

1.概述观察者模式也称为"依赖"(Dependents)或者"发布-订阅"(Publish-Subscribe),观察者模式的官方定义是:定义对象间的一种[color=red][b]一对多的依赖关系[/b][/color],当一个对象的状态发生改变时,所有依赖它的对象都得到通知并被自动更新。只要存在一对多的依赖时,就可以使用观察者模式。2.适用性1)一个抽象模型有两个方面,...

2015-01-19 22:03:48 76

装饰者模式

1.定义装饰者模式也成为包装器Wrapper模式,它可以动态的给一个对象添加一些额外的职责,就增加功能而言,装饰者模式相比生成子类更加灵活。2.应用场景1)希望给某个对象增加功能,而不是给某个类增加功能时。2)需要增加由一些基本功能的排列组合而产生的非常大量的功能,会造成子类呈爆炸性增长,从而使继承关系变的不现实时。3.应用举例1)Java I/O类库。Java I/O...

2015-01-18 17:50:29 82

空空如也

空空如也

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

TA关注的人

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