• 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
108 search results Contribute

清代谴责小说家吴趼人在《痛史》中写道:“卷帙浩繁,望而生畏。” 意思是:“ 一部书的篇幅太长,让人看见就害怕。”编写单元测试用例也是如此,如果单元测试用例写起来又长又复杂,自然而然地会让人“望而生畏”,于是开始反感甚至于最终放弃。为了便于Java单元测试的推广,作者总结了十余种测试用例的简化方法,希望能够让大家编写单元测试用例时——“化繁为简、下笔如神”。

17 Technology lddgo Shared on 2023-02-02

JDK已经如火如荼的更新到了JDK 19,集团内也在推AJDK 11的升级,升级已然是一个大趋势。本文主要是对体育营销场景升级JDK 11,进行了整理与总结,希望对大家有所帮助。

17 Technology lddgo Shared on 2023-02-01

从 Java Agent 报错开始,到 JVM 原理,到 glibc 线程安全,再到 pthread tls,逐步探究 Java Agent 诡异报错。

17 Technology lddgo Shared on 2023-02-01

最近同事说到 Java 的ParallelGCThreads 参数,我翻了下 jdk8 的代码,发现 ParallelGCThreads 的参数默认值如下: 如果 cpu 核心数目少于等于 8,则 GC 线程数量和 CPU 数一致 如果 cpu 核心数大于 8,则前 8 个核,每个核心对应一个 GC 线;其他核,每 8 个核对应 5 个 GC 线程 但是被提醒,发现即使在分配 4 核的容器上,GC 线程数也为 38。然后就想到应该和容器的资源限制有关—— jvm 可能无法觉察到当前容器的资源限制。 翻了下代码,发现最新版本的 java 是能感知容器的资源限制的,就按照jdk版本再翻了下代码。

14 Technology lddgo Shared on 2023-02-01

在 JDK 9 之前,Java 基本上平均每三年出一个版本。但是自从 2017 年 9 月分推出 JDK9 到现在,Java 开始了疯狂更新的模式,基本上保持了每年两个大版本的节奏。从 2017 年至今,已经发布了 十一个版本到了 JDK 19。其中包括了两个 LTS 版本(JDK11 与 JDK17)。除了版本更新节奏明显加快之外,JDK 也围绕着云原生场景的能力,推出并增强了一系列诸如容器内资源动态感知、无停顿 GC(ZGC、Shenandoah)、原生的运维能力等等。这篇文章是 EDAS 团队的同学在服务客户的过程中,从云原生的角度将相关的功能进行整理和提炼而来。希望能和给大家一起认识一个新的 Java 形态。

17 Technology lddgo Shared on 2023-01-31

Java 凭借着自身活跃的开源社区和完善的生态优势,在过去的二十几年一直是最受欢迎的编程语言之一。步入云原生时代,蓬勃发展的云原生技术释放云计算红利,推动业务进行云原生化改造,加速企业数字化转型。 然而 Java 的云原生转型之路面临着巨大的挑战,Java 的运行机制和云原生特性存在着诸多矛盾。企业借助云原生技术进行深层次成本优化,资源成本管理被上升到前所未有的高度。公有云上资源按量收费,用户对资源用量十分敏感。在内存使用方面,基于 Java 虚拟机的执行机制使得任何 Java 程序都会有固定的基础内存开销,相比 C++/Golang 等原生语言,Java 应用占用的内存巨大,被称为“内存吞噬者”,因此 Java 应用上云更加昂贵。并且应用集成到云上之后系统复杂度增加,普通用户对云上 Java 应用内存没有清晰的认识,不知道如何为应用合理配置内存,出现 OOM 问题时也很难排障,遇到了许多问题。 为什么堆内存未超过 Xmx 却发生了 OOM?怎么理解操作系统和JVM的内存关系?为什么程序占用的内存比 Xmx 大不少,内存都用在哪儿了?为什么线上容器内的程序内存需求更大?

15 Technology lddgo Shared on 2023-01-31

自从公司 2021 年 11 月份开始全面容器化后,酒店报价中心团队快速响应,迁移了 98% 的应用,由原来的 kvm 或实体机器到容器上,我们的多个应用出现了频繁被 kill 的情况,主要包括两大类: 因为 GC 时间过长导致 k8s 检活失败,被 kill 掉 因为内存碎片的问题,导致 OOM 被 kill 掉

13 Technology lddgo Shared on 2023-01-31

在日常业务代码开发中,我们经常接触到AOP(面向切面编程),比如熟知的Spring AOP。我们经常用它来实现业务切面逻辑,比如登录校验,日志记录,性能监控,全局过滤器等。但Spring AOP有一个局限性,并不是所有的类都托管在 Spring 容器中,例如很多中间件代码、三方包代码和部分原生代码,都不能被Spring AOP代理到。如此一来,一旦你想实现的切面逻辑并不属于Spring的管辖范围,或者你想实现Spring之外的切面功能,就无从下手。 对于Java后端应用,有没有一种更为通用的AOP方式?答案是有的,Java自身提供了JVM TI,Instrumentation等特性和接口,允许使用者以通过一系列原生API完成对JVM的复杂控制。自此衍生出了很多著名的框架,比如Btrace,Arthas等等,帮助开发者们实现更多更复杂的Java功能。 JVM Sandbox也是其中的一员。当然,不同框架的设计目的和使命是不一样的,JVM-Sandbox的设计目的是实现一种在不重启、不侵入目标JVM应用情况下的AOP解决方案。

48 Technology lddgo Shared on 2023-01-16

JVM,即Java Virtual Machine。Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。 一个完整的JVM包含的知识体系是很庞大的,例如下面的每一个章节包含的知识点完全可以写成一本厚厚的书籍。本文抽取JVM中的字节码、即时编译器、运行时数据区、对象内存布局、垃圾收集、常用参数等几个方面进行编写。基于篇幅有限,其他的例如:内存模型、类加载、多线程、反射、Javaagent、JVM性能监控等本文就不再赘述了,有兴趣的可以自行搜索相关资料。

53 Technology lddgo Shared on 2023-01-10

字符串在JDK 8及JDK 9之后的实现有很大不同的。JDK9之后,通过byte[]来保存value,通过code字段区分是LATIN1或者UTF16。大多数的字符串都是LATIN1。针对这种情况,我们构造字符串或者对字符串进行编码为二进制时,针对性做ZeroCopy的实现,可以获得极致的性能。

57 Technology lddgo Shared on 2022-12-29