Java编程中“为了性能”尽量要做到的一些地方

所需积分/C币:10 2012-12-07 15:29:10 444KB PDF
收藏 收藏
举报

Java编程中“为了性能”尽量要做到的一些地方
并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环 条件值不变的话,程序将会运行的史快。 尽量避免不必要的创建 应该改为 尽量在 块中释放资源 程序中使用到的资源应当被释放,以避免资源泄漏。这最好在 块中去做。不管程序执行的结果如何, 块总是会执行的,以确保资源的正确关闭。 尽量使用移位来代替的操作 是一个代价很高的操作,使用移位的操作将会更快和更有效 如 应该改为 但注意的是使用移位应添加注释,因为移位操作不直观,比较难理解 尽量使用移位来代替的操作 同样的,对于操作,使用移位的操作将会更快和更有效 应该改为 尽量确定 的容量 的构造器会创建一个默认大小(通常是)的字符数组。在使用中,如果超出这个大小,就会重 新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创 建 的时候指定大小,这样就避免∫在容量不够的时候自动増长,以提高性能 尽量早释放无用对象的引用 大部分时,方法局部引用变量所引用的对象会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部, 引用变量显式设为 例如: ava代码 1. Public void test()t 2. object obj=new objecto; 3 4. Obj=null; 上面这个就没必要了,随着方法的执行完成,程序中引用交量的作用域就结束了。但是如果是改成下面: Java代码 1. Public void teston 2. Object obj= new Object (); 3 4.Ob)=nu11 5./执行耗时,耗内存操作:或调用耗时,耗内存的方法 7. 这时候就有必要将赋值为,可以尽早的释放对 对象的引用。 尽量避免使用二维数组 二维数据占用的内存空间比一维数组多得多,大概倍以上 尽量避免使用 除非是必须的,否则应该避免使用 由于支持正则表达式,所以效率比较低,如果是频繁的几十,几 百万的调用将会耗费大量资源,如果确实需要频繁的调用,可以考虑使用 的 ,频繁的可以缓存结果。 个是线性表,一个是链表,一句话,随机查洵尽量使用 优于 还要移动指针,添加删除的操作 优于 还要移动数据,不过这是理论性分析,事实 未必如此,重要的是理解好者得数据结构,对症下药 尽量使用 代替通过来循环复制数组 要比通过循环来复制数组快的多 尽量缓存经常使用的对象 尽可能将经常使用的对象进行缓存,可以使用数组,或 的谷器来进行缓存,但这和方式可能导致系 统占用过多的缓存,性能下降,推荐可以使用一些第三方的开源工具,如 进行缓存,他们基 本都实现了 等缓存算法 尽量避免非常大的内存分配 有时候问题不是由当时的堆状态造成的,而是因为分配失败造成的。分配的内存块都必须是连续的,而随着堆 越来越满,找到较大的连续块越来越困难。 慎用异常 当创建一个异常时,需要收集一个栈跟踪 这个栈跟踪用于描述异常是在何处创建的。构建这些 栈跟踪时需要为运行时栈做一份快照,正是这一部分开销很大。当需要创建一个 时, 不得不说 先别动,我想就您现在的样子存一份快照,所以暂时停止入栈和出栈操作。栈跟踪不只包含运行时栈中的一两个元 素,而是包含这个栈中的每一个元素 如果您创建个 就得付出代价。好在捕获异常开销不大,因此可以使用 将核心内容包起 来。从技术上讲,您甚至可以随意地抛出异常,而不用花费很大的代价。招致性能损失的并不是 操作— 尽管在没有预先创建异常的情况下就抛山异常是有点不寻常。真正要花代价的是创建异常。幸运的是,好的编程习 惯已教会我们,不应该不管三七二十一就抛出异常。异常是为异常的情况而设计的,使用时也应该牢记这一原则 相关回复: 写道 慎用 ,尽量减小 的方法 同意,不过文中有个地方说错了,使用 关键字并不一定都是锁定当前对象的,要看具体的锁是什 么。如果是在方法上加的 则是以对象本身为锁的,如果是静态方法则锁的粒度是类 尽量不要使用 方法 :同意,其实不推荐用 方法的根本原因在于,的规范并不保证何时执行该方法,所以用这个方法来 释放资源很不合适,有可能造成长时间资源得不到释放。 尽量使用移位来代膂的操作;尽量使用移位来代替的操作 :个人不太同意这两条。这样做确实有更好的性能,但是却牺牲了可读性。这两个操作符对很多程序员来说并不 直观。我认为在如今硬件价格不那么昂贵的情况下,略微牺牲一些性能,换来更好的可读性和可维护性是好的选择。 写道 尽量早释放无用对象的引用 大部分时,方法局部引用变量所引用的对象会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部,引 用变量显式设为 例如: 上面这个就没必要了,随着方法的执行完成,稈序中引用变量的作用域就结東了。但是如果是改成下面 执行耗时,耗內存操作;或调用耗时,耗內存的方法 如果 如果这对象并不是大对象,这有必要吗? 只是告诉这个对象已经成 为垃圾,至于仆么时候回收,还不能确定!这可读性也不好!

...展开详情
试读 6P Java编程中“为了性能”尽量要做到的一些地方
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    • 领英

      绑定领英第三方账户获取
    • GitHub

      绑定GitHub第三方账户获取
    • 脉脉勋章

      绑定脉脉第三方账户获得
    • 分享王者

      成功上传51个资源即可获取
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    Java编程中“为了性能”尽量要做到的一些地方 10积分/C币 立即下载
    1/6
    Java编程中“为了性能”尽量要做到的一些地方第1页
    Java编程中“为了性能”尽量要做到的一些地方第2页

    试读已结束,剩余4页未读...

    10积分/C币 立即下载 >