JVM历险记第一章:初到内存

我是一个初次来到内存的数据,我被java程序输送到此。来到内存后我很迷茫,因为不知道应该到哪去,看起来好像有五个部落。

PC寄存器部落:

它说它只接受它亲戚线程的数据,没有私下关系根本不让进。人家的名号大:“程序计数寄存器”,每个线程好像都有一个PC寄存器部落,突然好羡慕人家。毕竟可以划到属于自己的地方,每个PC寄存器好像门头的地址在不停的变换着,据听说它这个数字就是它正在运行的方法地址。有时候突然门头地址消失了。小道消息,说这是因为运行到本地方法了。多个PC寄存器部落不停的繁忙着,多个线程这不停的执行、挂起。现在想想又不羡慕了,毕竟加班严重啊。辛亏没去啊。

JAVA虚拟机栈部落:

TMD又是一个靠关系才能进的部落,而且又是和线程有关系,不过好像这个部落貌似不太稳定啊,一会出现一会消失,随着线程而来随着线程而去。

如果说寄存器部落太简单,只能看到一个门牌号,那JAVA虚拟机栈部落的机构设置就有点复杂了。首先设置了栈帧机构,这个机构专门处理临时数据。这个机构随着方法的创建而生,随着方法结束而死。每一个栈帧机构都有着自己的局部变量表以及操作数栈以及对当前类的运行时常量池的引用。它还负责处理方法返回值、动态链接以及异常分派的任务。这样一看栈帧真是不简单。

再看看栈帧中的小弟们,头号小弟叫局部变量表,它是一个方法局部变量的列表,其实它比虚拟机栈部落出生还早些,听说在class出生的时候它就在了,看来是是个实名的低头蛇了。

可以将它理解为一个对象数组,而里面按照索引0到length-1分别对应于每一个局部变量,特别的,如果是实例方法的局部变量表,第0个局部变量会是一个指向当前实例的引用,也就是this关键字,其余的局部变量则从索引1开始。看到这想想地头蛇也是不好当的啊。。。

又看到另一个不起眼的小弟叫操作数栈,名字真是难听。它是一个后进先出(LIFO)栈,而它的长度也是在编译时期就写入了class文件当中,是固定的。作用就是提供字节码指令操作变量计算的空间,比如简单的,对于int a=9这句话来说,就需要先将9压入操作数栈,再将9赋给a这个变量。

堆部落:

这个部落好像我可以进,而且貌似这占了好大一块的空间,这里存储了好多对象和数组对象。而且还有自建的护卫队,貌似为了保证人口在2300w左右,所以组建了垃圾回收队。专门清理部落中垃圾数据占用的地方。

方法区部落:

这个地方其实堆的vip区,因为听说这边的数据不保证垃圾回收队会过来巡逻,所以它是运行时常量池、字段信息、方法信息、构造方法与普通函数的字节码内容以及一些特殊方法的乐园。

本地方法栈部落:

这个部落神秘了,因为出现与消失可以不定的,幸运的可以看见它,它用来支持native方法的执行。

如果JAVA虚拟机不依赖于本地方法栈,而且JAVA虚拟机也不支持native方法,则不需要本地方法栈。而如果需要的话,则本地方法栈也是随每一个线程的启动而创建的。

看到他们这个领地除了PC寄存器部落不受管制,剩余的都受一个叫程序员的人管制这,让他们占地多少,划分占比多少都可以以命令的形式下达。。。这样看程序员才是老大啊!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值