zoukankan      html  css  js  c++  java
  • JVM--02

    Java虚拟机内存管理:

    共享:

      方法区:存储运行时常量池、已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

      java堆:存储对象实例

    线程独占区:

      虚拟机栈:存放方法运行时所需的数据、成为栈帧

      本地方法栈:为jvm所调用到的Nativate即本地方法服务

      程序计数器:记录当前线程所执行到的字节码的行号

    程序计数器:

    较小的内存区域 当前线程所执行的字节码行号指示器  

    如果是java方法 记录当前字节码指令的地址   如果是native方法 值为undefined  没有oom异常的区域

    goto java中唯一的一个保留字

    虚拟机栈:

      java方法执行的动态内存模型

      栈帧:

        每个方法执行,都会创建一个栈帧,伴随方法创建到执行完成。存储局部变量表、操作数栈、动态链接、方法出口等。

      局部变量表:

        存放编译器可知的各种基本数据类型,引用类型,returnAddress类型  64位的long 和double占用两个slot(局部变量空间)其余只占用一个

        局部变量表的内存空间在编译期完成分配,当进入一个方法时,这个方法需要在帧分配多少内存是固定的,运行期间不会改变局部变量表的大小。

      大小:

        如果线程请求的栈深度大于虚拟机所允许的深度,将发生Stack Overflow  例如递归方法没有出口

        如果扩展时无法申请到足够的空间将发生oom

    本地方法栈:

      本地方法栈为虚拟机使用到的native方法服务

      也会出现 Stack Overflow和oom

    Java堆:

      存放对象实例

      jvm管理的最大的内存区域

      垃圾收集器管理的主要区域

      新生代、老年代、Eden空间

      (逃逸分析、栈上分配、标量替换)

      OOM异常

    方法区:(非堆 Non-heap)

      线程共享

      存储虚拟机加载的类信息、常量、静态变量,即时编译器编译后的代码等数据

      类版本  字段  方法  接口

      方法区和永久代

      垃圾回收在方法区的行为:针对常量池的回收和类型的卸载

      异常的定义:OOM

    常量池:(运行时常量池 方法区的一部分)

      存放编译期生成的各种字面量和符号引用,将在类加载后进入方法区的运行时常量池中存放

      也会把翻译出来的直接引用存放到运行时常量池中

      运行期间也可以将新的常量放入常量池中 String类的intern方法

      OOM异常

    intern方法是native方法

    直接内存:(Direct Memory)

      不是jvm的一部分  

      OOM异常

      NIO (New Input/Output):引入一种基于通道与缓冲区的I/O方式 使用native函数库直接分配堆外内存,通过一个存储在java heap中的DirectByteBuffer对象作为这块内存的引用进行操作

      由DirectMemory导致的内存溢出,在heap dump文件中不会看到明显的异常

    java对象的结构:

      Header(对象头)

        自身运行时数据(Mark Word):hash值  GC分代年龄  锁状态标志  线程持有的锁  偏向线程id  偏向时间戳

        类型指针:数组(还有一个记录数组长度的数据)  指向对象元数据的指针

      InstanceData:

        long、double分在一起  short。char分到一起  相同长度分一起

      Padding

        占位符  

    对象创建:分配空间

      指针碰撞:Serial、ParNew等使用compact过程的收集器

      空闲列表:CMS 基于Mark-Sweep算法

    对象访问定位:

      通过栈上的reference数据操作堆上的具体对象

      使用句柄:java堆中划分出句柄池 保存实例对象的地址  java栈中的引用地址不需要改变 只改变句柄池

      使用指针 hotspot采用的方式:直接指针  速度快

    到对象实例的指针和到对象类型数据的指针

     

        

  • 相关阅读:
    关于清除浮动的最佳方法
    Bootstrap学习——栅格系统
    人工智能、机器学习和深度学习之间的区别与联系
    speech
    爬虫—启新宝接口函数
    爬虫—天眼查接口函数
    python链接mysql获得某列最大值
    获取指定路径下特定后缀的文件
    python读Excel
    DataTable 递归 简单的程序,来实现无限级列表 结合 jquery.table.js 实现
  • 原文地址:https://www.cnblogs.com/zhy-study/p/9291922.html
Copyright © 2011-2022 走看看