透过CountDownLatch窥探AQS

本文来自公众号“Kahuna”,可搜索Alitaba119,欢迎关注,转载请注明出处,非常感谢


 A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.

这是CountDownLatch这个类要解决的问题:实现一个同步器,让一个或者多个线程一直等待,直到一组在其他线程中执行的操作完成。

阅读全文

下一代的多语言JVM:GraalVM

GraalVM是一款高性能的可嵌入式多语言虚拟机,它能运行不同的编程语言,包括:

  • 基于JVM的语言,比如Java, Scala, Kotlin和Groovy
  • 解释型语言,比如JavaScript, Ruby, R和Python
  • LLVM支持的原生语言,比如C, C++, Rust和Swift
阅读全文

手撕面试题ThreadLocal!!!

摘要: 原创出处 http://www.jiangxinlingdu.com/ 「公众号:匠心零度 」欢迎关注和转载,保留摘要,谢谢!

说明

面试官:讲讲你对ThreadLocal的一些理解。

那么我们该怎么回答呢????你也可以思考下,下面看看零度的思考;

  • ThreadLocal用在什么地方?
  • ThreadLocal一些细节!
  • ThreadLocal的最佳实践!
  • 思考
阅读全文

Java 10的类型推导

Java 10带来了全新的语言特性:局部变量类型推导(local variable type inference)。它的主要目标就是减少样板代码(boilerplate),增强代码可读性。可以使用关键词var来替代局部变量的类型声明——编译器会根据变量初始化语句来自己填充正确的类型的。比如说:

Map<User, List<String>> userChannels = new HashMap<>();

阅读全文

谈谈Netty的线程模型

一、前言

Netty是一个异步、基于事件驱动的网络应用程序框架,其对 Java NIO进行了封装,大大简化了 TCP 或者 UDP 服务器的网络编程。Netty 的简易和快速开发并不意味着由它开发的程序将失去可维护性或者存在性能问题,它的设计参考了许多协议的实现,比如 FTP,SMTP,HTTP 和各种二进制和基于文本的传统协议,因此 Netty 成功的实现了兼顾快速开发,性能,稳定性,灵活性为一体,不需要为了考虑一方面原因而妥协其他方面。Netty 的应用还是比较广泛的,比如Apache Dubbo 、Apache RocketMq、Zuul 2.0服务网关、Spring WebFlux、Sofa-Bolt 底层网络通讯都是基于 Netty 来实现的,本文探讨Netty4。

阅读全文

JVM之动态方法调用:invokedynamic

在本文的前面的姊妹篇中,介绍了Java方法调用的5种操作码中的4种。它们是Java 8和Java 9中方法调用的标准字节码形式。

于是第五个操作码invokedynamic便进入了我们的视线。简单来说,Java 7中在语言层面上对invokedynamic是没有直接支持的。事实上,当Java 7的运行时首次引入invokedynamic指令时,javac编译器是不会生成这个字节码的。

阅读全文

Java 异步编程导论

异步编程是可以让程序并行运行的一种手段,其可以让程序中的一个工作单元与主应用程序线程分开独立运行,并且等工作单元运行结束后通知主应用程序线程它的运行结果或者失败原因。使用它有许多好处,例如改进的应用程序性能和减少用户等待时间等。

阅读全文

JVM优化之循环展开

在JVM内部实现系列的前几篇文章中,我们已经看到了Java的HotSpot虚拟机的just-in-time (JIT)编译技术,包括逃逸分析和锁消除。本文我们将要讨论另一种自动优化,叫作循环展开。JIT编译器使用这项技术来让循环(比如Java的for或者while循环)执行得更加高效。

阅读全文

看完这篇还不清楚Netty的内存管理,那我就哭了!

摘要: 原创出处 http://www.jiangxinlingdu.com/ 「公众号:匠心零度 」欢迎关注和转载,保留摘要,谢谢!

说明

在学习Netty的时候,ByteBuf随处可见,但是如何高效分配ByteBuf还是很复杂的,Netty的池化内存分配这块还是比较难的,很多人学习过,看过但是还是云里雾里的,本篇文章就是主要来讲解:Netty分配池化的堆外内存的细节,期待可以让你明白!!!

由于为了更好的表达,文章中的图我最少画了6小时,画的不熟悉,并且也强调一些细节上。

由于该源码中涉及到大量的二进制操作,建议看看我之前写的2篇二进制文章:java二进制相关基础二进制实战技巧

阅读全文

JVM优化之逃逸分析及锁消除

逃逸分析——我们在上一篇文章中所介绍的由编译器完成的一项的分析技术——使得删除锁的优化成为了可能。如果它能确认某个加锁的对象不会逃逸出局部作用域,就可以进行锁删除。这意味着这个对象同时只可能被一个线程访问,因此也就没有必要防止其它线程对它进行访问了。这样的话这个锁就是可以删除的。这个便叫做锁消除,本文是JVM实现机制的系列文章,这也正是今天要讲的主题。

阅读全文

(译文)InnoDB中的AUTO_INCREMENT处理

(译者注)网站和app并发性能取决于访问链路的每个环节,包括前端、流量路由、后台业务逻辑代码、中间件和数据库等。大部分环节都可以通过横向扩展来提高并发性能,数据库作为链路的末端要保持数据一致性等特点不像其他环节容易横向扩展,所以数据库性能尤为重要,特别是插入性能。
数据库设计通常会用一列与业务无关的自增长id作为主键(互联网业务数据库设计一般不会完全遵循数据库范式,如果有其他列值是随时间递增,也可以用该列做主键),提高写入效率和方便数据复制。而自增长id生成模式影响着数据插入性能。

阅读全文

JVM优化之逃逸分析与分配消除

在Java Magazine的前几期文章中,我们介绍了just-in- time (JIT) 编译技术的一些理论基础,以及如何使用Java Microbenching Harness(JMH)和开源工具JITWatch来进行可视化分析,以便搞清楚HotSpot VM的内部机制。在这期文章中,我们将要深入介绍一下逃逸分析(escape analysis)技术,这是JVM最有意思的优化手段之一。逃逸分析是JVM的一项自动分析变量作用域的技术,它可以用来实现某些特殊的优化,后续我们也会分析下这些优化。在开始之前,你只需要掌握一些HotSpot JVM的基本工作原理就可以了。

阅读全文

Reactive(响应式)编程-Reactor

Reactor 是Reactive Programming规范的一个具体实现(rxjava也是规范的一个实现),

阅读全文

谈谈Golang并发编程

一、前言

Go语言在设计时,Java和C ++是编写服务器程序最常用的语言(至少在Google是这样),这是因为使用这些语言可以高效的开发。但是Go设计者们觉得像Java和C++这些语言需要开发者记忆太多的语法和规则,并且需要重复做的事情太多,这导致一些程序员开始转向更加动态,流畅的语言,如Python,但是付出的是损失开发效率和对类型安全检查的缺失。Go设计者们认为应该可以发明一种语言,这种语言集高效的开发、提供类型安全检查、简洁流畅的代码风格与一体,于是Go就诞生了。

阅读全文

(译文)Java中使用var声明局部变量指南

原文链接:Style Guidelines for Local Variable Type Inference in Java
Stuart W.Marks
2018-03-22

简介

Java SE 10引入了局部变量的类型推断。早先,所有的局部变量声明都要在左侧声明明确类型。 使用类型推断,一些显式类型可以替换为具有初始化值的局部变量保留类型var,这种作为局部变量类型 的var类型,是从初始化值的类型中推断出来的。

阅读全文

return top