前期由于面试的原因,自己就浅显的了解了下jvm相关的知识,在上课的时候,也就笼统的听老师说栈,堆,方法区这些概念,具体的该干什么用,自己的脑子里面是一直糊糊涂涂的,对于这一块还是很浅显的,现在公司需求不是很多,就想静下心来学习下相关的知识,索性也在csdn上面记下自己的随笔。
首先学jvm,我们一定要记住这个图吧
jvm是运行在操作系统上面的,和硬件没有直接的交互
这里我们可以这样想,你买了一台电脑,这个电脑装了win7或者win10,这时候你兴高采烈的去执行下cmd指令,输入了个java -version,
结果出现了这个提示,你肯定就知道了,这个电脑是二手的,想蒙骗我们程序员没有那么简单,相信看到这,很多人都会想起来我们学java的第一件事,装jdk,因为我们的电脑上面是没有自带的,但是操作系统在你电脑出厂的时候是已经配置好的。
我们在来看下jvm的体系结构
首先这张图标明了几种颜色:灰色的是没有垃圾回收的,褐色的是主要在垃圾回收,我们说的jvm调优主要是在堆(70%-95%)和方法区调优,这个是我们需要记住的
我们跟着着图示的箭头下去寻宝吧:
首先class files 被java命令运行 将类信息通过类装载器(ClassLoader)加载并初始化生成 Class模版放入运行时数据区(Runtime Data Area),类装载器(ClassLoader)负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定
运行时数据区包括 5部分 : 方法区 和 堆(线程公有) java栈和本地方法栈和程序计数器(线程私有)
执行引擎(Execution Engine)负责从java栈中取得命令解释成操作系统可识别命令,并交给操作系统执行
本地接口(Native Interface)和本地方法库 融合了别的编程语言(C/C++)为java所用,java诞生时c和c++处于统治地位,
不知道大家注意了一个问题没有
这个class的c是小写的,这就好像是一个汽车图纸吧,现在还没有开始电脑制图,量产,当我们类加载器加载初始化的的时候这个class就成了Class 类了,这时候就相当于我们在电脑制图了,然后我们就要量产了,开始new对象了,这时候就出来了车子,但是我们也要明白这些车是量产的,图纸是一样的,所以这些车子的轮胎啊,引擎啊是一样的。