易截截图软件、单文件、免安装、纯绿色、仅160KB

java中的堆和栈

一.堆:用new关键字建立,存放对象的内容,GC负责自动回收
你用十几个麻将牌竖直叠成一摞这叫堆,你可以从上面、下面、中间任意抽出一张牌,也可以任意插入一张。所以堆很灵活,但不安全。对于对象,我们要动态地创建、销毁,不能说后创建的对象没有销毁,先前创建的对象就不能销毁,那样的话我们的程序就寸步难行,所以Java中用堆来存储对象。而一旦堆中的对象被销毁,我们继续引用这个对象的话,就会出现著名的 NullPointerException,这就是堆的缺点——错误的引用逻辑只有在运行时才会被发现
1.堆是一个"运行时"数据区.类实例化的对象就是从堆上去分配空间的
2.在堆上分配内存空间是通过"new"等指令来建立的
3.Java针对堆的操作与c++的区别在于,Java程序员无需为某块内存空间不用的时候进行显示释放
4.Java的堆是由Java的内存回收机制负责处理的,动态分配内存,垃圾自动回收!
5.缺点:因为在运行时动态分配内存,所以对内存的存取速度相对较慢
二.栈:栈是一个比较封闭的链式结构。采用后进先出的机制存储数据。所有操作必须从一端执行。所以栈不灵活,但是很严格,是安全的,易于管理。因为只要上面的引用没有销毁,下面引用就一定还在,所以,在栈中,上面引用永远可以通过下面引用来查找对象,同时如果确认某一区间的内容会一起存在、一起销毁,也可以上下互相引用。在大部分程序中,都是先定义的变量、引用先进栈,后定义的后进栈,同时,区块内部的变量、引用在进入区块时压栈,区块结束时出栈,理解了这种机制,我们就可以很方便地理解各种编程语言的作用域的概念了,同时这也是栈的优点——错误的引用逻辑在编译时就可以被发现。
1.栈中主要存放基本数据类型的变量和对象句柄(引用)
2.栈的存取速度快于堆
3.栈数据可以共享
4.栈的数据大小及生存期必须是确定的,所以缺乏灵活性
三.怎样理解栈的"数据共享"特性
栈的数据共享特性是jvm赋予它的
当定义2个相同的变量时:int a = 5;int b = 5;
这2个变量所指向的栈上的空间地址是同一个,这就是“数据共享”
工作方式:
 jvm处理 int a = 5 时,首先在栈上创建一个变量为 a 的引用。然后去栈上查找是否有 5 这个值,若没有,则将5存放起来,将a指向5;接着处理int b = 5。先创建变量 b 的引用,结果找到5这个值,便将 b 指向 5.此时 a,b指向的是同一个内存地址


相关文档:

JAVA开发者最常去的20个英文网站

1.[http://www.javaalmanac.com] – Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.
2.[http://www.onjava.com] – O’Reilly的Java网站. 每周都有新文章.
3.[http://java.sun.com] – 官方的Java开发者网站 – 每周都有新文章发表.
4.[http:/ ......

java读取xml文件的四种方法

xml文件:
Xml代码
<?xml version="1.0" encoding="GB2312"?>  
<RESULT>  
 <VALUE>     
  <NO>A1234</NO>     
  <ADDR>河南省郑州市</ADDR>  
 </VALUE>&nbs ......

JAVA类权限

1、Class类的访问权限:
public:可以供所有的类访问。
默认(包访问权限):默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。
      即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限, ......

java Socket的怪异之处

怪异之一:
connect(SocketAddress endpoint):这个方法,尝试连接server端,如果连接不上,就抛出IOException异常。如果连接成功了,就继续执行下一步的代码。
怪异之二:
boolean isConnected()  :这个方法的结果仅仅代表这个socket曾经成功连接到了server,但并不表示现在这个时刻它和server仍保持连接状态。
有 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号