• jvm的基础知识


    1:jvm的内存分区,具体到每个区存放什么

    Q:字节码指令和字节码解释器

    Q:androd4.4前后使用的是什么虚拟机?

    Q:class文件是什么?所含信息有哪些?

    • 程序计数器
      • 是概念模型,在真正的jvm中其功能可能会以更高效的方式实现
      • 字节码计时器就使用程序计数器来指向下一条“字节码指令”
      • 线程私有,每个线程均有一个
      • 唯一一个没有内存溢出Error的区域
      • 对于java方法,记录字节码指令的地址;native方法,其值为空
    • VM 栈
      •   线程私有
      • 它描述方法的内存模型:每个方法在执行的同时会创建一个“栈帧”(stack frame)用于存储局部变量表、操作数栈、方法出口动态链接等
      • 其中局部变量表存储7种基本数据类型数据和引用类型数据(reference),某种程度上来说vm的栈区就特指vm栈的局部变量表
      • double/long两种数据类型数据占用2个“局部变量空间”
      • 可能会发生栈溢出和内存溢出Error
    • 本地方法栈
      • 针对native方法
      • 在某些vm中该栈与vm栈合并
      • 对于实现方式(数据结构、语言、使用方式)没有硬性规定
      • 可能会发生栈溢出和内存溢出Error
    • 堆(Heap)
      • 用于存放对象实例,是GC的主要回收对象
      • 线程共享
      • 物理内存可以不连续,逻辑上连续即可
      • 可能会发生内存溢出Error
    • 方法区
      • 存放已经被类加载的“类信息”、“常量”、“静态变量”、“即时编译器编译后的代码”
      • 线程共享
      • GC回收在此处较少见
      • 逻辑上是heap的一部分但是又叫做“non-heap”,以示与heap的区别
      • 可能会发生内存溢出Error
    • 运行时常量池
      • 是方法区的一部分
      • “常量池”是class文件的一部分,用于存放“字面量”和“符号引用”
      • 运行时常量池相对于常量池,具有动态性的特点,在运行时也可以将新的常量放入池中
  • 相关阅读:
    南桥-- 算法训练 2的次幂表示
    Ajax系列之中的一个:ajax旧貌换新颜
    ASP.NET综合管理ERP系统100%源代码+所有开发文档
    创业建议干货分享
    读取properties属性文件——国际化
    測试赛C
    Android 自己定义ViewGroup手把手教你实现ArcMenu
    【VBA研究】利用DateAdd函数取上月或上年同期的日期
    【Java集合源代码剖析】TreeMap源代码剖析
    openstack neutron L3 HA
  • 原文地址:https://www.cnblogs.com/Russel/p/5999156.html
Copyright © 2020-2023  润新知