jvm在java程序运行时会将它所管理的内存划分成不同的区域做不同的功能,这并不难以想象。主要有两类结构,即:堆和栈。java堆主要是保存运行时的对象和数组数据,是所有线程共享的内存区域,在堆中有方法区、运行时常量池。方法区是代码的存储区,类、方法数据、方法的字节码、..
分类:
其他好文 时间:
2014-08-13 03:41:56
阅读次数:
170
http://blog.csdn.net/ghevinn/article/details/37651149(反汇编题目需要分析)4、取出内存区域的值在取某内存地址开始的一个区域的值的时候,取出的值取决于用来取值的类型,譬如int为4个byte,char为1个byte,程序如:void main(){...
分类:
其他好文 时间:
2014-08-13 00:44:04
阅读次数:
215
管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来讲,释放工作有程序员控制,容易产生memory Leak。申请大小:栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存区域。这句话的意思是栈顶上的地址和栈的最大容量是系统预先规定好的,在Windows下,栈的大小是...
分类:
移动开发 时间:
2014-08-12 18:41:04
阅读次数:
310
函数memcpy() 从source 指向的区域向dest指向的区域复制count个字符,如果两数组重叠,不定义该函数的行为。 而memmove(),如果两函数重叠,赋值仍正确进行。 memcpy函数假设要复制的内存区域不存在重叠,如果你能确保你进行复制操作的的内存区域没有任何重叠,可以直接用...
分类:
其他好文 时间:
2014-08-04 17:28:02
阅读次数:
236
缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:
使用缓冲区有这么两个好处:
1、减少实际的物理读写次数
2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数
举个简单的例子,比如A地有1w块砖要搬到B地
由于没有工具(缓冲区),我们一次只能搬一本,那么就要搬1w次(...
分类:
其他好文 时间:
2014-08-04 02:04:46
阅读次数:
265
下面我们这篇博客来说一下java中是怎么合理的利用内存的,怎么将内存进行划分,做到各司其责,使系统平稳高效运行。
首先要知道的是java程序运行在JVM上,可以把JVM理解成java程序和操作系统之间的桥梁。因此JVM是内存分配原理的基础和前提。
一个完整的java运行程序会涉及一下内存区域:
(1) 寄存器(registers):JVM内部虚拟寄存器,这是速度最快的最快的存储...
分类:
编程语言 时间:
2014-08-01 19:43:52
阅读次数:
227
对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误。char *s1 = "hello"; char s2[] = "hello";【区别所在】char *s1 的s1,而指针是指向一块内存区域,它指向的内存区域的大小可以随时改变,而且当指针指向常...
分类:
其他好文 时间:
2014-08-01 13:20:01
阅读次数:
129
shallow 浅拷贝 Deep深拷贝 1、产生一个新对象,对象的内容与源对象相同2、源对象与新对象使用不同的内存区域3、需要NSCopying 或者NSMutableCopying协议才能使用复制功能?4、Fundation中得基础数据类型如Nsstring、NSNumber 等...
分类:
其他好文 时间:
2014-07-30 00:37:22
阅读次数:
313
服务器为某个访问者创建一个内存区域,这个就是所谓的session,这个区域的存在是有时间限制的,比如30分钟,这块区域诞生的时候,服务器会给这个区域分配一个钥匙,只有使用这个钥匙才能访问这个区域,这个钥匙即sessionId,之后,服务器把这个sessionId写到访问者的cookie里面,这样,访...
分类:
其他好文 时间:
2014-07-29 21:10:12
阅读次数:
240
1、内存泄露 (1)虚拟机中存在程序无法使用的内存区域 比如队列出队的时候,没有删除对改元素的引用,导致元素没用了,引用仍在,但无法使用 (2)程序中存在大量存活时间过长的对象 比如基于内存的缓存实现,h...
分类:
其他好文 时间:
2014-07-28 17:02:24
阅读次数:
232