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 = 10int b = 20int c = a+b;}

复制代码
当这个办法在JVM中执行时,字节码指令是:

0双脉冲102 istore_03双推205 istore_16 iload_07 iload_18 iadd9 istore_210返回

复制代码
如果有相熟CPU工夫片轮换机制的搭档,应该晓得程序的运行工夫是会切片的,每一段都是一个CPU工夫片。
对象创立的过程
在日常开发工作中,咱们罕用的创建对象的形式次要分为以下几种:
(1)由new关键字创立;
(2)通过反思;
(3)通过clone的办法,obj.clone;
(4)序列化或反序列化
接下来,咱们以alloc办法为例,看看类是如何被字节码创立的:
`0新的#8
3 dup
4调用非凡#9
7 astore_0
8返回`