【JVM源码探秘】Java对象模型OOP-Klass



一个Java类在JVM中是如何描述的?创建一个Java对象在JVM中数据又是如何存储的?

在Hotspot VM中,设计者设计了OOP-Klass模型用来描述class的属性和行为,这里的OOP并不是面向对象编程(Object-oriented programming), 而是Ordinary Object Pointer(普通对象指针),之所以设计为OOP和Klass两部分是因为不希望每个对象都有一个C ++ vtbl指针, 因此,普通的oops没有任何虚拟功能。 相反,他们将所有“虚拟”函数转发到它们的klass,它具有vtbl并根据对象的实际类型执行C ++调度。

Read More>>



【JVM源码探秘】Java中的Class文件结构



我们都知道JVM并不能直接运行Java源文件,而是程序猿通过JDK提供的javac命令将Java源文件编译成.class二进制文件, 然后供JVM加载并使用,也就是说class文件其实是程序猿和JVM之间交互的媒介,相当于介于用户和Linux内核之间的shell。

一个class文件完整地描述了Java源文件的各种信息,Oracle JVM规范中的4.1 The ClassFile Structure 详细定义了一个标准class文件的结构

Read More>>


【JVM源码探秘】在Mac上编译OpenJDK10源码



博主在11年到12年的时候曾连续研究过十个月的JVM,读过的相关书籍包括:

之前的研究基本上都是虚拟机规范和JVM参数调优层面的内容,但是总觉得有些意犹未尽所以决定深入研究一下Hotspot实现, 由大部分C/C++和少量汇编代码构成,但清晰的结构和优雅的编码使其并不难读,不得不赞叹一句SUN的大师们的智慧。 今天就从编译OpenJDK开始我们的《JVM源码探秘》系列文章之旅。

Read More>>

SpringCloud自定义Feign解码器



spring-cloud 在SpringCloud微服务中,Feign组件帮我们把跨服务HTTP请求模板化,我们的FeignClient看上去可能是下面这样,

返回值都被封装在一个ApiResponse中,调用者获取真正内容时需要再次获取ApiResponse中的data内容,略显恶心。

Read More>>