说一下 JVM 运行时数据区

142 阅读1分钟

JVM 运行时数据区也就是我们所说的jvm内存,它分为程序计数器,虚拟机栈,堆,本地方法区,方法区无部分。

  • 程序计数器,用于记录下一条指令的位置,在线程恢复,异常处理需要用到它;它是线程私有的,不存在内存溢出问题
  • 虚拟机栈是存放在栈帧,栈帧里是正在运行的方法。虚拟机栈不需要进行垃圾回收,因为方法调用结束就弹出栈。虚拟机栈会有栈溢出(stack overflow)
  • 本地方法栈和虚拟机栈差不多,但是它是为native方法服务的
  • 堆中存放用new关键字创建的对象,堆会有垃圾回收,堆需要考虑线程安全问题
  • 方法区是概念上在jvm内存中,物理上存在计算机内存中,用于存放已被jvm加载的类信息,常量,静态变量等