归档

2024 年 08 月

前言 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢? 其实如果你经常解决服务器性能问题,那么这些问题就会变的非常常见,了解JVM内存也是为了服务器出现性能问题的时候可以快速的了解那块的内存区域出现问题,以便于快速的解决生产故障。…
探索随机性 在软件开发的世界里,随机数生成是一项既古老又现代的技术。从早期的简单概率游戏到今天的复杂算法和加密系统,随机数都扮演着不可或缺的角色。它们不仅能够为程序增添不可预测性和趣味性,还能在模拟、统计分析、机器学习乃至安全性方面发挥关键作用。 Java 作为一种广泛使用的编程语言,提供了多种机制来生成随机数。其中最基础且最为人所熟知的是…
Java IO Java IO的基础知识已在前文讲过 Socket编程 socket是操作系统提供的网络编程接口,他封装了对于TCP/IP协议栈的支持,用于进程间的通信,当有连接接入主机以后,操作系统自动为其分配一个socket套接字,套接字绑定着一个IP与端口号。通过socket接口,可以获取tcp连接的输入流和输出流,并且通过他们进行读取和写入此操作。…
前言 本文将介绍 Tomcat 中的 NIO 使用,使大家对 Java NIO 的生产使用有更加直观的认识。 虽然本文的源码篇幅也不短,但是 Tomcat 的源码毕竟不像 Doug Lea 的并发源码那么“变态”,对于大部分读者来说,阅读难度比之前介绍的其他并发源码要简单一些,所以读者不要觉得有什么压力。 本文基于 Tomcat…
JDK在线程的Stop方法时明确不得强行销毁一个线程,要优雅的退出线程。 何谓优雅退出线程,即业务将进行中请求正确被处理,取消待执行请求,执行资源回收,最终Thread Runable run 方法return 结束执行。 首先问为什么要退出一个线程,再提问如何退出一个线程 任务执行完成,或异常终止,任务认为无需再占用线程。…
不久之前,我遇到了一个Java GC问题。有个服务在高峰期耗时增加,触达上游超时配置,导致上游调用失败率增加。经过初步排查确认这并非因为个别接口的性能恶化,而是服务整体上性能恶化。 最终定位原因是,高峰期 YoungGC和 FullGC 频率过高,导致耗时增加。遂决定从GC方向优化性能,经过两周的治理,GC问题得到大幅改善,接口耗时下降30%。…
前些日子,测试提过来一个bug,说下单价格应该是 2.01,但是在订单详情中展示了2.00元。我头嗡的一下子,艹,不会是因为double 的精度问题吧~ 果不其然,经过排查代码,最终定位原因订单详情展示金额时,使用double 进行了金额转换,导致金额不准。…
摘要: I/O复用模型,是同步非阻塞,这里的非阻塞是指I/O读写,对应的是recvfrom操作,因为数据报文已经准备好,无需阻塞。 说它是同步,是因为,这个执行是在一个线程里面执行的。有时候,还会说它又是阻塞的,实际上是指阻塞在select上面,必须等到读就绪、写就绪等网络事件。 一、I/O复用模型解读…
1. 自动拆箱出现 null 包装器类型自动拆箱为基础类型时极容易出现NPE。如下图示例,方法void initTask(int taskId),调用时taskId如果为 null ,则会出现NPE。正确做法是 可能为 null 的属性,一律声明为包装器,此外从外部获取的变量一定要检查 null ,进行防御式编程。 public void…
什么是ClouDNS ClouDNS 身为欧洲名列前茅的全球托管 DNS 服务供应商,其服务范畴涵盖了 GeoDNS、Anycast DNS 以及拥有 DDoS 防护的 DNS 等领域。该公司大力推行业界领先的云服务架构,力求实现顶级的 DNS 速度和 DNS 冗余性能。ClouDNS 平台针对应用程序以及 DNS…
上一页 下一页