线程池ForkJoinPool简介

线程池ForkJoinPool简介

Java系列 4年前 (2020-03-01) 浏览: 2468 评论: 0

ForkJoinPool线程池最大的特点就是分叉(fork)合并(join),将一个大任务拆分成多个小任务,并行执行,再结合工作窃取模式(worksteal)提高整体的执行效率,充分利用CPU资源。 一. 应用场景 ForkJoinPool使用分治算法,用相对少的线程处理大量的任务,将一个大任务一拆为二,以此类推,每个子任务再拆分一半,直到达到最细颗粒度为止,即设置的阈值停止拆分,然后从最底层的任

Java反射和内省教程

Java反射和内省教程

Java系列 4年前 (2020-10-28) 浏览: 308 评论: 0

什么是反射? “反射通常被需要检查或修改运行在Java虚拟机中的应用程序的运行时行为的程序所使用。”这个概念经常与内省introspection混合在一起。以下是它们在Wiki中的定义: 内省是程序在运行时检查对象类型或属性的能力。 反射是程序在运行时检查和修改对象的结构和行为的能力。 从他们的定义来看,内省是反射的一个子集。有些语言支持自省,但不支持反射,例如C++。 内省示例:instance

Java10特性和增强功能

Java10特性和增强功能

Java系列 3年前 (2021-02-12) 浏览: 471 评论: 0

在Java9发布之后,Java10很快就出现了。与以前的版本不同,Java10没有那么多令人兴奋的特性,但是它几乎没有什么重要的更新,这些更新将改变您的编码方式,以及其他未来的Java版本。 JEP 286:局部变量类型推断 Java现在有var样式的声明。它允许您声明局部变量而不指定其类型。变量的类型将从创建的实际对象的类型推断出来。它声称是JDK10中开发人员的唯一真正特性。例如: var s

RxJava和java9 FlowAPI的区别

RxJava和java9 FlowAPI的区别

Java系列 3年前 (2021-05-19) 浏览: 315 评论: 0

  JavaFlowAPI是在Java9中作为反应流规范Reactive Stream的实现而引入的。 在本文中,我们将首先研究反应流Reactive Stream。然后,我们将了解它与RxJava和flowapi的关系。 什么是Reactive Stream? Reactive Manifesto引入了Reactive Streams,以指定具有非阻塞背压的异步流处理的标准。 反应流规

Java Streams:流操作及示例

Java Streams:流操作及示例

Java系列 3年前 (2021-10-03) 浏览: 210 评论: 0

正如我们在Java Streams:流创建中所学到的,流管道由源、零个或多个中间操作和一个终端操作组成。 我们还了解到,streams流是懒惰的;仅当终端操作启动时,才对源数据执行计算。 在本文中,我们将进一步探讨streams流操作。 streams流操作 流操作可以是中间操作,也可以是终端操作。中间操作产生另一个流。同样,终端操作也会产生结果或副作用。 让我们看看Java流提供的一些操作。 过

Java 17的一些新特性

Java 17的一些新特性

Java系列 2年前 (2022-03-07) 浏览: 479 评论: 2

Java17将是一个长期支持的LTS版本。 您一定知道Java采用了6个月的发布周期。也就是说,它将每6个月发布一个新版本的Java。每隔3年,LTS版本就会发布一次。目前,Java 11是LTS版本,于2018年9月发布。但在Java17发布后,它将是最新的LTS支持。 许多组织依赖LTS版本,所以他们使用的是Java11。但在Java17发布后,他们将使用Java17(可能)。 自从将Java

JavaParser入门:以编程方式分析Java代码

JavaParser入门:以编程方式分析Java代码

Java系列 1年前 (2022-12-21) 浏览: 6356 评论: 0

是否可以解析代码并对其执行自动操作? JavaParser库(https://github.com/javaparser/javaparser)提供Java代码的抽象语法树。AST结构允许您以简单的编程方式使用Java代码。 当使用JavaParser时,我们通常希望每次都执行一系列操作。通常,我们希望对整个项目进行操作,因此,给定一个目录,我们将探索所有Java文件。该类应有助于完成以下操作:

Java递归方法Recursive详解二

Java递归方法Recursive详解二

Java系列 4年前 (2020-10-05) 浏览: 729 评论: 0

二进制数系统 你可能知道计算机只能存储1和0,这是因为处理器和内存是由数十亿个微小的开关组成的。 值1表示开关打开;值0表示开关关闭。所有类型的数据,无论是整数、浮点、文本、音频、视频或其他数据,都用1和0表示。 幸运的是,我们可以将任何整数表示为二进制数。下表显示了前8个二进制和十进制数字。 Binary Decimal 0 0 1 1 10 2 11 3 100 4 101 5 110 6 1

Java反射真的慢吗?

Java反射真的慢吗?

Java系列 4年前 (2020-11-08) 浏览: 479 评论: 0

你是否听到人们说“Java反射太慢了”或“使用反射刚刚降低了性能”,但我还没有听到任何确切的数字。不如我们做些测试来了解真实情况。 下面我编写了一些示例代码来对典型的Java方法调用与基于反射的方法调用进行比较。结果正是我对JVM的期望。任何可优化的函数(比如返回一个常量,或者一个只依赖于输入的方法,或者像交换内存中的整数这样的简单操作)都会因为在方法中执行的工作太快而出现明显的减速。但是,当该方

为什么我的Java应用程序被OOMKilled了?

为什么我的Java应用程序被OOMKilled了?

Java系列 3年前 (2021-02-22) 浏览: 929 评论: 0

在AWS云上,我们运行并部署容器化应用程序到我们的PaaS管道。像我们这样在Docker中运行Java应用程序的人,可能已经遇到过JVM在容器中运行时无法准确检测可用内存的问题。jvm没有准确地检测Docker容器中可用的内存,而是查看机器的可用内存。这可能导致在容器内运行的应用程序在尝试使用超出Docker容器限制的内存量时被终止的情况。 JVM对可用内存的错误检测与Linux tools/li

Java Stream之Parallel Streams编程指南

Java Stream之Parallel Streams编程指南

Java系列 3年前 (2021-07-28) 浏览: 2325 评论: 0

并行与并发程序设计 到目前为止,我们在CS2030中编写的程序是按顺序运行的。这意味着在任何时候,处理器上运行的程序只有一条指令。 什么是并发性? 一个单核处理器一次只能执行一条指令——这意味着一次只能运行一个进程(或者更确切地说,一个应用程序)。然而,当我们使用电脑时,感觉就像我们在同时运行多个进程。幕后的操作系统实际上是在不同进程之间切换,给用户一种同时运行的错觉。 我们可以编写一个程序,使其

Java程序中使用lambda表达式和函数编程示例

Java程序中使用lambda表达式和函数编程示例

Java系列 3年前 (2021-10-27) 浏览: 338 评论: 0

下面的示例引入了adjustAccounts()方法,该方法通过存入足够的资金使透支账户的余额为零来处理透支账户。adjustAccounts()接受两个lambda参数,它们必须符合Predicate<T>和Consumer<T>的抽象方法参数列表和返回类型。 编译器确定传递给adjustAccounts()的lambda参数是正确的。test()方法用于获取Accoun

Clojure vs Java:少数据结构、多函数胜过多个单独类的优点

Clojure vs Java:少数据结构、多函数胜过多个单独类的优点

Java系列 2年前 (2022-05-25) 浏览: 217 评论: 0

在Clojure中,我们一次又一次地使用相同的数据结构,并在其上运行许多函数。另一方面,Java程序员为每一组数据创建一个唯一的类,并使用自己的“API”(getter、setter、return type等)来访问和操作数据。由于被迫在两个这样的“类API”之间进行翻译,我想与大家分享我的经验,从而在实践中证明格言中的真理 请注意,本文谈论的是数据和数据承载类,而不是“业务逻辑”,它将由Java

HotSpot内联函数注解@IntrinsicCandidate简介

HotSpot内联函数注解@IntrinsicCandidate简介

Java系列 5个月前 (11-27) 浏览: 149 评论: 0

有时,编译器会对某些函数实现进行特殊处理。简单地说,它们将默认实现替换为另一个可能经过优化的实现。这样的函数在编译器理论中被称为内联/内在函数。 在本文中,我们将通过几个示例来了解内联函数在HotSpot JVM中是如何工作的: Java中的Math.log()方法计算任何给定数字的自然对数。以下是这个方法在OpenJDK中的实现: @IntrinsicCandidate public stati

Java踩坑记系列之BigDecimal

Java踩坑记系列之BigDecimal

Java系列 4年前 (2020-02-09) 浏览: 1478 评论: 0

在java.math包中提供了对大数字的操作类,用于进行高精确计算,如BigInteger,BigDecimal类。而平常我们开发中使用最多的float和double只能适用于一般的科学和工程计算,如果要在比较精确的计算方面如货币,那么使用float和double会相应的丢失精度,因此用于精密计算大数字的类BigDecimal就必不可少了。所以BigDecimal适合商业计算场景,用来对超过16位

Java递归函数Recursive算法讲解系列五

Java递归函数Recursive算法讲解系列五

Java系列 4年前 (2020-10-18) 浏览: 514 评论: 0

递归的缺点和问题 虽然递归是一种非常强大的工具,但它很容易被以各种方式滥用。在本节中,我们将研究几个实施不当的重新诅咒会导致严重的效率低下的情况,并讨论一些识别和避免此类陷阱的策略。 我们首先回顾上一章文章中定义的元素唯一性问题。我们可以使用下面的递归公式来确定序列的n个元素是否都是唯一的。作为基本情况,当n=1时,元素通常是唯一的。对于n≥2,当且仅当前n−1个元素是唯一的,最后n−1个元素是唯

Windows,macOS,Linux中的jdk环境变量配置

Windows,macOS,Linux中的jdk环境变量配置

Java系列 3年前 (2021-02-02) 浏览: 531 评论: 0

1. 什么是环境变量? 环境变量是在操作系统(如Windows、macOS和Linux)下运行的所有进程/用户都可以访问的全局系统变量。环境变量对于存储系统范围的值很有用,例如: PATH:最常用的环境变量,它存储一个目录列表,用于搜索可执行程序。 操作系统:操作系统。 COMPUTENAME,USERNAME:存储计算机和当前用户名。 SystemRoot:系统根目录。 (Windows)HOM

Java中System.getProperty和System.getenv的区别

Java中System.getProperty和System.getenv的区别

Java系列 3年前 (2021-03-29) 浏览: 985 评论: 0

java.lang包在Java应用程序中自动导入。这个包包含许多常用的类,从NullPointerException到Object、Math和String。 这个java.lang.System系统类是最后一个类,这意味着我们不能将其子类化,因此所有方法都是静态的。 我们将研究两种读取系统属性和环境变量的系统方法之间的差异。 这些方法是getProperty和getenv。 使用System.ge

Java8 Lambda和invokedynamic

Java8 Lambda和invokedynamic

Java系列 3年前 (2021-09-14) 浏览: 532 评论: 0

Java8于2014年3月发布,并引入了lambda表达式作为其旗舰功能。您可能已经在代码库中使用它们来编写更简洁、更灵活的代码。例如,您可以将lambda表达式与新的Streams API结合起来,以表达丰富的数据处理查询: int total = invoices.stream() .filter(inv -> inv.getMonth() == Month.JULY) .mapToIn

用lambda表达式进行Java编程

用lambda表达式进行Java编程

Java系列 2年前 (2022-01-10) 浏览: 373 评论: 0

在JavaOne 2013的技术主题演讲中,Oracle Java平台组首席架构师Mark Reinhold将lambda表达式描述为Java编程模型有史以来最大的一次升级。虽然lambda表达式有很多应用程序,但本文主要关注数学应用程序中经常出现的一个特定示例;也就是说,需要将函数传递给算法。 数学中的许多应用要求函数作为参数传递给算法。大学代数和基础微积分的例子包括解方程或计算函数的积分。15

登录

忘记密码 ?

切换登录

注册