![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 84
AKA.coder
这个作者很懒,什么都没留下…
展开
-
执行引擎、JIT、逃逸分析
Java是半编译半解释型语言编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。解释型语言:程序不需要编译,程序在运行时才翻译成机器语言,每执 行一次都要翻译一次。 两种解释器的底层实现 字节码解释器 做的事情是:java字节码->c++代码->硬编码 原理: 通过while(true) 或者 for 将读取的字节码进行一个个编译 源码: CASE(_new): { u2 index =转载 2020-12-03 16:43:58 · 145 阅读 · 0 评论 -
探索那讲不清的字符串
字符串常量池常量池 class文件中的:Constsnt pool 硬盘上运行时常量池:InstanceKlass的一个属性,方法区字符串常量池:String Pool —>底层StringTable—>底层HashTable 堆区 Key的生成方式 通过String的内容+长度生成hash值将hash值转为key hashValue = hash_string(name, len);index = hash_to_index(hashValue); // Pick hashin转载 2020-11-30 15:36:11 · 99 阅读 · 0 评论 -
内存池与JVM内存模型
基础 class文件 硬盘上的.class文件 class content 类加载器将硬盘上的.class文件读入内存中的那一块内存区域 Class对象 在java世界里,一切皆对象。从某种意义上来说,java有两种对象:实例对象和Class对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运行时类型识别,Run-Time Type Identification),多态是基转载 2020-11-30 15:15:19 · 113 阅读 · 0 评论 -
字节码文件解析
基础知识进制 十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 二进制转十进制 方法为:把二进制数按权展开、相加即得十进制数。 二进制转八进制 方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。 八进制转成二进制 方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。 二进制转十六进制 方法为:与二转载 2020-11-30 15:02:16 · 363 阅读 · 0 评论 -
类加载器子系统与SPI
类加载JVM中有两种类型的类加载器,由C++编写的及由Java编写的。除了启动类加载器(Bootstrap Class Loader)是由C++编写的,其他都是由Java编写的。由Java编写的类加载器都继承自类java.lang.ClassLoader。 启动类加载器 因为启动类加载器是由C++编写的,通过Java程序去查看显示的是null 因此,启动类加载器无法被Java程序调用 启动类加载器不像其他类加载器有实体,它是没有实体的,JVM将C++处理类加载的一套逻辑定义为启动类加载器 查看启动转载 2020-11-30 14:28:36 · 116 阅读 · 0 评论 -
JVM底层之类加载
一.klass模型 klass模型类的继承结构 普通的Java类在JVM中对应的是instanceKlass类的实例 2.1 InstanceMirrorKlass:用于表示java.lang.Class,Java代码中获取到的Class对象,实际上就是这个C++类的实例,存...转载 2020-11-30 13:40:32 · 70 阅读 · 0 评论