展开

关键词

JAVA高性能IO设计模式

Java中的IO方式 主要分为3种:BIO(同步阻塞)、NIO(同步非阻塞)和AIO(异步非阻塞)。 ? BIO 同步阻塞模式。 在JDK1.4以前,使用Java建立网络连接时,只能采用BIO方式,在服务器端启动一个ServerSocket,然后使用accept等待客户端请求,对于每一个请求,使用一个线程来进行处理用户请求。 IO中的几个概念 以银行取款为例:  同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写); 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Java将 IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(银行卡和密码),OS需要支持异步IO操作API); 阻塞 : ATM排队取款,你只能等待(使用阻塞IO时,Java调用会一直阻塞到读写完成才返回 ); 非阻塞 : 柜台取款,取个号,然后坐在椅子上做其它事,等号广播会通知你办理,没到号你就不能去,你可以不断问大堂经理排到了没有,大堂经理如果说还没到你就不能去(使用非阻塞IO时,如果不能读写Java

42520

Java高性能编程实战 - 线程通信

要想实现多个线程之间的协同,如:线程执行先后顺序、获取某个线程执行的结果等等。 涉及到线程之间相互通信,分为下面四类:

16620
  • 广告
    关闭

    腾讯云618采购季来袭!

    腾讯云618采购季:2核2G云服务器爆品秒杀低至18元!云产品首单0.8折起,企业用户购买域名1元起,还可一键领取6188元代金券,购后抽奖,iPhone、iPad等你拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java高性能编程实战 - 线程终止

    Stop:中止线程,并且清除监控器锁的信息,但是可能导致线程安全问题,JDK不建议用。 Destroy: JDK未实现该方法

    11810

    Caffeine Cache~高性能 Java 本地缓存之王

    源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction 源码解析 Eureka 和 Hystrix 源码解析 Java 基于引用的过期方式 Java中四种引用类型 引用类型 被垃圾回收时间 用途 生存时间 强引用 Strong Reference 从来不会 对象的一般状态 JVM停止运行时终止 软引用 Soft Reference org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import java.util.ArrayList ; import java.util.List; import java.util.concurrent.TimeUnit; /** * @author: rickiyang * @date: 2019

    1.7K31

    Java NIO高性能网络编程(三)-Channel

    Java NIO的Channel类似流,是用于传输数据的数据流,但有不同: 既可从通道中读取数据,又可写数据到通道。 Channel的实现 Java NIO中最重要的通道的实现: FileChannel 从文件中读写数据。 DatagramChannel 通过UDP读写网络中的数据。 参考 http://tutorials.jenkov.com/java-nio/channels.html

    16220

    编写高性能 Java 代码的最佳实践

    摘要:本文首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。最后研究了JVM特定的调优技巧、数据库端的优化和架构方面的调整。以下是译文。 我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看看用于提升Java应用程序性能的JVM调优技巧和架构调整。 找出性能瓶颈 负载测试工具和应用程序性能管理(APM)解决方案常用于跟踪和优化Java应用程序的性能。 为此,Java的ExecutorService是线程池的基础,它提供了一个高级API来定义线程池的语义并与之进行交互。 结论 在这篇文章中,我们围绕着提升Java应用的性能探讨了许多概念。我们首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。

    29130

    java高性能反射及性能对比

    java编程中,使用反射来增强灵活性(如各类框架)、某些抽象(如各类框架)及减少样板代码(如Java Bean)。 因此,反射在实际的java项目中被大量使用。 由于项目里存在反射的性能瓶颈,使用的是ReflectASM高性能反射库来优化。 因此,在空闲时间研究了下的这个库,并做了简单的Beachmark。 <! 一开始我试图寻找java的ClassLoader的API获取它的字节码,但是似乎没有这种API。 原生调用的6倍,不如用java原生调用。 如果不这样做,这个ReflectASM用的没有任何意义,性能还不如java的原生反射。

    72630

    编写高性能 Java 代码的最佳实践

    我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看看用于提升Java应用程序性能的JVM调优技巧和架构调整。 找出性能瓶颈 负载测试工具和应用程序性能管理(APM)解决方案常用于跟踪和优化Java应用程序的性能。 为此,Java的ExecutorService是线程池的基础,它提供了一个高级API来定义线程池的语义并与之进行交互。 Java 7中的Fork/Join框架也值得提一下,因为它提供了一些工具来尝试使用所有可用的处理器核心以帮助加速并行处理。 结论 在这篇文章中,我们围绕着提升Java应用的性能探讨了许多概念。我们首先介绍了负载测试、基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践。

    47130

    Java高性能系统缓存的最佳实践

    内存作为缓存来加速程序访问速度,是所有高性能系统都会采用的方案。 缓存思想简单,就是把低速存储的数据,复制一份放到高速存储,加速数据访问。

    26110

    高性能Java本地缓存组件Caffeine Cache

    基于引用的过期方式 Java中四种引用类型 引用类型 被垃圾回收时间 用途 生存时间 强引用 Strong Reference 从来不会 对象的一般状态 JVM停止运行时终止 软引用 Soft Reference org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import java.util.ArrayList ; import java.util.List; import java.util.concurrent.TimeUnit; /** * @description: */ @Configuration

    38210

    高性能 Java 应用层网关设计实践

    不少人对 Java 网关的实现也比较感兴趣,所以这篇文章我们来简单谈谈 Java 应用网关设计,本文将会从以下几个方面来阐述 Java 应用层网关的设计 Java 应用层网关的必要性 核心网关技术选型 嵌入式网关 设计 Java 应用层网关的必要性 我们的 Java 网关分为应用层网关和业务嵌入式网关两部分,架构图如下 ? 在这里插入图片描述 Java 网关分为核心网关和业务嵌入式网关服务两部分,主要工作原理如下 接入层流量首先进入 Java 核心网关,经过一系列的 pipeline 处理(风控,路由协议转换、流控、降级等操作 首先来看 Java 网关为啥要分成核心网关和嵌入式业务网关两部分,直接从接入层打到业务网关不是更省事吗,何必多此一举再加一层核心网关,多加一层不是多了一个损耗吗。 加一个 Java 核心网关符合单一职责,分层的设计理念。

    1.1K21

    云原生时代高性能Java框架—Quarkus(一)

    . ---- Quarkus介绍 Quarkus 是一个为 Java 虚拟机(JVM)和原生编译而设计的全堆栈 Kubernetes 原生 Java 框架,用于专门针对容器优化 Java,并使其成为无服务器 GraalVM简介 GraalVM是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。 可以看到SDKMAN列出了所支持的所有Java发行版 ? 我们可以运行如下命令来判断GraalVM是否已安装: $ java -version ? 而且传统的Java EE规范并没有微服务的模式解决方案,问题很迫切需要解决。

    74730

    云原生时代高性能Java框架—Quarkus(二)

    概览 上一篇文章主要介绍了Quarkus以及给Quarkus提供“神力”的Java虚拟机GraalVM,并演示了如何安装GraalVM以及Quarkus的初步用法。 以下是本文的两个目标: 将Quarkus开发的Java应用程序编译成本地可执行文件。 将本地可执行文件打包到容器中。 注:在本文中本地可执行文件又称本地镜像,二者意思相同。 ---- 容器化本地可执行文件 我们可以很轻松的将Java应用程序的jar包进行容器化,当然我们也可以很轻松的将上一步生成的本地可执行文件进行容器化。 容器化本地可执行文件的步骤如下: ? 其中ExampleResourceTest类为普通的Java测试类,他的运行基于JVM。 随着将Java应用程序编译成本地镜像,Java的性能优势有了极大的提升。 本文参考:https://quarkus.io/guides/building-native-image

    49530

    高性能Java解析器实现过程详解

    高性能Java解析器实现过程详解 如果你没有指定数据或语言标准的或开源的Java解析器, 可能经常要用Java实现你自己的数据或语言解析器。 本文中,我将介绍一种用Java实现高性能解析器的方式。该方法不具排他性,它是简约的,并实现了高性能和合理的模块化设计。 该设计灵感来源于VTD-XML ,我所见到的最快的java XML解析器,比StAX和SAX Java标准XML解析器更快。 两个基本解析器类型 解析器有多种分类方式。 代替在解析数据上构建对象树,更高性能的方式是建立指向原始数据缓存的索引缓存。索引指向已解析数据的元素起始点和终点。代替通过对象树访问数据,数据处理代码直接在含有原始数据的缓存中访问已解析数据。 案例学习:一个JSON解析器 为了让索引叠加解析器设计更清晰,我基于索引叠加解析器设计用Java实现了一个小的JSON解析器。你可以在GitHub上找到完整的代码。

    84260

    Java&Go高性能队列之LinkedBlockingQueue性能测试

    在写完高性能队列Disruptor在测试中应用和千万级日志回放引擎设计稿视频版之后,我就一直在准备Java & Go 语言几种高性能消息队列的性能测试,其中选取了几种基准测试场景以及在性能测试中的应用场景 ,资料说java.util.concurrent.LinkedBlockingQueue性能大概是java.util.concurrent.ArrayBlockingQueue性能的2 ~ 3倍,差距过于明显 import java.util.concurrent.LinkedBlockingQueue import java.util.concurrent.atomic.AtomicInteger class import java.util.concurrent.CyclicBarrier import java.util.concurrent.LinkedBlockingQueue import java.util.concurrent.TimeUnit import java.util.concurrent.CyclicBarrier import java.util.concurrent.LinkedBlockingQueue import java.util.concurrent.TimeUnit

    20342

    Java&Go高性能队列之Disruptor性能测试

    之前写过Java&Go高性能队列之LinkedBlockingQueue性能测试之后,就一直准备这这篇文章,作为准备内容的过程中也写过一些Disruptor高性能消息队列的应用文章:高性能队列Disruptor Disruptor以高性能出名,下面我来测试一下三种场景下性能表现。 有一些基本的设定和用词规范,大家可以翻看Java&Go高性能队列之LinkedBlockingQueue性能测试。 总结起来几点比较通用的参考: 从Disruptor消费者能力超强,即使在超高消费者数量(1000),依然保持非常高性能 保证无消息积压前提下,com.lmax.disruptor.AbstractSequencer ❝Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。 基准测试 请翻阅上期的测试文章内容Java&Go高性能队列之LinkedBlockingQueue性能测试。

    7540

    Java&Go高性能队列之channel性能测试

    之前写了两篇Java高性能队列性能测试实践文章,发现了一些比较通用的规律,总体上Disruptor性能是要领先LinkedBlockingQueue的。 先回顾一下Java&Go高性能队列之LinkedBlockingQueue性能测试,Java&Go高性能队列之Disruptor性能测试。 net/http中的Request消息体结论如下: 消息队列积累消息对性能影响不大 消费次数越多,性能反而有点下降,应该是生产者速率不足导致 消息体尽可能小,不过性能下降不多 测试用例 总体代码逻辑与Java 和Groovy用例一样,有几处差别如下: 这里我用了sync.WaitGroup代替了java.util.concurrent.CountDownLatch,暂时没有找到合适的功能替换java.util.concurrent.CyclicBarrier 没想到net/http的性能还不如Java的,有点奇怪。

    8920

    Java异步NIO框架Netty实现高性能高并发

    相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。 Netty高性能之道 2.1. RPC调用的性能模型分析2.1.1.  序列化方式问题:Java序列化存在如下几个典型问题: 1) Java序列化机制是Java内部的一种对象编解码技术,无法跨语言使用;例如对于异构系统之间的对接,Java序列化后的码流需要能够通过其它语言反序列化成原始对象 Netty高性能之道2.2.1. 异步非阻塞通信 在IO编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者IO多路复用技术进行处理。 正是由于Java原生序列化性能表现太差,才催生出了各种高性能的开源序列化技术和框架(性能差只是其中的一个原因,还有跨语言、IDL定义等其它因素)。 2.2.8.

    2.3K10

    高性能Java日志框架log4j2

    Logback 算是 Java 里一个老牌的日志框架,从 2006 年开始第一个版本,迭代至今也十几年了。 log4j2 在目前 Java 中的日志框架里,异步日志的性能是最高的,没有之一。 先来看一下,几种日志框架 benchmark 对比结果(log4j2 官方测试结果): ? ③更高性能 I/O 写入的支持 Log4j 还提供了一个 MemoryMappedFileAppender,I/O 部分使用 MemoryMappedFile 来实现,可以得到极高的 I/O 性能。

    32320

    使用Java开发高性能网站需要关注的那些事儿

    technetwork/java/javase/tech/vmoptions-jsp-140102.html 2.Troubleshooting Guide for Java SE 6 with HotSpot Java -X(大写X)进行提示。 一些所谓高性能Java ORM开源框架也就是打开了很多JDBC中的默认参数: 1.例如:autoReconnect、prepStmtCacheSize、cachePrepStmts、useNewIO ),在JDK1.5以后使用java.util.concurrent下的工具类可以简化多线程开发,在java.util.concurrent的工具中主要分为以下几个主要部分: 1.线程池,线程池的接口(Executor 相关资料:Sun Java API.

    24620

    扫码关注云+社区

    领取腾讯云代金券