![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM学习
文章平均质量分 88
JVM学习,每天的学习内容会在这更新
句号先生_缘
这个作者很懒,什么都没留下…
展开
-
JVM学习之指针压缩
oop模型Klass模型oop模型是java对象在JVM中的表现形式比如什么String对象丫,char对象丫,类对象丫在底层都会生成oop对象Klass模式是java类在JVM中的表现形式就是java类被类加载器加载后生成的一些对象,比如方法区的InstanceKlass,堆区的InstanceMrroiKlass对象内存模型这是内存对象结构图,但实际上好像还有其他的。mark word占8字节类型指针在不开启指针压缩情况下,占8字节,开启后占4字节如果有数组,占4字节,没原创 2021-07-19 13:37:22 · 728 阅读 · 2 评论 -
JVM学习之执行引擎
什么是执行引擎?在我理解就是,java编译之后,形成的字节码文件就需要执行引擎执行或解析成硬编码,也就是机器指令。Java是半编译半解释型语言1.javac编译,java运行2.字节码解释器是解释运行的3.运行期即时编译,编译成硬编码执行JVM两种解释器字节码解释器字节码解释器做的事:字节码->c++代码->硬编码执行效率低CASE(_new): { u2 index = Bytes::get_Java_u2(pc+1); ConstantPo原创 2020-08-17 21:06:20 · 160 阅读 · 0 评论 -
JVM之String字符串
今天学习了下字符串字符串常量池字符串常量池底层是用StringTable做的,而StringTable是做HashTable做的。在堆区Hashtable的实现原理跟HashMap差不多,都是数组加链表。java中的字符串在jvm中是如何存储的?key生成策略源码hashValue = hash_string(name, len);index = hash_to_index(hashValue);1.根据字符串和字符串的长度计算出hashValue2.再根据HashValue计算出ind原创 2020-08-12 22:46:57 · 296 阅读 · 0 评论 -
JVM之内存池与内存模型
JVM内存模型JVM内存模型其实就是JVM在启动的时候从操作系统内存中要了一块大内存,然后将这个大内存分成五个区域:方法区、堆区、虚拟机栈、本地方法栈、程序计数器。图例:方法区永久代和元空间 永久代:jdk8之前方法区的具体实现,直接存在堆区 元空间:jdk8及以后方法区的具体实现,直接内存,os内存可以这么理解:方法区是一个规范,概念,类似java中的接口。而永久代和元空间是具体的实现类。类的元信息instanceKlass就是存储在元空间里的JVM为什么用元空间代替了永久代原创 2020-08-16 23:05:59 · 76 阅读 · 0 评论 -
JVM之.class文件和字节码解析
java源码注意有两个静态属性.class字节码用notepad++打开,需要安装一个HEX-Editor插件。这里有个小坑,必须是装32位的notepad,然后打开用插件下面的HEX-Edito—>View in HEx就好了!或者用editplus,notepad++复制出来格式不对。最好用这个解析流程字节码文件解析流程图,从上到小解析就好了其实解析字节码就想摩斯密码一样,有一个对应的密码本。对照着就可以解析了。具体可以看书《JVM虚拟机规范》u1的意思是: 占1个字节 (1原创 2020-08-08 18:44:52 · 561 阅读 · 0 评论 -
JVM学习之字节码解析
进制转换这个是必须要会的,会一点点就行,就是什么逢2进1,逢16进1。不难,不过解析的时候要注意都是16进制,看到10之类的,并不是10而是16大小端转换大小端百度百科解释:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结原创 2020-08-08 08:41:21 · 1055 阅读 · 0 评论 -
JVM第一天学习之类加载
都是一些代码图,然后分析结果类加载过程public class Test_1 { public static void main(String[] args) { System.out.printf(Test_1_B.str); }}class Test_1_A { public static String str = "A str"; static { System.out.println("A Static Block");原创 2020-08-05 15:55:02 · 386 阅读 · 0 评论