• 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文件的一部分,用于存放“字面量”和“符号引用”
      • 运行时常量池相对于常量池,具有动态性的特点,在运行时也可以将新的常量放入池中
  • 相关阅读:
    配置VSFTP文件服务器
    Apache Tomcat服务部署网站
    NFS实现Unix-like文件共享
    OpenSSH 服务配置与管理
    Redis 数据库配置与应用
    Rsync+Inotify 实现数据同步
    PXE+Kickstart 自动化部署系统
    PostFix+Dovecot 部署邮件系统
    部署MooseFS分布式文件系统
    MVC5+EF6 完整教程
  • 原文地址:https://www.cnblogs.com/Russel/p/5999156.html
Copyright © 2020-2023  润新知