提示:以下是本篇文章正文内容,Java系列学习将会持续更新
一、JVM内存模型
1-1 方法区
方法区: 存放方法,主要就是指令数据,以字节码为代表的指令数据。也会有部分附属的方法基本信息。—— 扩展起来认为,就是保存类的信息。
逻辑上,认为类的相关数据放这里。
逻辑上,静态属性放在方法区。
方法区以类为单位,一般会将整个类的方法全部存进去。
1-2 堆区
堆(Heap) : 堆砌对象的地方。
堆中的数据以对象为基本单位进行管理。
属性空间是随着对象走的,所以逻辑上认为属性是保存在堆区的。
1-3 栈区
栈(stack):以栈帧(frame) 为基本单位。
保存局部变量的值,包括:
1.用来保存基本数据类型的值;
2.保存类的实例,即堆区对象的引用(指针)。
3.也可以用来保存加载方法时的帧。
随着方法本次执行出现,本次执行结束消亡。
1-4 PC寄存器
Program Counter : 程序计数器,保存下一 条要执行的指令的位置。
- PC寄存器是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域。
- 在JVM规范中,每个线程都有它自己的PC寄存器,是线程私有的,生命周期与线程的生命周期保持一致。
二、执行引擎
Execution Engine : 执行引擎。
- 读取PC中保存的值 (一般就是个地址)
- 根据PC中的值,去内存中(方法区),读取一条指令 (字节码)
- 执行具体具体的字节码
- 默认情况下PC的值自动+1 (语句自动执行下一条)
2-1 JIT Compiler
JIT Just In Time (即时编译) :提示执行效率的一套机制。
实际上JVM在执行过程中,可以发现有些字节码执行的比其他的更频繁。这个时候,再去按照字节码翻译的模式,效率就低了。所以会在运行期间,即时地把这些热点字节码直接编译成本地的机器码,速度就能提升。
JVM的执行,就有个预热的阶段的。就像运动前的热身一样,让自己的状态达到最好,效率才最高。
2-2 GC
Garbage Collector : 垃圾回收器。
Garbage Collect : 垃圾回收。
有了GC之后,相对地解放了开发人员的心智,让开发人员只需要考虑什么时候需要一块内存 ,而不需要考虑什么内存不再被需要了。
好处 : 不需要不考虑内存释放的问题
坏处 : 内存的直接彻底和我们无缘了
总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是JVM的学习,认识了JVM的内存结构,以及每个部分上存储的东西。之后的学习内容将持续更新!!!