目前内存的动态分配与内存回收技术已经相当成熟,那为什么我们还要去了解GC和内存分配呢?答案很简单:当需要排查各种内存溢出,内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 有三部分内存区域:程序计数器,虚拟机栈,本地方法栈,它们随线程而
分类:
其他好文 时间:
2016-02-29 23:07:21
阅读次数:
218
调用函数时,主调的函数所拥有的局部变量等信息需要存储在特定的内存区域.这个区域被称作栈内存区.另一方面,利用new或者malloc进行分配的内存区域被称为堆内存. 栈内存在程序启动时被统一分配,此后不能再扩大.由于这一区域有上限,所以函数的递归深度也有上限.虽然与函数中定义的局部变量的数目有关,不过
分类:
其他好文 时间:
2016-02-27 21:55:54
阅读次数:
152
预备知识: ①栈:计算机系统中是指一块采用栈式管理的内存区域,栈的增长方向是从高地址空间向低地址空间增长 ②汇编指令call:将返回地址入栈,并跳转到被调用过程的起始处 ③汇编指令ret:从栈中弹出返回地址,并跳转到这个位置 IA32(x86)通过程序栈来支持过程调用。机器用栈来传递过程参数(函数参
分类:
编程语言 时间:
2016-02-26 00:22:59
阅读次数:
282
通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递对象,你可以通过应用程序UI的方式写个运行在一个不同的进程中的service。在android平台中,一个进程通常不能访问其他进程中的内存区域。所以,他们需要把对象拆分成操作系统能理解的简单形式,以便伪装成对象跨越边界访问。编写这种伪装代
分类:
移动开发 时间:
2016-02-25 15:23:40
阅读次数:
179
JAVA内存区域和内存溢出异常 1、JAVA运行时数据区如下图 程序计数器:当前线程正在执行的代码的行号指示器。是线程私有的。它是JAVA虚拟机唯一没有指定OutOfMerroryError异常的区域。 虚拟机栈:是线程私有的。描述的是Java方法执行时的内存模型。每个方法被创建时,会创建一个栈帧,
分类:
其他好文 时间:
2016-02-22 13:45:01
阅读次数:
203
在之前的文章Android内存泄露的几种情形中提到过在开发中常见的内存泄露问题,但是过于草率。由于刚开年,工作还没正式展开,就看了一下Github开源大户Square的LeakCanary,并用公司项目的测试环境来练手,试图找出项目中存在的内存泄露。与上一篇不同,这一篇我会先说一下Java的内存区域以及垃圾回收机制,然后再讲LeakCanary的应用,并且会用一个在项目中遇到的真实案例来结尾。Jav...
分类:
其他好文 时间:
2016-02-19 10:50:31
阅读次数:
304
BSS段 在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。.bss section 的空间结构类似于 stack 特征[编辑] 静态变量、
分类:
其他好文 时间:
2016-02-18 22:52:04
阅读次数:
218
根据《深入理解java虚拟机》学习归纳整理学习笔记 程序计数器 用途:当前线程的字节码文件的行号指示器.(当前机场负责控制飞机降落的空管员;当前线程表示当前机场, 所执行的字节码等同于被等待允许降落的飞机,行号指示器好比下达允许降落指令的空管员) 线程私有(每个机场都有属于自己的空管员,不同机场的空
分类:
编程语言 时间:
2016-02-18 17:51:43
阅读次数:
201
线程私有 线程共享 程序计数器,虚拟机栈,本地方法栈 堆,方法区 内存区 异常 异常原因 程序计数器 无 虚拟机栈 StackOverflowError 线程请求的栈深度大于虚拟机栈所允许的深度 OutOfMemoryError 如果扩展无法申请到足够的内存 本地方法栈 如上等同虚拟机栈 堆 Out
分类:
编程语言 时间:
2016-02-18 17:31:58
阅读次数:
128
物理的内存是线性结构,并不存在拥有不同功能的不同区域。 编译器(或者JVM)为了更高效地处理数据,会用不同的算法把内存分为各种区域,不同的区域拥有各自的特性,Java中,内存可以分为栈,堆,静态域和常量池等。(可能有不同的叫法,但逻辑是一致的) 2 不同内存区域的功能和特点: 栈区:存放局部变量(变
分类:
编程语言 时间:
2016-02-15 16:22:23
阅读次数:
152