• JVM集合-JVM整体结构(内存结构)


    我们先来看一下JVM的整体架构图:

     

    该图就是JVM的整体架构图,现在来讲解一下每一个部分的功能是做什么的:

    1:class file就是我们虚拟机编译出来的字节码文件,这里不详细说

    2:类装载子系统: (后文会配上图文解说类加载子系统的各个阶段:加载阶段、链接阶段、初始化阶段--》传送门

        1).类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。
        2).ClassLoader只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine决定。

    3:方法区(永久代)--》传送门:线程共享,存储已经被虚拟机加载的类信息、常量、静态变量

    4:堆(是jvm中最大的一块由年轻代和老年代组成):主要用于方法的执行

         这里拓展一下堆的参数设置(主要用于jvm参数调优,后面会有专门的文章介绍--》传送门) 

        堆内存的设置:

        -Xms:设置堆的最小空间大小

        -Xmx:设置堆的最大空间大小

        -XX:NewSize 设置新生代最小空间大小

        -XX:MaxNewSize:设置新生代最大空间大小

        -XX:PermSize 设置永久代最小空间大小

        -XX:MaxPermSize 设置永久代最大空间大小

       -Xss 设置每个线程的堆栈大小

       没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控 制:老年代空间大小=堆空间大小-年轻代大空间大小

    5:java栈(垃圾收集器管理的主要区域(GC堆)):

    • 局部变量表-存储方法参数,内部使用的变量
    • 操作数栈-在变量进行存储时,需要进行入栈和出栈
    • 动态连接-引用类型的指针
    • 方法出口-方法的返回

    6:本地方法栈

     

    7:程序计数器:(作用:决定执行下一行代码)

         举个例子:代码是一条一条的往下执行的,这个时候就是程序计数器;JVM就是通过读取程序计数器的值来决定下一条需要执行的字节码指令,进而进行选择语句、循环、异常处理等

    8:执行引擎(会有转门一片内容讲解--》传送门 ):代码正真执行的地方

    9:本地方法接口:融合不同的编程语言为java所用

    10:本地方法库:本质就是为了融合非JAVA

  • 相关阅读:
    Android -- DiskLruCache
    Android -- EventBus解析
    Android -- Annotation
    Ubuntu 1604 安装配置 kafka,并配置开机自启(systemctl)
    zookeeper/kafka的部署
    pdf 中内容的坐标系
    C# 获取Windows 设备信息
    C#读取Word指定页的内容
    再看C# ThreadPool与Task的认识总结
    同步IO、异步IO、阻塞IO、非阻塞IO之间的联系与区别
  • 原文地址:https://www.cnblogs.com/qq1141100952com/p/14985144.html
Copyright © 2020-2023  润新知