目录
💟这里是CS大白话专场,让枯燥的学习变得有趣!
💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!
💟好记性不如烂键盘,自己总结不如收藏别人!
🤗谈谈对JVM的理解
💌二话不说先翻译:JVM(Java Virtual Machine)中文名:Java虚拟机。虚拟机都懂吧?就是仿的计算机。这里有一个简单的包含关系:
JDK(Java Development ToolKit)> JRE(Java Runtime Envirnment)> JVM
💌往大了说,JVM是一种可以提供Java运行环境的Java开发工具,保证Java可以跨平台运行。
💌往小了说,JDK将Java程序编译成Java字节码(.class文件),再由JRE中的JVM负责执行这些字节码文件,解析为本地操作系统(Windows、Linux、Mac)的机器指令。
就像是翻译器可以将中文翻译成各个国家的语言,而不同的国家就相当于不同的操作系统。我们有了翻译器,就可以满世界溜达啦!😍
🧡JVM体系结构
🍠类装载器:将.class文件装载到方法区。
🍠执行引擎:执行.class文件,解析为JVM指令。
🍠程序计数器(寄存器):记录下一条JVM指令执行地址。
🍠Java虚拟机栈:线程运行需要的内存空间(参数,局部变量,返回地址)。
🍠本地方法栈:本地方法运行需要的内存空间。如:通过native接口调用本地Object clone()、notify()、hashcode()、wait()等方法。
🍠堆:存放实例化对象,有垃圾回收机制,JVM调优部分。
💌辩证谈共享&独享:在共享区很有可能出现多个线程预分配同一块堆内存的情况,HotSpot JVM则使用TLAB(Thread Local Allocation Buffers)内存分配机制解决这一问题:在每个线程初始阶段,从堆内存中划分一部分给该线程,用于专属内存分配,但内存中的数据可供所有线程读取,即独存共取。