自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM之Java Virtual Machine Run-Time Data Areas

运行时数据区概览

2020-07-24 17:01:59 219

原创 JVM之指令重排-实例

目录1.了解计算机硬件哪些事儿2.指令重排场景再现3.指令重排定义编译器指令重排CPU指令重排指令重排定义4.数据依赖性5.指令重排实例演示1.了解计算机硬件哪些事儿在前面章节《JVM之缓存行对齐》文章中介绍了缓存,那么体现在计算机硬件(架构设计)上,可以参照下面的图。由于计算机硬件上的差别(越往上的硬件越快,价格越贵,容量越小),导致计算机在设计的时候通常是软件和硬件相互补充,这种组织存储器系统的方法称为存储器层次结构。2.指令重排场景再现有了上面.

2020-07-17 10:22:53 911

原创 并发编程之CPU缓存一致性协议MESI

1、一致性问题的产生在多核CPU情况下,每个CPU都有自己的一、二级缓存,在多核处理的情况下,如果一方修改了CPU中已经缓存的东西,而又没有通知已经读取到该cache line的另一方,就会导致两边信息不一致。2、缓存一致性协议MESIMESI(Modified Exclusive Shared or Invalid)(也成为伊利诺斯协议,是因为该协议由伊利诺斯州立大学提出)是一种广泛使用的支持写回策略的缓存一致性协议。3、MESI协议中的状态CPU中每个缓存行(cache line)使

2020-06-21 13:28:18 346

原创 JVM之缓存行对齐

1、CPU缓存执行程序是靠CPU执行主存中代码,但是CPU和主存的速度差异是非常大的,为了降低这种差距,在架构中使用了CPU缓存,现在的计算机架构中普遍使用了缓存技术。常见一级缓存、二级缓存、三级缓存,这些缓存的数据获取访问速度如下:从CPU到 大约需要的 CPU 周期 大约需要的时间 主存 约60-80纳秒 QPI 总线传输 (between sockets, not drawn) 约20ns L3 cache 约40-45 cy..

2020-06-18 03:42:29 5414 5

原创 JVM之类加载机制

1.类加载机制虚拟机把描述类的数据从磁盘上的Class文件加载到内存,这个过程对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。2.类加载过程类从被加载到虚拟机内存开始,到卸载出内存,整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载。加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班的开始。而解析阶段则不一定:它在某些情况下可以在初始化阶段后再开始,这是为了支持Java语言的动态绑

2020-06-16 10:19:55 116

原创 JVM之打破双亲委派

双亲委派被打破的历史双亲委派在历史上总共有三次较大规模被破坏,这里的打破没有贬义,只是特定场景下满足需要而做的处理:第一次:java设计初期就有ClassLoader和类加载器概念,但是没有双亲委派模型,为了兼容后面代码无法用技术手段避免loadClass()被子类覆盖的可能,只能新增一个protected的findClass()方法。 第二次:设计缺陷导致,由于越基础的类越由上层加载器进行加载,但如果有基础类又要调用回用户的代码(比如JNDI服务),这个时候就不能满足,Java的设计团队为此引入

2020-06-14 15:38:34 608

原创 JVM之AppClassLoader的父加载器指定过程

指定过程在上一篇博文【JVM之类加载器】中介绍了JVM中的类加载器类型,也介绍了双亲委派模型。那么关于双亲委派模型父子之间的关系为什么说不是继承呢,下面就用AppClassLoader的父加载器指定过程进行说明。下面的appClassLoader的初始化过程进行了父加载器的指定,是在Launcher中指定的,参见下图(从上到下是掉用过程)...

2020-06-12 07:22:01 530

原创 JVM之程序的程序运行过程

在调试JVM的过程中,多少需要了解点C语言的东西,多少又需要了解点汇编的知识,又多少需要了解点计算机底层的知识,真是学无止境。1.过程过程是软件中的一种很重要的抽象,提供了一种封装代码的方式(决定了程序的运行的方式),用一组指定的参数和一个可选的返回值实现了某种功能,然后,可以在程序中不同的地方调用这个函数。(说的太抽象了,有编程基础的就可以认为是方法调用过程)但是编程语言有很多种,每种编程语言的运行过程又有什么差别呢?差别肯定是有,但是最终还是要机器支持不是,上面提到的过程就需要这样的机器级别

2020-06-07 21:19:54 313

原创 JVM之编译器

1.编译器类型一段代码是怎么通过简单的人类可读的字符变为机器可执行的010101机器码的,这个过程在JAVA领域涉及两个大的过程编译期:检查是否有语法错误,如果没有就将其翻译成JVM可识别的字节码文件,即.class文件。把源代码(高级语言)转换成(翻译)低级语言(机器语言)的程序。运行期:java虚拟机分配内存,解释执行字节码文件,并执行指令操作。编译期用到的程序或代码就叫编译器,编译器在JVM中通常涉及2个概念:前端编译器和后端编译器前端编译器:主要功能是把.java文件转换成.cl

2020-06-03 15:19:59 323

原创 JVM之类加载器

1. 定义类加载器(Class Loader),顾名思义就是把类文件加载到虚拟机中,正常点的描述:“通过一个类的全限定名来获取描述该类的二进制字节流”。类加载器是Java语言的一项创新,最开始是为了满足Java Applet的需求而设计的。类加载器目前在层次划分、程序热部署和代码加密等领域经常使用。2.类加载器种类JVM为我们默认提供了系统类加载器(这里针对JDK1.8),包括:Bootstrap ClassLoader(系统类加载器)Extension ClassLoader(扩展

2020-06-02 22:20:08 305

原创 JVM之阅读一份java class文件

1.简介要了解JVM的运行机理,从class文件入手最好不过了,下面就简单梳理了一下阅读一个简单的java 字节码文件的过程。个人感受,阅读这个难度到不是很大,重要的是要查阅好Oracle的JVM标准文件以及对工具的使用。【Oracle官方文档】:https://docs.oracle.com/javase/specs/index.html使用工具:IDEA使用的插件:jclasslib 和 BinEndJDK:1.82.编译java文件我使用的源代码是最简单的JAVA程序,仅用

2020-06-01 16:46:18 674 2

转载 JAVA虚拟机组成部分

1、JAVA虚拟机在程序执行体系中的位置说明:可以看到jvm是在操作系统层之上的应用,与硬件没有直接交互。2、JVM组成部分Class Loader类加载器Class Loader的作用是加载类文件到内存中。类加载器只负责加载符合类文件结构的类文件到虚拟机中,具体的执行是由Execution Engine执行引擎负责的。Execution Engine执行引擎负责解释命令的,并提交操作系统执行。Native Interface本地接口,提供JAVA与其他编程语言的交互的AP

2020-06-01 16:09:17 249

空空如也

空空如也

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

TA关注的人

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