# jvm-第一节基础概念(需要了解基础概念,比如jvm运行时数据区都有什么,都是干啥的,类比os中那些部件)
jvm的内存结构
- jvm的全称呼 java virtual machine,是在os的基础上虚拟出来的一块区域,可以调用os的函数,也可以把。class文件翻译成机器码在os上执行,也是java实现跨平台的原因,
- 上面这个图就是运行时数据区,主要分俩部分,共享区和私有区;共享区存的是new的对象在堆里,class文件在方法区,静态常量在常量池,你的基础类型在线程私有区的栈的局部变量表里;私有区存放的是一个个线程,里面是一个个栈帧,栈帧里面是局部连变量表,操作数栈(这个是执行引擎做完操作比如加减之后存数的地方,类似于os中cpu算完数然后把数放到某个存储单元中),动态链接和方法返回,这四个东西,里面还有本地方法栈,执行native方法(这个东西是早期java类库不全需要调用别人的代码用的),程序计数器是用来记录你程序运行到哪了(os中也有一个程序计数器,作用一样的,而且这东西不会oom,存到数据太简单了);
- 上面这个图是私有区域 线程内部的组件
- 直接内存,这部分是os的内存,jvm没有进行虚化,不过jvm可以直接使用,这里是通过nio(not-block-io)操作内存,避免了拷贝提升效率,但会收到os的影响.