网站首页 > 文章中心 > 其它

java增大代码量

作者:小编 更新时间:2023-09-12 16:11:37 浏览量:44人看过

Java代码如何优化

① 尽量在合适的场合使用单例

使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:

第一,控制资源的使用,通过线程同步来控制资源的并发访问;

第二,控制实例的产生,以达到节约资源的目的;

第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信.

要知道,当某个对象被定义为stataic变量所引用,那么gc通常是不会回收这个对象所占有的内存

尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度的重用对象,最好能用基本的数据类型或数组来替代对象.

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快.其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢.

虽然包装类型和基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的,基本类型数据产生和处理都在栈中处理,包装类型是对象,是在堆中产生实例.

在集合类对象,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型.

都知道,实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制.synchronize方法被调用时,直接会把当前对象锁 了,在方法执行完之前其他线程无法调用当前对象的其他方法.所以synchronize的方法尽量小,并且应尽量使用方法同步代替代码块同步.

这个就不多讲了.

实际上,将资源清理放在finalize方法中完成是非常不好的选择,由于GC的工作量很大,尤其是回收Young代内存时,大都会引起应用程序暂停,所以再选择使用finalize方法进行资源清理,会导致GC负担更大,程序运行效率更差.

①.0. 尽量使用基本数据类型代替对象

String str = "hello";

上面这种方式会创建一个"hello"字符串,而且JVM的字符缓存池还会缓存这个字符串;

String str = new String("hello");

此时程序除创建字符串外,str所引用的String对象底层还包含一个char[]数组,这个char[]数组依次存放了h,e,l,l,o

①.1. 单线程应尽量使用HashMap、ArrayList

HashTable、Vector等使用了同步机制,降低了性能.

当你要创建一个比较大的hashMap时,充分利用另一个构造函数

public HashMap(int initialCapacity, float loadFactor)

并且在循环中应该避免使用复杂的表达式,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快.

程序中使用到的资源应当被释放,以避免资源泄漏.这最好在finally块中去做.不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭.

"/"是一个代价很高的操作,使用移位的操作将会更快和更有效

同样的,对于'*'操作,使用移位的操作将会更快和更有效

大部分时,方法局部引用变量所引用的对象 会随着方法结束而变成垃圾,所以呢,大部分时候程序无需将局部,引用变量显式设为null.

二维数据占用的内存空间比一维数组多得多,大概10倍以上.

除非是必须的,否则应该避免使用split,split由于支持正则表达式,所以效率比较低,如果是频繁的几十,几百万的调用将会耗费大量资源,如果确实需 要频繁的调用split,可以考虑使用apache的StringUtils.split(string,char),频繁split的可以缓存结果.

System.arraycopy() 要比通过循环来复制数组快的多

尽可能将经常使用的对象进行缓存,可以使用数组,或HashMap的容器来进行缓存,但这种方式可能导致系统占用过多的缓存,性能下降,推荐可以使用一些第三方的开源工具,如EhCache,Oscache进行缓存,他们基本都实现了FIFO/FLU等缓存算法.

有时候问题不是由当时的堆状态造成的,而是因为分配失败造成的.分配的内存块都必须是连续的,而随着堆越来越满,找到较大的连续块越来越困难.

当创建一个异常时,需要收集一个栈跟踪(stack track),这个栈跟踪用于描述异常是在何处创建的.构建这些栈跟踪时需要为运行时栈做一份快照,正是这一部分开销很大.当需要创建一个 Exception 时,JVM 不得不说:先别动,我想就您现在的样子存一份快照,所以暂时停止入栈和出栈操作.栈跟踪不只包含运行时栈中的一两个元素,而是包含这个栈中的每一个元素.

如 果您创建一个 Exception ,就得付出代价.好在捕获异常开销不大,所以呢可以使用 try-catch 将核心内容包起来.从技术上讲,您甚至可以随意地抛出异常,而不用花费很大的代价.招致性能损失的并不是 throw 操作--尽管在没有预先创建异常的情况下就抛出异常是有点不寻常.真正要花代价的是创建异常.幸运的是,好的编程习惯已教会我们,不应该不管三七二十一就 抛出异常.异常是为异常的情况而设计的,使用时也应该牢记这一原则.

(1). 用Boolean.valueOf(boolean b)代替new Boolean()

这个已经被N多人说过N次了,这个就不多说了.

因为这两者都是非常占用内存的(特别是方法调用更是堆栈空间的消耗大户).

这是初学者最容易犯的错,合理的使用变量,并且只有在用到它的时候才定义和实例化,能有效的避免内存空间和执行性能上的浪费,从而提高了代码的效率.

这种情况在我们的实际应用中经常遇到,而且我们很容易犯类似的错误

采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象引用,浪费大量的内存空间,而且增大了垃圾回收的负荷.所以呢在循环体中声明创建对象的编写方式应该尽量避免.

这个小技巧往往能有效的提高程序的性能,尤其是当if判断放在循环体里面时,效果更明显.

①JVM管理两种类型的内存:堆内存(heap),栈内存(stack),堆内在主要用来存储程序在运行时创建或实例化的对象与变量.而栈内存则是用来存储程序代码中声明为静态(static)(或非静态)的方法.

①.0 .(1)最基本的建议就是尽早释放无用对象的引用

A a = new A();

a = null; //当使用对象a之后主动将其设置为空

①.1.当做数组拷贝操作时,采用System.arraycopy()方法完成拷贝操作要比采用循环的办法完成数组拷贝操作效率高

(1) 通过init()方法来缓存一些静态数据以提高应用性能.

(1)不要使用SingleThreadModel

实体EJB:

(1)实体EJB中常用数据缓存与释放

(1)设置合适的预取行值

Java学习时候,有什么小技巧吗?

首先,要动手实践多练习.仅仅学会理论知识并不能使你精通Java,除非你经常练习你所学的东西,否则所有的学习都会白费.就像开车,除非你开始自己开车上路,否则你永远也学不会.找到一些小的编码难题,比如在网上看到别人遇到的难题并加以解决,这样你就可以习惯于编写解决问题的代码,而不是复制其他人的语法.

作为刚入职的java程序员,一年时间内如何提升自己的实力,更有竞争力

可以从以下几个方面入手:

第一:学习Java虚拟机知识.要想系统深入的了解Java语言中的各种概念就需要了解JVM(Java虚拟机)的体系结构和设计模式,JVM是Java语言的容器,Java语言的所有特性都是由JVM所提供的,所以系统的学习JVM对于理解Java语言具有重要的意义,尤其在未来面对一些系统级问题时会更加自信.

第二:提升代码量.对于初级程序员来说,要想提升自己的编程能力,一个最为有效直接的方式就是提升代码量.一方面可以通过岗位任务来完成,另一方面可以通过自主实验来完成.提升代码量的过程不仅能够加强自己的编程能力,也能提升自己调试程序的能力.

Java中可以系统学习的内容非常多,比如并发机制、事务处理机制、安全机制、消息传递机制、分布式处理机制、资源管理机制等等,这些内容都需要进行深入的了解.

java代码如何增量部署?

那你就需要从SVN上拷下更新的代码(java文件),再在eclipse(ide)工具上编译成class,再替换掉原有的class文件

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章