Java踩坑记系列之线程池

Java踩坑记系列之线程池

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

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

java堆外内存泄漏排查

java堆外内存泄漏排查

jvm 3年前 (2020-12-31) 浏览: 4904 评论: 0

大多数Java虚拟机内存不足的问题都发生在堆上,但这一次被证明有点不同。 Java虚拟机(JVM)具有自动内存管理功能,因此Java开发人员不需要关心对象回收。但是他们仍然应该关注内存,因为内存不是无限的,我们有时确实会看到内存不足的错误。对于内存不足的问题,通常有两个可能的原因: JVM的内存设置太小 应用程序内存泄漏 对于第一种类型,使用更多内存很容易修复;只需更改一些JVM内存设置参数。对于

微服务和SOA有什么区别?

微服务和SOA有什么区别?

微服务 3年前 (2021-03-03) 浏览: 1059 评论: 0

微服务是新的SOA吗?人们还在谈论SOA吗?让我们来研究一下这两个架构之间的区别。 在上一篇博客“什么是微服务”中,您了解到具有分布式体系结构的SOA和微服务比单一体系结构具有显著的优势。在这个博客中,我将解释基于分层的体系结构,并告诉您微服务和SOA体系结构之间的区别。 在深入探讨微服务和SOA之间的区别之前,让我先告诉您单片体系结构、SOA和微服务之间的基本区别: 用外行的话说,一个整体类似于

Java异步编程指南

Java异步编程指南

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

在我们平时开发中或多或少都会遇到需要调用接口来完成一个功能的需求,这个接口可以是内部系统也可以是外部的,然后等到接口返回数据了才能继续其他的业务流程,这就是传统的同步模式。 同步模式虽然简单但缺点也很明显,如果对方服务处理缓慢迟迟未能返回数据,或网络问题导致响应变长,就会阻塞我们调用方的线程,导致我们主流程的耗时latency延长,传统的解决方式是增加接口的超时timeout设置,防止无限期等待。

使用JCTools实现Java并发程序

使用JCTools实现Java并发程序

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

  概述 在本文中,我们将介绍JCTools(Java并发工具)库。 简单地说,这提供了许多适用于多线程环境的实用数据结构。 非阻塞算法 传统上,在可变共享状态下工作的多线程代码使用锁来确保数据一致性和发布(一个线程所做的更改对另一个线程可见)。 这种方法有许多缺点: 线程在试图获取锁时可能会被阻塞,在另一个线程的操作完成之前不会取得任何进展—这有效地防止了并行性 锁争用越重,JVM处理

分布式数据库Apache Ignite介绍

分布式数据库Apache Ignite介绍

相关技术 3年前 (2021-07-04) 浏览: 1885 评论: 0

Apache Ignite是一个分布式数据库,用于具有内存速度的高性能计算 Ignite于2014年底由GridGain Systems开放源码,同年被Apache孵化器项目接受。Ignite项目于2015年9月18日毕业。 Apache Ignite的数据库使用RAM作为默认的存储和处理层,因此属于内存计算平台。磁盘层是可选的,但一旦启用,将保留完整的数据集,而内存层将根据其容量缓存完整或部分数

Tomcat9新特性及升级注意事项

Tomcat9新特性及升级注意事项

相关技术 3年前 (2021-10-08) 浏览: 3458 评论: 0

Tomcat 9仅适用于运行CentOS 6或CentOS 7的虚拟服务器。如果您使用的是CentOS 5(Webmin)或CentOS 4(VPS)计划,并且需要Tomcat 9,则需要迁移到CentOS 6(ISPmanager)计划。 Tomcat9设计用于在JavaSE8及以上版本上运行。Tomcat9中不支持JavaSE7 警告Tomcat 9是Tomcat应用服务器的主要版本。此版本对

构建微服务架构的5种常用技术

构建微服务架构的5种常用技术

微服务 3年前 (2021-05-07) 浏览: 2556 评论: 0

为了有效地实现你的目标,你必须把它们分解成小任务,然后把大部分时间花在你面前的任务上,而不是被大目标的艰巨所压倒。-- Sunday Adelaja 这可能不是微服务的工作原理,但它肯定是我们在微服务架构上开发应用程序时遵循的原则。 微服务在市场上越来越受欢迎,因为企业正致力于构建复杂的、更大的应用程序,这些应用程序可以作为较小服务的集合进行分离和处理。越来越多的人希望将他们传统的单机系统重新设计

GraalVM原生镜像性能测试:Spring VS Quarkus

GraalVM原生镜像性能测试:Spring VS Quarkus

相关技术 3年前 (2021-04-28) 浏览: 2808 评论: 0

GraalVM是一个通用的虚拟机,用于运行应用程序,如JavaScript、Python、Ruby、R、JVM等语言,如java、Scala、Groovy、Kotlin、Crojule和基于LLVM的语言,如C++和C++。 对我来说,最有趣的特性之一是编译为基于JVM的应用程序的本机二进制(在GraalVM中通常称为本机映像)。本机映像意味着编译将是独立的,不需要JVM(如C、C++或Golan

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

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

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

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

Windows环境下如何进行线程dump分析

Windows环境下如何进行线程dump分析

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

现在大部分公司都有自己完整的一套监控系统,比如美团的CAT,我们公司的监控系统也是基于CAT做的二次开发。一般测试环境或生产环境有问题可以直接使用这些系统查看线程和内存运行情况,分析排查问题。 但对于我们开发人员来说还是有必要了解最原始的排查流程,也就是不借助这些系统,使用最基本的命令解决,毕竟了解了这些底层实现对自身发展也是有帮助的。 网上搜下这样的文章其实很多,比如排查cpu过高,死锁问题的文

Java开发规范之性能篇

Java开发规范之性能篇

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

JAVA开发中,大部分的性能问题原因并不在于JAVA语言本身,而是我们用这些语言写的程序,所以养成良好的编码习惯非常重要。 下面给大家分享一些日常开发中比较常见的典型案例: 一. 类中的内部方法声明为private 很多同学觉得这个无所谓,写代码时喜欢一个类里的所有方法都是public的(原因大家都懂),美其名曰:便于后期扩展。。 对于不需要外部访问的方法改为私有的,不仅仅是因为面向对象的思想,符

metaspace默认大小

metaspace默认大小

jvm 3年前 (2020-11-17) 浏览: 3863 评论: 0

在Java8及以后的版本中,我们可以使用以下命令设置元空间的初始大小和最大大小:-XX:MetaspaceSize=N-设置元空间的初始(和最小大小)。-XX: MaxMetaspaceSize=N-设置元空间的最大大小。 什么是元空间metaspace size大小? 从我们的角度来看,需要注意的是,Metaspace的默认最大大小是无限的。相反,java7及更早版本的PermGen在32位JV

基于微软的Dapr构建微服务系统

基于微软的Dapr构建微服务系统

相关技术 3年前 (2021-08-10) 浏览: 781 评论: 0

当你第一次读到微软本周发布的最新开源项目Dapr时,你可能会觉得它是另一个服务网格。相反,Dapr在一篇博客文章中被描述为“一个开源、可移植、事件驱动的运行时,使开发人员能够轻松构建在云和边缘上运行的弹性、微服务无状态和有状态的应用程序。” 虽然该项目在其Istio服务网格实现中使用了特使代理使用的熟悉的侧车架构,但Azure项目管理总监Gabe Monroy在一次电子邮件采访中解释说,Dapr作

元空间的垃圾回收

元空间的垃圾回收

jvm 3年前 (2020-11-19) 浏览: 2412 评论: 0

Java内部结构 我们的许多微服务都运行在Java虚拟机(JVM)上,在本文的其余部分中,有必要充分理解这一主题。如果您已经熟悉编译、内存管理和垃圾收集的概念,可以跳过这些部分。 与其他语言相比,Java的优势之一是它的跨平台可移植性。这意味着在安装了Java运行时环境(JRE)的任何地方都可以执行相同的字节码。然而,它需要相当多的幕后工作来实现。一个重要的组件允许Java以它的方式运行,它是定义

使用Spring Native将SpringBoot程序转换为GraalVM

使用Spring Native将SpringBoot程序转换为GraalVM

相关技术 3年前 (2021-04-26) 浏览: 2567 评论: 0

Spring发布了一个新工具Spring Native Beta,用于将现有的Spring Boot应用程序(用Java或Kotlin编写)转换为GraalVM本机映像。目标是在springnative上支持Spring Boot应用程序。GraalVM本机映像很小,经过优化,启动速度很快。然而,与JVM相比,折衷的办法是构建时间更长,运行时优化更少。 Spring Native与GraalVM团

java.lang.OutOfMemoryError: unable to create new native thread

java.lang.OutOfMemoryError: unable to create new native thread

jvm 3年前 (2021-01-14) 浏览: 2666 评论: 0

1. 介绍 在本教程中,我们将讨论java.lang.OutOfMemoryError: unable to create new native thread error无法创建新的本机线程错误。 2. 了解问题 2.1. 问题的原因 大多数Java应用程序本质上是多线程的,由多个组件组成,执行特定的任务,并在不同的线程中执行。但是,底层操作系统(OS)对Java应用程序可以创建的最大线程数设置了

基于RocksDB实现的高性能文档存储框架:YugabyteDB

基于RocksDB实现的高性能文档存储框架:YugabyteDB

相关技术 3年前 (2021-05-21) 浏览: 1424 评论: 0

RocksDB是一种流行的可嵌入持久键值存储。作为Google LevelDB项目的一个分支,Facebook于2012年首次开源,多年来它已经适应了各种工作负载,包括数据库存储引擎和应用程序数据缓存。 在本文中,我们将解释选择RocksDB作为YugabyteDB的基础构建块的基本原理。我们还将重点介绍如何将YugabyteDB中的行建模为文档,然后将其存储为RocksDB中的多个键值对。 为什

内存级高性能分布式数据库Apache Ignite

内存级高性能分布式数据库Apache Ignite

相关技术 3年前 (2021-03-20) 浏览: 1497 评论: 0

介绍 Apache Ignite是一个开源的以内存为中心的分布式平台。我们可以将其用作数据库、缓存系统或内存中的数据处理。 该平台使用内存作为存储层,因此具有令人印象深刻的性能。简单地说,这是目前生产中使用的最快的原子数据处理平台之一。 官网地址:https://ignite.apache.org/ 安装 我们将要构建的应用程序的Maven依赖关系: <dependency> <

Spock高级用法 – 动态mock

Spock高级用法 – 动态mock

Spock系列 4年前 (2020-08-18) 浏览: 4255 评论: 0

这是Spock系列的第八篇文章,上一篇介绍了Spock如何使用power mock测试静态方法,这篇讲解Spock自带的mock功能如何和power mock组合使用,发挥更强大的作用 动态mock静态方法 (spock where + power mock) 在上一篇的例子中使用power mock让静态方法返回一个指定的值,那能不能每次返回不同的值呢? 我们先看下什么场景需要这样做: /**

登录

忘记密码 ?

切换登录

注册