跳至主要內容
如何在Java中读取超过内存大小的文件

如何在Java中读取超过内存大小的文件

读取文件内容,然后进行处理,在Java中我们通常利用 Files 类中的方法,将可以文件内容加载到内存,并流顺利地进行处理。但是,在一些场景下,我们需要处理的文件可能比我们机器所拥有的内存要大。此时,我们则需要采用另一种策略:部分读取它,并具有其他结构来仅编译所需的数据。

接下来,我们就来说说这一场景:当遇到大文件,无法一次载入内存时候要如何处理。

模拟场景

假设,当前我们需要开发一个程序来分析来自服务器的日志文件,并生成一份报告,列出前 10 个最常用的应用程序。

每天,都会生成一个新的日志文件,其中包含时间戳、主机信息、持续时间、服务调用等信息,以及可能与我们的特定方案无关的其他数据。


DD编辑部原创大约 5 分钟JavaJava
Java 22 发布,一文了解全部新特性

Java 22 发布,一文了解全部新特性

就在昨晚,Java 22正式发布!该版本提供了 12 项功能增强,其中包括 7 项预览功能和 1 项孵化器功能。它们涵盖了对 Java 语言、API、性能以及 JDK 中包含的工具的改进。

下面就来一起学习一下该版本都更新了哪些新特性!

Unnamed Variables & Patterns - JEP 456

JEP 456 - 未命名变量和模式:当需要但未使用变量声明或嵌套模式时,提高了可读性。两者都由下划线字符表示。

价值


程序猿DD原创大约 10 分钟JavaJava
Java 21 虚拟线程如何限流控制吞吐量

Java 21 虚拟线程如何限流控制吞吐量

虚拟线程(Virtual Threads)是 Java 21 所有新特性中最为吸引人的内容,它可以大大来简化和增强Java应用的并发性。但是,随着这些变化而来的是如何最好地管理此吞吐量的问题。本文,就让我们看一下开发人员在使用虚拟线程时,应该如何管理吞吐量。

在大多数情况下,开发人员不需要自己创建虚拟线程。例如,对于 Web 应用程序,Tomcat 或 Jetty 等底层框架将为每个传入请求自动生成一个虚拟线程。

如果在应用程序内部需要自行调用来提供业务并发能力时,我们可以使用Java 21新特性:虚拟线程(Virtual Threads)中介绍的方法去创建和使用,比如较为常用的就是Executors.newVirtualThreadPerTaskExecutor()


程序猿DD原创大约 2 分钟JavaJavaJava 21虚拟线程
Java微服务框架选择:Micronaut vs Spring Boot

Java微服务框架选择:Micronaut vs Spring Boot

深入研究微服务世界的 Java 开发人员经常发现自己面临着在两个著名框架之间做出选择:Micronaut 和 Spring Boot。

这两个框架都为构建微服务提供了强大的解决方案,但每个框架都有自己的优点和缺点。

在本文中,我们将探讨与 Spring Boot 相比使用 Micronaut 的一些潜在缺点,强调根据项目的特定需求调整您的选择的重要性。

生态系统的成熟度与规模

Spring Boot 在生态系统的成熟度与规模方面远远领先于 Micronaut。


DD编辑部原创大约 3 分钟技术选型MicronautSpring Boot微服务Java
Java 21中关于Locale区域设置的变化

Java 21中关于Locale区域设置的变化

当我们要尝试解决本地化问题时,首先要验证就是JVM使用的区域设置(Locale)是哪个。在Java 21中,弄清楚JVM使用的是哪个区域设置(Locale),这项任务变得更加容易了。

查看当前配置

在Java 21中,我们可以通过使用-X:showSettings来查看localetzdata,开发者可以通过-X:showSettings:locale仅显示Locale信息,如下所示:


程序猿DD原创大约 2 分钟JavaJavaJava 21
Java 21中的两个值得关注的Bug修复

Java 21中的两个值得关注的Bug修复

在Java 21中,除了推出很多新特性之外,一些Bug修复,也需要注意一下。因为这些改变可能在升级的时候,造成影响。

Double.toString()Float.toString()的精度问题修复

比如:对于Double.String(1e23)

  • 在Java 19后,输出内容为:1.0E23
  • 在Java 18中,输出内容为:9.999999999999999E22

程序猿DD原创大约 1 分钟JavaJavaJava 21
Java 21增强对Emoji表情符号的处理了

Java 21增强对Emoji表情符号的处理了

发现一个 Java 21 中有意思的东西!在java.Lang.Character类中增加了用于确定字符是否为 Emoji 表情符号的 API,主要包含下面六个新的静态方法:

public static boolean isEmoji(int codePoint) {
  return CharacterData.of(codePoint).isEmoji(codePoint);
}

public static boolean isEmojiPresentation(int codePoint) {
  return CharacterData.of(codePoint).isEmojiPresentation(codePoint);
}

public static boolean isEmojiModifier(int codePoint) {
  return CharacterData.of(codePoint).isEmojiModifier(codePoint);
}

public static boolean isEmojiModifierBase(int codePoint) {
  return CharacterData.of(codePoint).isEmojiModifierBase(codePoint);
}
  
public static boolean isEmojiComponent(int codePoint) {
  return CharacterData.of(codePoint).isEmojiComponent(codePoint);
}

public static boolean isExtendedPictographic(int codePoint) {
  return CharacterData.of(codePoint).isExtendedPictographic(codePoint);
}

程序猿DD原创大约 2 分钟JavaJavaJava 21
详解Java G1垃圾回收器

详解Java G1垃圾回收器

G1垃圾回收器是在Java7 update 4之后引入的一个新垃圾回收器,主要目的是用来替代CMS。

G1最大的特点是引入分区的思路,弱化了分代的概念,合理利用垃圾收集各个周期的资源,解决了其他收集器甚至CMS的众多缺陷。从而实现进一步降低暂停时间的同时,兼顾良好的吞吐量。

那么G1垃圾回收器的细节是怎么样的呢?

这里DD找到一个不错的视频,里面包含想的图示说明和代码案例,可以帮助您更好的理解G1垃圾回收器:


程序猿DD原创大约 1 分钟JavaJava
2
3
4
5
...
9