运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个大小不同的数据域;这些区域都有各自的用途,以及创建和销毁时间,有的区域会随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。程序计数器:程序计数器是一块较小的内存空间,可以看作当前线程所执行的...
分类:
编程语言 时间:
2015-05-19 12:19:05
阅读次数:
208
---恢复内容开始---参考文献:深入理解Java虚拟机 周志明《Java虚拟机规范SE 7版》规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。如图:程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示...
分类:
编程语言 时间:
2015-05-19 00:26:51
阅读次数:
199
Java内存管理无非就是对内存进行分配和释放。对于分配来说,基本类型和对象的引用存储到栈中,常量存储到常量池中,对象存储到堆上,这是一般的分配。而对于回收来说要复杂的多,如果回收不好,还可能造成分配出去的内存得不到回收而造成内存泄漏。
这一篇将简单介绍一下Java内存的分配,下一篇将介绍内存的回收及内存泄漏等知识。
1、JVM内存模型
...
分类:
编程语言 时间:
2015-05-18 10:55:01
阅读次数:
152
Java内存在分配和回收的过程中会产品很多的问题,下面来说一说可能会产生的问题。
1、垃圾处理
从程序运行的根节点出发,遍历整个对象引用,查找存活的对象。那么在这种方式的实现中,垃圾回收从哪儿开始的呢?即,从哪儿开始查找哪些对象是正在被当前系统使用的。上面分析的堆和栈的区别,其中栈是真正进行程序执行地方,所以要获取哪些对象正在被使用,则需要从Java栈开...
分类:
编程语言 时间:
2015-05-18 10:54:17
阅读次数:
255
深入Java内存模型——happen-before规则及其对DCL的分析...
分类:
移动开发 时间:
2015-05-17 12:20:50
阅读次数:
186
在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方面工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但是,也正因为内存管理完全由JVM负责,所以也使Java很多程序员不再关心内存分配,导致很多程序低效,耗内存。因此就有了Java程序员到最后应该去了解JVM,才能写出更高效,充分利用有限的内存的程序。
1...
分类:
编程语言 时间:
2015-05-16 10:31:36
阅读次数:
214
一、基础简介
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同...
分类:
其他好文 时间:
2015-05-14 22:10:44
阅读次数:
260
1. 对象优先在Eden分配
大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间时,虚拟机将发起一次Minor GC。在如下的测试代码中,尝试分配3个2MB大小和1个4MB大小的对象,在运行时通过参数-Xmx20M,-Xms20M,-Xmn10M这三个参数限制了java堆大小为20MB,不可扩展,其中10MB分配给新生代,剩下的非配给老年代。-XX:SurvivorRatio=8决定了新生代中Eden区与一个Survivor区的比例为8:1,即 Eden: from Survivor:...
分类:
编程语言 时间:
2015-05-14 01:02:54
阅读次数:
134
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分...
分类:
其他好文 时间:
2015-05-12 22:32:25
阅读次数:
117