WEB开发网
开发学院软件开发Java 从虚拟机视角谈 Java 应用性能优化 阅读

从虚拟机视角谈 Java 应用性能优化

 2010-07-15 00:00:00 来源:WEB开发网   
核心提示: 良好的面向对象设计和架构,应用设计模式,从虚拟机视角谈 Java 应用性能优化(8),这点对于 Java 应用的性能、重用和可维护性尤为重要,设计模式是由大师们总结出的解决典型问题的通用架构,在下一垃圾收集周期中被回收,这一点常常被 Java 程序员忽视,用对象来描述问题域,用设计模式来组织对象

良好的面向对象设计和架构,应用设计模式。

这点对于 Java 应用的性能、重用和可维护性尤为重要,设计模式是由大师们总结出的解决典型问题的通用架构,用对象来描述问题域,用设计模式来组织对象之间的行为。在设计和解决局部问题时,首先要看看抽象出来的问题是否和某个设计模式的目标问题一致。此外,尽可能多的了解虚拟机所支持的 API,看所需的功能是否已有现成的实现可供调用,虚拟机平台实现的 API 大都具有良好的性能。

关心 Java 栈。

前面了解到,对于基于栈的 Java 虚拟机,方法的调用和执行伴随着压栈和出栈操作。每个线程有各自独立的栈,由虚拟机来管理栈的大小,但我们应该对它的大小有个概念。栈的大小是把双刃剑,如果太小,可能会导致栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果过大,就会影响到可创建栈的数量,如果是多线程的应用,就会导致内存溢出。通过 -Xss可以设置 Java 栈的最大值,默认值为 256K。不建议设置该选项为其他值,好的方案是,通过优化程序来减少递归层数、避免过大的循环、减少方法的调用层次,让你的程序尽量“扁平”,用尽可能好的对象间的关系来取代少数对象间深层次的方法调用。

加强对象管理,不放任自流。

过分依赖垃圾收集有时候会出现严重的性能问题,特别对于在程序运行中伴随着大量大对象创建的情况。好的习惯是显式的释放不用对象的引用,在下一垃圾收集周期中被回收,这一点常常被 Java 程序员忽视,遗留的引用会导致 GC 无法回收这些逻辑上消亡的对象,看下面代码示例:


清单 3. Java 实现的栈

 public class Stack { 
 private static final int MAXLEN = 10; 
 private Object stk[] = new Object[MAXLEN]; 
 private int stkp = -1; 
 
 public void push(Object p) { 
  stk[++stkp] = p; 
 } 
 
 public Object pop1() { 
  return stk[stkp--]; 
 } 
  
 public Object pop2() { 
  Object p = stk[stkp]; 
  stk[stkp--] = null; 
  return p; 
 } 
 }  

上一页  3 4 5 6 7 8 9  下一页

Tags:虚拟 视角 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接