精华内容
下载资源
问答
  • java代码优化
    千次阅读
    2021-12-03 15:52:43

    package com.hihonor.appsearch.utils;

    import java.lang.ref.PhantomReference;
    import java.lang.ref.ReferenceQueue;
    import java.util.ArrayList;
    import java.util.List;

    /**

    • 功能描述
    • @since 2021-12-03
      */
      public class Test {
      public static void main(String[] args) {
      List values=new ArrayList<>();
      ReferenceQueue referenceQueue=new ReferenceQueue();
      PhantomReference<List> weakReference=new PhantomReference<>(values,referenceQueue);
      for(int i=0;i<1000000000;i++){
      final List strings = weakReference.get();
      if (strings==null){
      values=new ArrayList<>();
      values.add(i+"");
      System.out.println(i+"");
      }
      }
      }
      }
      针对大数据集的list实现数据加入操作,执行过程中没有出现oom异常信息,这个给出了一个典型的代码优化方向。
      使用虚引用,若引用来代替进行代码开发,可以减少执行过程中出现的oom数据异常情况的。使用相当少量的代码就可以完成对应的代码实现效果的。将会是我后期书写代码的优化方向的。
    更多相关内容
  • JAVA代码优化工具

    2014-06-12 23:04:33
    JAVA代码优化工具,
  • 适合工作3年以上Java工程师阅读
  • 44条Java代码优化建议

    2018-05-09 09:49:48
    44条Java代码优化建议,值得阅读一遍、并实践; 44条Java代码优化建议,值得阅读一遍、并实践
  • Java代码优化方法

    千次阅读 2021-12-06 11:27:21
    代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 (1)重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后...

    代码优化的目标是:

    1、减小代码的体积

    2、提高代码运行的效率

    (1)重用对象

    特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。

    (2)及时关闭流

    Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。

    (3)循环内不要不断创建对象引用

    例如:

    for (int i = 1; i <= count; i++)
    {
        Object obj = new Object();    
    }

    (4)使用数据库连接池和线程池

    这两个池都是用于重用对象的,前者可以避免频繁地打开和关闭连接,后者可以避免频繁地创建和销毁线程

    (5)使用带缓冲的输入输出流进行IO操作

    带缓冲的输入输出流,即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,这可以极大地提升IO效率

    (6)String类尽量使用StringBuffer、StringBuilder

    这个涉及到jvm的内存分配,举个例子

    String str = “abc”;
     
    String strString = str + “123456789”;
    jvm会在堆内存中开辟3个空间,1为“abc”,2为“ccd”,3为“abcccd”,最终str2指向3,1和2因为没有被引用,会在GC回收机制内被回收,而GC的开销是相当大的,所以应尽量避免
    那么使用StringBuffer是什么情况呢?
    
    
    StringBuffer str =“abc”;
     
    str.append(“ccd”)
    jvm只会在堆空间中开辟一个空间“abc”,执行append时只会在“abc”的空间上+“ccd”
    
    因此避免了GC的回收,也避免了内存的浪费
    
    同样是为了获取到“abcccd”,但第二种方式明显更有效率
    
    那怎么判断是使用StringBuffer还是StringBuilder的呢?
    
    如果有线程安全的考虑使用StringBuffer,无则使用StringBuilder,线程安全也是一个比较高的开销
    
    
    
    

    展开全文
  • JAVA代码优化总结 通过使用一些辅助性工具来找到程序中的瓶颈然后就可以对瓶颈部分的代码进行优化一般有两种方案即优化代码或更改设计方法我们一般会选择后者因为不去调用以下代码要比调用一些优化的代码更能提高...
  • JAVA代码优化

    千次阅读 2018-10-21 23:27:45
    一、类、方法、变量尽量指定final修饰 public static void test(){ final String x=&amp;amp;quot;1&amp;amp;...二、字符串拼接背后不一定是StringBuilder、上面代码没有用StringBuilde

    一、类、方法、变量尽量指定final修饰

    public static void test(){
     final String x="1";
     final String y=x+"2";
     String z=x+y;
     System.out.println(z);
    }
    

    二、字符串拼接背后不一定是StringBuilder、上面代码没有用StringBuilder,下面代码使用了StringBuilder

    public static void test(){
     final String x="1";
     String y=x+"2";
     String z=x+y;
     System.out.println(z);
    }
    

    三、尽量重用对象、不要循环创建对象:类似:for循环字符串拼接

    public static void test(){
    StringBuilder s=new StringBuilder();
    for(int 1=0;i<10;i++){
    s.append("C");
    }
     System.out.println(s);
    }
    

    四、容器类初始化的时候指定长度

    new ArrayList<String>(5);
    new HashMap<String,String>(32);
    

    五、使用Entry遍历Map

     for(Map.Entry<String,String> entry:map.entrySet()){
        String key =entry.getkey();
        String value=entry.getValue();
    }
    

    六、大数据复制使用System.arraycopy();

    int[] is = new int[]{1,2,3,4,5}; 
    int[] is2 = new int[is.length];
    System.arraycopy(is, 0, is2, 0, is.length);
    System.out.println(Arrays.toString(is2));
    

    七、ArrayList随机遍历快,linkedList添加删除快
    八、集合遍历尽量减少重复计算

    for(int i=0,len=collection.size();i<len;i++){}
    

    九、尽量使用基本类型而不是包装类型
    十、不要手动调用System.gc()
    十一、及时消除过期像的引用,防止内存泄漏
    十二、尽量使用局部变量,减少变量的作用域
    十三、尽量使用非同步容器ArrayList VS Vector
    十四、尽量减少同步作用范围,synchronized方法 VS 代码块
    十五、ThreadLocal缓存线程不安全的对象,SimpleDateFormat

    public class SimpleDateFormUtils(){
       private static ThreadLocal<SimpleDateFormat> d=new ThreadLocal<SimpleDateFormat>(){
        protected SimpleDateFormat initialValue(){
           return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         }
       };
          public static void main(String[] args){
            d.get().format(new Date());
         }
    }
    

    十六、尽量使用懒汉加载或者饿汉加载
    十七、尽量减少使用反射,如果使用反射,第一次用反射,然后加入缓存
    十八、尽量使用连接池、线程池、对象池、缓存等

    但是commons-pool提供了一套很好用的对象池组件,使用也很简单。
    org.apache.commons.pool.ObjectPool定义了一个简单的池化接口,有三个对应实现,与我们的 Vector 这个集合不同的是,commons-pool提供了多样的集合,包括先进先出(FIFO),后进先出(LIFO)
    StackObjectPool :实现了后进先出(LIFO)行为。
    SoftReferenceObjectPool: 实现了后进先出(LIFO)行为。另外,对象池还在SoftReference 中保存了每个对象引用,允许垃圾收集器针对内存需要回收对象。
    KeyedObjectPool定义了一个以任意的key访问对象的接口(可以池化对种对象),有两种对应实现。
    GenericKeyedObjectPool :实现了先进先出(FIFO)行为。
    StackKeyedObjectPool : 实现了后进先出(LIFO)行为。
    PoolableObjectFactory 定义了池化对象的生命周期方法,我们可以使用它分离被池化的不同对象和管理对象的创建,持久,销毁。
    BasePoolableObjectFactory这个实现PoolableObjectFactory接口的一个抽象类,我们可用扩展它实现自己的池化工厂。
    

    十九、及时释放资源、I/O流、Socket、数据库连接、redis连接等
    二十、谨慎使用异常、不要用抛异常来表示正常业务逻辑
    二十一、String操作尽量用正则表达式

    replace VS replaceAll
    split
    

    二十二、日志输出注意使用不同级别
    二十三、日志中参数拼接使用占位符

    log.info("o:"+o);不推荐
    log.info("o:{}",o);推荐
    

    二十四、不要在循环中使用try…catch…,应该把其放在最外层
    二十五、乘法和除法使用移位操作

    // 左移运算 times是2的幂
    public long numberLeftCalculate(long number, int times)
    {
    	return number << times;
    }
     
    // 右移运算 times是2的幂
    public long numberRightCalculate(long number, int times)
    {
    	return number >> times;
    }
    
    

    二十六、循环内不要不断创建对象引用
    二十七、不要对数组使用toString()方法
    二十八、不要对超出范围的基本数据类型做向下强制转型
    二十九、公用的集合类中不使用的数据一定要及时remove掉
    三十、把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+""最慢
    三十一、不要创建一些不使用的对象,不要导入一些不使用的类
    三十二、字符串变量和字符串常量equals的时候将字符串常量写在前面

    String str = "123";
    if ("123".equals(str))
    {
        ...
    }
    

    三十三、不要将数组声明为public static final
    三十四、减少使用new关键字创建对象
    三十五、尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销
    三十六、使用预编译 SQL、使用 Statement或者使用 PreparedStatement、使用 SQL 批处理
    三十七、不要使用iterator()方法、使用原始类型和栈
    待续…
    <参考:https://blog.csdn.net/goldenfish1919/>
    <参考:http://www.cnblogs.com/xrq730/p/4857820.html>

    展开全文
  • 通过java代码规范来优化程序,优化内存使用情况,防止内存泄露 可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小...
  • java代码优化

    2012-02-10 17:42:59
    java 代码 优化
  • 在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的。下面有这么几个方向。 ... 1,能使用构造函数一步到位的,就尽量使用...

    在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的。下面有这么几个方向。

    https://blog.csdn.net/qq_27093465/article/details/92763548

    1,能使用构造函数一步到位的,就尽量使用构造函数,而不是使用一个个setter函数

    2,能使用数组的,就使用数组。替代list,数组是真的快。

    3,for循环的时候,使用for i循环针对list接口的集合,不使用for each 循环。for i循环的时候,把length的值提到for循环之外。

    4,有些变量能提出来的,取一次,多次使用。不要频繁的get。即使是一个简单的int值。

    5,要是能使用内部类的话,可以使用内部类,这样可以省去getter,setter方法的使用。

    6,json的序列化和反序列化,不要说理论上是fastjson快,就使用fastjson,因为针对数据结构的简单复杂程度,来选择使用什么去序列化和反序列化,要实际测试之后,再说话。不能直接照搬理论,因为有时候Gson真的很快。

    下面对这个构造和set的效率对比

    大师兄

    然后,使用的代码如下:

    package com.lxk.fast;
    
    import com.google.common.collect.Lists;
    import com.lxk.model.Car;
    import com.lxk.model.Dog;
    
    /**
     * 测试谁快 直接构造或者一个个set,他们的效率差多少
     *
     * @author LiXuekai on 2019/6/18
     */
    public class FastIsConstructOrSet {
        public static void main(String[] args) {
            testFast();
        }
    
        /**
         * 使用JProfiler看时间占比
         */
        private static void testFast() {
            while (true) {
                //72.8%
                set();
                //27.2%
                construct();
            }
        }
    
        /**
         * 构造函数来给属性赋值
         */
        private static void construct() {
            Car car = new Car("oooo", 100, Lists.newArrayList(new Dog("aaa", true, true)));
        }
    
        /**
         * set来给属性赋值
         */
        private static void set() {
            Car car = new Car();
            car.setSign("oooo");
            car.setPrice(100);
            Dog dog = new Dog();
            dog.setName("aaa");
            dog.setAlive(true);
            dog.setLoyal(true);
            car.setMyDog(Lists.newArrayList(dog));
        }
    }
    

    可以发现,构造就是比一个个设置要快不少,所以,在能一步到位给属性设置值的时候,考虑到效率问题,就要这么干

    (2019-07-16 新增)

    不是有老铁说builder模式吗?

    我好奇就测试了一下,万一这个builder模式快呢。

    下面是builder的代码

        /**
         * 使用JProfiler看时间占比
         */
        @Test
        public void testFast2() {
            while (true) {
                //33%
                set();
                //12.4%
                construct();
                //54.6%
                builder();
            }
        }
    
        /**
         * 使用lombok的 builder 模式来赋值
         */
        private static void builder() {
            Car car = Car.builder()
                    .sign("0000")
                    .price(100)
                    .myDog(Lists.newArrayList(Dog.builder().name("aaa").alive(true).isLoyal(true).build()))
                    .build();
        }

    大师兄

    大师兄

    使用的Lombok的注解。

    然后是JProfiler监测结果

    大师兄

    结果:

    可以看到,还是构造函数牛x呀,还是他快,另外,上面的比例:72.6 : 27.4 = 33 :12.4 = 2.64

    构造和set的时间比例是没有变化的。

    展开全文
  • JAVA代码优化.txt

    2010-03-21 22:33:10
    JAVA代码优化 JAVA代码优化 JAVA代码优化 JAVA代码优化 JAVA代码优化
  • Java代码性能优化常用方法

    万次阅读 2020-09-19 15:57:47
    JAVA核心API中,有许多应用final的例子,例如java、lang、String,为String类指定final防止了使用者覆盖length()方法。另外,如果一个类是final的,则该类所有方法都是final的。java编译器会寻找机会内联(inline...
  • java代码优化六大原则

    万次阅读 2017-05-29 20:35:29
    单一职责代码优化第一步,单一职责原则 (Single Responsibility Principle)。对于一个java类,应该仅有一个引起它变化的原因,也就是说,一个类中,应该是一组相关性很高的函数、数据的封装。但是这个原则的界限...
  • java代码优化浅析

    千次阅读 2016-06-30 11:30:45
    代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码,也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码...
  • Java代码优化技巧

    千次阅读 2017-03-02 17:33:37
    前言 在写作Java代码时 效率是十分重要的 尤其是在实际应用中 学长Eric就来总结一下自己平时在优化Java代码时的心得
  • 35 个 Java 代码性能优化总结
  • Java代码如何进行优化

    千次阅读 2018-04-02 15:34:03
    Java代码优化是Java编程开发很重要的一个步骤,Java代码优化要注重细节优化,一个两个的细节的优化,产生的效果不大,但是如果处处都能注意代码优化,对代码减少体积、提高代码运行效率是有巨大帮助的,还能在一定...
  • java代码性能优化

    千次阅读 2020-01-03 15:55:52
    日常代码中的性能优化
  • JAVA代码优化性能的方法

    千次阅读 2018-12-07 23:55:11
    5.try catch finally 优化: 1> try、catch、finally语句中,在如果try语句有return语句,则返回的之后当前try中变量此时对应的值,此后对变量做任何的修改,都不影响try中return的返回值 2> 如果finally块中有...
  • java代码效率优化

    2018-04-09 16:29:14
    java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码效率优化java代码...
  • 优化算法三次插值法java代码,亲测可用
  • 35个Java代码优化的细节,推荐

    万次阅读 2020-06-23 14:59:14
    代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,...
  • Java优化 if-else 代码的 8 种方案

    千次阅读 2021-11-01 14:01:30
    代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案。 优化方案一:提前return,去除不必要的else 如果if-else代码块包含return语句,...
  • 通过java代码规范来优化程序
  • JAVA代码性能优化

    2017-07-10 17:26:44
    java代码性能优化
  • Android优化(一)_Java代码优化

    千次阅读 2016-07-28 23:06:21
    现在是专题一:java代码优化 但这也仅仅是为大家提供一些思路与较为全面的总结,算不上什么,希望有错误或问题在下面评论。 最后完结以后会将思维导图与优化框架整理出来,请期待。 题记: 如何确保Java应用...
  • Java代码优化提点

    万次阅读 多人点赞 2013-10-30 11:04:16
     代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。程序代码可以是中间代码,也可以是目标代码。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码...
  • java代码优化之stream流+判空

    千次阅读 2020-11-22 21:33:12
    而现如今,随着stream流的普及,大家可以尝试着用stream流去代替for循环,好处有二,第一,stream流的执行效率要高于for循环,第二,用stream流比用for循环显得水平高点,代码更简洁好看一些。第三,stream流可以做...
  • 十三、java代码编写过程中的“内存优化”技巧 众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题就是内存泄露难以解决,尽管Java的JVM有一套自己的垃圾回收机制来回收内存,在许多情况下并不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 701,220
精华内容 280,488
关键字:

java代码优化

友情链接: 0_09_uart_tx.zip