java JVM(内存结构,类的加载,双亲委派模型,各种常量池)

本文详细介绍了Java JVM的内存结构,包括线程私有和线程共享区域,如栈、程序计数器、本地方法栈、堆和方法区。探讨了对象不一定在堆上分配的情况,涉及逃逸分析和TLAB。同时,讲解了Java加载类的完整过程,以及双亲委派模型的工作原理和局限性。最后,讨论了Java的三种常量池:字符串常量池、class常量池和运行时常量池。
摘要由CSDN通过智能技术生成

java JVM内存结构图

 JVM中的内存是JVM向操作系统中申请一块内存,在针对这个内存划分一个区域。

线程私有:一个进程中存在多个线程,每个线程中都存在自己的栈和程序程序计数,随着线程的产生和消亡而存在,不需要考虑垃圾回收。

线程共享:一个进程中共用一个堆和一个方法区,在JVM中只有一个堆需要考虑垃圾回收

1)程序计数器(PC寄存器)每条线程都有一个独立的的程序计数器,程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变该内存区域是唯一一个在Java虚拟机规范中没有规定任何OOM(内存溢出:Out Of MemoryError)情况的区域。

2)JVM栈:保存基本数据类型,方法,常量Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法对象在堆中分配内存后,需要在栈中分配地址用来引用堆中的对象;

栈中的内存分配是顺序分配,而且定长;

3)本地方法栈:为本地方法服务,一般是C++方法

4)堆Heap:用来存储对象本身的以及数组(数组引用是存放在Java栈中的)。堆是被所有线程共享的。堆中只存放对象本身 字符串常量池在堆区中堆区是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值