- 浏览: 35588 次
最新评论
文章列表
I/O 调优
下面就磁盘 I/O 和网络 I/O 的一些常用的优化技巧进行总结如下:
磁盘 I/O 优化
性能检测
我们的应用程序通常都需要访问磁盘读取数据,而磁盘 I/O 通常都很耗时,我们要判断 I/O 是否是一个瓶颈,我们有一些参数指标 ...
今天看了一片关于编码的文章,写的很全面,跟大家分享一下
http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/
1、静态集合类像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector等应用着。
2:大量临时变量的使用,没有及时将对象设置为null也可能导致内存的泄露
3:数据库的连接没有关闭情况,包括连接池方法连接数据库,如果没有关闭ResultSet等也都可能出现内存泄露的问题。
4:避免过深的类层次调用和方法调用。两者非常好内存。
5:字符串连接尽量使用stringBuffer
6:不要在经常调用的方法中创建对象,尤其是忌讳在循环中创建对象。
首先
下面说一下具体配置。
1,sqlMapConfig.xml中配置
1.1.SqlMapConfig.xml中
2.<settings
3.cacheModelsEnabled="true" //设置为true
4.enhancementEnabled="true"
5.lazyLoadingEnabled="true"
6..............
7./>
2,配置具体的sqlMap.xml
1.<cacheModel id="baby-cache" ...
现在的一些网站,特别是像淘宝之类的支付网站,会在某一个时刻产生巨大的并发量,如果没有一定的隔离机制,会导致整个服务器链的瘫痪。下面我来简单介绍一下隔离机制。
比如,支付过程涉及三个服务器,A,B,C,过程客户端向A发送请求,A向B发请求,B再向C发请求,然后C回应B,B回应A,这样完成一次支付。如果大访问量的情况下,C发生故障,则容易造成A和B的宕机。为了避免这样的情况发生,可以事先通过压力测试,测出C服务器的最大请求值(阀值)。A收到100个请求,然后再向B发送1000个请求,则B向C的请求数为100*1000=10万。比如阀值为10万,那第10万零一条请求会被抛弃。返回客户端一个服务器忙的信 ...
我们通常想要的是同一组固定的工作线程相结合的工作队列,它使用 wait() 和 notify() 来通知等待线程新的工作已经到达了。该工作队列通常被实现成具有相关监视器对象的某种链表。清单 1 显示了简单的合用工作队列的示例。
清单 1. 具有线程池的工作队列
public class WorkQueue
{
private final int nThreads;
private final PoolWorker[] threads;
private final LinkedList queue;
public WorkQueue(i ...
说JVM之前先来说一下Java中的堆和栈。
1:数据类型
Java虚拟机中,数据类型可以分为两类:基本类型和引用类型
基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。
1)基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress
2)引用类型包括:类类型,接口类型和数组。
2:堆与栈
栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;堆解决的是数据存储的问题,即数据怎么放、放在哪 ...
分布式可繁也可以简,最简单的分布式就是大家最常用的,在负载均衡服务器后加一堆web服务器,然后在上面搞一个缓存服务器来保存临时状态,后面共享一个数据库,大致结构如下图所示:
实现方式:
(一)环境说明
(1)服务器有4台,一台安装apache,三台安装tomcat
(2)apache2.0.55、tomcat5.5.15、jk2.0.4、jdk1.5.6或jdk1.4.2
(3)ip配置,一台安装apache的ip为192.168.0.88,三台安装tomcat的服务器ip分别为192.168.0.1/2/4
Apache 做为 HttpServer ,后面连接多个 tomcat 应用实例 ...
提到线程安全,大家都想到用synchonized关键字,其实还有另一种方法,就是ThreadLocal,它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。在很多情况下,ThreadLocal比直接使用synchronized同步机制解决线程安全问题更简单,更方便,且结果程序拥有更高的并发性。
下面来看一个hibernate中典型的ThreadLocal的应用:
1.private static final ThreadLocal threadSession = new ThreadLocal();
2.
3.public static Session getSess ...
动态代理其实就是java.lang.reflect.Proxy类动态的根据您指定的所有接口生成一个class byte,该class会继承Proxy类,并实现所有你指定的接口(您在参数中传入的接口数组);然后再利用您指定的classloader将 class byte加载进系统,最后生成这样一个类的对象,并初始化该对象的一些值,如invocationHandler,以即所有的接口对应的Method成员。 初始化之后将对象返回给调用的客户端。这样客户端拿到的就是一个实现你所有的接口的Proxy对象。请看实例分析:
一 业务接口类
public interface BusinessProces ...
1:无参数构造体
public static Object create(String className) throws ClassLoadException {
Object object = null;
Thread t = Thread.currentThread();
ClassLoader cl = t.getContextClassLoader();
try {
object = cl.loadClass(className).newInstance();
...
从图中可以看出:
ContextLoaderListener初始化的上下文加载的Bean是对于整个应用程序共享的,不管是使用什么表现层技术,一般如DAO层、Service层Bean;
DispatcherServlet初始化的上下文加载的Bean是只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdapter等等,该初始化上下文应该只加载Web相关组件。
方法一:在初始化时保存ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
方法二:通过Spring提供的工具类获取ApplicationContext对象
代码:
import org.springframework.web.conte ...
java 泛型是java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
1:泛型类
1.class Point<T>{ // 此处可以随便写标识符号,T是type的简称
2. private T var ; // var的类型由T指定,即:由外部指定
3. public T getVar(){ // 返回值的类型由外部决定
4. return var ;
5. }
6. publi ...
首先,写一个类,继承aop的MethodInterceptor类。
public class LogIntecepter implements MethodInterceptor {
public final Object invoke(
final MethodInvocation invocation) throws Throwable {
return invokeUnderTrace(
invocation);
}
protected final Obj ...