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也是规范的一个实现),

阅读全文

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

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

简介

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

阅读全文

我们为什么要用Redis

最近阅读了《 Redis 开发与运维》,非常不错。这里对书中的知识整理一下,方便自己回顾 Redis 的整个体系,来对相关知识点查漏补缺。

阅读全文

领域驱动设计-什么是领域驱动设计和怎么使用它

原文链接

进一步扩展前面我们讨论的面向对象分析和设计(OOAD),这篇文章讨论领域驱动设计(DDD),DDD是建立在面向对象分析设计上开发软件的一种方法。 通过这篇文章我们解释什么是领域驱动设计,在现代开发周期中如何实现,使用DDD的优点和缺点。

阅读全文

Java并发-不懂原理多吃亏

一、前言

并发编程相比 Java 中其他知识点学习门槛较高,从而导致很多人望而却步。但无论是职场面试,还是高并发/高流量的系统的实现,却都离不开并发编程,于是能够真正掌握并发编程的人成为了市场迫切需求的人才。

阅读全文

记一次时隔两年后的JavaWeb项目重构总结


两年前的2016年,我还没有大学毕业,也才大三下学期,也还有自己的team,一起学习,一起成长,一起技术研究与试炼。不缅怀……当时和自己的team一起开发了“科技计划项目电子辅助验收及评估平台”,然而因为team刚成立几个月,其次,项目也比较赶,在时间紧迫的情况下,只能个人保证自己模块不出问题,然后最后再由作为项目负责人的我来审核并集体进行测试。

那么究竟里面的设计有多烂呢?答案就是,有好有坏。在此就不太过多讨论这些了,有兴趣你可以直接去我的码云Git看一下这个项目的当时的版本。

阅读全文

警报:线上事故之CountDownLatch的威力

2019.2.22号凌晨3点半,是一个让人难以忘怀的、和瑞哥最后一次一起奋战的夜晚。

背景

我们有这样一个业务场景:用户提供各种数据源配置信息,然后基于数据源配置的模板,再者在模板基础上构建报表,而大数据计算平台则会根据这些信息生成数据计算任务,以实时、离线、混合的方式跑数,并将计算结果落到存储设备中。

阅读全文

JEP 286: 局部变量类型推断(JEP 286: Local-Variable Type Inference)

JEP 286: 局部变量类型推断

    Author	Brian Goetz
    Owner	Dan Smith
    Type	Feature
    Scope	SE
    Status	Closed / Delivered
    Release	10
    Component	tools
    Discussion	amber dash dev at openjdk dot java dot net
    Effort	M
    Duration	S
    Relates to	JEP 323: Local-Variable Syntax for Lambda Parameters
        JEP 301: Enhanced Enums
    Reviewed by	Alex Buckley, Mark Reinhold
    Endorsed by	Mark Reinhold
    Created	2016/03/08 15:37
    Updated	2018/10/12 01:28
    Issue	8151454

摘要

增强Java语言以使用初始化值将类型推断扩展为声明局部变量。
阅读全文

你真的懂得Java-OOP吗?


众所周知,Java是纯面向对象编程的一门语言,然而这就造成很多Java Programmer自以为自己随随便便写出来的代码就是面向对象编程的结晶。

我们以一个简单的案例来切入主题:“人吃饭”。

面向对象编程我们需要注意一下几点:

  • 要围绕对象来展开一系列的活动
  • 对象应该具备什么,不应该具备什么(也就是与生俱来与后天养成)
阅读全文

Apache Log4j 2 用户指南

Apache Log4j 2是Log4j 1.x的升级版本,相比前任它有着显著的提升。它不仅具备Logback所包含的改进,同时还修复了Logback框架的固有bug。

不定期对 Apache Log4j 2 v.2.11.2 User’s Guide 进行翻译,水平有限,欢迎指正。

阅读全文

《Apache Log4j 2 用户指南》简介

1.1 欢迎来到log4j 2!

1.1.1 简介

几乎每一个大型应用程序都包含自己的日志记录或跟踪API。根据这个规则,在1996年初,E.U. SEMPER项目决定编写自己的跟踪API。经过无数次的改进,多次转世和大量的工作,API已经进化成为log4j,一种流行的Java日志记录包。该软件包是在 Apache Software License 下发布的,这是一个由开源倡议认证的完全成熟的开源许可证。最新的log4j版本,包括完整的源代码、类文件和文档,可以在http://logging.apache.org/log4j/2.x/index.html上找到。

阅读全文

Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)

号外:为读者持续整理了几份最新教程,覆盖了 Spring Boot、Spring Cloud、微服务架构等PDF。
获取方式:关注右侧公众号”泥瓦匠BYSocket”,来领取吧!


摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢!

这是泥瓦匠的第105篇原创

文章工程:
* JDK 1.8
* Maven 3.5.2
* Spring Boot 2.1.3.RELEASE
* 工程名:springboot-webflux-4-thymeleaf
* 工程地址:见文末

前言

上一讲,我们用 MongoDB 来实现 WebFlux 对数据源的操作。那么有了数据需要渲染到前台给用户展示。这就是本文关心的 View 层。View 的表现形式有很多,比如 JSON 和 HTML。开发中常用模板语言很常见的有 Thymeleaf、Freemarker等。那

什么是模板语言?

阅读全文

Hive集群合并之应用端的负载均衡算法


0.背景

有这么一个场景,我们有两个Hive集群,Hive集群1(后面成为1号集群)是一直专享于数据计算平台的,而Hive集群2(后面成为2号集群)是用于其他团队使用的,比如特征,广告等。而由此存在两个主要问题:a) 两个Hive集群共享了同一份MetaData,导致经常会出现在HUE(建立与2号集群上)上建表成功后,但是在计算平台上却无法查询到新建表信息;b) 让运维同学们同时维护两套集群,管理和资源分配调整起来的确是麻烦很多,毕竟也不利于资源的弹性分配。那么鉴于此,经过讨论,需要做这么一样工作:两个集群合二为一,由1号集群合并到2号集群上来。

阅读全文

透过ReentrantLock窥探AQS

背景

JDK1.5引入的并发包提供了一系列支持中等并发的类,这些组件是一系列的同步器,几乎任一同步器都可以实现其他形式的同步器,例如,可以用可重入锁实现信号量或者用信号量实现可重入锁。但是,这样做带来的复杂性,开销,不灵活使其至多只能是个二流工程,且缺乏吸引力。如果任何这样的构造方式不能在本质上比其他形式更简洁,那么开发者就不应该随意地选择其中的某个来构建另一个同步器,所以JSR166建立了一个小框架-AQS(由Doug Lea设计),对这些同步器做了统一的抽象,为构造同步器提供了通用的机制,之后并发包中大部分同步器都基于AQS来实现。

阅读全文

return top