JVM GC基本原理与GC算法 Java的内存分配与回收全部由JVM垃圾回收进程自动完成。与C语言不同,Java开发者不需要自己编写代码实现垃圾回收。这是Java深受大家欢迎的众多特性之一,能够帮助程序员更好地编写Java程序。 首先会解释基本的术语,比如JDK、JVM、JRE和HotSpotVM。接着会介绍JVM结构和Java…
在 Java 编程的世界里,处理空值一直是一个需要谨慎对待的问题。空指针异常常常让开发者感到头疼,不仅影响程序的稳定性,还可能导致难以排查的错误。而 Java 中的 Optional 类的出现,为我们提供了一种更优雅、更安全的空值处理方式。 在实际的开发中,正确且高效地运用 Optional…
探索随机性 在软件开发的世界里,随机数生成是一项既古老又现代的技术。从早期的简单概率游戏到今天的复杂算法和加密系统,随机数都扮演着不可或缺的角色。它们不仅能够为程序增添不可预测性和趣味性,还能在模拟、统计分析、机器学习乃至安全性方面发挥关键作用。 Java 作为一种广泛使用的编程语言,提供了多种机制来生成随机数。其中最基础且最为人所熟知的是…
前言 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢? 其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。…
前些日子,测试提过来一个bug,说下单价格应该是 2.01,但是在订单详情中展示了2.00元。我头嗡的一下子,艹,不会是因为double 的精度问题吧~ 果不其然,经过排查代码,最终定位原因订单详情展示金额时,使用double 进行了金额转换,导致金额不准。…
不久之前,我遇到了一个Java GC问题。有个服务在高峰期耗时增加,触达上游超时配置,导致上游调用失败率增加。经过初步排查确认这并非因为个别接口的性能恶化,而是服务整体上性能恶化。 最终定位原因是,高峰期 YoungGC和 FullGC 频率过高,导致耗时增加。遂决定从GC方向优化性能,经过两周的治理,GC问题得到大幅改善,接口耗时下降30%。…
JDK在线程的Stop方法时明确不得强行销毁一个线程,要优雅的退出线程。 何谓优雅退出线程,即业务将进行中请求正确被处理,取消待执行请求,执行资源回收,最终Thread Runable run 方法return 结束执行。 首先问为什么要退出一个线程,再提问如何退出一个线程 任务执行完成,或异常终止,任务认为无需再占用线程。…