非常经典的解释=_= 堆和栈的区别 一、预备知识:程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap):一般有程序员分配释放,若程序员不释放,程序 ...
分类:
其他好文 时间:
2017-08-06 12:48:18
阅读次数:
155
转:http://www.cnblogs.com/xiaowenhui/p/4669684.html 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 ...
分类:
编程语言 时间:
2017-08-03 11:12:28
阅读次数:
241
栈区(stack)—由编译器自己主动分配释放,存放函数的參数值。局部变量的值等。其操作方式相似于数据结构中的栈。 堆区(heap)—一般由程序猿分配释放。若程序猿不释放。程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是相似于链表 全局区(静态区)(static)—全局变量和静态 ...
分类:
其他好文 时间:
2017-08-03 09:55:29
阅读次数:
250
根据不同的操作系统,一个进程可能被分配到不同的内存区域去执行。但是不管什么样的操作系统、什么样的计算机架构,进程使用的内存都可以按照功能大致分为以下4个部分: (1)代码区:这个区域存储着被装入执行的二进制机器代码,处理器会到这个区域取指并执行。 (2)数据区:用于存储全局变量等。 (3)堆区:进程 ...
分类:
其他好文 时间:
2017-08-01 12:40:00
阅读次数:
183
一、什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向 ...
分类:
编程语言 时间:
2017-07-31 16:27:54
阅读次数:
185
JVM 概念 类载入器子系统 装载 链接 初始化 JVM 内存模型 方法区Method Area 堆区Heap Area 栈区Stack Area 程序计数器Program Counter Register 本地方法栈Native Method Stacks 运行引擎 Java Native Int ...
分类:
其他好文 时间:
2017-07-31 14:31:17
阅读次数:
220
1. java内存区域(堆区、栈区、常量池) 2. String 3. StringBuffer和StringBuilder 区别 执行速度,StringBuilder > StringBuffer StringBuilder 线程不安全,StringBuffer 线程安全 (在单线程程序中用Str ...
分类:
编程语言 时间:
2017-07-29 12:55:03
阅读次数:
144
JVM按照其存储数据的内容将所需内存分配为堆区与非堆区两个部分:所谓堆区即为通过new的方式创建的对象(类实例)所占用的内存空间;非堆区即为代码、常量、外部访问(如文件访问流所占资源)等。然而虽然java的垃圾回收机制虽然能够很好的解决内存浪费的问题,但是这种机制也仅仅的是回收堆区的资源,而对于非堆 ...
分类:
其他好文 时间:
2017-07-26 11:34:15
阅读次数:
173
一、类加载器1、什么是类加载器类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。完成类加载的家伙就是类加载器。2、都有哪些类加载器ClassLoaderloader=..
分类:
其他好文 时间:
2017-07-25 15:46:09
阅读次数:
136
阅读书籍:Java虚拟机精讲(仅个人阅读后总结) 根据受访权限可分为:线程共享内存区和线程私有区 线程共享区: 1、java堆区:储存对象实例; 2、方法区:储存 运行时常量池、字段和数据、构造函数和普通方法的字节码内容以及类、实例、接口初始化需要用到的特殊方法等数据; 3、运行时常量池; 线程私有 ...
分类:
其他好文 时间:
2017-07-23 18:02:37
阅读次数:
111