- 浏览: 143620 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
95546772:
我的QQ是 95546772
使用Jencks实现Hibernate与Jackrabbit的分布式事务 -
95546772:
您好,我正在学习jackrabbit.谷歌的连接失效了.能否发 ...
使用Jencks实现Hibernate与Jackrabbit的分布式事务 -
chenjson_chen:
楼主的这个说明,解答了现在项目中遇到的问题
关于Spring嵌套事务 -
beykery:
没必要这么写。。。。
回收DirectByteBuffer -
lc_windson:
楼主,关于这一块,我遇到了一个很困惑的问题,分析.tii文件的 ...
Lucene索引文件解析之“项”
考虑用静态工厂方法代替构造器
- 静态工厂方法的名字使得调用者更容易明白构造的意图,
- 静态工厂方法可以控制实例的创建数量,以提升性能.
代码示例:
public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }
当构造参数很多的时候考虑使用建造者(模式)
- 建造者使得构造的代码编写更为自然,同时保证了构造的一次性,
- 建造者能够满足实例构造之后的不变性,这是setter方法无法保证的,
- 一般而言,建造者适用于有四个或以上的可选参数的场景下使用.
代码示例:
// 原始 public class NutritionFacts { private final int servingSize; // (mL) required private final int servings; // (per container) required private final int calories; // optional private final int fat; // (g) optional private final int sodium; // (mg) optional private final int carbohydrate; // (g) optional ... public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) { this.servingSize = servingSize; this.servings = servings; this.calories = calories; this.fat = fat; this.sodium = sodium; this.carbohydrate = carbohydrate; } }
// Builder Pattern public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; private final int sodium; private final int carbohydrate; public static class Builder { // Required parameters private final int servingSize; private final int servings; // Optional parameters - initialized to default values private int calories = 0; private int fat = 0; private int carbohydrate = 0; private int sodium = 0; public Builder(int servingSize, int servings) { this.servingSize = servingSize; this.servings = servings; } public Builder calories(int val) { calories = val; return this; } public Builder fat(int val) { fat = val; return this; } public Builder carbohydrate(int val) { carbohydrate = val; return this; } public Builder sodium(int val) { sodium = val; return this; } public NutritionFacts build() { return new NutritionFacts(this); } } private NutritionFacts(Builder builder) { servingSize = builder.servingSize; servings = builder.servings; calories = builder.calories; fat = builder.fat; sodium = builder.sodium; carbohydrate = builder.carbohydrate; } }
用枚举实现单例(模式)
- 尽管通过private可以保证不能通过new来调用构造器,但通过反射机制可以绕过这一限制.
代码示例:
// Enum singleton - the preferred approach public enum Elvis { INSTANCE; public void leaveTheBuilding() { ... } }
避免创建不必要的对象
- 可以重用对象的时候,不要创建它,
- 考虑值不变的对象在static语句中创建,
代码示例:
public class Person { private final Date birthDate; // Other fields, methods, and constructor omitted // DON'T DO THIS! public boolean isBabyBoomer() { // Unnecessary allocation of expensive object Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0); Date boomStart = gmtCal.getTime(); gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0); Date boomEnd = gmtCal.getTime(); return birthDate.compareTo(boomStart) >= 0 && birthDate.compareTo(boomEnd) < 0; } }class Person { private final Date birthDate; // Other fields, methods, and constructor omitted /** * The starting and ending dates of the baby boom. */ private static final Date BOOM_START; private static final Date BOOM_END; static { Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); gmtCal.set(1946, Calendar.JANUARY, 1, 0, 0, 0); BOOM_START = gmtCal.getTime(); gmtCal.set(1965, Calendar.JANUARY, 1, 0, 0, 0); BOOM_END = gmtCal.getTime(); } public boolean isBabyBoomer() { return birthDate.compareTo(BOOM_START) >= 0 && birthDate.compareTo(BOOM_END) < 0; } }
- 谨防自动包装(autoboxing),这会产生大量包装类的实例
代码示例:
// Hideously slow program! Can you spot the object creation? public static void main(String[] args) { Long sum = 0L; for (long i = 0; i < Integer.MAX_VALUE; i++) { sum += i; } System.out.println(sum); }
清除过时的对象引用
- 即时清除过时对象的引用,能够促进对象被垃圾回收,从而避免内存泄漏,
代码示例:
// Can you spot the "memory leak"? public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) throw new EmptyStackException(); return elements[--size]; } /** * Ensure space for at least one more element, roughly * doubling the capacity each time the array needs to grow. */ private void ensureCapacity() { if (elements.length == size) elements = Arrays.copyOf(elements, 2 * size + 1); } }
public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; // Eliminate obsolete reference return result; }
- 内存泄漏的三大来源
- 类自我管理内存
- 缓存
- 监听,回调中的引用
避免使用finalize()
- finalize()是不可预知的,经常是危险的,通常是没必要的
发表评论
-
回收DirectByteBuffer
2011-03-03 10:33 2834为避免GC的负效应, 使用DirectByteBuffer管理 ... -
基于DSL风格的代码重构
2010-10-29 09:32 206什么样代码是简洁易懂, 这很难有个统一的标准, 因为它很 ... -
应用DirectBuffer提升系统性能
2010-08-19 13:01 3238Java 2 SE 6 doc : Given ... -
netty应用中接收缓存覆写的陷阱
2010-08-17 13:31 6350version : netty-3.2.1.final ... -
GWT应用经验小结
2009-03-16 18:29 38581. pendingSrc 问题描述:Image的set ... -
解读《使用Jencks实现Hibernate与Jackrabbit的分布式事务》
2009-01-15 18:15 5507前言 本文是针对《使用Jencks实现Hibernate与 ... -
使用Jencks实现Hibernate与Jackrabbit的分布式事务
2009-01-13 10:40 4318前言 这是一篇用Spring和Jencks ... -
从Erlang看高并发可容错系统设计原则
2008-12-25 18:30 2523《面对软件错误构建可靠的分布系统》 写道 Erlang 的世 ... -
Lucene索引文件解析之“项”
2008-12-23 17:25 1849接上文Lucene索引文件解析之“域”。 关于项(Ter ... -
Mockito入门
2008-12-17 18:35 11402简介 InfoQ-使用Mockito 1.5监视普通对象 ... -
开源让我兴奋
2007-01-08 11:47 812一直在设想自己设计一个java过程自动化的工具,但苦于经验、技 ... -
Jackrabbit 索引配置说明
2008-09-02 00:35 3539从1.4版本之后,jackrabbit开始支持节点的属性索引配 ... -
关于Spring嵌套事务
2008-09-03 05:34 13614不久前,为了避免事务的嵌套,刻意去修改以前的设计,导致各部分之 ... -
教练Marc Lammers语录
2008-09-09 02:06 1061本文摘之InfoQ:世界顶尖 ... -
速度计算有偏差
2008-09-18 01:24 1088团队有4个开发人员,3个测试人员,试行了4天的小迭代,完成的工 ... -
任务板用起来了
2008-09-25 00:53 2270好久就知道任务是个项 ... -
用例编写推荐守则
2008-10-08 07:52 1096没有最佳的用例模板,格式和章节是为用例的内容服务的,它们 ... -
Lucene索引文件解析之“域”
2008-12-12 00:42 2937引言 目前最新的Lucene的版本是2.4.0,但关于索引 ... -
GWT中RequestBuilder使用贴士
2008-12-09 13:35 7627GET请求 String url = // 动态生成 ... -
Failed to resolve artifact
2008-11-30 03:58 6828使用GWT-Maven Archetype (maven-go ...
相关推荐
本次工程的目标是学习监听器,掌握监听三个对象的创建和销毁方法。 三个对象:rquest,session,ServletContext 实现的接口:ServletRequestListener,HttpSessionListener,ServletContextListener 工程的大致步骤...
目的对象生命周期管理者模式可以被用来控制对象的整个生命周期,从对象被首次使用前创建它们到应用程序中止前完全的销毁它们。此外通过在应用启动/中止时进行对象自动的预先创建/销毁,使这个模式能够用来替代静态...
内容提要 • 使用构造方法 • 初始化数据 • 对象和内存 • 资源管理 派生类 • 实现方法 • Sealed类 • 使用接口 • 使用抽象类
Qt6 QML Book/动态QML/创建和销毁对象 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。 2.简介...
1. 创建一个基于对话框的应用程序。并增加如图所示控件;分别为3个进度条控件关联...//销毁线程句柄 } else { MessageBox("终止进程失败!"); } 11. 为应用程序添加WM_TIMER消息,实时更新全局变量的值到编辑框;
本篇文章主要介绍了JAVA创建和销毁对象的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Listener监听器 ...用于监听域对象创建和销毁的事件监听器 用于监听域对象属性增加和删除的事件监听器 用于监听绑定到HttpSession域中某个对象 状态的事件监听器 ServletContextListener接口 HttpS
这是一个用springMVC的项目 是一个监听器 用于监听session的创建、销毁、移除。会触发相应的事件处理
面向对象的编程语言使程序能够直观的反应客观世界的本来面目,并且使软件开发人员能够运用人类认识事物所采用的一般思维方法进行软件开发,是当今计算机领域中软件开发和应用的主流技术。
所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些”池化资源”技术产生的原因。例如...
所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些 很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些”池化资源”技术产生的原因。 我...
Inversion of Control 把对象创建和销毁的权利交给框架;控制反转是一种可以帮助我们解耦各业务对象间依赖关系的对象绑定方式
所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如何利用已有对象来服务就是一个需要解决的关键问题,其实这就是一些"池化资源"技术产生的原因。比如大家...
线程池提供了处理系统性能和大用户量请求之间的矛盾的方法,通过对多个任务重用已经存在的线程对象,降低了对线程对象创建和销毁的开销,由于当客户请求到了时,线程对象已经存在,可以提高请求的响应时间从而整体的提高...
一、C、C++、MFC、汇编 1.1、 文件读写 1.2、 申请内存空间 1.3、 MFC EDIT控件输入输出数据 1.4、 微机汇编常用指令 1.5、 打开文件对话框示例 ...1.22、非模态对话框的创建与销毁 1.23、移动和复制文件
下面,我会从单例的创建与销毁去分析单例. 单例的创建 单例的创建分为arc与mrc,两种模式下的创建. ARC 下的创建 先定义一个静态的instance. static MyClass _instance; 重写allocWithZone方法.此方法为对象分配...
资料总详细说明了Servlet的域对象的生命周期的解释。 何时创建和销毁的 如何存取数据 作用范围
用于监视GDI对象创建、销毁过程。记录创建、销毁、使用GDI对象的栈帧和部分参数信息。根据GDI对象句柄复原目标进程中的GDI对象图样。为目标进程设立对GDI对象的访问断点(类似VS的数据访问断点)。GDI对象泄漏分析...