Java程序运行在JVM(Java Virtual Machine,Java虚拟机)上,可以把JVM理解成Java程序和操作系统之间的桥梁,JVM实现了Java的平台无关性,由此可见JVM的重要性。所以在学习Java内存分配原理的时候一定要牢记这一切都是在JVM中进行的,JVM是内存分配原理的基础与前提。
简单通俗的讲,一个完整的Java程序运行过程会涉及以下内存区域:
寄存器:JVM内部虚拟...
分类:
编程语言 时间:
2015-05-11 22:08:32
阅读次数:
169
堆内存的分代回收 Java针对堆的垃圾回收,将堆分为了三个较小的部分:新生代、老年代、持久代。新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器。1. 分代回收的依据:
对象生存时间长短:大部分对象在Young期间就被回收。
不同代采用不同的垃圾回收策略:对存活时间不同的对象分类,用不同的垃圾回收...
分类:
编程语言 时间:
2015-05-11 16:08:52
阅读次数:
149
1.我们知道对象创建时,给对象开辟的内存在Heap上,如果对象足够多,或者对象足够大,导致Heap的内存不够分配时就会导致堆溢出。
2.我们知道值类型的变量存储在栈空间,如果值类型变量足够多也会导致栈溢出,同时我们还知道函数的递归调用也会进行压栈操作。
3.下面我们写个小程序来测试一下如果使用堆和栈溢出。
import java.util.ArrayList;
import java...
分类:
编程语言 时间:
2015-05-10 15:45:12
阅读次数:
113
##5.1 Java虚拟机内存模型## Java虚拟机内存模型是Java程序运行的基础。JVM将其内存数据分为程序计数器,虚拟机栈,本地方法栈,Java堆和方法区等部分。 **程序计数器**:用于存放下一条运行的指令; **虚拟机栈和...
分类:
其他好文 时间:
2015-05-09 23:44:50
阅读次数:
288
java内存分区 运行时数据区即是java内存,而且数据区要存储的东西比较多,如果不对这块内存区域进行划分管理,会显得比较杂乱无章。程序喜欢有规律的东西,最讨厌杂乱无章的东西。 根据存储数据的不同,java内存通常被划分为5个区域:程序计数器(Program Count Register)、...
分类:
编程语言 时间:
2015-05-09 16:22:19
阅读次数:
137
Java垃圾回收(一) 在Java中,它的内存管理包括两个方面:内存分配和内存回收,这两个方面的工作都是由JVM自动完成的,降低了Java程序员的学习难度,避免了像C/C++直接操作内存的危险。但这也使很多程序员不关心内存分配的问题,导致很多程序低效耗费内存。 Java语言规范没有明确的说明JVM使用哪种垃圾回收算法。一般常用的算法有下列几种:
引用记数法(Reference Count...
分类:
编程语言 时间:
2015-05-08 10:55:51
阅读次数:
169
在Java内存模型中,有main memory(主内存)还每个线程各自的线程内存memory(例如:寄存器)。为了性能一个线程会在自己memory中保持要访问变量的副本。这样就会出现同一个变量在某一个时刻一个线程内存中的值和其他线程内存或者主内存中的值不一致。
一个变量声明为volatile,就意味着这个变量随时会被其他线程修改,因此不能将他cahe在线程memory中,即:不会再memory中保...
分类:
编程语言 时间:
2015-05-08 09:34:48
阅读次数:
122
本文转自:http://my.oschina.net/xishuixixia/blog/132395常用的调优参数。1.堆大小-Xms和-Xmx用于指定堆大小,我们需要将他们俩设置为一样的值,以避免在GC后重新调整堆的大小。2.年轻代大小-XX:NewSize=?和–XX:MaxNewSize=?,...
分类:
其他好文 时间:
2015-05-03 15:54:03
阅读次数:
130
Java内存溢出(java.lang.OutOfMemoryError)问题及其解决方法内存溢出有两种情况,如下:相关配置以Tomcat环境为例一、java.lang.OutOfMemoryError: PermGen space PermGen space的全称是Permanent Genera....
分类:
编程语言 时间:
2015-04-29 16:44:10
阅读次数:
183
一 Java内存分析工具扫盲如果像我一样一点都不了解,可以先进行内存分析工具扫盲MAT介绍: Eclipse Memory Analyzer(MAT)一个功能丰富的 JAVA 堆转储文件分析工具,可以用于发现内存漏洞和减少内存消耗。二 Eclipse MAT插件安装当前机器环境描述:[plain]v...
分类:
移动开发 时间:
2015-04-29 00:25:40
阅读次数:
506