Java程序在内存中的存储分配情况:
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
在JAVA中,有六个不同的地方可以存储数据:
1. 寄存器(register)。这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部。但是寄存器的数量极其有限,所以寄存器由编译器根据需求进行分配。你不能直接控制,也不能在程序中感觉到寄存器存在的任何迹象。
2. 堆栈(stack)。位于通用RAM中,但通过它的“堆栈指针”可以从处理器哪里获得支持。堆栈指针若向下移动,则分配新的内存;若向上移动,则释放那些 内存。这是一种快速有效的分配存储方法,仅次于寄存器。创建程序时候,JAVA编译器必须知道存储在堆栈内所有数据的确切大小和生命周期,因为它必须生成 相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些JAVA数据存储在堆栈中——特别是对象引用,但是JAVA对象不存储其中。
3. 堆(heap)。一种通用性的内存池(也存在于RAM中),用于存放所有的JAVA对象。堆不同于堆栈的好处是:编译器不需要知道要从堆里分配多少存储区 域,也不必知道存储的数据在堆里存活多长时间。因此,在堆里分配存储有很大的灵活性。当你需要创建一个对象的时候,只需要new写一行简单的代码,当执行 这行代码时,会自动在堆里进行存储分配。当然,为这种灵活性必须要付出相应的代码。用堆进行存储分配比用堆栈进行存储存储需要更多的时间。
4. 静态存储(static storage)。这里的“静态”是指“在固定的位置”。静态存储里存放程序运行时一直存在的数据。你可用关键字static来标识一个对象的特定元素是静态的,但JAVA对象本身从来不会存放在静态存储空间里。
5. 常量存储(constant storage)。常量值通常直接存放在程序代码内部,这样做是安全的,因为它们永远不会被改变。有时,在嵌入式系统中,常量本身会和其他部分分割离开,所以在这种情况下,可以选择将其放在ROM中
6. 非RAM存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
转自:http://chuansir.blog.163.com/blog/static/19010115220089302440146/
相关推荐
### 深入Java对象及元素的存储区域 在Java平台进行软件开发的过程中,一个显著的特点是对象的创建是在程序运行时动态发生的。这也就意味着,直到程序执行时才能最终确定对象应该存放在哪个内存区域。不同的存储区域...
首先,堆内存是Java程序运行时的主要存储区域,它被所有应用程序共享。堆内存的特点是存储空间不连续,这意味着对象可以随机地分布在内存的不同位置。由于这种分散性,堆内存的分配和访问速度相对较慢。然而,堆内存...
### Java数据存储详解 在Java编程中,理解数据如何存储对于优化程序性能至关重要。本文将深入探讨Java数据存储的关键概念,包括堆栈、堆、数据区等,以及它们各自的特点和适用场景。 #### 一、堆栈(Stack) 堆栈...
Java数据生成统计图表程序是一种利用Java编程语言来创建可视化数据表示的方法,特别是在处理温度等科学或工程数据时非常有用。这个程序可能包含了对输入数据进行分析、处理和展示的完整流程,通过Java的数据结构和...
4. **数据存储**:处理后的数据可能需要存入数据库,如MySQL、PostgreSQL或MongoDB。这里会涉及到JDBC或NoSQL驱动的使用。 5. **数据查询与检索**:构建API接口,允许其他系统根据省市区信息进行查询。可以使用...
Java中的各种数据类型在内存的存储方式 Java中的数据类型可以分为基本类型和引用类型两种。基本类型包括整数、浮点数、字符、布尔值等,引用类型包括类、数组、接口等。不同的数据类型在内存中的存储方式也不同。 ...
这在处理大规模地理数据时尤其有用,可以帮助减少数据冗余,优化存储和查询效率。 在提供的压缩包中,"数据集融合.pdf"很可能是一个详细的教程文档,包含了如何在Java项目中使用SuperMap Objects API进行数据集融合...
3. **数据存储**:将数据存储到内存结构(如`HashMap`)或持久化存储(如数据库)中,方便后续查询。 4. **查询功能**:编写函数,接受地区名或邮政编码作为参数,查询对应的号段。 5. **结果展示**:返回查询结果,...
《基于Java的天气雷达数据降雨预测及展示系统详解》 在信息技术日新月异的今天,数据已经成为预测和分析各种自然现象的关键工具。本项目——“基于Java的天气雷达数据的降雨预测及展示系统”,正是这样一款利用Java...
《MICAPS4网络数据存储及传输格式详解》 MICAPS4(Meteorological Information CAPS System 4)网络数据存储及传输格式是一种专用于存储和传输气象数据的定制化二进制格式。这种格式的设计旨在整合和优化MICAPS3的...
栈主要负责存储程序运行过程中的局部变量、函数调用等信息,而堆则是用于动态分配对象内存的区域。 栈的优势在于其存取速度较快,因为它采用的是后进先出(LIFO)的管理策略,数据的存储位置靠近CPU,减少了内存...
5. **鼠标交互**:在数据可视化中,鼠标交互使用户能够直接与展示的数据进行互动,例如缩放、平移或选择特定区域。这种交互性增强了数据的理解和探索。 【压缩包子文件的文件名称列表】:DrawTimeLine ...
shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形...该方法通过java代码实现将shp文件的数据读取以及存入数据库
【Java与元数据】 元数据在Java中扮演着至关重要的角色,特别是在使用JDBC...无论是数据的存储、检索还是分析,元数据都是不可或缺的一部分,对于Java开发者来说,理解和掌握元数据的应用是提高开发能力的重要途径。
栅格数据以像素矩阵的形式存储,而矢量数据则由点、线、面等几何对象构成。SuperMap Objects Java 是SuperMap公司提供的一个强大的Java GIS开发平台,它支持多种GIS操作,包括数据的读取、编辑、分析以及转换。本...
这篇博客文章“java获取省市县数据”可能讲述了如何利用Java语言来获取并处理中国各级行政区域的数据,如省、市、县。这在开发需要地域信息的应用程序,如物流系统、地图服务或者数据分析时非常有用。下面我们将深入...
直接内存是一块可以在Java堆和Native堆之间来回复制数据的内存区域,同样会抛出OutOfMemoryError异常。 Java虚拟机内存区域的管理是Java开发中最重要的内容之一,对于Java开发者来说,了解Java虚拟机内存区域模型是...
在这个项目中,我们使用Java语言实现了操作系统中的存储管理功能,这是一个在Eclipse集成开发环境中编写的程序,用户导入后可以顺利运行并得到正确的结果。 首先,让我们深入了解一下存储管理的基本概念。存储管理...
本篇文章将深入探讨如何使用Java来实现分页缓存,并介绍在读取过程中如何优先从缓存获取数据。 首先,理解分页的基本概念是必要的。在Web应用中,当用户浏览大量数据时,通常会采用分页的方式来显示,而不是一次性...