JVM的内存结构(运行时数据区)
定义:Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域
本质:是操作系统,class就类似命令
内存结构:
- 运行时数据区:程序计数器、虚拟机栈、本地方法栈、方法区、堆
-
程序计数器:
作用:指向当前线程正在执行的字节码指令的地址(行号),Java是多线程的,需要上下文切换,确保多线程情况下程序正常执行
特点:是唯一不会发生00M(内存泄漏)的。 -
虚拟机栈:
作用:存储当前线程运行方法所需的数据,指令,返回地址 -
本地方法栈:
作用:管理由C语言实现的本地方法的调用,例: Object.hashcode 方法,服务的对象是 native 方法 -
方法区:
作用:存放已被虚拟机加载的类相关信息,包括类信息、静态变量、常量、运行时常量池、字符串常量池等。
变化:jdk1.7及以前 就叫永久代
jdk1.8及以后 就叫元空间
永久代和元空间的区别:
永久代受制于堆大小
元空间受制于机器的内存 -
堆:
作用:存储几乎所有的我们申请的对象。
特性:内存分配与回收