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