JVM五大基础

JVM

Java栈(保存基础数据类型的对象和自定义对象的引用)(自定义对象的引用eg:A a=new A(),这里的前面A a就是对象的引用)

只对栈帧进行存储、压栈和出栈 每个栈帧对应一个被调用的方法 栈帧中包括:局部变量表,操作数栈、指向当前方法所属的类的运行时常量池的引用,方法返回地址和一些额外的附加信息

栈中信息私有,其他栈无法访问

堆内存(存放对象和数组(特殊对象)) 随JVM启动创建 存储的全部是对象,每个对象包含一个与之对应的class信息–class的目的是得到操作指令。 堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。 缺点是,由于要在运行时动态分配内存,存取速度较慢。 jdk1.7之前 永久代 jdk1.8之后 元空间

方法区(类信息、静态变量、常量、编译后代码): 在Class文件中除了类的字段、方法、接口等描述信息外,还有一项信息是常量池,用来存储编译期间生成的字面量和符号引用。

在方法区中有一个非常重要的部分就是运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,对应的运行时常量池就被创建出来。当然并非Class文件常量池中的内容才能进入运行时常量池,在运行期间也可将新的常量放入运行时常量池中,比如String的intern方法。

本地方法栈(native方法调用的JVM实现)其他语言

程序计数器(记录当前正在执行的指令)

唯一一个不抛出OOM的运行时数据区

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务