随笔分类 -  java

摘要:Java虚拟机定义了程序执行期间使用的各种运行时数据区域。如下图所示: 在Java虚拟机规范的描述中,虚拟机栈、本地方法栈和程序计数器是线程私有的,而像堆、方法区(Jdk8之前)、元空间(JDK8之后)属于所有线程共享区域。除了程序计数器外,虚拟机内存的其他几个运行时区域都有可能发生OutOfMem 阅读全文
posted @ 2023-11-02 10:19 mingshan 阅读(65) 评论(0) 推荐(0)
摘要:在看Class文件的结构时,我们会遇到这样几个概念,全限定名(Fully Qualified Name)、简单名称(Simple Name)和描述符(Descriptor),那么这些是什么东东呢? 首先来说全限定名,一个类的全限定名是将类全名的.全部替换为/,示例如下: me/mingshan/cg 阅读全文
posted @ 2023-11-02 10:13 mingshan 阅读(311) 评论(0) 推荐(0)
摘要:前几天生产环境出现了一个问题,gc日志里面某一个时间段出现了大量的Full GC,而且都是回收元空间内存失败了,最终导致了JVM停止运行,微服务中的某个服务发生了宕机。下面记录下排查该问题的过程。 首先我们根据服务器的CPU核心数和内存大小,设置了元空间的最大值为512M,这是前提。在服务GC日志中 阅读全文
posted @ 2023-11-01 15:10 mingshan 阅读(255) 评论(0) 推荐(0)
摘要:经过对JDK动态代理实现原理的解析,我们会对动态代理的实现流程有个根本的认识,具体分析过程参考JDK动态代理实现原理这篇文章,这里就不多谈了。这篇文章主要思考如何去实现一个简易的动态代理,以便加深对其的理解。 模仿着JDK动态代理,我们需要一个代理Proxy类,一个InvocationHandler 阅读全文
posted @ 2023-11-01 15:05 mingshan 阅读(44) 评论(0) 推荐(0)
摘要:了解到CompletableFuture的基础用法之后,我们不禁好奇,以前的Future模式不支持如此好用的异步编程,CompletableFuture是如何做到的呢?这就需要我们去阅读源码了,通过源码我们才能了解到其设计思想和实现方式,我们分析下supplyAsync 和 thenApplyAsy 阅读全文
posted @ 2023-11-01 15:03 mingshan 阅读(56) 评论(0) 推荐(0)
摘要:在JDK 1.5之后Java提供了并发包(java.util.concurrent),加强对并发的支持。该包下的类大量使用 CAS(Compare and Swap)来实现原子操作、锁优化等。在java.util.concurrent.atomic包中,提供了对基本类型的原子封装,比如AtomicI 阅读全文
posted @ 2023-11-01 15:02 mingshan 阅读(27) 评论(0) 推荐(0)
摘要:Callable 在Java中我们知道创建一个线程可以继承Thread类或者实现Runnable接口,JDK1.5之后在java.util.concurrent提供了Callable接口,该接口设计类似Runnable接口,不过Callable接口可以返回任务执行的结果,并且在执行任务过程中可能会抛 阅读全文
posted @ 2023-11-01 15:00 mingshan 阅读(84) 评论(0) 推荐(0)
摘要:用过Spring推出的Reactor框架的同学可能会感叹异步编程的便利,不过Reactor对于异步编程的初学者来说有点复杂了,看其源码也不是那么容易,那么JDK有没有对异步编程相关的支持呢?Future想必大家都很熟悉(不了解的同学请查看Callable&Future及FutureTask实现分析( 阅读全文
posted @ 2023-10-31 16:56 mingshan 阅读(131) 评论(0) 推荐(0)
摘要:title: GC都有哪些? tags: [JVM, GC] author: Mingshan categories: [JVM, GC] date: 2020-03-11 相信把Java当做生产力工具的同学肯定对gc比较熟悉的,JVM团队在这块下了很多的功夫创造了很多垃圾收集器,不过有些垃圾收集器 阅读全文
posted @ 2023-10-30 15:02 mingshan 阅读(74) 评论(0) 推荐(0)
摘要:Arthas 是Alibaba开源的Java诊断工具,可以查看Java进程的一些信息,例如运行情况、JVM相关参数、线程等信息,采用命令行交互模式,在Linux用着十分方便。 安装 在Linux系统中,首先创建一个文件下,然后在该文件下执行如下命令: curl -L https://alibaba. 阅读全文
posted @ 2023-10-30 15:01 mingshan 阅读(494) 评论(0) 推荐(0)
摘要:数据在计算机中都是以01的形态进行存储,位运算可以直接对01进行操作,其效率自然很高,在Java源码中是很常见的。这里总结位运算的概念以及常见的操作,后续遇到会补充。 位运算符 位运算是需要使用位运算符的,位运算符有如下几种(本表以java语言中的位运算为标准): 含义 符号 简述 按位与 a & 阅读全文
posted @ 2023-10-30 08:45 mingshan 阅读(48) 评论(0) 推荐(0)
摘要:我们在使用ReentrantLock进行加锁和释放锁时可能会有好奇,这种加锁释放锁的操作和synchronized有什么区别,所以就会去翻源码,一翻源码才发现这里面的知识别有洞天,因为涉及到并发编程最基础最难理解的部分,其中AbstractQueuedSynchronizer这个类是java.uti 阅读全文
posted @ 2023-10-28 08:52 mingshan 阅读(48) 评论(0) 推荐(0)
摘要:上篇文章AQS源码分析-独占模式分析了AQS的结构以及独占模式下资源的获取与释放流程,啰嗦了AQS的基本结构和独占模式。这篇文章主要是探讨下AQS在共享模式下资源的获取与释放,同时比较下两种模式的差异(本文基于JDK11版本)。 流程分析 - 获取资源 这篇文章以CountDownLatch为例,和 阅读全文
posted @ 2023-10-28 08:51 mingshan 阅读(43) 评论(0) 推荐(0)