- 浏览: 213644 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
synack:
写的很好,图文并茂,语言简单清晰,赞!
SkipList 跳表 -
king_c:
jiandandecaicai 写道你好,请教一下是如何通过E ...
从Hadoop URL 中读取数据 -
jiandandecaicai:
你好,请教一下是如何通过Eclipse来连接Hadop机群的, ...
从Hadoop URL 中读取数据
在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存储。如果数据完全存活于程序之外,那么它可以不受程序的任何控制,在程序没有运行时也可以存在。
就速度来说,有如下关系:
寄存器 < 堆栈 < 堆 < 其他
『上面这段话摘取之《Thinking in Java》』
在这里,主要要说下堆与堆栈的关系:
堆:堆是heap,是所谓的动态内存,其中的内存在不需要时可以回收,以分配给新的内存请求,其内存中的数据是无序的,即先分配的和随后分配的内存并没有什么必然的位置关系,释放时也可以没有先后顺序。一般由使用者自由分配,malloc分配的就是堆,需要手动释放。
堆栈:就是STACK。实际上是只有一个出入口的队列,即后进先出(First In Last
Out),先分配的内存必定后释放。一般由,由系统自动分配,存放存放函数的参数值,局部变量等,自动清除。
还有,堆是全局的,堆栈是每个函数进入的时候分一小块,函数返回的时候就释放了,静态和全局变量,new
得到的变量,都放在堆中,局部变量放在堆栈中,所以函数返回,局部变量就全没了。
其实在实际应用中,堆栈多用来存储方法的调用。而对则用于对象的存储。
JAVA中的基本类型,其实需要特殊对待。因为,在JAVA中,通过new创建的对象存储在“堆”中,所以用new
创建一个小的、简单的变量,如基本类型等,往往不是很有效。因此,在JAVA中,对于这些类型,采用了与C、C++相同的方法。也就是说,不用new
来创建,而是创建一个并非是“引用”的“自动”变量。这个变量拥有它的“值”,并置于堆栈中,因此更高效。
发表评论
-
c++引用计数的本质
2015-03-24 14:26 1245为什么要用引用计数? 场景:代码里X是一个 ... -
Java Decompiler project,java反编译器
2015-03-09 10:39 802The “Java Decompiler project” ... -
COM 数组传输-使用VARIANT传递数组的方法及步骤 .
2015-02-16 17:22 21在使用COM/DCOM写组件时经常要传递数组,一般比如SHO ... -
MFC程序中打印调试信息
2015-01-20 22:11 9761、在要打印调试的类中加上头文件 #include ... -
opencv轮廓提取与轮廓拟合
2015-01-05 09:55 1958#include <iostream> #i ... -
c语言操作二进制文件fopen中fseek的注意事项
2014-11-22 01:04 1132今天在使用fopen的时候,遇到了fseek(fp,0 ... -
C++中delete和delete[]的区别
2014-11-21 23:41 599一直对C++中的delete和delete[]的区别不甚 ... -
缺少streams.h的解决方法
2014-10-09 17:19 1044这几天在学DirectShow的开发,一个streams. ... -
使用ATL创建进程外组件
2014-03-24 22:39 1166一、建立一个进程外组件1)打开菜单File|New,选择Pr ... -
vector 转换成 数组 - [C++]
2013-12-13 18:06 4658参考: http://topic.csdn.n ... -
ref:Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器
2013-09-09 00:21 798原文地址:http://www.s135.com ... -
openMP
2013-06-08 23:32 952最近在看多核编程。简单来说,由于现在电脑CPU一般都有两 ... -
nafxcw.lib与LIBCMT.lib在vs2008中链接冲突解决方案
2013-05-09 09:51 9411>正在链接...1>nafxcw.lib(af ... -
Errore HTTP 404.2 - Not Found" IIS 7.5 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
2012-11-20 17:46 938如题,这个错误google时一大堆各种各样的解决办法,但 ... -
error : Please use the /MD switch for _AFXDLL builds 的解决方法
2012-09-20 21:14 2650在用vs打开项目后,编译的时候出现“Please use ... -
JAVA23种设计模式
2012-07-04 21:28 689设计模式主要分三个类型:创建型、结构型和行为型。 ... -
启动框架 org.apache.catalina.startup(转)
2012-06-11 22:16 1051org.apache.catalina.startup ... -
共享内存的例子(转msdn)
2012-06-02 19:18 1416Creating Named Shared Memo ... -
使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
2012-03-17 22:47 1242在网上看到很多网友在.NET程序中调用Win32 API, ... -
Java主线程等待子线程执行完毕-CountDownLatch
2012-02-21 20:15 1128主线程: [java] view p ...
相关推荐
注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始...
函数数量 3、下列选项中与数据存储结构无关的术语是( D ) A.顺序表 B.链表 C.链队列 D.栈 4、已知循环队列的存储空间大小为 m,队头指针 front 指向队头元素, 队尾指针 rear 指向队尾元素的下一个位置,则向队列...
面向对象编程的基本原理,判定算法效率的方法,堆栈、队列及其应用,对于多种递归的详细讨论,二叉树、B树、2-4树等的查找和遍历等,分析排序、散列等数据结构的应用,图、NP完整性,数据压缩算法、存储管理技术以及...
基于java技术,利用swing作为界面展示,实现数据结构链表、堆栈的演示
这一约束限制了程序的灵活性,所以虽然某些java数据存储于堆栈中——特别是对象引用,但是java对象并不存储其中。 3) 堆 一种通用的内存池(也位于RAM区),用于存放所有的java对象。堆不同于堆栈的好处是:编译器...
5. 实现堆栈数据结构:演示了使用Java的Stack类来实现堆栈数据结构,并展示了入栈和出栈的操作。 6. 使用HashMap存储和检索数据:展示了如何使用HashMap来存储和检索键值对数据。 7. 实现接口和多态:演示了如何定义...
需要在基本的Jv语言以及基本的方法功能理解、方法编写及调用等方面加强实验,通过对基本数据结构和算法与对应程序的反复阅读、编写、测试等训练,达到提高对Jv程序结构、语法以及Jv方法在程序设计中作用的认识。...
java,数据结构,蚀,算法,arraylist,队列,堆栈,树,图,哈希,排序 代码01:代码测试,使用Eclipse IDE附加组件进行单元测试(使用JUnit)和覆盖率测试(使用EclEmma)。 代码02:BucketSort,Java接口简介,...
该存储库包含所有讲座源代码,包括基本Java,OOP概念,数据结构和算法。 话题 : 输入输出 数据类型和变量 类型转换 循环和决策构造 功能和运算符 数组,多维数组和动态数组 字符串和StringBuilder 递归介绍 经典...
数据结构与算法该存储... 我解决实际问题的算法把问题写下来一遍又一遍地阅读以确保了解所需内容记下可能的解决方案查看效率指标查找优化策略实施冲洗重复数组介绍数组是将数据存储在连续内存位置中的数据结构,并且可
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变...
堆栈的特性: 最先放⼊堆栈中的内容最后被拿出来,最后放⼊堆栈中的内容最先被拿出来, 被称为先进后出、后进先出。 栈的基本操作: 栈的基本操作: ⾯试中关于栈的常见问题: ⾯试中关于栈的常见问题: Push——在...
《Java JDK 7学习笔记》是作者多年来教学实践的经验总结,汇集了学员在教学过程中遇到的概念、操作、应用或认证考试上的各种问题及解决方案。 《Java JDK 7学习笔记》详细介绍了JVM、JRE、Java SE API、JDK与IDE...
存储库应检出到相同的工作目录中,例如:/ home / mike / workingdir / stack-analysis和/ home / mike / workingdir / csv2rrd目录: ./.tmp-测试堆栈时此目录包含临时数据,rrdtool也将用于在此目录中生成png图形...
数据结构不过是一种告诉我们如何在内存中存储和管理数据的技术。 托管是指如何有效地在内存中检索和处理数据。 不同的数据结构具有不同的技术来管理数据,并与不同的案例场景一起使用。 通用数据结构 通用数据结构...
Java中的数据结构和算法 关于 这是用Java编写的数据结构和算法的存储库。 这是列表数据结构和算法:字符串,数组,链接列表,堆栈,队列,树,排序,搜索,递归等。 怎么运行的 ○先决条件 Java 8, Maven, Git ○在...
该存储库包含Java中数据结构的简单明了的实现 当前的实现包括: 1)完整的堆栈实现 2)完整的单链表实现 当前进展是双向循环链表的发展
909数据结构 【一】考试差不多要求 要求考生系统地理解数据结构的差不多概念,掌握各种数据结构的定义和实现算法。 要求考生具有抽象思维能力,逻辑推理能力,和综合运用所学的知识分析问题和解决问 题的能力。 【二...