Java踩坑记系列之线程池

Java踩坑记系列之线程池

Java系列 5年前 (2020-02-16) 浏览: 6006 评论: 2

线程池大家都很熟悉,无论是平时的业务开发还是框架中间件都会用到,大部分都是基于JDK线程池ThreadPoolExecutor做的封装,比如tomcat的线程池,当然也有单独开发的,但都会牵涉到这几个核心参数的设置:核心线程数,等待队列,最大线程数,拒绝策略等。 先说下我们项目组在使用线程池时踩到的坑: 线程池的参数设置一定要结合具体的业务场景,区分I/O密集和CPU密集,如果是I/O密集型业务,

Java 17的一些新特性

Java 17的一些新特性

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

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

Spring Boot使用GraphQL入门

Spring Boot使用GraphQL入门

Java系列 4年前 (2021-10-31) 浏览: 3794 评论: 1

GraphQL是来自Facebook的一个相对较新的概念,被宣传为RESTforWebAPI的替代品。 本文将介绍如何使用Spring Boot设置GraphQL服务器,以便将其添加到现有应用程序或用于新应用程序。 什么是GraphQL? 传统的RESTAPI使用服务器管理的资源概念。这些资源可以按照各种HTTP谓词以一些标准方式进行操作。只要我们的API符合资源概念,它就可以很好地工作,但当我们

使用方法引用简化Java中的函数式编程

使用方法引用简化Java中的函数式编程

Java系列 4年前 (2021-12-13) 浏览: 877 评论: 1

与lambdas一起,JavaSE8将方法引用引入Java语言。本文简要概述Java中的方法引用,然后通过Java代码示例开始使用它们。在本文结束时,你将了解如何使用方法引用引用类的静态方法、绑定和未绑定的非静态方法以及构造函数,以及如何使用它们引用超类和当前类类型中的实例方法。文还将了解为什么许多Java开发人员采用lambda表达式和方法引用作为匿名类的更干净、更简单的替代方案。 方法引用 有

JVM Metaspace内存溢出排查与总结

JVM Metaspace内存溢出排查与总结

Java系列 5年前 (2020-02-13) 浏览: 9104 评论: 0

一. 现象 前段时间公司线上环境的一个Java应用因为OOM的异常报警,导致整个服务不可用被拉出集群,本地模拟重现的现象如下: 当时的解决方案是增加metaspace的容量:-XX:MaxMetaspaceSize=500m,从原来默认的256m改为500m,虽然没有再出现oom,但这个只是临时解决方案,通过公司的监控系统观察metaspace的使用情况还是在上升,而且后面随着业务访问量越来越大还

Java反射的作用

Java反射的作用

Java系列 5年前 (2020-10-22) 浏览: 510 评论: 0

检查构造函数 使用Java反射,我们可以检查任何类的构造函数,甚至可以在运行时创建类对象。这是由于java.lang.reflect。构造函数类。 在前面,我们只讨论了如何获取构造函数对象的数组,从中我们可以获得构造函数的名称。 在本节中,我们将重点讨论如何检索特定的构造函数。在Java中,正如我们所知,一个类的两个构造函数没有完全相同的方法签名。所以我们将使用这个唯一性从多个构造函数中获取一个构

找不到或无法加载主类怎么解决?

找不到或无法加载主类怎么解决?

Java系列 4年前 (2021-02-07) 浏览: 29136 评论: 0

Error: Could not find or load main class HelloWorld,当您试图使用Java命令运行Java程序时,主类为HelloWorld,但Java无法找到该类。为了解决这个错误,您必须知道Java是如何查找和加载类的,这对于初学者来说有点复杂,但是我们在这里将讨论相同的基础。现在,您只需记住,有一个名为CLASSPATH的环境变量,其中包含Java在其中查找

Micronaut框架简介

Micronaut框架简介

Java系列 4年前 (2021-04-21) 浏览: 1756 评论: 0

什么是Micronaut Micronaut是一个基于JVM的框架,用于构建轻量级、模块化的应用程序。Micronaut是由创建Grails的同一家公司OCI开发的最新框架,旨在使创建微服务变得快速和简单。 虽然Micronaut包含一些类似于Spring等现有框架的特性,但它也有一些新特性使它与众不同。通过对Java、Groovy和Kotlin的支持,它提供了多种创建应用程序的方法。 主要特点

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

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

Java系列 4年前 (2021-09-24) 浏览: 750 评论: 0

在JavaSE8之前,匿名类通常用于将功能传递给方法。这种做法混淆了源代码,使其更难理解。Java8通过引入lambdas消除了这个问题。本教程首先介绍lambda语言功能,然后详细介绍使用lambda表达式和目标类型进行函数式编程。您还将了解lambda如何与作用域、局部变量、this和super关键字以及Java异常交互。 请注意,本文中的代码示例与JDK 12兼容。 Lambdas: A p

JVM Code Cache代码缓存简介

JVM Code Cache代码缓存简介

Java系列 3年前 (2022-02-07) 浏览: 6679 评论: 0

在本文中,我们将了解JVM的Code Cache 代码缓存。 什么是Code Cache? 简而言之,JVM Code Cache (代码缓存)是JVM存储编译成本机代码的字节码的区域。我们将可执行本机代码的每个块称为nmethod。nmethod可能是一个完整的或内联的Java方法。 即时(JIT)编译器是代码缓存区的最大消费者。这就是为什么一些开发人员将此内存称为JIT代码缓存。 Code C

JDK19中的新特性

JDK19中的新特性

Java系列 3年前 (2022-08-08) 浏览: 952 评论: 0

Java19将于9月发布,是一个非LTS版本,它将以结构化并发、虚拟线程、切换表达式模式匹配、向量API(vector)和Linux/RISC-V端口为特色。 定于今年9月发布的Java Development Kit 19现在已经完成了功能,并进入了第二个降级阶段。该版本有七个功能,包括结构化并发、记录模式、外部函数和内存API预览,以及对开源Linux/RISC-V指令集体系结构(ISA)的支

你知道吗?Java使用的内存远远超过堆大小

你知道吗?Java使用的内存远远超过堆大小

Java系列 5年前 (2020-09-29) 浏览: 4205 评论: 0

对于我的应用程序,Java进程使用的内存远远大于堆大小。 运行容器的系统开始出现内存问题,因为容器占用的内存远远超过堆大小。 堆大小设置为128MB(-Xmx128m -Xms128m),而容器最多占用1GB内存。正常情况下需要500MB。如果docker容器的限制低于(例如mem_limit=mem_limit=400MB),则进程将被操作系统的内存不足杀手杀死。 那么为什么Java进程比堆占用

如何有效地使用Java反射

如何有效地使用Java反射

Java系列 5年前 (2020-11-02) 浏览: 695 评论: 0

反射是一种内置机制,用于在执行时对Java程序进行内省。它可以用来检查、修改和转换Java程序,而不会影响现有代码。这个强大的特性可以用来扩展程序的功能,在运行时检查类或对象的内部结构。本文试图探究其中的一些错综复杂之处,并对其有效使用略作一瞥。   反射API 反射API是标准java api库的一部分。它使我们不仅可以探索类的内在本质,而且可以在运行时不使用显式的new运算符来实例化

Java10有什么新功能?

Java10有什么新功能?

Java系列 4年前 (2021-02-17) 浏览: 569 评论: 0

Java10概述 2018年3月,我们看到了Java10的最新半年版。 在本文中,我们将研究此版本中引入的重大更改,并讨论一些较小的改进,这些改进将使开发人员和操作人员的生活更轻松。 Java10:巨大的变化 Java 10中的两大故事是: 新的var关键字,就像你想象的任何一种新的语言结构一样 新的六个月发布周期 此外,开发人员将很高兴看到更多的API发展。此外,还有运行时改进、新的性能调优旋钮

使用线程池的Java 8并行流用法

使用线程池的Java 8并行流用法

Java系列 4年前 (2021-06-29) 浏览: 817 评论: 0

执行并行流时,它在公共ForkJoinPool(ForkJoinPool.commonPool())中运行,由所有其他并行流共享。 有时我们希望在一个单独的专用线程池上并行执行代码,该线程池由特定数量的线程构成。例如,当使用myCollection.parallelStream()时,它并没有为我们提供方便的方法。 我编写了一个小的实用工具(ThreadExecutor类),可以用于此目的。 在下

如何在Java中实现LRU缓存

如何在Java中实现LRU缓存

Java系列 4年前 (2021-10-15) 浏览: 785 评论: 0

LRU缓存 最近使用最少(LRU)缓存是一种缓存逐出算法,它按使用顺序组织元素。顾名思义,在LRU中,最长时间未使用的元素将从缓存中逐出。 例如,如果我们有一个容量为三项的缓存: 最初,缓存是空的,我们将元素8放在缓存中。元素9和6像以前一样被缓存。但现在,缓存容量已满,要放入下一个元素,我们必须逐出缓存中最近使用最少的元素。 在我们用Java实现LRU缓存之前,最好先了解一下缓存的一些方面: 所

Java线程优先级

Java线程优先级

Java系列 3年前 (2022-05-07) 浏览: 732 评论: 0

线程被称为“最小的处理单元”,是一个轻量级的子进程,分配了一些需要执行的工作。线程共享分配给它们的相同内存插槽,并且彼此独立,因此促进了多任务处理。但是,当多个线程在共享内存插槽上运行时,必然会发生资源竞争。为了避免这种竞争,从而实现高吞吐量,引入了线程优先级的概念。当多个任务在同一个系统上运行时,它具有重要意义。“线程调度器根据优先级分配执行线程”。 JVM(JAVA虚拟机)默认或由程序员明确地

AREX Agent 技术实现细节分享

AREX Agent 技术实现细节分享

Java系列 2年前 (2023-08-07) 浏览: 878 评论: 0

原文地址:https://mp.weixin.qq.com/s/ObonOKMFftDCnFMs28ao7A 背景 在携程内部,随着公司业务规模和复杂度不断提高,研发测试团队面临着各种效能困境,尤其是在需要构造大量测试数据、写场景验证、发布频繁的场景下,业务的质量保障更是是重中之重。 为了满足公司持续交付的需求、并有效保障质量,我们基于流量录制回放的概念,在合法合规以及安全的前提下,开发了一款“用

Java递归算法讲解一

Java递归算法讲解一

Java系列 5年前 (2020-10-11) 浏览: 1111 评论: 0

从另一个函数调用一个函数的想法立即暗示了函数调用自身的可能性。Java中的函数调用机制支持这种可能性,即递归。 下面这个视频通过代码讲述了递归的基本原理: 递归算法示例 递归的“Hello,World”是阶乘函数,它是由等式为正整数n定义的 public class Factorial { // return n! // precondition: n >= 0 and n <= 20

Java9 Modules

Java9 Modules

Java系列 5年前 (2021-01-26) 浏览: 1468 评论: 0

Java9模块是Java结构中最大的变化之一。这篇文章将对“Java9模块系统”做一个简要的介绍。 介绍 甲骨文公司将Java9的发布时间从2017年3月推迟到2017年9月。 正如我们所知,Java8带来了三大新特性(再加上一些增强和新特性)。 Lambda表达式 Stream API 日期API 同样,Java9也带来了三大特性(再加上一些增强和新特性): Java模块系统(Jigsaw项目)

登录

忘记密码 ?

切换登录

注册