Android 性能优化 之谈谈Java内存区域

Android 性能优化 之谈谈Java内存区域

>

基础的扎实程度直接决定高度。

最近一年副业主要在学习投资和技能学习,把以前学习内存分析的一些笔记总结发出来,写了很多笔记总结都没有写完就又忙着了,最近再次总结复习学习一遍,还有提醒各位同学一定要学会投资。。

了解Android 内存管理,就有必要了解Java GC机制,必须要理解JVM 内存区域,这里我们主要从概念上介绍Java虚拟机内存的各个区域。

Android 应用运行时大部分时间都用于处理内存数据,虽然很多开发者都意识到优化内存,但并不是所有人都知道内存使用对性能的影响,网上也有很多关于内存优化技术的文章,但大多都不够系统,没有贯通全局。在《Android 性能优化之String篇》文中我们理解了一个对象占用空间的大小以及String 字符串对我们性能的影响,而在本文中我们将学习一些Android的内存,主要是基础的java 的内存管理,Java程序在运行的过程中管理的内存的数据区,为后面的Android内存分析做为铺垫。
在阅读过程中有任何问题,请及时联系。如需转载请注明 fuchenxuan blog
本章系《Android 之美 从0到1 – 高手之路》Android 性能优化 之深入理解Java内存结构。

Java 内存区域

Java虚拟机在执行程序过程中会把管理的内存划分为不同的数据区域,包括方法区、堆、虚拟机栈、本地方法栈、程序计数器这5个部分的运行时数据区。如下图:

程序计数器

在计算机组成原理里,CPU内部的寄存器中就包含一个程序计数器,存放程序执行的下一条指令地址。
以下引自wiki的一段介绍。

依照特定机器的细节而不同,他可能是保存着正在被运行的指令,也可能是下一个要运行指令的地址。程序计数器在每个指令周期会自动地增加,所以指令会正常地从寄存器中连续地被取出。某些指令,像是跳跃和子程序调用,会中断程序执行的序列,将新的数值内容存放到程序计数器中。
在大部分的处理器,指令指针都是在提取程序指令后就被立即增加;也就是说跳跃指令的目的地址,是由跳跃指令的运算对象加上跳跃指令之后下一个指令的地址(比特或字节,视电脑形态而定)来获得目的地。

而我们的JVM内存中的程序计数器也是这样的作用,它储存JVM当前执行bytecode的地址。

Java虚拟机中的程序计数器是Java运行时数据区中的一小块内存区域,但是它的功能和通常的程序计数器是类似的,它指向虚拟机正在执行字节码指令的地址。具体点儿说,当虚拟机执行的方法不是native的时,程序计数器指向虚拟机正在执行字节码指令的地址;当虚拟机执行的方法是native的时,程序计数器中的值是未定义的。另外,程序计数器是线程私有的,也就是说,每一个线程都拥有仅属于自己的程序计数器

此内存区域是唯一一个在 Java 虚拟机规范
中没有规定任何 OutOfMemoryError 情况的区域。

虚拟机栈(JVM Stack)

与程序计数器一样,Java 虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与 线程相同。虚拟机栈描述的是 Java 方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值