编程语言:Java
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相关技术来实现效率提升。
Java编译期注解处理器AbstractProcessor
本文围绕编译器注解都是如何运行的呢? 又是怎么自动生成代码的呢?做出了详细介绍。
一些杂想:Java老矣,尚能饭否?
本文就Java真的老了吗展开讲述,诠释了作者作为一名Java开发者的所思所感。
Java程序员如何优雅编程
本文立足于编码规范之上,从研发角度探讨如何优雅编程,罗列一些策略,如卫语句使用、注解设计API、异常捕获特殊用法、链式编程等,基于这些策略可以使代码更加优雅易维护。
JDK8到JDK17有哪些吸引人的新特性?
根据Oracle的官方说法(Oracle JDK Releases for Java 11 and Later),从JDK11之后,OracleJDK与OpenJDK的功能基本一致。然后,Oracle宣布以后将会同时发行两款JDK:1. 一个是以GPLv2+CE协议下,由Oracle发行OpenJDK(简称为Oracle OpenJDK);2. 另一个是在OTN协议下的传统OracleJDK。这两个JDK共享绝大多数源码,核心差异在于前者可以免费在开发、测试和生产环境下使用,但是只有半年时间的更新支持。后者各个人可以免费使用,但是生产环境中商用就必须付费,可以有三年时间的更新支持。
一种新的流:为Java加入生成器(Generator)特性
一种全新的设计模式,数学美感与工程实用价值兼备,且不限编程语言。本文将以Java为样例,从无到有实现出完整的流式API,引入生成器特性,并介绍诸多应用场景。