美文网首页
JVM 运行时数据区

JVM 运行时数据区

作者: supAllen | 来源:发表于2018-03-04 09:42 被阅读0次

1、程序计数器(线程私有):线程执行字节码的行号指示器(注意是字节码,本地方法计数器为空的)

2、Java虚拟机栈(线程私有)

(1)描述的是Java方法执行的内存模型

(2)每一个方法对应一个栈帧

(3)栈帧包含:局部变量表、操作数栈、动态链接、方法出口

(4)局部变量表包含:基本数据类型、对象引用、returnAddress类型

  (5)  局部变量表slot会复用,导致一些对象不能被及时的回收,所以建议对象不用之后要赋值为空;

(6)局部变量表在编译器就已经完成分配

(7)动态链接指的是方法区中的常量池中 的符号引用在第一次运行期间转化为直接引用,这部分引用就称为动态链接

(8)方法的返回地址即方法出口有二:正常完成方法(如有返回值则是return的地方)、

方法异常时异常块(如果没有finally的情况下)


public void clear() {      //   此处若有参数,参数也属于局部变量表

    Node[] tab;                // tab 是 对象引用

    modCount++;            // ++ 是在操作数栈中    modCount属于类实例的属性值,在堆中

    if ((tab= table) != null && size> 0) {

        size= 0;

        for (int i= 0; i< tab.length; ++i)

            tab[i] = null;

    }

    // 这里是方法出口

}


(9)会有两种异常:StackOverFlowError  OutOfMemoryError

3、本地方法栈(线程私有):抛异常如Java虚拟机栈,不过是服务于本地方法的

4、Java堆(线程共享)

(1)几乎所有的实例都在这里分配内存(因为JIT和逃逸技术发展导致了不是绝对的所有)

(2)只会抛出OutOfMemoryError

5、方法区(线程共享)

(1)存储 已被虚拟机加载的类信息(即每个类的class类)、常量、静态变量、即时编译后的代码(第一次编译后的代码)

(2)只抛出OutOfMemoryError

6、运行时常量池(属于方法区的一部分)

(1)存放编译期的字面量和符号引用;

    字面量:String str="abc" 中的"abc"    int i = 1;中的 1

    符号引用:就是类引用(类的全路径)

(2)String类中intern()方法就是运行期间将新的常量放入池中,class文件的动态性及并不是只有在编译期产生常量

7、直接内存

(1)NIO中使用native方法直接分配堆外内存

(2)使用Java堆中的DirectByteBuffer对象作为这块引用进行操作

相关文章

  • Java虚拟机02-JVM运行时数据区

    1 JVM运行时数据区 JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算...

  • JVM学习笔记

    JVM 注意:0、JVM运行时数据区和JVM内存模型不要搞混1、运行时数据区可以分为:堆、方法区、虚拟机栈、本地方...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • jvm 运行时数据区-01

    jvm 运行时数据区 jvm 运行时数据区 ,将内存划分为5个区域,java 代码在运行时 类里面的 组成部分 分...

  • 线程安全之可见性问题

    Java内存模型 VS JVM运行时数据区 首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多...

  • jvm内存模型及GC记录

    在jvm中有一块非常重要的区域,就是jvm运行时数据区。今天对该区域做下总结和记录: 在讨论jvm运行时数据区前,...

  • java面试jvm总结

    JVM→ JVM 内存结构运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆存放对象, 方法区他用于存储已被...

  • Java从入门到入坑(底层篇)

    01:JVM 1:JVM内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆...

  • Java虚拟机内存区域详解

    JVM 运行时的数据区域 首先获取一个直观的认识: 总共也就这么 5 个区(直接内存不属于 JVM 运行时数据区的...

  • 《深入理解Java虚拟机-JVM高级特性与最佳实践》学习总结(第

    一、运行时数据区 JVM将我们机器上的内存当做一个运行时数据区来进行处理。该运行时数据区包括以下几个部分: 方法区...

网友评论

      本文标题:JVM 运行时数据区

      本文链接:https://www.haomeiwen.com/subject/rjkffftx.html