共计 882 个字符,预计需要花费 3 分钟才能阅读完成。
download:Node.js 工程师养成打算圣安地列斯
JVM 运行时数据区
1 什么是 JVM?
JVM 能够了解为一种标准。任何高级语言,只有能生成,都能够交给 JVM 加载执行。类文件。所以不论是 Java 还是 Kotlin,尽管 JVM 叫 Java 虚拟机,然而 Kotlin 会被编译成。由编译器生成并由 JVM 加载的类文件。所以即便在日常开发工作中应用 Kotlin,也须要把握 JVM 的原理。
JVM 次要由三局部组成: 类加载器、运行时数据区和执行引擎。
类加载器: 将编译后的类文件加载到 JVM 内存中;
运行时数据区: 次要指文章结尾的 JVM 内存模型,用于存储程序执行过程中产生的数据;
执行引擎: 执行字节码指令会和运行时数据区交互,生成的数据会存储在运行时数据区。
2 运行时数据区 - 堆栈内存
本节重点介绍 JVM 运行时数据区,它次要分为两局部,堆和栈。
2.1 堆和栈的职责
依据程序运行时的性能,堆是运行时的存储单元,栈是运行时的处理单元。
也就是说,堆是为了解决数据存储的问题。数据应该存在于哪里?怎么挽回?堆栈是解决程序运行的问题,如何执行程序,如何解决数据,如何执行办法等。
2.2 程序计数器
程序计数器也是寄存器,是惟一不会造成内存透露的区域;它的次要性能是记录多线程场景中的代码执行地位。
首先,咱们来看一个简略的办法。
公共动态 void getByteCode() {
int a = 10
int b = 20
int c = a+b;}
复制代码
当这个办法在 JVM 中执行时,字节码指令是:
0 双脉冲 10
2 istore_0
3 双推 20
5 istore_1
6 iload_0
7 iload_1
8 iadd
9 istore_2
10 返回
复制代码
如果有相熟 CPU 工夫片轮换机制的搭档,应该晓得程序的运行工夫是会切片的,每一段都是一个 CPU 工夫片。
对象创立的过程
在日常开发工作中,咱们罕用的创建对象的形式次要分为以下几种:
(1)由 new 关键字创立;
(2)通过反思;
(3)通过 clone 的办法,obj.clone;
(4)序列化或反序列化
接下来,咱们以 alloc 办法为例,看看类是如何被字节码创立的:
`0 新的 #8
3 dup
4 调用非凡 #9
7 astore_0
8 返回 `