06 2011 档案

摘要:第38条:检查参数的有效性1.应该在错误出现之后尽快的检测出错误;2.对于公有的方法,要用javac的@throws标签在文档中说明违反参数值限制时会抛出的异常,异常有IllegalArgumentException,IndexOutOfBoundsException,NullPointerException(详见60条);3.非公有的方法通常应使用断言(assert)来检查 它们的参数,如果断言失败,将会抛出AssertionError;也不同于一般的有效性校验,如果它们没有起到作用,本质上不会有成本的开销;4.当有效性检验工作非常昂贵,或者不切实际的,而且有效性校验已经隐含在计算过程中完成 阅读全文
posted @ 2011-06-22 23:44 跳刀的兔子 阅读(374) 评论(0) 推荐(0)
摘要:数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一 阅读全文
posted @ 2011-06-07 16:13 跳刀的兔子 阅读(588) 评论(0) 推荐(0)
摘要:JVM的内存分为两部分:Stack和Heap。 在JVM中,静态属性保存在Stack指令内存区,动态属性保存在Heap数据内存区。Stack(栈)是JVM的内存指令区。Stack管理很简单,push一定长度字节的数据或者指令,Stack指针压栈相应的字节位移;pop一定字节长度数据或者指令,Stack指针弹栈。Stack的速度很快,管理很简单,并且每次操作的数据或者指令字节长度是已知的。所以Java 基本数据类型,Java 指令代码,常量都保存在Stack中。Heap(堆)是JVM的内存数据区。Heap 的管理很复杂,每次分配不定长的内存空间,专门用来保存对象的实例。在Heap 中分配一定的内 阅读全文
posted @ 2011-06-06 15:05 跳刀的兔子 阅读(361) 评论(0) 推荐(0)
摘要:创建新的对象并初始化的操作,可能会消耗很多的时间。在这种对象的初始化工作包含了一些费时的操作(例如,从一台位于20,000千米以外的主机上读出一些数据)的时候,尤其是这样。在需要大量生成这样的对象的时候,就可能会对性能造成一些不可忽略的影响。要缓解这个问题,除了选用更好的硬件和更棒的虚拟机以外,适当地采用一些能够减少对象创建次数的编码技巧,也是一种有效的对策。对象池化技术(Object Pooling)就是这方面的著名技巧,而Jakarta Commons Pool组件则是处理对象池化的得力外援。 说明:英语中的Pool除了“池”之外,还有“供多方共享的资源”意思。对象池化技术对象池化的基本思 阅读全文
posted @ 2011-06-02 16:14 跳刀的兔子 阅读(6649) 评论(0) 推荐(1)
摘要:ObjectPoolObjectPool 定义了一个简单的池接口 BaseObjectPool以下三个类的父类 A simple base implementation of ObjectPool. Optional operations are implemented to either do nothing, return a value indicating it is unsupported or throw UnsupportedOperationException. GenericObjectPool: 采用LIFO/FIFO结构实现ObjectPool接口。池的默认行为是一个LI 阅读全文
posted @ 2011-06-02 15:29 跳刀的兔子 阅读(9363) 评论(0) 推荐(2)
摘要:java GC工作在分代的模型上。大多数的对象要么很快的死亡,要么持续较长的时间。例如,方法栈中创建的对象只会持续几毫秒时间,而缓存中的对象会持续几分钟。既然对象有两种不同的什么周期,直觉认为,使用不同的垃圾收集算法也许能够在不同的周期中更好的完成工作。所以,JVM把堆空间拆封为两个不同的区域,新生代,旧生代。当对象刚开始创建的时候,会被分配到新生代。当对象在新生代中经过多次gc后,依然存活时,就假设这个对象将持续较长时间,就把这个对象复制到旧生代中去。JVM加上启动参数-XX:+UseParNewGC 和 -XX:+UseConcMarkSweepGC将为新生代启用Parallel New 阅读全文
posted @ 2011-06-02 15:12 跳刀的兔子 阅读(2451) 评论(0) 推荐(0)