10 java-er

尚未进行身份认证

我要认证

喜欢钻研技术

等级
TA的排名 7k+

HotSpot的类模型(3)

读这篇文章之前,建议阅读如下文章:Ubuntu16.04上编译OpenJDK8源代码调试HotSpot源代码HotSpot项目结构HotSpot的启动过程HotSpot二分模型(1)HotSpot的类模型(2)上一篇HotSpot的类模型(2)介绍了类模型的基础类Klass的重要属性及方法,这一篇介绍一下InstanceKlass及InstanceKlass的子类。2、InstanceKlass类每个InstanceKlass对象表示一个具体的Java类(这里的Jav..

2020-07-12 20:38:20

HotSpot的类模型(2)

读这篇文章之前,建议阅读如下文章:Ubuntu16.04上编译OpenJDK8源代码调试HotSpot源代码HotSpot项目结构HotSpot的启动过程HotSpot二分模型(1)在前一篇文章HotSpot二分模型(1)中已经讲过,HotSpot采用了OOP-Klass模型描述Java的类和对象。Klass模型采用Klass类及相关子类来表示具体的Java类,可以理解这些类为Java类在C++ 中的对等体。一般 JVM 在加载 Class 文件时,会在方法区创建 Klass ,表.

2020-07-09 17:00:55

HotSpot二分模型(1)

HotSpot采用了OOP-Klass模型来描述Java类和对象。OOP(Ordinary Object Pointer)指的是普通对象指针,而Klass用来描述对象的具体类型。那么为何要设计这样一个一分为二的对象模型呢?因为类和对象本来就不是一个概念,分别使用不同的对象模型描述符合软件开发的设计思想。另外英文注释也说明了其中的一个原因:One reason for the oop/klass dichotomy in the implementation isthat we don't wan.

2020-07-05 15:38:28

HotSpot的启动过程

HotSpot通常会通过java.exe或javaw.exe来调用/jdk/src/share/bin/main.c文件中的main()函数来启动虚拟机,使用Eclipse进行调试时,也会调用到这个入口。main.c的main()函数负责创建运行环境,以及启动一个全新的线程去执行JVM的初始化和调用Java程序的main()方法。main()函数最终会阻塞当前线程,同时用另外一个线程去调用JavaMain()函数。main()函数的调用栈如下:main() main.cJLI_Laun.

2020-07-04 21:03:35

HotSpot项目结构

之前已经介绍了Ubuntu16.04上编译OpenJDK8源代码和调试HotSpot源代码。这一章将介绍HotSpot项目的目录结构。HotSpot目录下主要由agent、make、src和test这4个子目录构成。其中agent目录下包含了Serviceability Agent的客户端实现;make目录下包含了用于编译HotSpot的各种配置文件;src目录是最重要的一个目录,本书讲解的所有源代码都包含在这个目录下;test目录下包含HotSpot相关的一些单元测试用例。src目录的结构如下图所

2020-07-03 07:07:55

调试HotSpot源代码

之前的文章在Ubuntu 16.04上编译OpenJDK8的源代码已经介绍过在Ubuntu上编译OpenJDK8的源代码,这一篇将介绍在Ubuntu上调试OpenJDK8源代码的2种方式。1、GDB调试源代码在Linux上常用GDB调试C/C++源代码。使用GDB运行如上实例生成的Class文件,具体命令如下:gdb --args ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test进入GDB后,输入如下命令:...

2020-07-02 15:10:10

Ubuntu16.04上编译OpenJDK8源代码

本文将详细介绍在Ubuntu16.04上对OpenJDK8进行编译。1、准备编译环境使用的操作系统为Ubuntu16.04,如果读者没有安装Ubuntu,可以在Windows上使用虚拟机的方式进行安装,或者可以直接在电脑上安装多系统,这种方式比以虚拟机安装的方式速度要快。Ubuntu操作系统使用的是Linux内核,由于HotSpot是由C++编写的,所以在编译时需要Linux的编译器GCC。2、下载源代码OpenJDK使用的代码管理工具为Mercurial(hg),下载并安装Mercuria

2020-06-30 19:48:41

第3篇-如何编写一个面试时能拿的出手的开源项目?

前2篇的链接如下:第1篇-如何编写一个面试时能拿的出手的开源项目?第2篇-如何编写一个面试时能拿的出手的开源项目?第1篇介博文中详细介绍过编写一个规范开源项目所要遵循的规范,并且初步实现了博主自己的开源项目Javac AST View插件,不过只搭建了项目开发的基本框架,树状结构的数据模型也是硬编码的;第2篇从Eclipse编辑器中读取Java源代码并转换为Javac的抽象语法树,然...

2020-02-29 08:21:39

第2篇-如何编写一个面试时能拿的出手的开源项目?

在第1篇-如何编写一个面试时能拿的出手的开源项目?博文中曾详细介绍过编写一个规范开源项目所要遵循的规范,并且初步实现了博主自己的开源项目Javac AST View插件,不过只搭建了项目开发的基本框架,树状结构的数据模型也是硬编码的,本篇博文将继续完善这个项目,实现动态从Eclipse编辑器中读取Java源代码,并在JavacASTViewer视图中展现Javac编译器的抽象语法树。实现过程...

2020-02-27 08:28:46

第1篇-如何编写一个面试时能拿的出手的开源项目?

编写一个不错的开源项目至少有3个好处:(1)练技术,长经验(2)面试时展现自己的Coding能力(3)获取成就感练技术,长经验是最实在的,不过如果自己有一个好的开源项目,还可以在开源中国或github上开源,让更多人受益,也许能获得许多的Star,让自已获得满足,激励自己完善项目功能。在面试时,也可以在简历显眼的位置给出开源项目名称和Git地址。面试官一般都会去查看,这是程序员实力...

2020-02-12 19:08:16

如何研究Javac与HotSpot

现在使用Java语言的人很多,但是了解Java语言实现的人非常少。如果要研究Java语言的实现,推荐研究Javac和虚拟机HotSpot的源代码实现,其中Javac相当于Java编译的前端,HotSpot是Java语言运行的基础。弄懂了Javac与HotSpot,对Java语言也就达到了“精通”的地步了。下面我结合自己的研究过程总结一下,如果要研究Javac与HotSpot,目前可参考的一些资...

2019-11-28 19:50:18

我的书籍《深入解析Java编译器:源码剖析与实例详解》就要出版了

一个十足的技术迷,2013年毕业,做过ERP、游戏、计算广告,在大公司呆过,但终究不满足仅对技术的应用,在2018年末离开了公司,全职写了一本书《深入解析Java编译器:源码剖析与实例详解》,在近期就会上市销售了。1、为什么要写这本书?从去年年底离职到今天7月交完《深入解析Java编译器:源码剖析与实例详解》书稿,到现在上市发行也差不多一年过去了,也算是给了自己这一年一个交待吧。写书不...

2019-11-28 15:12:06

从无线Portal页面透视软件开发

相信许多人都用过公共场所免费的无线网络,例如肯德基等地方。话说我们鄂尔多斯东胜市都实际无线网络覆盖了,那天本吊也着实体验了一把,感觉网速还不错,这是手机登录的无线Portal页面,如下:(遗憾没给重要的登录页面截图,以后补上)由于自己现在的公司也是做这个的,而且我也做过许多的无线Portal登录页面,所以体验的同时也想和大家探讨分享一下心得体会。软件开发过程中非常关注健壮性、扩展性和稳定性,这些可

2015-02-22 21:54:43

Java 7之异常第二篇

1、异常题目01

2014-08-31 17:25:08

Java笔试、面试小问题

public class Increment { private static int k = 0; public static void main(String[] args) { int j = 0; int n = 0; for (int i = 0; i < 100; i++){ //System.out.println(i); j = j++;// 注意j

2014-08-29 13:55:05

Java之多线程易范错误

public class mainTestImpl { /* * 任何线程一般具有五种状态,即创建、就绪、运行、阻塞、终止 线程 调用stop()方法时或run()方法执行 * 结束后,线程即处于死亡状态。 处于死亡状态的线程不具有继续运行的能力。 */ public static void main(String[] args) { testThread t = ne

2014-08-19 19:24:44

内部类

生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类

2014-08-18 11:50:15

自定义Annotation(注解)

Java语言解释器会忽略注解

2014-08-15 09:29:11

ThreadLocal变量

来看一个实例:如果

2014-08-14 18:14:54

Java的CGLib动态代理

CGLib采用非常底层的字节码技术,可以为一个类创建

2014-08-12 08:59:32

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。