一.java运行时数据区 也可以称为java内存区域,和java内存模型不是一回事,不要弄混,这里基于jdk1.8之前 1.1.方法区 线程共享,类装载过程中产生的java.lang.Class对象保存在方法区,而不是堆,请参考<深入理解java虚拟机>P215 jdk1.8之前HotSpot通过永久带实现方法区,为了把GC可以像堆一样管理内存,能够复用代码,1.8移除永久带,通过本地内存实现方法区, 其他虚拟机没有永久带的概念,因为更容易出现内存溢出 主要存放类信息.常量.静态变量.即时编译…
在Java中主要存在4块内存空间,这些内存空间的名称及作用如下. 1.  栈内存空间: 保存所有对象名称(更准确的说是保存了引用的堆内存空间的地址). 2.  堆内存空间: 保存每个对象的具体属性内容. 堆内存中包含常量池,常量池包括直接常量(基本类型,String)和对其他类型.方法.字段的符号引用 3.  全局数据区: 保存static类型的属性. 4.  全局代码区: 保存所有方法的定义. http://blog.csdn.net/yangyuankp/article/details/76…
java中的堆.栈.常量池 分类: java2010-01-15 03:03 4248人阅读 评论(5) 收藏 举报 javastring编译器jvm存储equals Java内存分配: 1. 寄存器:我们在程序中无法控制2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中3. 堆:存放用new产生的数据4. 静态域:存放在对象中用static定义的静态成员5. 常量池:存放常量6. 非RAM(随机存取存储器)存储:硬盘等永久存储空间-----------------…
下面主要介绍JAVA中的堆.栈和常量池: 1.寄存器 最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈 存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.) 3. 堆 存放所有new出来的对象. 4. 静态域 存放静态成员(static定义的) 5. 常量池 存放字符串常量和基本类型常量(public static final). 6. 非RAM存储 硬盘等永久存储空间 这里我们主要…
为什么Java程序需要运行在虚拟机上 因为Java在设计之初的跨平台特性,我们知道Java程序是运行在Java虚拟机上的.如果你要问为什么Java程序要运行在虚拟机上,我可以反问你几个问题. 为什么买来的电器插上电就能直接使用?你可能会说,因为电是基础设施.电源有统一的标准,电器有统一的标准,所以买来的电器插上电就能用. 不同的电器需要的电源标准不同(台灯和电饭煲的功率),为什么我们不能给不同的电器配置不同的电源呢?因为太麻烦了,虽然这样我们能让每个电器都达到最适应的效率,但是代价未免太大了些.…
figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-width: 100%; vertical-align: middle; } button, input, select, textarea { color: inherit; font-family: inherit; font-size: inherit; font-style: inherit; f…
学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分.在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加…
1.概述 java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域. 这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁. java虚拟机所管理的内存包括以下几个运行的数据区域,如图 2.各区域描述 ###### 1) 程序计数器 ###### 程序计数器是一块较小的内存空间,可以看作当前线程所执行的字节码的行号指示器,字节码解释器工作时,就是通过改变这个计数器的值来选择下一条需要执行的字节…
<开发实战经典>     (1)栈内存空间:保存所有的对象名称     (2)堆内存空间:保存每个对象的具体属性内容     (3)全局数据区:保存static类型的属性     (4)全局代码区:保存所有的方法定义 <--->     (1)栈区:存放局部变量     (2)堆区:存放对象属性,new出来的数据     (3)方法区:存储和class相关的信息     (4)本地方法区:系统相关,无需程序员管理     (5)寄存器:cpu相关,无需程序员管理 <深入理解j…
1,java内存模型简介 <深入理解java虚拟机>里将java内存分为如下五个模块: 堆-堆是所有线程共享的,主要用来存储对象. 其中,堆可分为:新生代和老年代两块区域.使用NewRatio参数来设定比例.对于年轻代,一个Eden区和两个Suvivor区,使用参数SuvivorRatio来设定大小: Java虚拟机栈/本地方法栈-线程私有的,主要存放局部变量表,操作数栈,动态链接和方法出口等: pc寄存器(程序计数器)-同样是线程私有的,记录当前线程编译class文件的行号指示器,为线程之间…