当前位置:正文

在 HotSpot VM 中安卓

发布日期:2024-05-29 15:29    点击次数:66

弁言安卓

咱们写代码时,凡俗会善良代码与对象之间的流转。但本色上,咱们有莫得厚爱去善良过 java 措施运转时,类、对象、局部变量与措施调用链是存放在那处的呢?

[[286800]]

JVM 内存

无人不晓,java 措施是扩充在 jvm 杜撰机中的,那在繁多的 jvm 杜撰机中,HotSpot VM 是当下最热点的大要说使用得最多的 jvm 版块。在 HotSpot VM 中,统统这个词杜撰机内存被分袂为几大模块:

堆(Heap) 措施区(Method Area) 措施计数器(Program Counter Register) 杜撰机栈(JVM Stacks) 土产货措施栈(Native Method Stacks)

 安卓

 

堆(Heap)

该区域即是咱们平时昔日 new 出来的对象待的场地,该区域亦然咱们平时战争得最多的区域,这里细分为:Young Generation(更生代) 和 Old Generation(须生代) ,也即是咱们平时频繁善良的 YGC 和 FGC 的场地,而 Young Generation 中间又再细分为三个区域:Eden、From Survivor、To Survivor,YGC 会有多样的算法来对这三块区域作念针对性的垃圾回收算法,这里就先不张开盘考,有兴味的不错参考 口试官,不要再问我“JAVA GC垃圾回收机制”了 。

该区域是统统线程所分享的,而存放的又是主要的业务对象,是以空间相对来说会是相比大的。一般不错使用 -Xms建立堆的最小空间大小 和 -Xmx建立堆的最大空间大小。

 

 

措施区(Method Area)

措施区和刚说的栈区域有许多相似的场地:线程分享、内存不连气儿、可扩张、可垃圾回收,相似当无法再扩张时会抛出OutOfMemoryError极度。而措施区凡俗也被称为非堆区域(non-heap),从容这要与堆外内存区分开!

措施区它存储的是已被杜撰机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。即是一些与运转时生成的对象区别开,是一个固定存放物质的区域。

措施区的内存回收见识主淌若针对常量池的回收和对类型的卸载,一般来说这个区域的回收“收货”相比难以令东谈主酣畅,尤其是类型的卸载,条目终点苛刻,可是回收确乎是有必要的。

 

 

措施计数器(Program Counter Register)

措施计数器的作用不错看作念是现时哨程所扩充的字节码的行号指导器,字节码讲授器使命时即是通过蜕变计数器的值来中式下一条字节码请示。其中,分支、轮回、跳转、极度处理、线程复原等基础功能王人需要依赖计数器来完成。

Java杜撰机的多线程是通过线程轮替切换并分拨处理器扩充时间的样子来杀青的,在职何一个细见识工夫,一个处理器(关于多核处理器来说是一个内核)只会扩充一条线程中的请示,必须要有一个场地储存每个线程具体处理到哪一步了,该区域即是作念这件事了。

 

 

杜撰机栈(JVM Stacks)

学习过汇编说话的同学也许会相比容易贯串它的作用。它是一个记载线程调用措施模子的栈,每一条线程专有一个杜撰机栈,是以它也与对应线程玉石俱焚。

其每个措施模子被称为栈帧,栈帧会存放 4 个属性:局部变量表、操作栈、动态持续、措施复返地址。

 

 

ps:关于其中的局部变量,如果是变量为基础类型,栈帧会奏凯存储对应的值,但如果是高档类型的话只会存放值的援用。

土产货措施栈(Native Method Stacks)

与杜撰机栈作用相似,也会抛出 StackOverflowError 和 OutOfMemoryError 极度。

区别在于杜撰机栈为杜撰机扩充Java措施(字节码)职业,而土产货措施栈是为杜撰机使用到的Native措施职业。

关于 jvm 的内存,咱们不错用这么的一张图来归纳起来以匡助对比贯串。

 

堆外内存(Off-Heap Memory)

区别于 JVM 内存,java 常用的还有堆外内存。诚然 JVM 内存领有相配完善的垃圾处理机制,不错让路发东谈主员无需善良内存资源回收予求予取地进行开拓,但也正因为存在一连串相配复杂精妙的垃圾处理算法,导致在高并发情况(终点是写内存多)下可能会出现频繁的 YGC 和 FGC (每次 GC 王人会引起措施卡顿),反而会成为性能瓶颈的帮凶!

针对这一类的业务情况,咱们凡俗会使用堆外内存来升迁咱们的性能水平。堆外内存其实即是游离于 JVM 处理以外的物理机内存。不属于 JVM 的处理,当然就莫得了 JVM 的那套 GC 算法,这么能使咱们有愈加好的扩张性和 IO 速率。

在JAVA中,不错通过Unsafe和NIO包下的ByteBuffer来操作堆外内存,也不错使用第三方堆外缓存处理包举例 ohc(off-heap-cache) 来操作。

 





Powered by 🏆华体汇·体育全站app官网入口(中国)官方网站IOS安卓/通用版/手机版APP下载 @2013-2022 RSS地图 HTML地图