JVM虚拟机知识图谱

Java虚拟机
    类加载器子系统
        用于将编译好的.Class文件加载到JVM中
    运行时数据区
        线程私有区域
            虚拟机栈
                为执行Java方法服务。每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作数、动态链接和方法返回等信息,当线程请求的栈深度超过了虚拟机允许的最大深度时,就会抛出StackOverFlowError;
                栈帧
                    局部变量表
                    操作数
                    动态链接
                    方法返回
            本地方法区
                为Native方法服务,保存的是native方法的信息,当一个jvm创建的线程调用native方法后,jvm不会在虚拟机栈中为该线程创建栈帧,而是简单的动态链接并直接调用该方法;
            程序计数器
                是一块很小的内存空间,作为当前线程的信号指示器,用于记录当前虚拟机正在执行的线程指令地址
        线程共享区域
            虚拟机堆/Java堆
                JVM运行过程中产生的对象和数据都被存储在堆中,包括jdk8后的运行时常量池
                新生代 1/3 堆空间
                    Eden区 默认占 8/10新生代空间
                    SurvivorFrom区 1/10
                    SurvivorTo区 1/10
                老年代 2/3 堆空间
                所有线程共享的一块内存,几乎所有对象的实例和数组都要在堆上分配内存,因此该区域经常发生垃圾回收的操作;
            方法区/永久代
                Java8中永久代被元空间取代,元空间没有使用虚拟机的内存,直接使用操作系统的本地内存,因此不受JVM内存的限制。
                方法区和java堆一样,是各个线程共享的内存区域,虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫Non-Heap,目的是为了与java堆区分开来。
                存储已被虚拟机加载的
Class和Meta(元数据)信息
                    类信息
                    类的静态变量
                    运行时常量池
                    常量
                    即时编译后的代码
        直接内存/堆外内存
            并不属于JVM运行时数据区内容
            NIO模型通过调用Native函数库直接在操作系统上分配堆外内存
            Java进程通过堆外内存技术避免在Java堆和Native堆中来回复制数据带来的资源浪费和性能消耗
    执行引擎
        即时编译器
            用于将Java字节码编译成具体的机器码
        垃圾回收器
            用户回收在运行过程中不再使用的对象
    本地接口库
        通过调用本地方法库,
完成具体的指令操作
            与操作系统交互
与操作系统交互
所有线程共享的一块内存,几乎所有对象的实例和数组都要在堆上分配内存,因此该区域经常发生垃圾回收的操作;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值