Java虚拟机之内存区域


声明:本文转载自https://my.oschina.net/u/2380882/blog/1501679,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

插播一条广告→2021 ByteDance字节跳动内推←各城市、各方向的岗位都有,大量招人!


    小白一枚,最近在看深入理解java虚拟机2这本书,怕看过之后就忘了,看一节然后写一片博客消化消化,加深印象与理解。有理解错误的地方还望指出。

    Java虚拟机主要分为方法区,虚拟机栈,本地方法栈,程序计数器,堆。其中方法区与堆是线程共享区域;虚拟机栈,本地方法栈,程序计数器是线程私有区域。

    方法区主要存放加载的类信息,常量,静态常量,即时编译器编译后的代码等,也有人称之为永久代,二者并非一样,或者说是HotSpot虚拟机用永久代实现了虚拟机的方法区,为了方便HotSpot垃圾收集器可以向管理java堆一样去管理这块区域。

    虚拟机栈是线程私有的,在java方法执行的时候会创建一个栈帧,用来存放局部变量表,动态链接,操作数栈,方法出口等信息。其中局部变量表存放8个基本数据类型与对象的引用。64位长度的long类型与double会占用2个局部变量空间,其余的占用1个。在编译期间,方法需要分配的局部变量空间是确定的。

    本地方法栈与虚拟机栈非常类似,只不过虚拟机栈是为java方法服务,本地方法栈是为Native方法服务。

    程序计数器是线程私有的,用来记录当前线程正在执行的虚拟机字节码指令地址,如果正在执行Native方法,计数器值则为undefined。

    堆是虚拟机所管理的最大区域,所有的线程共享,用来存放对象实例。现在的垃圾收集器基本采用了分代收集算法,还可以细分新生代和老年代,其中新生代还可以细分为Eden,From Survivor, To Survivor三个区域。虚拟机提供了-XX:PretenureSizeThreshold参数,可以设置当对象占用空间的大小超过这个值,将直接在老年代创建,避免来回复制。

本文发表于2017年08月04日 08:36
(c)注:本文转载自https://my.oschina.net/u/2380882/blog/1501679,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1059 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1