沈超琦的博客

STAY HUNGRY,STAY FOOLISH

文章

JVM内存结构(基于JDK8)

根据VM规范,VM应该被划分为五块区域——即VM栈、堆、方法区、程序计数器、本地方法栈五个部分。如下图所示: 方法区(Method Area):该区域是所有线程共享的,主要用于存放类的信息,常量、静态变量、即时编译器编译后的代码等。垃圾回收器对这块区域的回收主要是针对常量池和类的卸载。 java堆(Java Heap):该区域也是所有线程共享的,用于存放对象实例,绝大多数创建的对象都会被存放到这里(除了部分由于逃逸分析而在对外分配的对象,该部分只是在方法体被引用,故被分配到了栈上)。垃圾回收器最主要针对的对象,对这部分的回收效率影响了VM的整体性能。 本地方法栈(Native Methiod Stack):该区域是每个线程锁独有的,主要用于VM的Native方法。这部分是有VM自行管理,程序员基本上不需要关系该部分。 VM栈(VM Stack):该区域也是每个线程所独有的,与本地方法栈是类似的,唯一的区别是它为VM执行Java方法服务。该区域主要维护栈针(每调用一个方法,则VM就会创建一个栈针保护当前方法的状态,并将其压入栈中,当被调用的方法完成后,在将其出栈继续执行未完成的方法),....

杂谈JVM

Jvm学习总结 序 jvm之运行时内存 jvm之对象的一生 jvm之天道的发展 jvm之大并发时代 结 序 为了防止自己学完就忘记,写此博客. jvm之运行时内存 jvm的运行时内存,是学习jvm一个不错的切入点,在此一一列出: 1.虚拟机栈: 一千个人眼中有一千个哈姆雷特,一千个线程有一千个虚拟机栈,在操作系统层面看的话,用户级线程便是分着不同的栈去执行的,既然操作系统老大哥都这样,jvm的线程肯定也是一个线程一个栈了.一个虚拟机栈中又有什么呢,看看老大哥的栈中,是一个一个的栈帧,jvm自然也是栈帧了(栈帧即方法).除了栈帧,jvm还有一个小的可以忽略的程序计数器(程序计数器记录每个线程运行的位置,方便线程的切换),操作系统拥有着tcb(ThreadControllerTable),可以记录自己运行到哪儿了,所以不需要程序计数器.因此就没有这个概念了吧.那么栈帧里面又是什么呢,这里面jvm就分的很细致了,操作数栈,局部变量表,动态链接,返回地址. 操作数栈是个啥呢?操作系统中,根据指令,将需要操作的数据放入寄存器组中,之后运算出来,运算中途的数据存入寄存器里面暂存,最后要....

STAY HUNGRY,STAY FOOLISH

© 2021 沈超琦的博客

Powered by Bolo
Theme self-bolo-sakura by Mashiro
浏览 31155 文章 31 评论 5
浙ICP备18010929号

主题 | Theme