编程语言:Java
解决GC毛刺问题——转转搜索推荐服务JDK17升级实践
随着转转业务规模的不断增长,我们的搜索推荐服务正在面临严峻的GC毛刺问题。为此,我们计划通过升级到JDK来实现GC问题的改善。
Java应用堆外内存泄露问题排查
Java应用堆外内存持续增长,直到服务器内存全部耗尽,本文分享详细排查过程。
ChatGPT助力编写JAVA框架!
本文介绍了使用 ChatGPT逐步创建 一个简单的Java框架,包括构思、交流、深入优化、逐步完善和性能测试等步骤。
一种关于Java的hook技术-JavaAgent初识
Java是一种当前广泛使用的编程语言,它可以用于开发各种类型的应用程序,包括桌面应用程序。Java的跨平台性和易于学习的特点使得它成为开发桌面应用程序的理想选择,然而软件都有出现漏洞的可能性,一旦出现漏洞利用,影响广泛,例如前些年著名的apache log4j2漏洞。
在预研一种对用户侧Java程序进行监控和防护的方式过程中,遇到的问题是Java编译的代码是字节码,在jvm中运行,不是可以执行的CPU指令,无法以常规windows hook方式对程序进行注入和拦截。最终经过探讨,以asm+ JavaAgent方式来实现,后续本文将针对JavaAgent技术进行说明。
如何通过变异测试助力Java项目单测覆盖率提升
通常在软件测试过程中,我们会关注测试用例的代码覆盖率。理想情况下,测试用例应该能够覆盖所有业务代码的函数、方法和模块,从而实现100%的代码覆盖率。然而,达到理想目标并不意味着测试用例已经健全。接下来,笔者将向您介绍一种称为“变异测试”的方法,它可以帮助我们实现目标覆盖率并补充测试用例。
Java 类型擦除与泛型信息恢复
Java的泛型在运行时会进行类型擦除,这意味着在JVM中无法知道泛型的具体类型。因此无法直接使用泛型创建对象和数组,也无法对泛型进行实例判断。不过,Java编译器仍会保留泛型信息,以便解决数据对象的反序列化问题。在涉及泛型赋值处,Java编译器会插入checkcast
指令,保证类型安全。如果指令失败(返回类型与目标类型不匹配),JVM会抛出ClassCastException
异常。这是为了保证泛型体系与非泛型体系的兼容性。例如,将泛型的List赋值给裸类型的List,可能会导致类型转换异常。
Java的AQS源码浅析
本文主要介绍了AQS的部分实现机制,并通过ReentrantLock的实现简单讲解了AQS的源代码。
了解Java可见性的本质
前一段时间重温了伪共享(false sharing)问题,了解到深处有几个问题一直想不明白,加上开发过程中遇到volatile时总觉得理解不够透彻,借着这次脑子里这几个问题,探究下Java可见性的本质到底是什么。
去哪儿一站式 Java 应用诊断解决方案 - Bistoury
对bistoury的底层实现和核心功能进行了介绍和分析。
如何高效优雅的使用java枚举
本文通过几种样例展示如何高效优雅的使用java枚举消除冗余代码。
从0到1搭建自己的脚手架(java后端)
脚手架是一种基础设施工具,用于快速生成项目的框架代码和文件结构。它是一种标准化的开发工具,使开发人员能够在项目的早期阶段快速搭建出一个具备基本功能和结构的系统。
从Java BIO到NIO再到多路复用,看这篇就够了
本文从基础概率到引出业界通用c10k问题,然后通过代码演示从BIO,到NIO再到多路复用的演进历程。
Java中volatile关键字原理深度剖析
由于近两月一直赶项目,中间还夹带一些技改等工作,没什么空闲时间修炼技术。想起很早之前看了不少有关volatile的文章,里面提及过一个单例模式下对该对象进行修饰的必要性问题,刚好在组内一次技术分享中提到了volatile关键字并详细阐述了此问题。借此为契机,顺便对CPU多级缓存架构设计、MESI协议、JMM内存模型等技术进行梳理,这篇文章会把volatile的底层实现分析透彻。
Java中如何获得A<T>泛型中T的运行时类型及原理探究
本文从Java的泛型开始,研究反射针对泛型的扩展,类型擦除的影响。然后通过生成匿名类实例的小技巧,获得了泛型的运行时类型的技巧。
图解JVM内存模型及JAVA程序运行原理
本文主要介绍了JVM内存模型及JAVA程序运行原理。
Android本地搜索优化
在本文中,我们将通过Android本地搜索业务介绍如何使用JavaScriptCore、JNI相关技术来实现效率提升。