自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 深入理解JAVA虚拟机学习笔记15——字节码执行引擎(动态类型语言与lambda表达式)

每天进步一点点!在我们刚接触Java时候,我们就被告知,Java是一门静态类型语言。随着开发技术的发展,出现了更多的动态语言,比如我们耳熟能详的Groovy,List,Python,Ruby,JavaScript等。这也就迫使Java需要做出改变,从jdk7开始,Java提供了对动态类型语言的支持,引入了invokedymanic指令提供对动态类型语言的支持。随之在jdk8开始,推出了lambd...

2018-06-29 08:27:26 548

原创 深入理解JAVA虚拟机学习笔记15——字节码执行引擎(方法调用)

每天进步一点点!前面已经介绍了类加载的加载、验证、准备、解析等过程,今天来学习最后一个过程,初始化!对于有过java开发经验的朋友们来说,初始化这个词自然不陌生,初始化阶段与变量初始化自然不是一个概念,但是也有一些关联。在上一篇中,我们已经看到了在准备阶段,不同变量初始化的区别,实际上,初始化阶段是执行类构造器<clinit>()方法的过程。朋友们还记得上一篇中的例子吗(有兴趣的朋友...

2018-06-28 08:19:01 228

原创 深入理解JAVA虚拟机学习笔记15——字节码执行引擎(栈帧)

每天进步一点点!今天我们一起看一下类加载的准备阶段和解析阶段。先看一下准备阶段:主要任务是在方法区中为类变量(仅static修饰变量,不包含实例变量)分配内存并设置类变量初始化的阶段。这里面的区别,我们通过下面的代码来简单了解一下。我们将上面的代码编译好后,通过字节码工具看一下其中的信息。首先,从上图可以看出,被final修饰的b是直接赋值的。我们再打开classlib,如下图所示,b对应的是一...

2018-06-26 08:54:36 277

原创 深入理解JAVA虚拟机学习笔记14——类加载的初始化过程

每天进步一点点!上一篇已经学习了加载阶段,这一篇我们了解一下验证的过程。我们已经知道了,虚拟机加载的是Class字节码文件,我们也通过工具查看了文件中存储的是二进制流。下面我们打开一个文件AppTest.class,我们在文件的开头随便加入一个字母“f”,如下图所示。那么,我们通过命令行输入命令“java AppTest”,会出现什么结果呢?虚拟机会报一个Class文件格式化错误,这是我们随便修...

2018-06-25 08:47:55 453

原创 深入理解JAVA虚拟机学习笔记14——类加载的准备和解析

每天进步一点点!今天我们一起看一下类加载的准备阶段和解析阶段。先看一下准备阶段:主要任务是在方法区中为类变量(仅static修饰变量,不包含实例变量)分配内存并设置类变量初始化的阶段。这里面的区别,我们通过下面的代码来简单了解一下。我们将上面的代码编译好后,通过字节码工具看一下其中的信息。首先,从上图可以看出,被final修饰的b是直接赋值的。我们再打开classlib,如下图所示,b对应的是一...

2018-06-22 08:21:35 185

原创 深入理解JAVA虚拟机学习笔记14——类加载的验证过程

每天进步一点点!上一篇已经学习了加载阶段,这一篇我们了解一下验证的过程。我们已经知道了,虚拟机加载的是Class字节码文件,我们也通过工具查看了文件中存储的是二进制流。下面我们打开一个文件AppTest.class,我们在文件的开头随便加入一个字母“f”,如下图所示。那么,我们通过命令行输入命令“java AppTest”,会出现什么结果呢?虚拟机会报一个Class文件格式化错误,这是我们随便修...

2018-06-21 08:20:15 358

原创 深入理解JAVA虚拟机学习笔记14——类加载的加载过程

每天进步一点点!上一篇穿插了一段动态绑定和静态绑定的知识,这一篇我们回归到类加载上来,学习一下类加载的“加载”。是不是读起来有点拗口,这是什么意思?别迷糊,还记得上一篇的上一篇学习过的类加载过程吗,里面有一个阶段就是“加载(loading)”。加载过程主要包括以下三点内容:1、通过一个类的全限定名来获取定义此类的二进制字节流。全限定名也就是包名.类名的形式。如下图所示,当我们在同一个类中,引用的...

2018-06-20 08:19:03 221

原创 深入理解JAVA虚拟机学习笔记14——虚拟机的类加载机制概述

每天进步一点点!在前面的几篇中,我们已经详细学习了Class字节码文件的结构,包含哪些内容已经内容的含义,下面几篇我们将研习一下类的加载。虚拟机的类加载机制: 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、...

2018-06-19 09:55:52 267

原创 深入理解JAVA虚拟机学习笔记13——字节码指令4(其他指令)

我们的口号是:每天进步一点点!上一篇的字段写到属性的时候,由于属性涉及到的内容比较多,我们暂时搁置了,这一篇是Class文件结构的最后一篇,我们就详细说说属性表结合。九、属性(Attribute):从表中看属性部分分为属性个数(attributes_count)和属性信息(attributes),这个已经没什么好说的了(参考前面的文章),这个单独拿出来主要是属性的类型比较多,如下图所属。类中字段...

2018-06-14 07:59:41 332

原创 深入理解JAVA虚拟机学习笔记13——字节码指令3(类型转换指令)

新的一天,新的开始。我们的口号是:每天进步一点点!在这几天的学习当中,不知道大家有没有一个疑惑,就是对“描述符”这个词不太理解,所以笔者前几篇写的时候尽量没用这个词。经过笔者艰苦卓绝的查找,终于大致理解了它的意思:我们要站在虚拟机的角度看这个问题。比如说给我传进来一个类的字段:private String a = "a";那我要知道这个字段叫什么名字(a),然后我要知道它的修饰限定符(priva...

2018-06-11 08:04:13 297

原创 深入理解JAVA虚拟机学习笔记13——字节码指令2(运算指令)

本篇继续字节码指令的学习,开始之前,先巩固一下基础知识,Java中基本数据类型的范围。1. 整型:1.1 byte:数据类型是8位、有符号的整数,取值范围-128~127;1.2 short: 数据类型是 16 位、有符号的整数,取值范围-32768~32767;1.3 int:数据类型是32位、有符号的整数,取值范围为-2147483648~2147483647;1.4 long:数据类型是 6...

2018-06-09 22:10:01 349

原创 深入理解JAVA虚拟机学习笔记13——字节码指令1(加载和存储)

一个忙碌的周末又过去了,时间不能阻止我们前进的脚步,每天进步一点点!上一篇在方法体中,方法体被编译成了指令,我们已经初步了解了每条字节码指令占用一个字节, 大概有200余种字节码指令。虚拟机的解释器的工作流程大致如下图伪代码所示。对于这么多字节码命令,可以分为几个部分。一.  加载和存储指令:用于将数据在局部变量表和操作数栈之间传输。1、将一个局部变量加载到操作栈:iload、iload_<n>、...

2018-06-09 22:07:26 317

原创 深入理解JAVA虚拟机学习笔记12——Class类文件的结构(4属性)

我们的口号是:每天进步一点点!上一篇的字段写到属性的时候,由于属性涉及到的内容比较多,我们暂时搁置了,这一篇是Class文件结构的最后一篇,我们就详细说说属性表结合。九、属性(Attribute):从表中看属性部分分为属性个数(attributes_count)和属性信息(attributes),这个已经没什么好说的了(参考前面的文章),这个单独拿出来主要是属性的类型比较多,如下图所属。类中字段...

2018-06-08 07:53:12 277

原创 深入理解JAVA虚拟机学习笔记12——Class类文件的结构(3字段和方法)

新的一天,新的开始。我们的口号是:每天进步一点点!在这几天的学习当中,不知道大家有没有一个疑惑,就是对“描述符”这个词不太理解,所以笔者前几篇写的时候尽量没用这个词。经过笔者艰苦卓绝的查找,终于大致理解了它的意思:我们要站在虚拟机的角度看这个问题。比如说给我传进来一个类的字段:private String a = "a";那我要知道这个字段叫什么名字(a),然后我要知道它的修饰限定符(priva...

2018-06-07 08:28:39 157

原创 深入理解JAVA虚拟机学习笔记12——Class类文件的结构(2访问标志, 继承, 实现)

各位朋友,上一篇的常量池都掌握了吧,我们的口号是:每天进步一点点!开始之前,我们先巩固并扩充一下昨天的知识,用Excel表示一下就是这样的(请原谅笔者low到爆的画图水平,画这种图有什么好的工具,朋友们可以推荐一下啊)。请注意!!!这里有个地方需要补充个一下,那就是当常量的类型是CONSTANT_Utf8_info的时候,看一下它的类型,length是它的字符串长度,意思是代表有多少个bytes...

2018-06-06 08:19:25 176

原创 深入理解JAVA虚拟机学习笔记12——Class类文件的结构(1常量池)

前一篇文章已经对Class类文件匆匆一瞥,上一篇没看的,建议先看一下上一篇,这一篇就看一下具体的细节。我们先随便创建一个类,代码如下。运行main方法,这个时候会生成一个class文件,我们用文本编辑器打开它。由于class文件中是二进制流,直接打开会显示一堆乱码,为了方便查看,我们以16进制编码格式打开文件,需要借助一下插件。笔者用的是Nodepad++,在菜单栏中找到“插件”,依次选择“Pl...

2018-06-05 11:30:23 329 1

原创 深入理解JAVA虚拟机学习笔记12——class类文件结构概述

对于前面的学习,笔者认为属于第一阶段,一直都在说虚拟机内存分配和垃圾收集的问题,由于这些都是开发的过程中看不见又不常用得,不那么容易理解。从这一篇开始,我们迎来了第二阶段,这一阶段的知识,将会和我们的代码紧密联系起来。每一个学习JAVA的人,相信都听过一个诱人的口号“Write once, run anywhere”,JAVA是怎么实现的,简单来说,在不同的平台上有不同的虚拟机,虚拟机会将生成的...

2018-06-04 08:22:30 203

原创 深入理解JAVA虚拟机学习笔记11——JDK可视化工具-VisualVM以及案例分析

VisualVM:多合一故障处理工具,功能比较全面的一个工具,与其它的检测工具相比,对实际性能影响很小,并且还具备安装插件功能。这个工具和前面介绍的JConsole工具有很多类似的功能,但是比JConsole功能更全面,朋友们可以自己到JDK的bin目录下找到jvisualvm.exe进行测试。这里简单介绍两个比较有用的插件。一个是Visual GC,可以堆内存的使用有一个更全面的监控,包括类的编...

2018-06-03 13:33:06 1122

原创 深入理解JAVA虚拟机学习笔记10——JDK可视化工具JConsole

JConsole:Java 监视与管理控制台,基于JMX的可视化监视,管理工具。在jdk的bin目录下(如D:\Java\jdk1.8.0_131\bin),就可以找到jconsole.exe。在运行之前,我们先写用debug执行一段程序,创建一个线程,sleep30分钟。然后,再双击启动jconsole.exe。在如下界面中选择本地进程,笔者使用的是IDEA,这里选择第二个。打开之后,我们可以看...

2018-06-01 20:53:07 278

原创 深入理解JAVA虚拟机学习笔记9——JDK命令行工具

1. jps:虚拟机进程控制工具,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些线程的本地虚拟机唯一ID。主要参数及功能见下表;本地运行后结果如下。2. jstat:虚拟机统计信息监视工具,监视虚拟机各种运行状态信息,如本地或远程(需要远程提供RMI支持)虚拟机进程中的类加载,内存占用,垃圾收集,JIT编译等。命令格式:jstat [ option vmid [inteval[s...

2018-06-01 09:35:47 301

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除