• ARTICLE
  • STRING
  • CONVERTER
  • ENCRYPT
  • NETWORK
  • MORE
    CHART
    MATH
    COORDINATE
    IMAGE
    FILE
  • ARTICLE
    STRING
    CONVERTER
    ENCRYPT
    NETWORK
    MORE
    CHART
    MATH
    COORDINATE
    IMAGE
    FILE
logo Online Tools
All Chinese English Newest Hottest
129 search results Contribute

本文以线上诡异问题为切入点,通过对比JDK ThreadLocal和Netty FastThreadLocal实现逻辑以及优缺点,并深入解读源码,由浅入深理解Netty FastThreadLocal。

29 Technology lddgo Shared on 2023-10-18

当今,Java已经成为了世界上最流行的编程语言之一。在Java的生态系统中,JVM(Java虚拟机)是至关重要的组成部分。JVM 是 Java 程序运行的环境,它负责将 Java 字节码翻译成机器码,并执行程序。在 JVM 中,内存使用以及分配一直是个重要的问题。 在 32 位系统中,一枚指针占用 4 字节,随着 64 位系统的逐渐普及,指针的大小也增长到了 8 个字节,JVM 为了降低内存占用,使用了指针压缩技术来降低内存的占用,接下来,我们将自顶向下的深入探讨 JVM 指针压缩的工作原理。

33 Technology lddgo Shared on 2023-10-11

一个接口可能需要调用 N 个其他服务的接口,这在项目开发中还是挺常见的。举个例子:用户请求获取订单信息,可能需要调用用户信息、商品详情、物流信息、商品推荐等接口,最后再汇总数据统一返回。 如果是串行(按顺序依次执行每个任务)执行的话,接口的响应速度会非常慢。考虑到这些接口之间有大部分都是 无前后顺序关联 的,可以 并行执行 ,就比如说调用获取商品详情的时候,可以同时调用获取物流信息。通过并行执行多个任务的方式,接口的响应速度会得到大幅优化。

28 Technology lddgo Shared on 2023-09-22

云计算时代比较显著的特点包括: 基于云计算的基础设施,我们的应用能够在云上快速、轻松且高效地做到弹性。尤其是无状态的应用,能够轻易地基于同一个镜像构建实例,当然也能轻易地收缩多余的实例,实现弹性伸缩容。 基于容器化技术,系统资源被切分的更细,资源的利用也变得更优。 基于云计算的开发平台,应用部署更加容易,应用开发更加敏捷。 那么在云计算时代,Java 应用存在哪些问题呢? 冷启动速度较慢。Java 应用启动需要经历包括 JVM 的初始化、类加载等过程,导致启动速度相较于其他语言来说是处于劣势的。 应用预热时间过长,无法立即达到性能峰值。比如如果没有对应用做一些预热机制,并且对 RT 又比较敏感的应用,会导致发布时有一定的接口超时情况。 内存、CPU 等系统资源占用高。当占用过高时,不得不为 Java 应用提供更高规格的实例,而切分大规格的实例,这也会导致切分后造成的碎片更大,从而导致资源的浪费。 Java 构建的应用程序繁重,执行还需要具备 JDK 环境。

32 Technology lddgo Shared on 2023-09-22

垃圾回收对于Javaer来说是一个绕不开的话题,工作中涉及到的调优工作也经常围绕垃圾回收器展开。面对不同的业务场景没有一个统一的垃圾回收器能保证可GC性能。因此对程序员来说不仅要会编写业务代码,同时也要卷一下JVM底层原理和调优知识。这种局面可能因为ZGC的出现而发生改变,新一代回收器ZGC几乎不需要调优的情况下GC停顿时间可以降低到亚秒级。 Oracle从JDK11开始正式引入ZGC,ZGC设计三大目标: 支持TB级内存 (8M~4TB) 。 停顿时间控制在10ms之内 (生产环境实际观测在微秒级) ,停顿不会随着堆的大小,或者活跃对象的大小而增加。 对程序吞吐量影响小于15%。 ZGC是如何设计怎么达到这个目标的呢?本文将从ZGC算法的关键特性入手,通过分析ZGC周期处理过程来理解这些特性,探索ZGC设计思想。

24 Technology lddgo Shared on 2023-09-20

MJDK 是基于 OpenJDK 构建的美团 JDK 发行版。本文主要介绍 MJDK 是如何在保障 java.util.zip.* API 及压缩格式兼容性的前提下,实现压缩/解压缩速率提升 5-10 倍的效果。希望相关的经验能够帮助到更多的技术同学。

26 Technology lddgo Shared on 2023-08-31

随着硬件技术的飞速发展,多核处理器已经成为计算设备的标配,这使得开发人员需要掌握并发编程的知识和技巧,以充分发挥多核处理器的潜力。然而并发编程并非易事,它涉及到许多复杂的概念和原理。为了更好地理解并发编程的内在机制,需要深入研究内存模型及其在并发编程中的应用。本文将主要以 Java 内存模型来探讨并发编程中 BUG 的源头和处理这些问题的底层实现原理,助你更好地把握并发编程的内在机制,欢迎继续阅读。

110 Technology lddgo Shared on 2023-08-17

传统的一个 Java 应用从代码编写到启动运行大致可以分为如下步骤: 首先,编写 .java 源代码程序。 然后,借助 javac 工具将 .java 文件翻译为 .class 的字节码,字节码是 Java 中非常重要的内容之一,正是因为它的出现,Java 才实现对底层环境的屏蔽,达到 Write once, run anywhere 的效果! 基于步骤 2 的 .class 文件会被打包成 jar 包或者 war 包进行部署执行,部署过程中通过 Java 虚拟机加载应用程序然后解释字节码运行业务逻辑。

26 Technology lddgo Shared on 2023-08-10

最近面试问过很多候选人Java锁有关的知识,可以感受到的是,大家的理解基本都停留在“八股文”的阶段,实质上对Java的锁以及多线程的同步机制这种底层原理,理解的不是很好。网上这类文章已经很多了,但是看了下有好多文章都是相互抄的,而且都是过时的,典型的例如AQS里的addWaiter方法在JDK16里就没见到,或许代码进行了重构了。通过文章也梳理一下我一般看源代码的习惯是怎样的。 AQS全称是AbstractQueuedSynchronizer,首先他是一个抽象类,其次他使用了队列来进行排队,然后作用是用来做线程间的同步的。他是Java里所有锁的基础,包括CountDownLatch以及读写锁,可重入锁等等都是基于AQS实现的。我们从ReentrantLock入手来管中窥豹,大概得看看AQS的源代码。 首先你要了解的是使用方法,一个典型的ReentrantLock使用方法写在了这个类的注释里。

40 Technology lddgo Shared on 2023-07-28

本文主要梳理了Spring解决bean循环依赖的思路。

32 Technology lddgo Shared on 2023-07-25