继续创作,加速生长!这是我参与「日新计划 6 月更文挑战」的第17天,点击查看活动概况

程序运行时,目标怎么安置,内存怎么分配?

寄存器

该区域是最快的存储区域,该方位坐落处理器内部,可是数量并不是许多,C和C++答应向编译器建议寄存器的分配方法

仓库

该内存区域坐落RAM中,经过仓库指针能够从处理器获取直接支持。分配内存的方法为操控仓库指针上下移动,向上移动代表释放内存,向下移动代表分配新的内存。这种分配方法仅次于寄存器分配。这也约束了它的灵活性,JVM必须对存贮在该区域的目标知道他们确切得生命周期,以便毁掉释放内存供其他内存运用,该当地存储的目标引证,而不是目标本身

也坐落RAM区,该部分当地寄存的就是Java目标了。堆差异于仓库的一个点是:堆不需求了解存储在该区域目标的生命周期,因而提高了程序的灵活性。创建目标的方法是经过new 操作符来创建的,编译器主动存储分配该目标的内存,灵活性带来的价值是其运行时的剖析导致效率变慢,其需求剖析哪部分目标是无用目标哪部分目标是有用目标,在JVM中是采用的GC Roots的做法,假如一个目标引证的为Roots目标那么这个目标就不是废物目标,Roots是Java所定义的;还有一种方法是用引证计数器的方法,这个目标被引证一次就加1,引证释放就减1,不仅要维护这个变量并且还要考虑循环引证的情况

常量存储

常量对应的为变量,常量不会改变,因而将常量的值直接放在程序内部是安全可信的。在嵌入式体系中,存储常量的部分会和其他部分差异开,存在于ROM中(例如字符串处常量池)

非RAM存储

该部分区域存活于程序之外,在程序没有运行时也能够存在。比如流目标和耐久化目标。
流目标:目标转换为字节流,发送给别的一台机器。
耐久化目标:寄存与磁盘上。

把目标转换为能够寄存在其他前言上的事务