jvm入门(1)

1.0 jvm的基本架构
这里写图片描述

一、jvm 一共约有9个区域

  1. 类加载器
  2. 方法区
  3. java堆
  4. java栈
  5. 本地方法栈
  6. pc寄存器
  7. 直接内存
  8. gc
  9. 执行引擎

二、简单说明

1.0 类加载器

负责加载本地或者网络上的class文件信息,加载后的信息存放在名字叫方法区的内存空间

2.0 方法区

就是存放类信息、常量信息、常量池信息、包括字符串字面量和数字常量等

3.0 java堆

java堆主要用来存储数据 怎么放?放在哪?
java堆在jvm启动时自动创建,堆空间是所有线程共享的,主要存储对象的实例,是java程序的主要工作区域

4.0 java栈

栈解决程序的运行问题,即程序如何执行
主要保存 局部变量 方法参数,返回值,方法调用,对象的引用

5.0 本地方法栈

同java栈的作用差不多,只不过他是调用本地的方法,而不是java的

6.0 pc寄存器

如果系统调用本地方法 PC寄存器值为undefined,寄存器存放如当前执行环境指针、程序计数器、操作栈指针、计算的变量指针等信息。
如果不是本地方法 我的理解就是存储将要执行的下一条指令

7.0 直接内存

Java的NIO库允许java程序使用直接内存,从而提高性能

8.0 垃圾回收器 (gc)

java有一套自己进行垃圾清理的机制,开发人员无需手工清理

9.0 执行引擎

它负责执行虚拟机的字节码。一般会先进行编译成机器码后执行。

三、java堆 java栈 方法区的联系

堆是怎么存,栈是怎么执行,方法区记录堆栈信息的产生,是先决条件
eg:
A a = new A();
new A(); 实例化了A这个类 他就存放在堆中,a是这个实例的引用,存放在栈中
A这个类的信息 修饰符啊 是类还是接口啊 全限定名啊 都方法方法区

再谈java堆

java程序和java堆密切相关,几乎所有的对象都存在java堆中,java堆中的垃圾对象会自动被清理
根据回收机智的不同,可以分为新生代和老年代
新生代有可分为eden s0 s1 s0,s1区也被叫做from,to 区 然后才是老年代tenured
在一次新生代回收后,如果对象还存活,则会进入s0或者s1区,之后每经过一次新生代回收,如果对象存活则它的年龄就加1,当对象达到一定的年龄后,则进入老年代。

再谈java栈

java栈是一块线程私有的内存空间,一个栈,一般由三部分组成:局部变量表、操作数栈和帧数据区。
局部变量表:
操作数表 主要存储计算过程中的中间变量
帧数据区 栈还需要一些数据来支持常量池的解析,这里帧数据区保存着访问常量池的指针,方便程序访问常量池,另外,当函数返回或者出现异常时,虚拟机必须有一个异常处理表,方便发送异常的时候找到异常的代码,因此异常处理表也是帧数据区的一部分。

再谈方法区

同堆一样,是所有线程共享的,保存了所有类的信息,如果类过多,就会抛出虚拟机内存溢出错误

猜你喜欢

转载自blog.csdn.net/qq_35794278/article/details/81300332
今日推荐