1.JVM管理两种类型的内存:堆内存(heap),栈内存(stack),堆内在主要用来存储程序在运行时创建或实例化的对象与变量.而栈内存则是用来存储程序代码中声明为静态(static)(或非静态)的方法.
2 .JVM中对象的生命周期,创建阶段,应用阶段,不可视阶段,不可到达阶段,可收集阶段,终结阶段,释放阶段
3.避免在循环体中创建对象,即使该对象占用内存空间不大.
4.软引用的主要特点是具有较强的引用功能.只有当内存不够的时候,才回收这类内存,因此在内存足够的时候,它们通常不被回收.它可以用于实现一些常用资源的缓存,实现Cache的功能
A a = new A();
SoftReference sr = new SoftReference(a);
a = null;
if(sr !=null)
{
a = sr.get();
}
else
{
a = new A();
sr = new SoftReference(a);
}
5.弱引用对象与Soft引用对象最大不同就在于:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收.
A a = new A();
WeakReference wr = new WeakReference(a);
a = null;
if(sr !=null)
{
a = wr.get();
}
else
{
a = new A();
wr = new WeakReference(a);
}
6.共享静态变量存储空间
7.有时候我们为了提高系统性能,避免重复耗时的操作,希望能够重用一些创建完成的对象,利用对象池实现.类似JDBC连接池.
8.瞬间值,序列化对象大变量时,如果此大变量又没有用途,则使用transient声明,不序列化此变量.同时网络传输中也不传输.
9.不要提前创建对象
void f()
{
int i; A a = new A();
if(....)
{
a.showMessage();
}
}
void f()
{
int i; A a = null;
if(....)
{
//用到时才实例化
a = new A();
a.showMessage();
}
}
10 .(1)最基本的建议就是尽早释放无用对象的引用
A a = new A();
a = null; //当使用对象a之后主动将其设置为空
(2)尽量少用finalize函数.
(3) 如果需要使用经常用到的图片展,可以使用软引用.
(4) 注意集合数据类型,包括数组,树等数据,这些数据结构对GC来说,回收更为复杂,
(5) 尽量避免在类的默认构造器中创建,初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费.
(6) 尽量避免强制系统做垃圾内存回收.
(7) 尽量避免显式申请数组空间.
(8) 尽量在合适的场景下使用对象池技术以提高系统性能,缩减系统内存开销.
11.当做数组拷贝操作时,采用System.arraycopy()方法完成拷贝操作要比采用循环的办法完成数组拷贝操作效率高
12. 尽量避免在循环体中调用方法,因为方法调用是比较昂贵的.
13. 尽量避免在循环体中使用try-catch 块,最好在循环体外使用try--catch块以提高系统性能.
14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减少循环层间的变换次数.
15. 在需要线程安全的情况下,使用List list = Collections.synchronizedList(new ArrayList());
16. 如果预知长度,就设置ArrayList的长度.
17. ArrayList 与 LinkedList 选择,熟悉底层的实现原理,选择适当的容器.
18. 字符串累加采用StringBuffer.
19. 系统I/O优化,采用缓冲和压缩技术.优化性能.
20. 避免在类在构造器的初始化其他类
21 尽量避免在构造中对静态变量做赋值操作
22. 不要在类的构造器中创建类的实例
23. 组合优化继承
24. 最好通过Class.forname() 动态的装载类
25. JSP优化,采用out 对象中的print方法代替println()方法
26 .采用ServletOutputStream 对象代替JSPWriter对象
27. 采用适当的值初始化out 对象缓冲区的大小
28. 尽量采用forward()方法重定向新的JSP
29. 利用线程池技术处理客户请求
30.Servlet优化
(1) 通过init()方法来缓存一些静态数据以提高应用性能.
(2) 用print() 方法取代println()方法.
(3) 用ServletOutputStream 取代 PrintWriter.
(4) 尽量缩小同步代码数量
31. 改善Servlet应用性能的方法
(1)不要使用SingleThreadModel
(2)使用线程池ThreadPool
32. EJB优化
实体EJB:
(1)实体EJB中常用数据缓存与释放
(2)采用延迟加载的方式装载关联数据
(3)尽可能地应用CMP类型实体EJB
(4)直接采用JDBC技术处理大型数据
33. 优化JDBC连接
(1)设置合适的预取行值
(2)采用连接池技术
(3)全合理应用事务
(4)选择合适的事务隔离层与及时关闭连接对象
34. PreparedStatemetn只编译解析一次,而Statement每次都编译解析.
35. 尽可能地做批处理更新
36. 通过采用合适的getXXX方法提高系统性能
37. 采用设计模式.
改成
for(int i=0;i<10000;++i)
{
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i)
{
obj = new Object();
System.out.println("obj="+obj);
}
分享到:
相关推荐
### Java基础优化编程知识点详解 #### 一、Java内存管理:堆内存与栈内存 Java虚拟机(JVM)管理着两种类型的内存:堆内存(heap)和栈内存(stack)。堆内存主要用于存储程序运行时创建的对象和实例变量,它是...
第8条 不要进行不成熟的优化 16 第9条 不要进行不成熟的劣化 18 第10条 尽量减少全局和共享数据 19 第11条 隐藏信息 20 第12条 懂得何时和如何进行并发性编程 21 第13条 确保资源为对象所拥有。使用...
编程艺术的继续创作仍需要得到广大读者的更多支持,最近,正在review和优化编程艺术系列,即在徐徐创作新的章节的同时,不断回顾已写的37章,希望能找出所有显而易见的bug,包括优化相关代码,希望有更多的朋友...
在CPU-GPU异构平台上,经过综合优化的并行程序取得了平均37倍的加速比,证明了优化策略的实际效果,并详细阐述了从算法设计到性能优化的整个开发流程。 最后,为了解决平台依赖性问题并降低编程难度,文章深入研究...
编程艺术的继续创作仍需要得到广大读者的更多支持,最近,正在review和优化编程艺术系列,即在徐徐创作新的章节的同时,不断回顾已写的37章,希望能找出所有显而易见的bug,包括优化相关代码,希望有更多的朋友可以...
- **系列构成**:程序员编程艺术系列文章从2011年4月开始撰写,历经37章,详细阐述了多个编程问题。 - **创作动力**:作者在创作过程中得到了广泛的读者支持和反馈,这鼓励作者继续写作,并不断优化内容。 - **读者...
三、Windows API与Win32编程 虽然MFC简化了Windows编程,但深入理解Windows API仍然是必要的。API提供了对操作系统底层功能的直接访问,如文件操作、进程线程管理、网络通信等。通过学习和使用API,开发者能实现更...
新代编程操作手册是针对新代品牌的编程系统提供的一份详尽指南,旨在帮助用户理解和掌握新代编程软件的使用方法。这份手册涵盖了从基本的界面介绍到复杂的编程技巧,旨在提升用户在数控机床编程和控制方面的技能。...
### 第七条军规:充分利用资源 在学习过程中,充分利用各种资源,如在线课程、技术文档、开源项目等,可以加速学习进程,避免重复造轮子。同时,积极参与社区讨论、阅读他人的代码,也是提升自我的有效途径。 ### ...
### Web 2.0编程思想:16条法则 #### 法则一:明确目标与需求 在开发任何Web 2.0应用之前,需要明确其核心价值与目标。这包括确定应用程序的主要功能(如标签、评论、编辑页面等),并确保这些功能能够满足用户的...
首先,XP优化七十项REG文件是针对微软Windows XP操作系统的一系列设置调整,旨在提升系统性能和稳定性。这些REG文件通常包含注册表键值的修改,用户可以通过导入这些文件来批量应用优化设置。不过,需要注意的是,...
《程序员编程艺术1-37章集锦》是编程领域的一部重要著作,它涵盖了从基础到高级的众多编程概念和技术。这本书旨在提升程序员的艺术修养,帮助他们掌握更高效的编程技巧,提高代码质量和可维护性。以下是根据描述和...
十、调试和优化 最后,学习如何使用调试器查找和修复代码中的错误,以及如何优化代码以提高性能,是每个程序员都需要掌握的技能。学会阅读和理解性能分析工具,如gprof或Visual Studio的性能分析器,可以帮助你找出...
十、网络性能优化 网络编程也涉及性能优化,如减少网络延迟、提高带宽利用率、缓存策略、负载均衡等。理解网络性能指标和优化技术能提升应用程序的响应速度和用户体验。 总的来说,网络编程原理文摘涵盖了网络通信...
学会如何使用gcc进行源代码编译和优化是Linux编程的基本技能。 四、使用 GUN make管理项目 make是一个广泛使用的项目构建工具,用于自动化编译过程。通过编写Makefile,程序员可以轻松管理复杂的编译规则,使得构建...
云风,时年二十七岁。自幼学习编程,十数年从未间断,对程序设计有所领悟。大学时代开发的游戏图像引擎“风魂”曾用于多家游戏公司的游戏项目。参与过《大话西游》系列、《梦幻西游》、《网易泡泡游戏》的开发。现...
涵盖操作系统的基本原理,如进程管理、内存管理、文件系统、网络编程接口(如socket)等内容,使程序员能够理解系统级编程的概念,提高系统调用和性能优化的能力。 四、计算机网络 详细讲解TCP/IP协议栈、HTTP、FTP...
本书是作者十余年编程生涯中的技术和经验的总结。内容涵盖了从认识CPU、Windows运行机理、 编程语言的运行机理,到代码的规范和风格、分析方法、调试方法和内核优化,内有作者对许多问题 的认知过程和透彻的分析,...