jvm学习笔记(3)内存管理

  • 整体架构

    当一个java类文件被jvm装载进来,就需要创建对象,涉及到内存管理了。先来看看jvm内部的体系结构

  • pc寄存器

    对汇编有一定了解的同学都明白这个概念。我们可以简单把它看做是当前线程所执行的字节码的行号。有什么用呢。当执行完一条指令的时候,需要跳转到下一条指令,就得靠它了

  • java虚拟机栈

    是线程私有的,跟线程的生命周期相同。描述的是一个java方法执行的内存模型:当一个方法被执行的时候,就会创建一个栈帧(stack frame)用于存储局部变量列表、操作数栈、动态链接(即一些类或者方法的引用)、方法出口信息等。一个方法被调用到完成的过程,就是一个栈帧在jvm栈入帧到出帧的过程

  • Java堆

    这个是我们最熟悉的了,所有对象的创建都在这个区域。垃圾回收的重点区域也在这一款。这个区域我们可以再细分一下:新生代(Eden、From Survivor 和 To Survivor)和老年代。对象最早是分配在Eden区域的,当执行了一次min gc时,就会将该对象转移到其中一个Survivor。当对象存活一定时间后,可能被移到老年代。当老年代内存不足时,会引发Full GC。这就是大概的垃圾回收过程。详细的过程,我会在之后的blog中介绍

  • 本地方法栈

    顾名思义,本地方法是跟调用本地方法相关的

  • 方法区

    存储一些公共信息:类信息、常量、静态变量,即时编译后的代码

  • 对象的访问

    句柄式。堆中会划分出一块内存作为句柄池,对象的引用其实是对象的句柄地址。通过它找到了句柄,句柄包括了对象实例数据(堆中)和类型数据(属于方法区)的具体地址。好处是对象的移动改变指针就行,对象的引用不需要改变

    直接指针访问。对象就包括类型数据(属于方法区)的地址和实例数据。所以通过对象的引用就直接在java堆中找到了对象。好处是速度更快,跟句柄式的访问相比,少了一次指针定位的开销。Sun hosport就是采用这种方式的

  • 参考资料

    1.深入java虚拟机
    2.深入理解java虚拟机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值