- 博客(28)
- 资源 (4)
- 收藏
- 关注
转载 JVM调优总结-基本垃圾回收算法
可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep):此算法执行分两阶段。第一阶段从引用根节点开始标记所有被引用的
2010-10-29 15:26:00 993
转载 Struts2源码阅读(六)_ActionProxy&ActionInvocation
<br />下面开始讲一下主菜ActionProxy了.在这之前最好先去了解一下动态Proxy的基本知识.<br />ActionProxy是Action的一个代理类,也就是说Action的调用是通过ActionProxy实现的,其实就是调用了ActionProxy.execute()方法,而该方法又调用了ActionInvocation.invoke()方法。归根到底,最后调用的是DefaultActionInvocation.invokeAction()方法。<br />DefaultActionInv
2010-10-18 15:57:00 3553 3
转载 Struts2源码阅读(五)_FilterDispatcher核心控制器
<br />Dispatcher已经在之前讲过,这就好办了。FilterDispatcher是Struts2的核心控制器,首先看一下init()方法。<br />public void init(FilterConfig filterConfig) throws ServletException { try { this.filterConfig = filterConfig; initLogging(); //创建dispa
2010-10-18 15:51:00 1615
转载 Struts2源码阅读(四)_Dispatcher&ConfigurationProvider续
<br />接下来第三步:init_LegacyStrutsProperties()<br />调用的是调用的是LegacyPropertiesConfigurationProvider<br />通过比较前面DefaultPropertiesProvider与调用的是LegacyPropertiesConfigurationProvider.<br />发现DefaultPropertiesProvider继承自后者,但重写了register()方法,主要是生成PropertiesSetting的不同,前
2010-10-18 15:46:00 1689
转载 Struts2源码阅读(三)_Dispatcher&ConfigurationProvider
首先强调一下struts2的线程程安全,在Struts2中大量采用ThreadLocal线程局部变量的方法来保证线程的安全,像Dispatcher等都是通过ThreadLocal来保存变量值,使得每个线程都有自己独立的实例变量,互不相干.接下来就从Dispatcher开始看起,先看其构造函数://创建Dispatcher,此类是一个Delegate,它是真正完成根据url解析转向,读取对应Action的地方 public Dispatcher(ServletContext servletCo
2010-10-18 15:39:00 1132
转载 Struts2源码阅读(二)_ActionContext及CleanUP Filter
1. ActionContextActionContext是被存放在当前线程中的,获取ActionContext也是从ThreadLocal中获取的。所以在执行拦截器、 action和result的过程中,由于他们都是在一个线程中按照顺序执行的,所以可以可以在任意时候在ThreadLocal中获取 ActionContext。ActionContext包括了很多信息,比如Session、Application、Request、Locale、ValueStack等,其中 ValueStack可以解析ognl表
2010-10-18 15:30:00 1684
转载 ThreadLocal与Synchronized的用法
<br />一.ThreadLocal的用法<br />ThreadLocal的实现:<br />package com.sodao.lucene; import java.util.Random; public class ThreadLocalTest implements Runnable{ ThreadLocal<Studen> studenThreadLocal = new ThreadLocal<Studen>();
2010-10-18 14:53:00 2694
转载 Struts2源码阅读(一)_Struts2框架流程概述
1. Struts2架构图请求首先通过Filter chain,Filter主要包括ActionContextCleanUp,它主要清理当前线程的ActionContext和Dispatcher;FilterDispatcher主要通过AcionMapper来决定需要调用哪个Action。 ActionMapper取得了ActionMapping后,在Dispatch
2010-10-18 13:28:00 3628 1
转载 Java 性能优化
<br />1.慎用异常。<br /> 异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。<br />2.不要重复初始化变量。<br /> 默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值
2010-10-15 17:46:00 1101
转载 StringBuffer和StringBuilder的区别与联系(源码级)
<br />他们的相同点都是继承了AbstractStringBuilder类,所有方法基本相同,但是StringBuffer是线程安全的,方法前有synchronized关键字。他们的初始化大小都是16,扩容机制是新容量=(旧容量+1)×2<br />public StringBuilder() { super(16); }public StringBuffer() { super(16); }<br />void expandCapacity(int minimumC
2010-10-14 23:07:00 1323
转载 HashMap与HashTable的区别、HashMap与HashSet的关系
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。 1.HashTable的方法是同步的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程场合要手动同步 HashMap这个区别就像Vector和ArrayList一样。2.HashTable不允许null值(key和value都不可以)
2010-10-14 21:59:00 17453
转载 HashMap遍历及源码解析
一:遍历HashMap的两种方法:1、使用EntrySet遍历HashMap Map map = new HashMap();for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); Object key =
2010-10-13 23:34:00 3282
转载 Java集合源码----LinkedList解析
<br />LinkedList的实现其实是一个带哑头节点的双向循环链表。 <br />1.LinkedList的字段 <br />private transient Entry<E> header = new Entry<E>(null, null, null); <br />//Entry是一个LinkedList的内部类,其实就是链表上的节点,包含两个指针,一个指向 <br />//前面节点,一个指向后面节点 <br /> private static class Entry<E> { <br /
2010-10-13 15:12:00 1093
转载 Java集合源码--ArrayList的解析
ArrayList可以看作是对一个数组的包装,实现可变数组。 1.ArrayList的基本字段 //保存真正元素的数组,这里可能大家会感到奇怪,为什么把这数组标记为transient,这 //样序列化时不能序列化这个数组了。所以之后就只能才能手动序列化保存ArrayList里 //的元素值了。虽说数组里保存的都是对象的引用,序列化的时候,也会把真正的对象序 //列化保存起来的。但是如果是直接不用transient修饰这个数组,那么序列化时,那些 //elementData中为null的空间也会序列化。一句话
2010-10-13 14:55:00 2018
原创 内部类
http://blog.csdn.net/caoyinghui1986/archive/2008/05/22/2468180.aspxhttp://blog.csdn.net/caoyinghui1986/archive/2008/05/24/2476162.aspx
2010-10-12 16:02:00 818
原创 线程安全知识
一.什么是线程安全?如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。 线程安全问题都是由全局变量及静态变量引起的。 若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行
2010-10-12 15:24:00 1286
转载 JAVA中Stack和Heap的区别
<br />1.Java中对象都是分配在heap(堆)中。从heap中分配内存所消耗的时间远远大于从stack产生存储空间所需的时间。<br /> <br />(1)每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。 <br />(2)所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。 <br />(3)stack中的对象或变量只要定义好就可使用了,应用程序结束时会自动释放。 <br />(4)而要使用he
2010-10-12 13:45:00 40504 13
转载 堆(heap)与栈(stack)的区别
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相
2010-10-12 13:02:00 1147
转载 Struts中ActionServlet源码深入分析执行过程
<br />执行流程:<br />1、ActionServlet处理.do的请求 不管是get还是post方式都将转到<br /> protected void process(HttpServletRequest request, HttpServletResponse response) 方法。<br /> <br />2、根据请求对象和servletContext对象选择请求所隶属的模块<br /> ModuleUtils.getInstance().selectMo
2010-10-08 17:39:00 1536
翻译 Struts处理请求全过程
<br />一次请求的流程<br /><br />一:接受请求<br /> 1.以.do结尾的URL被ActionServlet拦截,执行service方法<br /> 2.根据请求传递的方法GET/POST选择执行doGet()或doPost()方法<br /> 3.在doGet()/doPost()方法中,调用process()方法<br />二:process()方法<br />1. 选择模块<br /> ModuleUtils.getInstance
2010-10-08 17:31:00 2097 1
转载 ActionServlet的初始化过程
一:介绍在tomcat的启动过程中,tomcat会读取/WEB-INF/web.xml文件中的配置信息进行一些初始化的工作,而Struts的启动工作就从这里开始.在web.xml文件中有如下的配置信息:actionorg.apache.struts.action.ActionServletconfig/WEB-INF/struts-config.xmldebug3
2010-10-08 15:06:00 3298
转载 if (log.isDebugEnabled()) {}使用场景初析
<br />一:问题:<br />在使用log4j,common-log这样的log框架时,发现很多代码中这样写 <br />if (log.isDebugEnabled()) { <br /> log.debug( "xxxx "); <br />} <br /><br />我很奇怪,为什么要与log.isDebugEnabled()?既然log.debug()在没有指定输出级别为DEBUG时不会有输出,为什么还要在前面加一个isDebugEnabled
2010-10-07 20:45:00 1193
转载 struts 的digester类解析xml文件
学习struts 的digester类解析xml文件 1、digester的简介 digester是struts的一个工具,用来解析struts的配置文件struts-config.xml,将xml的元素转换成java的对象。Digester是通过调用预定义的规则来操作xml元素,将xml的元素转换为java对象。 Digester底层采用SAX解析xml文件。首先识别出特定xml元素(实际细分为begin,body,end,finish四个步骤)后,执行特定的动作。diges
2010-10-07 20:20:00 1483
转载 myeclipse自动提示信息设置
Eclipse ,MyEclipse代码里面的代码提示功能默认的一般是点“.”,一般是有了点“.”,才会有代码提示。 原理:“Auto Activation triggers for java”这个选项就是指触发代码提示的的选项,把“.” 改成“.abcdefghijklmnopqrstuvwxyz(,”的意思,就是指遇到26个字母和.,(这些符号就触发代码提 示功能了。(具体后面有说,放心) 增强Eclipse ,MyEclipse 的代码提示功能,具体怎么样来配置?下面开始
2010-10-06 16:52:00 971
转载 Oracle中"listener does not currently know of SID given in connect descriptor"
一次连接数据库怎么也连接不上,查了多方面资料,终于找到答案,总结 首先应该保证数据库的服务启动 在myeclipse的数据库视图中点 右键->new 弹出database driver的窗口, Driver template选择oracle(thin driver), Driver name 输入oracle connection URL=jdbc:oracle:thin:@localhost:1521:oracle 注意localhost:1521:oracle中的or
2010-10-03 22:16:00 14981 1
原创 Java分页小结
所有的分页效果和下面的截图类似:一:MySql的分页mysql的分页比较简单,只需要limit offset,length就可以获取数据了,是从第offset条记录开始查找length条记录。1)首先在MySql中创建了user表create table user (id int primary key auto_increment, username varchar(50), password varchar(50)) 2)与数据库连接的操作类:
2010-10-03 21:22:00 2080
转载 用java调用oracle存储过程总结
<br />1、什么是存储过程。存储过程是数据库服务器端的一段程序,它有两种类型。一种类似于SELECT查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户。另一种类似于INSERT或DELETE查询,它不返回数据,只是执行一个动作。有的服务器允许同一个存储过程既可以返回数据又可以执行动作。<br />2、什么时候需要用存储过程<br /> 如果服务器定义了存储过程,应当根据需要决定是否要用存储过程。存储过程通常是一些经常要执行的任务,这些任务往往是针对大量的记录而进行的。在服务器上执
2010-10-03 20:57:00 546
转载 JDBC与SQL SERVER 连接问题
常见的错误为: The Network Adapter could not establish the connection 1 检查SQL SERVER 是否允许远程访问.具体步骤: 1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库 2)在相应"数据库"上单击右键,选择"属性"3)选择"连接"选项卡,检查"远程服务器连接"下,RPC服务是否选择. 2 使用telnet IP地址 1433,系统是否提示连接
2010-10-02 19:57:00 917
PetShop4.0宠物商店源文件及设计详解
2010-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人