仓酷云

标题: 发布一篇Java中堆与栈的区分 [打印本页]

作者: 再见西城    时间: 2015-1-18 11:04
标题: 发布一篇Java中堆与栈的区分
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的
栈与堆都是Java用来在RAM中寄存数据的中央。与C++分歧,Java主动办理栈和堆,程序员不克不及间接地设置栈或堆。
Java的堆是一个运转时数据区,类的对象从平分配空间。这些对象经由过程new、newarray、anewarray和multianewarray等指令创建,它们不必要程序代码来显式的开释。堆是由渣滓接纳来卖力的,堆的上风是能够静态地分派内存巨细,保存期也不用事前告知编译器,由于它是在运转时静态分派内存的,Java的渣滓搜集器会主动收走这些不再利用的数据。但弱点是,因为要在运转时静态分派内存,存取速率较慢。
栈的上风是,存取速率比堆要快,仅次于存放器,栈数据能够共享。但弱点是,存在栈中的数据巨细与保存期必需是断定的,缺少天真性。栈中次要寄存一些基础范例的变量(,int,short,long,byte,float,double,boolean,char)和对象句柄。
栈有一个很主要的特别性,就是存在栈中的数据能够共享。假定我们同时界说:
inta=3;
intb=3;
编译器先处置inta=3;起首它会在栈中创立一个变量为a的援用,然后查找栈中是不是有3这个值,假如没找到,就将3寄存出去,然后将a指向3。接着处置intb=3;在创立完b的援用变量后,由于在栈中已有3这个值,便将b间接指向3。如许,就呈现了a与b同时均指向3的情形。
这时候,假如再令a=4;那末编译器会从头搜刮栈中是不是有4值,假如没有,则将4寄存出去,并令a指向4;假如已有了,则间接将a指向这个地点。因而a值的改动不会影响到b的值。
要注重这类数据的共享与两个对象的援用同时指向一个对象的这类共享是分歧的,由于这类情形a的修正其实不会影响到b,它是由编译器完成的,它有益于节俭空间。而一个对象援用变量修正了这个对象的外部形态,会影响到另外一个对象援用变量。
String是一个特别的包装类数据。能够用:
Stringstr=newString("abc");
Stringstr="abc";
两种的情势来创立,第一种是用new()来新建对象的,它会在寄存于堆中。每挪用一次就会创立一个新的对象。
而第二种是先在栈中创立一个对String类的对象援用变量str,然后查找栈中有无寄存"abc",假如没有,则将"abc"寄存进栈,并令str指向”abc”,假如已有”abc”则间接令str指向“abc”。
对照类内里的数值是不是相称时,用equals()办法;当测试两个包装类的援用是不是指向统一个对象时,用==,上面用例子申明下面的实际。
  1.      String str1 = "abc";
  2.   String str2 = "abc";
  3.   System.out.println(str1==str2); //true
复制代码
能够看出str1和str2是指向统一个对象的。
  1.      String str1 =new String ("abc");
  2.   String str2 =new String ("abc");
  3.   System.out.println(str1==str2); // false
复制代码
<p>
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),
作者: 谁可相欹    时间: 2015-1-20 13:53
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者: 飘灵儿    时间: 2015-1-21 15:12
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者: 小魔女    时间: 2015-1-30 20:11
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者: 第二个灵魂    时间: 2015-1-31 16:53
是一种为 Internet发展的计算机语言
作者: 山那边是海    时间: 2015-2-2 21:48
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 若相依    时间: 2015-2-3 14:45
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 兰色精灵    时间: 2015-2-9 02:51
是一种为 Internet发展的计算机语言
作者: 飘飘悠悠    时间: 2015-2-26 19:19
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 简单生活    时间: 2015-3-8 16:41
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 精灵巫婆    时间: 2015-3-16 06:05
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 因胸联盟    时间: 2015-3-22 20:19
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2