admin管理员组文章数量:1037775
Java开发中,有哪些提高效率的开发方式
前言
作为一名退役非专业的Java开发者,在Java代码开发的时候,也是会考虑如何从代码层面提升效率,以此来减少资源的利用率。尤其是在大数据开发的过程中,数据都是百亿级别,代码中很小的一个提升,对于整个数据处理中就是一个很大的提升。
所以,本篇文章主要看看,Java开发中哪些操作提高资源的利用率。
提高资源利用率
1. 连接池
在多线程的场景下,频繁创建和销毁线程会带来大量的资源开销,所以对于需要数据库连接、线程、网络连接的场景下,我们可以使用连接池的形式,例如多线程下我们可以使用连接池,当需要线程提交任务时,从连接池获取。任务执行完成之后,线程不会被销毁,而是放回到线程池,被其他任务使用。
我们可以使用 ThreadPoolExecutor 或者 Executors 的方式来创建连接池等。
代码语言:java复制ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> System.out.println("任务执行"));
上面创建了一个固定大小的连接池,除此之外我们还可以通过 ThreadPoolExecutor 来创建线程池,可以做到更精准的参数控制,例如超时时长、拒绝策略以及等待队列的选型等。
2. 避免不必要的对象创建
创建字符串的时候,避免使用 new String(),应该直接赋值。例如以下代码:
代码语言:java复制String s1 = new String("hello"); // 不推荐
String s2 = "hello"; // 推荐
第一种new的方式,其实会创建两个对象:
- 字符串常量池中的对象:当使用字符串字面量(如 "hello")时,JVM 会先在字符串常量池中查找是否存在相同内容的字符串。如果存在,则直接引用;如果不存在,则在常量池中创建一个新对象并引用它。
- 堆内存中的对象:使用 new String("hello") 时,JVM 会在堆内存中创建一个新的 String 对象,即使常量池中已有相同内容的字符串。这个 String 对象中的 xx 属性会指向字符串常量池中的对象。
3. 使用 StringBuilder 代替 String 进行拼接
当我们需要循环拼接字符串的时候,因为String 是不可变对象,每次拼接都会创建新对象。为了减少这样重复创建对象的资源消耗,我们可以选择 StringBuilder 来替代 String 来完成拼接。
代码语言:java复制StringBuilder sb = new StringBuilder();
sb.append("Hello ").append("World");
StringBuilder 内部维护了一个可变的字符数组 char[] value,用于存储字符串内容。当我们调用StringBuilder 的 toString() 的时候,才会将 value 中的字符生成字符串对象。
4. 使用 Stream 并行处理
单线程处理大数据量的集合时性能较低,使用 parallelStream() 可以自动利用多核 CPU 并行处理。
代码语言:java复制List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.parallelStream().map(n -> n * n).forEach(System.out::println);
5. 适时使用缓存
在程序中如果频繁计算或数据库查询会影响性能,所以我们可以使用一些缓存系统,例如使用 Caffeine、Guava Cache 或 Redis 进行缓存。
6. NIO
对于一些常见的IO操作,我们可以考虑替换成NIO去实现,例如socket连接的场景,我们就可以使用Netty去实现。
提升开发效率
我们再来看一下有哪些工具可以提升一下开发效率。
1. 使用 Lombok 简化代码
我们在使用 private 定义类的私有属性,必须提供 getter/setter 方法才能被外部类访问,但是如果字段过多,Java 代码就会变得冗长,影响代码的可读性。
优化: @Data、@Getter、@Setter 自动生成方法。
代码语言:java复制@Data
class User {
private String name;
private int age;
}
2. 使用 var 关键字
在 JDK 10+ 中,Java在定义变量的时候,可以不再指定数据类型,通过 var 就可以自动推断类型。
代码语言:java复制var list = new ArrayList<String>(); //
这种写法在 JavaScript、Scala 中比较常见,这种省去类型声明的方式,提高了编码的效率和可读性。
3. try-with-resources 自动关闭资源
在Java中第一次接触需要关闭的时候,还是学习文件IO。我们在 finally 中实现关闭资源的逻辑,这样无论是否发生异常,资源都会被关闭。但这种手动关闭资源容易导致 Resource Leak(资源泄露)。所以我们可以使用 try-with-resources 来自动关闭资源。
代码语言:java复制try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
System.out.println(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
4. 使用 Spring Boot
最开始接触SSM框架的时候,刚开始学习差点被各种复杂的配置文件劝退,后来在学习了SSM的注解之后,在一定程度上简化了复杂的配置文件。后来在实习中接触到了Spring Boot 提供自动配置,从此和SSM说拜拜。
代码语言:java复制@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
结语
上面就是一些常见的在Java中提高资源利用率和开发效率的方法,当然还有很多工具也会提高开发效率,例如选择一个好用的IDE、文本编辑器等等。
Java开发中,有哪些提高效率的开发方式
前言
作为一名退役非专业的Java开发者,在Java代码开发的时候,也是会考虑如何从代码层面提升效率,以此来减少资源的利用率。尤其是在大数据开发的过程中,数据都是百亿级别,代码中很小的一个提升,对于整个数据处理中就是一个很大的提升。
所以,本篇文章主要看看,Java开发中哪些操作提高资源的利用率。
提高资源利用率
1. 连接池
在多线程的场景下,频繁创建和销毁线程会带来大量的资源开销,所以对于需要数据库连接、线程、网络连接的场景下,我们可以使用连接池的形式,例如多线程下我们可以使用连接池,当需要线程提交任务时,从连接池获取。任务执行完成之后,线程不会被销毁,而是放回到线程池,被其他任务使用。
我们可以使用 ThreadPoolExecutor 或者 Executors 的方式来创建连接池等。
代码语言:java复制ExecutorService executor = Executors.newFixedThreadPool(10);
executor.submit(() -> System.out.println("任务执行"));
上面创建了一个固定大小的连接池,除此之外我们还可以通过 ThreadPoolExecutor 来创建线程池,可以做到更精准的参数控制,例如超时时长、拒绝策略以及等待队列的选型等。
2. 避免不必要的对象创建
创建字符串的时候,避免使用 new String(),应该直接赋值。例如以下代码:
代码语言:java复制String s1 = new String("hello"); // 不推荐
String s2 = "hello"; // 推荐
第一种new的方式,其实会创建两个对象:
- 字符串常量池中的对象:当使用字符串字面量(如 "hello")时,JVM 会先在字符串常量池中查找是否存在相同内容的字符串。如果存在,则直接引用;如果不存在,则在常量池中创建一个新对象并引用它。
- 堆内存中的对象:使用 new String("hello") 时,JVM 会在堆内存中创建一个新的 String 对象,即使常量池中已有相同内容的字符串。这个 String 对象中的 xx 属性会指向字符串常量池中的对象。
3. 使用 StringBuilder 代替 String 进行拼接
当我们需要循环拼接字符串的时候,因为String 是不可变对象,每次拼接都会创建新对象。为了减少这样重复创建对象的资源消耗,我们可以选择 StringBuilder 来替代 String 来完成拼接。
代码语言:java复制StringBuilder sb = new StringBuilder();
sb.append("Hello ").append("World");
StringBuilder 内部维护了一个可变的字符数组 char[] value,用于存储字符串内容。当我们调用StringBuilder 的 toString() 的时候,才会将 value 中的字符生成字符串对象。
4. 使用 Stream 并行处理
单线程处理大数据量的集合时性能较低,使用 parallelStream() 可以自动利用多核 CPU 并行处理。
代码语言:java复制List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.parallelStream().map(n -> n * n).forEach(System.out::println);
5. 适时使用缓存
在程序中如果频繁计算或数据库查询会影响性能,所以我们可以使用一些缓存系统,例如使用 Caffeine、Guava Cache 或 Redis 进行缓存。
6. NIO
对于一些常见的IO操作,我们可以考虑替换成NIO去实现,例如socket连接的场景,我们就可以使用Netty去实现。
提升开发效率
我们再来看一下有哪些工具可以提升一下开发效率。
1. 使用 Lombok 简化代码
我们在使用 private 定义类的私有属性,必须提供 getter/setter 方法才能被外部类访问,但是如果字段过多,Java 代码就会变得冗长,影响代码的可读性。
优化: @Data、@Getter、@Setter 自动生成方法。
代码语言:java复制@Data
class User {
private String name;
private int age;
}
2. 使用 var 关键字
在 JDK 10+ 中,Java在定义变量的时候,可以不再指定数据类型,通过 var 就可以自动推断类型。
代码语言:java复制var list = new ArrayList<String>(); //
这种写法在 JavaScript、Scala 中比较常见,这种省去类型声明的方式,提高了编码的效率和可读性。
3. try-with-resources 自动关闭资源
在Java中第一次接触需要关闭的时候,还是学习文件IO。我们在 finally 中实现关闭资源的逻辑,这样无论是否发生异常,资源都会被关闭。但这种手动关闭资源容易导致 Resource Leak(资源泄露)。所以我们可以使用 try-with-resources 来自动关闭资源。
代码语言:java复制try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
System.out.println(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
4. 使用 Spring Boot
最开始接触SSM框架的时候,刚开始学习差点被各种复杂的配置文件劝退,后来在学习了SSM的注解之后,在一定程度上简化了复杂的配置文件。后来在实习中接触到了Spring Boot 提供自动配置,从此和SSM说拜拜。
代码语言:java复制@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}
结语
上面就是一些常见的在Java中提高资源利用率和开发效率的方法,当然还有很多工具也会提高开发效率,例如选择一个好用的IDE、文本编辑器等等。
本文标签: Java开发中,有哪些提高效率的开发方式
版权声明:本文标题:Java开发中,有哪些提高效率的开发方式 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748309783a2283515.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论